大輝は、ソフトウェア開発の「テスト技術」において、No.1を目指しています。金井は「テスト」=最終チェックといった通念を覆すべく、従来の通念の逆を行く方法にたどり着きました。彼の大きな挫折経験を通しながら、テスト技術の本質に迫ります。Japan(オッドイー・ジャパン)(以下、Odd-e)では、エンジニアは全員TDD(テスト駆動開発という開発スタイル)で開発を進めています。“呼吸をするようにテストを書く”ーーそれが、彼らの今の姿です。TDDとは、製品のプログラムを書く前に、仕様をテストコードで定義し、そのテストが通るように製品のプログラムを書いていくーーつまり、答えを先につくり、その答えにたどり着くための方法を書いていくという、通常の概念とはまったく逆の発想から来る開発手法です。開発者の金井は、ソフトウェア開発における「テストの意義」についてこう説明します。金井「“テスト”と聞くと、計画したものをすべてつくり終えた後で、意図通りに動くかどうかを確認するためのもの、と考える人が多いのではないでしょうか。これからの時代は、製品にかかわる人の意図や顧客のニーズが変わっていく時代。金井は、「つい汎用的につくってしまう」「臭いものにはふたをする」「自分がつくったものは正しい(正しい結果が返ってくるテスト作成)」この3つが、人のよくある習性だといいます。した“人の習性”に対して、テスト駆動開発にはどういった利点、意義があるのでしょうか。金井「テストファースト×自動テストでいつでもリファクタリングOKな環境は非常に有効です。あり続けるためには、小さく物をつくる必要があります。テストを最初に書くということは、『なぜこれが必要なのか』や『成果物のゴール』を意識することにつながり、“つくりすぎ”を防ぐことができます。つくったテストをシステムで自動検知できるようにすれば、リファクタリングも強気にできます。その結果、事なかれ主義にならず、よりよいコードを追求できるんです」そんな金井はもともと、前職で20名前後のメンバーを束ねるリードエンジニアでした。金井「当時の私は今とは全然考え方が違ったんです。考えられるだけの汎用性や共通化を考慮し、詳細な設計通りに開発し、最後にまとめてテストを行なう。思っていました」ウォーターフォール開発環境下でまい進してきた金井が、TDDに魅せられたのには理由があります。彼の大きな大きな“失敗”が、彼に根付いていた観念を180度変えたのです。コードやテスト技術向上にまい進する金井それは、金井が管理会計のシステム開発を行なった時のこと。当時、プロジェクト開始初週からスケジュールとの乖離がはじまっていました。設計思想もなく各々がバラバラに動き、チームとして運用できていない状況でした。このままだと納期に間に合わないのは確実だと思った金井は、自ら手を挙げプロジェクトをリードすることを決意。当時の金井は自信満々で、とにかく綿密に設計した内容をただ伝えれば必ず成功すると、心から思っていました。ところがプロジェクト後半になるにつれ、彼が満を持して書いた設計は、つくり込んだ汎用クラスがうまく噛み合わない、デザインパターンが足枷になるなど様々な原因が重なり、要求した内容通りにはいきませんでした。金井「結局1カ月の延期と、3割の機能削減でリリースしましたが、納期重視のプロジェクトであったため、“自動テストを書かない”という負債を受け入れる選択もしました。そのため、リファクタリングがしづらい状況を前提として、今後の開発をしていかなければなりません。達成感もなく、途方もない追加対応に追われていた金井とチームメンバーはさらに追い打ちをかけられます。「半年後、製品をクローズする」と製品責任者から発表があったのです。金井「抽象度が高いシステムであったので複雑性が増し、メンバーの認識を合わせることが難しく、手が止まってしまうこともしばしばありました。今考えるとすごくもったいないことをしていました。誰のための、何のためのシステムだったのか。強烈な後悔と自責の念にかられながらも、金井はこの闇のような問いに向き合いました。「もう絶対に不要な機能はつくりたくない。したらユーザが求めているコア機能にもっと時間を使うことができるのだろうか?」このことをきっかけに、チームやプロダクトをより効率的、効果的につくる手法や考え方ーースクラムやアジャイルを真剣に勉強しはじめたのです。Development)概要図これまでも、スクラムやアジャイルは触れたことはあったものの「しっかりと理解しようとはしていなかった」という金井。「アジャイル」という考え方やチーム開発手法「スクラム」に加え、実現するための技術もセットで知見が深いことに魅力を感じ、Odd-eに入社します。Developer)を受けることを志願しました。CSDとは、スクラムの理論やコンセプトをエンジニアとして実践できるという国際認定資格が取得できる研修・トレーニングです。1週間という限られた時間で、小規模なアプリケーション開発をOdd-eのアジャイルコーチのサポートを受けながら実践。スクラムの基本プラクティス(概念やルール等)のほか、テスト駆動開発(TDD)、受け入れテスト駆動開発(ATDD)、リファクタリングなど、多くの技術的な手法を学ぶとともに、手法を使ってレガシーコードを改善する方法も学ぶことができます。「創発的設計」とは一言でいうと、「初期の設計よりもリファクタリングによる再設計を重視する」考え方。TDDは「最小の単位でしかプログラムを書かないこと」を重要とする手法。小さな単位で開発・テストをすることで、ステークホルダーや顧客に対して“目に見える成果”としてつくることができ、こまめにフィードバックをもらえるというスタイルに出会った金井は、ここで一気に夢中になります。金井「たとえば足し算をする関数をつくる場合、最初に書くテストケースは『1+1を指定したら2が出力されること』となります。このテストが通る最小単位のコードは『ただ2を返す』関数です。具体的に書くと以下のような実装です。2}これが最小単位の実装です。このように、最小単位のテストコードを積み上げていきます。なることで、メンバーの変更に左右されない強固なシステムができます。テストファーストの考え方が当たり前になれば、“なぜつくるのかを強く意識するエンジニア”と“技術的負債が少ないシステム”が当たり前になる。そんな世の中にしていきたい。そのためにもまずは自分のチーム、組織から。金井は、そう明るく語ります。純史:“WBS”という開発者と企画者の壁を爆破。Japan(オッドイー・ジャパン)とそのメンバーにご興味がございましたらお気軽にお問い合わせください。ProviderSM。