ユニットテストに「投資」するよう経営陣をどのように説得しますか?


46

どのようにしてユニットマネージャーにあなたをマネージャーに納得させましたか?

「使用」とは、ソース管理への開発、チェックイン、および長期にわたる単体テストの維持などを許可することを意味します。

一般的な管理の反対意見は次のとおりです。

  1. 顧客は単体テストの費用を支払わなかった
  2. このプロジェクトでは、単体テストの時間が許可されていません
  3. 技術的負債?どのような技術的負債ですか?

他の異議を知っていますか?あなたの答えは何でしたか?

前もって感謝します!


6
artofunittesting.comには、まさにこのトピックに関する章全体があります。
StuperUser

6
、テスト、TDDを混在させないでくださいPLEASE!TDDを行わない限り、テストは必要ないと人々に思わせます!
P Shved

1
説得力のある人は説得力がありません。シナリオを失われた原因と考えてください。
マークカンラス

@Pavel、最初はあなたが悪口を言っていると思っていましたが、あなたは正しいです。ユニットテスト、期間の「許可」が必要です。TDDは私自身のものです。
ルイガブ

6
コードが期待どおりに動作することを確認する許可を得る必要があると感じるのはなぜですか?
ヤープ

回答:


25

顧客が私たちの方法論を使用していたときにこの問題に最近遭遇しましたが、上級管理職は開発者が開発ではなくテストに時間を費やしており、これを心配しているという風になりました-結局、彼らはテストを行うQAの人々がいました!私はそれをここでどのように扱ったかについてブログに書いた:

http://practicalagility.com/show-them-the-numbers-its-results-that-matter/

要約すると、プロジェクトの推定時間と実際の時間を比較してから、欠陥率を他のチームの欠陥率と比較しました。私たちの場合、これらの数値は好意的に比較され、それ以上の懸念はありませんでした。

この経験に基づく私の結論は次のとおりです。

...何かをするあなたのアプローチが実用的で実用的であると誰にでも納得させる最良の方法は、それをして、他のアプローチと比較することです。人々はドグマを気にしない、またはなぜあなたは何かが最良の方法であるべきだと思うのか。人々に数字を見せ、アプローチの有効性を測定することによってのみ、あなたの実践が効果的であることを本当に示すことができます。

他のプロジェクトでは、単体テストを作成したりTDDを実行したりしていない顧客開発者と協力し、彼らが破ったテストを維持する必要がありました。ただし、それらの顧客の開発者にTDDアプローチを販売することは、彼らが知る前にコードのどこが壊れているかを伝えることができれば非常に簡単になります!

だからあなたの場合、必要に応じてステルスでそれを行います(おそらく、変更を頻繁にテストしたり、担当しているコードの小さな領域があります)が、数字を追跡します -あなたのテストを作成するための努力?不良率とは何ですか?これは他のプロジェクト/チームメンバーとどのように比較されますか?

私の意見では、誰も許可を求めたり、自分の仕事をきちんとやりたいと謝罪したりする必要はなく、プロの開発者は可能な限り実用的なところで自動テストでコードをテストしようとするべきです。うまくいけば、それはあなたの場合、これらの両方のことです。幸運を!


回答ありがとうございます。リンクを試しましたが、壊れているようです。私はそれが利用可能であればそれを読んで楽しむと思います。
ジョーJ 14年

ジョー、デッドリンクについてごめんなさい。これを自分のブログに再投稿したので、リンクは今すぐ機能するはずです。
パディスラッカー

2
これは良い答えですが、誰もが他のプロジェクトと自分のやっていることを簡単に比較できるわけではありません。どこで読んだか思い出せませんが、私が見たビジネスマンにとって最も説得力のある議論は、ユニットテストと複式簿記を比較することでした。単純に、数字を2回実行するのは時間の無駄です。しかし、会計について何かを知っている人は誰でも、本の片側だけを許されない無責任な義務の放棄と考えるでしょう。単体テストは、複式簿記に類似した開発です。
ジミージェームズ

@JimmyJames、私はあなたがいつも他のプロジェクトと比較することはできないことに同意します、そして、私は複式簿記についてのあなたの類推に同意します。テストなしで既存のコードベースで単体テストを使用し始めている場合、単体テストでカバーされている部分とカバーされていないコードの間でコードベースの欠陥率と他のメトリックを比較して、バックアップする実際のデータを得ることができると思いますあなたのアプローチも。
-Paddyslacker

@Paddyslacker私は同意しません。しかし、それは少し鶏と卵のことです。単体テストの作成を開始するための許可が必要な場合、許可を与える必要があることを証明するために単体テストを使用するのは困難です。どちらでもない。実際のデータとの比較は、はるかに強力な議論です。この別の引数は弱いですが、マウントが簡単です。
ジミージェームズ

20

投資収益率(ROI)を表示する

自動テストの作成には時間がかかります。一度。自動化されたテストの実行には時間がかかりません。実行中に他のことを実行できるためです。

例:機能Xを手動でテストするには30分かかります。自動テストの作成には1時間かかります。バグがなくても、依存層とコンポーネントが変更されるため、プロジェクトの過程でフィーチャーXを10回テストする必要があります。したがって、機能Xのテストを自動化すると、プロジェクトの全期間にわたって4時間節約できます。

