プログラムの動作が正しいかどうかを検証するためのテストを作成します。
目で出力ステートメントの内容を調べて、プログラムの動作が正しいかどうかを確認するのは、手作業、つまり視覚的なプロセスです。
あなたはそれを主張することができます
目視検査が機能し、コードが意図したとおりに機能することを確認します。これらのシナリオでは、コードが正しいことを確認したら、問題ありません。
まず最初に、コードが正しく機能するかどうかに興味があるのは素晴らしいことです。それはいい。あなたは時代遅れです!悲しいことに、これにはアプローチとしての問題があります。
目視検査の最初の問題は、コードの正しさを再度確認することができなくなることから、溶接不良です。
第2の問題は、使用される一対の目が、目の所有者の脳と密接に結合していることです。コードの作成者が目視検査プロセスで使用される目も所有している場合、正当性を検証するプロセスは、目視検査官の脳に内在化されたプログラムに関する知識に依存します。
元のコーダーの頭脳と提携していないというだけの理由で、新しい目が入り、コードの正当性を検証することは困難です。目のペアの所有者は、問題のコードを完全に理解するために、コードの原作者と会話する必要があります。知識を共有する手段としての会話は、信頼できないことで有名です。元のコーダーが新しいペアの目で利用できない場合、問題になるポイント。その場合、新しい目は元のコードを読み取る必要があります。
ユニットテストでカバーされていない他の人のコードを読み取ることは、ユニットテストに関連付けられているコードを読み取るよりも困難です。他の人のコードを読むことはせいぜい扱いにくい作業ですが、最悪の場合、これはソフトウェアエンジニアリングで最も困難な作業です。雇用者が求人を宣伝するときに、プロジェクトがグリーンフィールド(またはまったく新しい)プロジェクトであることを強調するのには理由があります。コードを最初から作成することは、既存のコードを変更するよりも簡単であるため、宣伝された仕事が潜在的な従業員にとって魅力的に見えるようになります。
単体テストでは、コードをコンポーネントに分割します。次に、コンポーネントごとに、プログラムの動作を示すストールを設定します。各単体テストは、プログラムのその部分が特定のシナリオでどのように動作するかを物語っています。各単体テストは、クライアントコードの観点から何が起こるかを説明するコントラクトの句のようなものです。
これは、新しい目が問題のコードに関するライブで正確なドキュメントの2つのストランドを持っていることを意味します。
まず、コード自体、実装、コードの実行方法があります。次に、元のコーダーが一連の正式なステートメントで記述した、このコードがどのように動作するかのストーリーを伝えるすべての知識があります。
ユニットテストは、元の作者がクラスを実装したときに持っていた知識を取り込み、正式に記述します。それらは、クライアントが使用したときのそのクラスの動作の説明を提供します。
役に立たないユニットテストを記述したり、問題のコードのすべてをカバーしたり、古くなったり、古くなったりする可能性があるため、これを行うことの有用性に疑問を投げかけるのは正しいことです。単体テストが模倣するだけでなく、知識のある良心的な作成者が実行時にコードの出力ステートメントを視覚的に検査するプロセスを改善することをどのように保証しますか?最初に単体テストを記述してから、そのテストに合格するためのコードを記述します。終了したら、コンピューターにテストを実行させます。テストは高速で、繰り返しのタスクを実行するのに優れており、ジョブに最適です。
テストするコードを削除するたびにレビューを行い、ビルドごとにテストを実行して、テストの品質を確認します。テストが失敗した場合は、すぐに修正してください。
テストの実行プロセスを自動化して、プロジェクトのビルドを実行するたびにテストが実行されるようにします。また、テストによってカバーされ、実行されるコードのパーセンテージの詳細を示すコードカバレッジレポートの生成を自動化します。私たちは高いパーセンテージを目指して努力しています。一部の企業では、コードの動作の変更を説明するための十分な単体テストが記述されていない場合、コードの変更がソースコード管理にチェックインされないようにします。通常、2番目のペアは、変更の作成者と共にコードの変更を確認します。レビューアは変更を検討し、変更が理解可能でテストによって十分にカバーされていることを確認します。したがって、レビュープロセスは手動です。ただし、テスト(単体テストと統合テスト、および場合によってはユーザー受け入れテスト)がこの手動レビュープロセスに合格すると、自動ビルドプロセスの一部になります。これらは、変更がチェックインされるたびに実行されます。A継続的インテグレーション サーバーは、ビルドプロセスの一部としてこのタスクを実行します。
自動的に実行されるテストは、コードの動作の整合性を維持し、コードベースへの将来の変更によるコードの破壊を防ぐのに役立ちます。
最後に、テストを提供することで、コードを積極的にリファクタリングすることができます。これは、変更によって既存のテストに影響が及ばないという知識で、大きなコードの改善を安全に行えるためです。
テスト駆動開発には注意が必要です。つまり、テスト可能にするためにコードを記述する必要があります。これには、インターフェイスへのコーディングと、依存性注入などの手法を使用して、協調オブジェクトをインスタンス化することが含まれます。TDDを非常によく説明しているKent Beckの仕事をチェックしてください。見上げインターフェイスにコーディングし、研究デザインパターン