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