SSブログ

テスト駆動開発の経験(6) [プログラマー現役続行]

4年ほど前に「テスト駆動開発の経験」と題して記事を書いています。
1978年に大学でプログラミングを始めてから、(「テスト駆動開発の経験(1)」に書いてあるように)2003年まで、私自身はテスト駆動開発を経験したことがありませんでした。

1990年代までのソフトウェア業界では、自動実行するテストを書いて資産として残していく習慣はありませんでした。手作業によるテストと目視確認というのが普通に行われていたのがソフトウェアのテストでした。テストコードが書かれたとしても、テストコードを手作業で実行し、目視確認が終わったら捨てるということが行われていました。実際、同じようなことを、Martin Fowler、Robert Martin、Joshua Blochが、それぞれ『リファクタリング』、『Clean Code』、『Coders at Work プログラミングの技をめぐる探求』の中で述べています。

テスト駆動開発は、それ以前のソフトウェア開発とはやり方が異なっていたために、地道に意識した努力を行っていく必要がありました。主なものを列挙すると以下の通りです。
  • 「テストファースト」で先にテストコードを書く習慣。そのためには、事前にAPIをきちんと設計する習慣
  • 不具合が発生した場合に、必ず再現テストを書いてから修正する習慣
  • CIが失敗していたら、その調査に最優先で取り組む習慣
2003年に始めたテスト駆動開発は、対象が(コピー、プリンター、FAXなどが搭載されている)デジタル複合機のコントローラソフトウェアであり、処理が非常に複雑なソフトウェアでした。私の経験から、デジタル複合機で最も複雑な実装は、コピーやプリントを行っているときの「割り込み」機能です。そして、「割り込み」は今日ではおそらく誰も使わない機能です。

メルペイ社でbackendエンジニアとして行っているソフトウェア開発は、もちろんテスト駆動開発で行っています。私自身、それ以外の手法は考えられません。今から考えると、1990年代まで、手作業でテストを行っていたことが信じられない感じです。

コメント(0)