Contents

テスト──ただの動作確認ではない

テストには、動作保証のほかにも重要な意義がある。 ノンプログラマが、よい働き方について考えるうえでのヒントとなるだろう。

/images/partner.jpg

期待の明確化

一つ目は、仕事への期待を明らかにすること──「どうなったら終わりなのか」を定義することだ。 スクラム開発では、完了の定義(Definition of Done)と呼ばれることもある。

知的労働の成果物は手に取ることができないため、自然言語のみで議論していると、メンバー間で完了の定義に食い違いが生じやすい。 テストを使えば、仕事への期待を数式のような厳密さで表現することができる。 納品されたシステムの動作を確認する「受け入れテスト」や、テスト駆動開発は、この性質を利用した手法だ。

作業完了の保証

厳しいことをいえば、テストがない環境でなされた仕事の「完了」は、あくまでも作業者の自称にすぎない。 一方で、完了の定義がテストとして表されていれば、作業者はテストに見守られながら仕事をすることができる。

テスト通過を示す合格マークは、仕事の結果が顧客の要求を確かに満たしていることを保証してくれる心強い味方だ。

過去との整合性

テストは、プロジェクト「全体」に、意図せぬ品質低下がないことも保証してくれる。

プログラムをメンテナンスしていると、過去に自分が書いたコードを思いがけず壊すことがある。 自動テストがあれば、過去に積み上げたテスト全てに通過していることを保証できる。

print による動作確認の欠点は、積み重ねの恩恵を受けられないことだ。 アドホックな動作確認はちょうど、置いた途端にピースが消えるジグソーパズルを解いているようなものだ。 動作確認をテストにしておけば、過去の積み上げを足がかりとして、新たなピースを試すことができる。

テストの重要性

テストは単なる動作保証としてだけではなく、コミュニケーションの手段、あるいは仕事のパートナーにもなりうる。 積み上げを前提とした働き方には不可欠なプラクティスだ。

知的労働者の仕事は、製造業などの物質的な仕事に比べて空間的な制約は少ない反面、状態の把握しやすさの面では不利だ。 テストをうまく使えば、知的労働のこのような短所をカバーし、積み上げの効果をフル活用できるようになる。