The HIRO Says

If you smell what The HIRO is cooking!!!

組込の視点からTDDとその教え方を学んできた【速報版】

2013年の5月27日(月)と28日(火)の2日間、ジェームス・グレニングさんの『テスト駆動開発による組み込みプログラミング 〜 C/C++言語とオブジェクト指向によるアジャイルな設計』研修に参加してきました。



私自身、エンタープライズ系・Web系システムの開発がメインで、組込システムの開発経験は皆無です。ですが今回、次の3点を特に学びたいと思い、「組込」と銘打たれていましたが参加しました。

(1) TDD自体

自社のシステムに「レガシーコード」(テストの無いコード)が多く、手動テストが多くてエンジニアに大きな負荷がかかっていると認識しています。自分自身、過去に担当したプロダクト・システムでレガシーコードにテストを入れて現場を改善したことがありますが、その知識が妥当なのかどうか、ムダなところがないかどうか、世界的に有名なTDDのコーチから直接伺いたいなと思いました。

(2) TDDの教え方

自社のレガシーコードを撲滅すべく、TDDを実践し広めようと考えているのですが、教える側の立場として、どういった視点を持つべきか、どこに注意すべきかについても体得したいと考えました。

(3) TDDの効果の説明方法

一方でTDDをやろうとすると、マネージャなどにそれを実施するメリットなどを説明できる必要があります。TDDのROIやKPIについて私案を持っているのですが、それがどの程度妥当なのかについても、あわせて確認したいと思いました。


学んだこと

研修を受けた当日の夜にこれを書いているので、ポイントだけ整理します。細かい点は後日アップします。

(1) TDD自体
  • HWやDBなどの依存コンポーネントの利用箇所を見つけ、その依存関係を断ち切る。
    • 具体的には、依存コンポーネントを利用側で new するのを止め、外部から渡せるようにする。
    • 依存コンポーネントを外部から渡せるようにすることで、Test Doubles(Mockなど)を組み入れやすくする。
    • Test Doublesへの切り替えを容易にするため、依存コンポーネントをインターフェースにする。
      • C/C++の場合はヘッダファイルを用意する。
  • レガシーコードにテストを追加する場合も、基本上記の通り。
    • レガシーコードの場合、現在サポートしている機能が「仕様」になるため、これを保証したテストをまず作ること。
(2) TDDの教え方

いかにリズムを作って頭(と心)を切り替えるかだと思いました。

  • テストすること、思いついたアイデア、気になることは、まず写真のようにToDoとして書き出す。
    • 頭の中にあるアイデアを一旦出すことで、目の前のテスト・実装に集中できるようにする。
    • 一度書き出せば、再考する際のスタート地点に出来る。
  • 一度にひとつずつ進めること。
    • まとめてやらない。
    • 混乱を極力取り除く。
  • 迷ったらテストを動かして試すこと。
    • テストハーネスがあれば、今まで作ったところは動く。なので考えて詰まるならば1つ追加・修正して試せばすぐに結果が分かる。考えすぎるくらいなら試そう。
(3) TDDの効果の説明方法

TDDの根本的な効果は、仕事を効率化すること

  • 手作業のテストなど、非効率な作業とその時間を減らすことに意味がある。
  • マネージャに対してこの点を示すことは価値がある。
    • ROIは「減らすことのできたムダな作業時間 / テストを作るのに費やした時間」で出せる。
  • 「エンジニアが楽しい」は確かに実践する立場からは言いたいだが、マネージャが欲しい情報ではない。

最後に

TDD研修にも関わらず、研修のはじめの「今の仕事で一番嫌なことは?」という質問にこれを書いた人は、かなり強い人なのだなと思いましたw


参考書籍

Test Driven Development: By Example (Addison-Wesley Signature Series (Beck))

Test Driven Development: By Example (Addison-Wesley Signature Series (Beck))

リファクタリング―プログラムの体質改善テクニック (Object Technology Series)

リファクタリング―プログラムの体質改善テクニック (Object Technology Series)

  • 作者: マーチンファウラー,Martin Fowler,児玉公信,平澤章,友野晶夫,梅沢真史
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2000/05
  • メディア: 単行本
  • 購入: 94人 クリック: 3,091回
  • この商品を含むブログ (312件) を見る
レガシーコード改善ガイド (Object Oriented SELECTION)

レガシーコード改善ガイド (Object Oriented SELECTION)