名古屋アジャイル勉強会の第10回勉強会に参加しました

今回のお題は『組込みソフトウェア開発におけるテスト駆動開発』ということで、XPJUG関西の細谷さんにお越しいただいて講師を務めていただきました。組込み系開発で、C/C++テスト駆動開発を行うときのポイント、そしてテスト駆動開発の効果を評価する方法について、お話しいただきました。

以下は山本がおもしろいと思った事項のメモです:

組込み系だと品質基準が厳しく設定されていることが多く、それに対応するために開発プロセスも規定されていて、アジャイルなプロセスとは相容れない場合も多い。そうした場合に、テスト駆動開発をどう取り入れていくか、意識的であることが重要。テスト駆動の取り入れ度合にもいくつかのパターンが考えられて、1)詳細設計と単体テストは従来通り行い、実装(のみ)をテスト駆動で行う、2)詳細設計は従来通り行うが実装と単体テストテスト駆動開発で行う、3)設計からテストまでテスト駆動で行う、等々。どのやり方なら、周囲やチームが、それらのやり方のどれなら受け入れられるか、よく考えて選択するべき。また情報を求めたり会話をする際にも、自分の意図がどのパターンで、相手が意図しているのがどれか、も意識しないと不要なコミュニケーションロスが発生する。

組込み系だとC/C++を言語として用いることが多い。テスト駆動開発ではモジュールをテストするためにオブジェクトを差し替えるということを頻繁にするけれども、もともとCはオブジェクト指向をサポートしていないし、C++も効率重視で仮想関数がデフォルトじゃなかったりと、Javaやもっとモダンな言語のようにはいかないところがある。もちろんC/C++にあったやり方はあって、関数ポインタによる関数の差し替えや、make環境をテスト毎に分けてオブジェクトの衝突を避ける、など。しかしいずれにしても、開発チーム内で共有されていないならばどんなテクニックも意図不明なギミックになってしまう。テストファーストはXPのプラクティスの中でも技術的でプログラマがまずひとりで始められるし始めたくなるものだが、結局大いにソーシャルなプラクティスでもあるといえる。チームがそれを受け入れることができるかどうかを考えること。特に将来にわたって受け入れつづけることができるか。後を引き継ぐ人が理解できないのでは困る。そういった意味でテクニックにはコストがかかるので、ペイできるかどうかを考える必要があるし、ペイするための取り組みをし続けていけるかどうかを考える必要がある。

いろいろ考えさせられるよいセミナーでした。細谷さん、参加者のみなさん、ありがとうございました。

名古屋アジャイル勉強会は普段、ワークショップ形式での勉強会を行うことが多いですが、今回はセミナー形式となりました。テスト駆動開発を体験するグループワークってなにかできないですかね。PC持ち寄ってペアプロで体験、でもいいのですが、PCの準備や言語の選択などが大変そうなので、できればペーパープロトタイピングみたいな感じで体験できないか、なんて思っています。