BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース TDDの5つの前提 - GeePaw Hill氏に聞く

TDDの5つの前提 - GeePaw Hill氏に聞く

原文(投稿日:2018/11/29)へのリンク

ソフトウェアコーチのGeePaw Hill氏がeXperience Agile 2018で、TDDにおいて過小評価されている5つの前提について講演した。TDDは単なるテクニックではない、プログラミング全般のスタイルであり、関連する行動や考え方の統合システムである、というのがその主旨だ。TDDの5つの前提は、我々が活動するリングを提供する。それらはTDDを行うものが呼吸する大気なのだ。

テスト駆動開発(TDD)の5つの前提は、TDDのほぼすべてを推進するための基礎となる、とHill氏は言う。そもそも、このテスト駆動アプローチに我々を結び付けているものが、それら前提に他ならないのだ。

Hill氏が示す5つの前提とは、次のものだ。

  • 収益の前提 - これは金のためなのだ。
  • 判断の前提 - 我々は局所的な決定を個人に頼っている。
  • 相関の前提 - 内部品質は生産性そのものだ。
  • 連鎖の前提 - テストはおもに、極めて小さなパーツで実施される。
  • 指揮の前提 - テストとテスト容易性は重要な設計要素である。

これらはTDDの中にいると見えないが、それでも極めて重要であることに変わりはない、とHill氏は言う。TDDを実践する時には、これらを心に留めておかなくてはならない。

収益の前提とは、金がどこにあるか、ということだ。TDDの目的は、テストや品質向上や職人技ではない。より多くの価値をより速く提供することだ。“金のためにやるのです”、とHill氏は言う。

判断の前提とは、我々は個人の判断を用いており、個人にすべてを託している、という意味である。ソフトウェアは何回でも同じことをするが、人はそうではない、とHill氏は指摘する。TDDはコーディングのアルゴリズムではない。TDDを行う場合には、あなたが判断をしなければならないのだ。

相関の前提とは、内部品質と生産性に相関関係のあることを示すものだ。この2つには直接的な関係があり、同時に向上し、同時に低下する、とHill氏は言う。これらはいずれも、スキルやドメイン知識といったものに依存している。コードを適切な形式に保つことはオプションではない、と氏は主張する。

連鎖の前提は、チェーンのテストを行なう方法は、チェーンの個々のリンクをテストすることだ、ということを示している。プログラムは小さな部分に分割されている。その個々の部分でテストを実施しなければならない。チェーン全体のテストは高価であり、テストの記述やメンテナンスも難しいが、リンク単位のテストはより安価な方法であり、大半をカバーすることができる、と氏は言う。

指揮の前提は、テストとテスト容易性が重要な設計要素であることを示している。テスト可能な設計でなければ、設計はないと同然だ、とHill氏は主張する。あなたが書いたコードには、その最初の1行目から最後のコード行に至るまで、どうやってテストするのか、これまでどのようにテストしていたのかが常に問われている。可能なかぎりテストが容易にできるように設計を変更しなければならない、と氏は言う。

TDDを実践する場合、これらの前提は常にその役割を果たすはずだ。目には見えなくても”呼吸する大気“なのだ、とHill氏は主張する。

講演を終えたGeePaw Hills氏に話を聞いた。

InfoQ: TDDの前提を知ることが重要な理由は何ですか?

GeePaw Hill: これらの前提を意識しなければ、自ら墓穴を掘る(foot-shooting) 状況に陥る可能性があるからです。それぞれについて例を挙げることができますが、相関の前提について話しましょう。

TDD実践者は自身のコードの内部品質のことばかり考えています。自身の生産性に直接かつ即時に関わってくるからです。それを知らない人たちからは、内部品質に影響する活動が、私が最も避けたい言葉である“クリーニング”と見られる傾向があります。食器をきれいに洗うことがどれほど重要だと考えたとしても、汚れた食器で長い間食事をしても何の問題もない、という単純な事実があります。クリーニングは後回しでいいのです。なぜなら、今必要なのは食事であって、きれいな食器ではないのですから。もっとたくさん食べるために、食器を洗うことを“今回一度だけ”省略したいと思うでしょう。

しかし、食器を一度洗わないことによって、すぐに食事の量が減るとしたらどうでしょうか?内部品質は清潔さとは違います。生産性の重要なファクタであって、あったらいい、という類いのものではないのです。粗雑なファクタリング、名称の不備、変数の宣言から初期化までの遅延といったものは、すぐに生産性に悪影響を及ぼします。相関の前提を理解していれば、内部品質をオプションと見なすことは決してありません。

InfoQ: TDDのスキルを向上させるには、どうすればよいのでしょう?

Hill: TDDは単純なテクニックと思われることが多いのですが、この前提での論点は、TDDはプログラミング全般のスタイルであって、新たに追加されたメカニックではなく、行動とアイデアを関連付けた統合システムである、ということです。空手の修練を積んだ人は空手家、柔道ならば柔道家と呼ばれますが、古いスタイルから現代的な統合法への移行は、空手家や柔道家になるのと通じるものがあります。鍛え上げた肉体、多彩な動作、さまざまな考え方が関連し合っているのです。

そのように考えてみれば、古くから言われている、どのようなスキルを体得する場合においてもしなければならない、まったく同じことがあります。

  1. 心を開くための、静かで安全な場所を見つけること。
  2. 広く読み、学ぶこと。
  3. 練習、練習、練習。

教師やメンタがいて、これら3つのことを手助けしてくれますが、彼らがあなたの代わりに行なうことはできません。すべての複雑な学習活動と同じで、TDDに王道はないのです。

 
 

この記事を評価

採用ステージ
スタイル
 
 

この記事に星をつける

おすすめ度
スタイル

BT