この記事について
- Clean Architecture 達人に学ぶソフトウェアの構造と設計を読んだ際の覚え書きです
覚え書き
すでに実績のある構造をプログラマが使用することで、それをコードに結び付け、自ら証明できるようにするのである。
- テストとはプログラムに誤りがないことの証明
- モジュールを数学の公式と考えるのであれば冪等性が重要だと感じた
モジュールを再気的に小さな単位に分割できなくなること、それにより合理的な証明に欠かせない「分割統治」が使えなくなることを発見した。
- モジュールを小さくする利点を知った
- 小さくすることで合理的な証明ができるようになる
- 証明する内容を明確にできる
- 証明がシンプルになる
- 重複のない証明になる
- 小さくすることで合理的な証明ができるようになる
Dijkstraは「テストはバグが存在しないことではなく、バグが存在することを示すものである」と述べた。つまりテストによってプログラムが正しいくないことは証明できるが、プログラムが正しいことは証明できないのである。
- テストは正しくないことを証明するものであるから、完成させるのではなく育て続けることが大事だと感じた
- TDDについて振り返った
- テストに期待する振る舞いを書くことは、正しさを証明するものと思っていた
- テストケース(メソッド)は失敗することで正しくない証明を行なっている
- モジュールに対する全てのテストケースをクリアすることで反証している
- テストケースを増やすことで反証の精度を上げることができる
- 増やし続けるだけではなく、合理的ではない証明は減らす必要がある
- 重複したテストケースがあれば削除、モジュールの分割を検討する
- TDDについて振り返った
まとめ
- プログラミングのテストは正しさを証明するものではなく、正しくないことを証明している
- TDDで重複を削除する際には合理的な証明を意識して重複を削除していきたい