実際には、自動テストが本当に成果を上げるバグがある場合です。まず、バグを早期かつ安価に発見するため、時間と恥ずかしさが節約されます。第二に、難しいバグがあり、それを把握するためにコードビルドテストの多くのサイクルを経る場合、手動テストよりも節約される時間が非常に速くなります。

企業は時間とお金の節約を理解しています。それがそれを売る方法です。


3
また、アプリケーションがデプロイされ、誰かが変更を要求すると、変更によって何かが壊れているかどうかを確認するのがずっと簡単になります。
m4tt1mus

4
@mattimus:絶対に-自動テストスイートは年金のように成果を上げます。それは、実際には、保険です
スティーブンA. Loweの

15

既にそれらに直面していて、彼らはそれで大丈夫ではないが、あなたはそれらなしでコードを書くことを快適に感じていないなら...そして再び尋ねないでください。それらを書いて、チェックインしないでください。

経営陣はコードの行をカウントしませんが、すべてのチェックインがQA(または顧客)からの合格率が高いことを確認し、最終的にその理由を尋ねます... !」

あなたはプロジェクト、プロセス、またはソースをいじっていません...だから私は否定的な理由は見ていません。正直なところ、すべての手動実行+入力+チェック結果テストを実行するよりも時間的に異なる理由はわかりません。


4
+1:とにかくテストする必要があります。テストがどのように「行われるべきか」について口論するのではなく、単体テストを書くだけです。
S.Lott

1
それらをローカルに持っているだけでは、コードベースが共有されているチーム環境ではうまく機能しません。他の人は、変更によってテストを中断し続けます。
アルプ

3
@Alb:経営陣が乗船しない場合に支払う価格です。ただし、テストを行わないよりはましです。
スティーブンエバーズ

3
ブラボー。すべてのテストは、テストなしよりも優れています。他の人の変更が原因でテストが中断した場合、APIが何の発表もなく変更された理由を尋ねるのは正当な理由です。
S.Lott

「経営陣はコードの行を数えません」それは非常に真実です。答えてくれてありがとう!
ルイガブ

7

1)顧客は単体テストの費用を支払わなかった

顧客は(彼らが)実用的なソリューションの代価を支払ったと思った。契約に応じて、欠陥を修正することは実際にあなたの会社にとって利益があるかもしれません。十分にロックインされている場合は、作業ソリューションへの支払いに戻ります。TDDはその目標に役立つはずです。

2)プロジェクトはTDDの時間を許可しません

TDDには時間がかかりません。余分なコードや余分なコードの量を減らし、テストに合格するものにコードベースを集中させる必要があります。テストの品質と適切さを条件として、合格したすべてのテストは、コードが完了したことを意味します。

3)技術的負債?どのような技術的負債ですか?

既存のコードにテストを遡及的に追加することについて議論しているのではないかという印象を受けます。これは最高の状態で悪夢のような売りであり、あなたが期待するかもしれない利点をもたらしません。ただし、バグを修正するときにテストを追加することは受け入れられ、長期的には役立ちます。

とにかくSnorfusが示唆したように、テストを書くことはお勧めしません。これは、理論的には素敵に聞こえるが、ユニットテストをすることができますし、やる時間変化を。要件が変更されると、新しい機能が追加され、ユニットテストを更新する必要があります。チームの一員として作業している場合、他の人が機能/修正を追加すると、ユニットテストは古くなります。

新しい点を上げるのではなく、あなたが言及した特定の点に取り組んでいます。進歩を遂げたり、それがコックブロックされている理由を理解する余地があるからです。


5
「とにかくテストを書くことはお勧めしません」-私は以前この立場にいたことがあります。自分でテストを維持することは困難です。その負担が重くなりすぎる場合は、テストを中止してください。少なくとも、コードベースで積極的に作業しているときに、それらがありました。これは、リグレッションをキャッチしない場合、最初の設計/修正に役立ちます。設計の目的で単体テストに大きな価値を見出しましたが、テストがコードと同じレベルで維持されていない場合、かなりのリグレッションが見つかりました。
スティーブジャクソン

1
機能/修正を追加し、単体テストを更新しなかった人は、単体テストの概念を理解していませんでした。
山本明

確かに、これは、TDDまたは関連プロセスの実行可能性に影響を与える最も複雑な問題の1つです。私が7年前にこれを書いたようだということを覚えておいてください。(良い、客観的、簡潔な)テストを書くのは難しい。コードベースのテストを作成するのは非常に困難です。技術的でない管理者に利点を理解させるのは難しいです(彼らがそれについての記事を読んでいない限り、あなたは死に至るまで「計量」を受けます。ユニットとは何かという概念ですら難しいです。ユニットについての私の考えは、モックストのものとは異なります(30文字が残っている例として)
Ian

4

生産上の問題に直面しているすべての顧客に対して、

  1. ユニットテストを作成し、シナリオをカバーするユニットテストを追加したことを伝えるメールをマネージャーに送信します。

  2. そして、ユニットテストは毎晩実行されるため、この問題は本番環境では二度と起こらないことを伝え、このユニットテストの失敗を見ることでコードが本番稼働する前に知るようになります。

  3. コードを実稼働する前にこのユニットテストを既に実施していれば、この実稼働の問題は発生しなかったことを彼に伝えてください。

これを一貫して永続的に行うと、すぐに彼は確信します。マネージャーは、顧客が生産上の問題に直面することを好まないため、ユニットテストのアイデアに賛同します。幸運を。


これは良いです:-)
BVengerov
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.