Open1
【学び】テスト駆動開発(Software Design 202203)
参考
Software Design 202203
学び
■ 自動テスト関係の概念整理
- 自動テスト:開発対象のコードに対するテストについてもコードとして書くことで、テストの実施を自動的に行なっていく取り組みのこと
■ 自動テスト
自動テストの必須項目
- 自己検証可能であること(Self-Validating):テスト自身が自分で成功か失敗かの結果を判断できる
- 繰り返し可能であること(Repeatable):いつでもどこでも同じように実行可能である(ローカル、本番、CI上問わない)
■ 自動テストの理想的な状態
テスト対象を実装している本人が、実装とほぼ同タイミングでテストを書き、テストコードの対象範囲が無駄なく漏れ無くカバーされていて、その書かれたテストが頻繁に実行されている状態が、自動テストの理想的な状態。
■ 自動テストの効果
- 設計改善のきっかけになる:「テストが書きにくい」ということも重要なフィードバックになる。密結合・低凝集の状態に陥っていないかを確認するきっかけとなり、「テストの書きやすい設計」に書き換え直すことができる
- テストの書きやすい設計とは、「責務が明確で、結合度が低く(低結合)、凝集度が高く(高凝集)、決定的(deterministic)な動作をする」という、一般的にソフトウェアが備えていると良い性質を持った設計のこと
■ MEMO
○ 不具合を再現するテストコードを書くとは
p.69の「プロセスで品質を作り込む助けになる」のところで書いてある、「不具合が発生したときは、その不具合を再現するテストコードを書き、そのテストが成功するように修正を行なうことで回帰テストもそろいます」について整理。
例えば、ユーザー登録フォームがあって、そこにユーザー名を「卍山田太郎卍」と入力して登録をしようとした時エラーとなったという不具合報告が来たとする。この時、 『「卍山田太郎卍」というユーザー名でユーザー登録をした時、「卍山田太郎卍」というユーザー名がusersテーブルに存在すること』 のようなテストコードを作成する(これが上で言う「不具合を再現するテストコード」)。
この不具合を再現するテストコードはそのまま残しておく。なぜなら、本来想定していなければならなかったケースを漏らしていたことになるため。