優先順位をまっすぐに取得しましょう...
顧客としてのあなたの役割における主な関心事は、単体テストではありません
あなたのためにソフトウェアを生産するサプライヤを使用している場合、彼らが何らかの方法論を使用しているかどうかを本当に心配するべきではありません。目標は、目標を達成するのに役立つ何らかのソリューションを取得することです。唯一気にする必要があるのは、その解決策が受け入れられるかどうかです。それが、あなたが望むものを手に入れることを確認するあなたの責任にあるので、受け入れテストがある理由です。お金があなたの会社のポケットからサプライヤーのポケットに送られることは、顧客の受け入れの重要な瞬間です。
成果物の要件として単体テストを要求することもできますが、それらにはいくつかの継承問題があります。最も深刻なのは、メトリックを事前に決定する確実な方法がないことです。
10回のテストが必要ですか?100個のテストはどうですか?1000個のテストはどうですか?実際、必要なテストの数を最初に判断することは非常に困難です。実際の数は、実際には不確定です...停止する問題のように...しかし、我々はその問題を解決していません。
開発を継続できるように、単体テストを備えたソフトウェアが必要です。単体テストでは、まだ何が壊れているかはわかりませんが、コードにリグレッションバグがある場合に伝えるのに非常に適しています。
「もちろん、100%!」あなたは思うだろう。残念ながら、そのメトリックは誤解を招くものです。コードカバレッジが100%であっても、期待どおりに機能していると確信していますか?カバレッジを100%にすることは可能ですが、実行しないでください。
本当に必要なのは探索的テストです。つまり、物を壊すのが本当に上手な人を見つけて、テストをさせます。開発者が考えもしなかったバグを見つけるため。
また、必要なパフォーマンスハックがあり、テストが難しいデザインパターンを使用している場合、純粋な単体テストでは100%を達成できない場合があります(お気に入りの検索エンジンで「シングルトン」と「tdd」を検索すると、いくつかの例が見つかります)。
提供されたソフトウェアが機能することを望み、仕様書はそれが機能する唯一の保証です。
より高いレベルのテストが必要になります
仕様書は何らかの方法で検証する必要があります。サプライヤーは明確な目標と受け入れ基準を持って、各ポイントを通過する必要があります。適切に機能するQA組織(または予算が限られている場合は素晴らしいテスター)が、これらの受け入れ基準を確認するためのテストケースを提供します。また、それらの受け入れ基準を検証する誰かが必要です。
目標を検証する方法はいくつかありますが、品質、性能、効率の目標を設定できないと誰かが教えてくれた場合、探索、性能、ユーザビリティのテストに関する大きな本と重い本で頭を打ちます。目標を達成するのは簡単ですが、知識とコミュニケーションは現実的な目標の設定に役立ちます。
私は弁護士ではありませんが、ほとんどのプロジェクト契約(これは基本的にプロジェクトのすべての仕様の母です)私が読んだことは通常、許容できると見なされるバグの数を規定する欠陥率の基準を持っています。バグは通常、重大度によって決定され、QAによって検出されたショー停止バグは許容度が低く、小さな傷は許容度が高くなります。実際のプロジェクトでは、ソフトウェアに欠陥がないことを要求することは困難です。締め切りは通常、その慣行を停止します。これらの状況で、スコープの交渉を開始する必要があります。
私が見たほとんどの付属ソフトウェアは、通常、単体テストでは提供されていません。サプライヤはこれを提供するのに十分な専門家である必要があると主張することができますが、ユニットテストを提供する主な理由は、リグレッションバグが発生しないこととリファクタリングを有効にすることです。締め切りの厳しいプロジェクトでは、サプライヤと顧客の両方が範囲を縮小し、ユニットテストは通常、窓から出て必要な成果物のリストから削除されます。
注目度の高いオープンソースソフトウェアが単体テストで提供されるのは少し悲しいですが、プロのソフトウェア開発者はそうではありませんよね?
それで、私はいつ顧客として単体テストに関心を持ちますか?
ユニットテストを本当に気にするのは、成果物ソフトウェアがスタンドアロンプログラムとして実行されない自給自足のコンポーネントである場合だけであると主張します。。クラスライブラリは、単体テストと一緒に提供できる製品の一種です。