2011-10-26 6 views
5

私は単体テスト、TDD、および固体の原則について読んできました。私はいくつかの明確化が必要です。私の理解は、開かれた/閉ざされた原則に従えば、単体テストは、コードが変更されていないという事実のために、大部分は不要になる可能性があるから、コードが適切に分離されていれば再テストする必要はありません。コードが関連ユニットテストに合格すると、変更されない単体テストの追加コストの長期的な利益は失われます。コードは決して変わらないので、常に通り過ぎます。継承されたクラスはテストする必要がありますが、関連するテストに合格すると、変更されたクラスも閉じられ、再テストする必要はありません。 The Wikipedia article on OCPは、最初の段落でこの考え方を強調しています(私はそれが法律にならないことを認識しています)。
アーノンがOCPテストに変更する場合、既存の試験方法が複雑になる可能性があるため、開発者がソースコードを変更するのは推奨されていることでTDDを補完することを言っているようですけれども、私は、調和is hereにOCPとTDD生活のために見つけた最良の説明新しい機能
それはすべてそれにありますか?私は、引数を探していないよという断っておくが、私はこれに新たなんだと私はあなたが受け入れるようにした場合でもI.テスト駆動開発とオープン/クローズド・プリンシプルはどのように連携しますか?

答えて

8

よりも対象と多くの経験を有する者からの明確化を探しています、そのソフトウェアの動作に一度変更しない場合は、テストする必要はありません(私はそうではありません)。最初にコンポーネントが動作することを示す必要があります。私はそれを行う最善の方法の1つがユニットテストであると主張します。あなたがテストを持っていたら

また、実質的に言えば、それを実行するために非常に少ないコスト。したがって、コンポーネントが変更されなくても、継続的にテストを実行することで多くを失うことはありません。さらに、時には設計変更があり、いくつかのコンポーネントをやり直す必要があります。この場合、単体テストは間違いなく助けになります。

テストスイートを使用した結果の1つは、変更。たとえあなたのチームがSOLIDでOをフォローしていても、それは事が偶然に変わることを意味しません。そこでテストは、何かが誤って変更されたかどうかを示すことによってそこに役立ち、変更の影響を受けたものを正確に示します。

+3

SOLIDはベストプラクティスであり、宇宙の調和のとれたバランスが依存する物理学の法則ではないことを常に忘れないでください。 SOLIDルールを簡単に破ることができます。たとえ宗教的に従ったとしても、SOLIDデザインはすべての可能な変更に単純に対応できません。 1つのタイプの変更を閉じると、別のタイプの変更が行われる可能性が高くなります。 – KeithS

4

ユニットテストは、原因コードがすべてではない、まあ

を修飾を閉じているという事実に大部分が不要になる可能性があります。元の閉鎖された実装が正しいことをどのように知っていますか?

ユニットテストの追加初期費用の長期的な利益は

を失っているソフトウェア工学経済学の重要な知見は、それは、後の生活の中で欠陥を検出し、修正するために、はるかに高価です製品。古典的な「滝」開発プロセスでは、各段階で約2倍の大きさになります。単体テスト(TDDであろうとテストファーストであろうと)は早期に欠陥を検出するので、コストをすばやく回収することができます。

それはそれで欠陥がある場合は、それを変更する必要があります

を変更しません。もちろん、あなたのコードに欠陥がないことを保証できるなら、あなたの言うことは真実です。しかし、あなたが保証することができます場合種類のテスト。しかし、このような主張をすることができるソフトウェアプロジェクトはごくわずかです。

関連する問題