ソフトウェアにしっかりとテストを書いた結果、どのような心境に至ったか
とても小さくてしょぼい機能しか無いけど、
趣味で作っているRuby on rails製サイトの主要機能に対しテストを充実させた結果、精神衛生的にとても良い気分になったのでカキコ。
- トップベージ表示
- RSSフィード排出
- 記事詳細ページ表示
- ログイン → 記事作成
- markdown→html変換ヘルパー
- はてなブログカードヘルパー
- Modelのオブジェクトの妥当性(バリデーション)
上記重要度の高い振る舞いをテストでカバー。
(ツールでコードカバレッジを算出した訳ではない)
結果、シンプルに「システムがちゃんと動いている」信頼感を得る事が出来た。
テストは合計で27assertionと少なめだが、
闇雲にカバレッジを上げたりテストを書いたという事実を作るためのテストは無く、
1つ1つがソフトウェアの動作が正しい事を保証する事に寄与する実効性の高い内容となっている。
この感覚は主要機能をテストでカバーするまで得られなかったし、人力のテストをいくら頑張っても得られた事はない。
おかげでリファクタリングや改修をアグレッシブに行えるし、
レガシーコード改善ガイドのレガシーコードとはテストが無いコードのことだという主張にとても共感出来る心境だ。
もう一つ新たに気付いたのは、
一部分だけテストがある状態と、テストが主要機能を一通りカバーしている状態とでは全く感覚が異なるということだ。
後者では上に書いた通り「システムがちゃんと動いている」実感が得られるのだが、前者ではbundle exec rake test
コマンドが通ったな、ぐらいの印象しか持てなかった。
個人的にテストとは重要な部分を網羅した途端、急激に信頼度が増加する特性があるのだなぁと感じた。
健全にビジネスを回す為にはこの信頼感が必要不可欠だと強く実感したので、職場のコードにこそテストが完備されるべきだ。