InfoQ

InfoQ

News

マイブックマーク

ブックマークするためにログイン または 会員登録 する

ブックマークされました!

ブックマークがエラーになりました。もう一度お願いします。

なぜTDDとペアプログラミングで生産量が増えるのか

作者 Mike Bria , 翻訳者 渡嘉敷 満理子 投稿日 2009年6月7日

セクション
プロセス/プラクティス
トピック
Agile ,
Delivering Quality
タグ
Productivity ,
TDD ,
Pair Programming

原文(投稿日:2009/5/27)へのリンク

「テスト駆動開発」と「ペアプログラミング」は、アジャイルプラクティスで最も広く知られているものの2つであるが、まだそれほど多くのアジャイルチームによって実践されてはいない。たいていその理由として、TDDやペアプログラミングなどのプラクティスを取り入れるには「忙しすぎる」点が挙げられるだろう。要するに、これは高いコード品質を得ようと努力することが生産性を低下させることを示唆している。Mike Hill氏は、この論理がなぜ重大な誤りであるか説明している。

Mike氏が語る基本は、「生産速度」を求めるなら、「品質の向上」が必要になるという点である。

内部品質と引き換えに機能を追加できるということは事実でないどころか、実際には正反対です。つまり、生産性を追求するほど、内部品質基準の向上化が必要になります。
...
より多くの生産量を求めるのであれば、まずは内部品質を上げることに目を向けます。

さらに、その理由を次のように語った。

では、なぜそのようなことをするのでしょう?
  1. 内部品質と外部品質は別物であるため。
  2. 今日の生産を決める唯一最大の要因は、昨日の成果物の品質であるため。
  3. タイピングは、現在もこれまでもコードを書く上で決してボトルネックではないため。

Mike氏は、続けてこの3つの理由について説明している。まず、氏は、「品質」という言葉を明確にし、外部品質 (製品機能の量とみなすことができる) と内部品質 (これら機能の背後にあるコードを意味する) を区別している。氏は、この区別をすることで、外部品質は製品化までの時間が短縮されることで低下するおそれがあるが、内部品質はそうではない点を指摘している。

次に、Mike氏は、どのように「昨日が今日を決定する」のか、つまり、既存コードの内部品質が現在の生産性にどのような影響を及ぼすかについて、次のように述べている。

一日中、何か行動を起こすたびに、そこにある既存コードに左右されることになります。コードの行の解析、他の依存関係のオープン、不適切な変数名、 (大なり小なり) 欠陥のある設計決定、などによりペースが落ちることになるでしょう。

できるだけ作業ペースを上げたいのであれば、簡潔なコードで作業すべきです。以上。

最後に、Mike氏は、ペアプログラミングとTDDは、「タイピングの人数が半分でコード生産量も半分」(本稿著者の言葉) になるため、スループット (生産性) が低下する、というよくある誤解を取りあげている。氏は、「コーディング」時に起こる11の一般的な行動リストを示し、次のように述べている。

マシンにコードをタイプするということがこのリストのごくわずかな部分しか占めていないという点に注目してください。それは、プログラミングで問題となる要素は考えることであり、タイピングではないからです。このリストでそれ以外 (おそらく物を投げることを除いて) は考えることに関しており、タイプピングではありません。

TDDは思考を支援するものとして機能するため、生産量が増加します。これにより、バックトラッキングと不要な機能を抑制し、コード解析とデバッグを減らします。ペアプログラミングは、まさにそのような理由で生産量を増加させるのです。2人の開発者が一緒にタイプする場合、別々に行う時ほど速くはありませんが、気にすることはありません。それは、ボトルネックは考えることであり (タイピングではない) 、ペアプログラミングとTDDはともにその点を改善するからです。

Mike氏は、チームの生産性向上に対し、要約した3つの提案で締めくくっている。

チームの生産性を向上させたいのであれば、次の3つのことを行います。
  1. いかなるコードも、失敗するマイクロテストを書いてから変更する。
  2. 「ペアなくして品質の維持なし」という点に合意しこれを受け入れる。
  3. 内部品質に対する共通の認識を確立する。

「ペアプログラミングやTDDをする時間がない」と確信している人をご存知かもしれない (ひょっとするとあなた自身かもしれない) が、Mike氏の記事が役立つだろう。

特集コンテンツ一覧

GAE開発の落とし穴

Googleのクラウド環境をつかったGoogle App Engineによる開発するにあたり、初めての試みで苦悩する開発者達の経験をもとに、各開発フェーズにあわせて問題点やどう解決したかをご紹介します

イベントレポート:「Coqチュートリアル#1」

去る1月12日、定理証明支援系ツールCoqの初心者向けチュートリアルが開催さ れた(http://kokucheese.com/event/index/23667/)。今後も2月2日 (http://kokucheese.com/event/index/23744/)、2月9日、2月16日と引き続き開 催されていく予定である。本記事では、開催の様子をレポートする。

Javaの未来についてのNeal Gafter氏とのディスカッション

Choosing Options

Neal Gafter氏はOracleによるJava買収の影響に関する議論、Javaにセグメンテッドスタックやメタオブジェクトプロトコルを追加することについての主張、そしてJavaとC#との比較について話をしてくれた。

Google Dartのエッセンス:アプリケーションの構築、スナップショット、Isolate

GoogleはVMをともなう新しい言語であり、JSコンパイラでもあるDartをプレビューした。 InfoQはDartのアプリの構築に貢献する文法の裏側を探った:スナップショット、Isolate、モジュール方式

CSPベースのモデル検査ツール「Process Analysis Toolkit」

本記事ではCSPベースの「マルチドメイン・モデル検査ツール」である、PAT(Process Analysis Toolkit)について紹介する。モデル検査は、形式手法(Formal Method)という方法論を基礎とする技術であり、複雑さが増大しながらも安全性を求められる、現在のソフトウェア開発の状況に対する処方箋の1つとして注目されている手法である。

Jenkinsによる継続的インテグレーションのススメ(4) ~CloudBeesでJenkinsをサービスとして使う~

前回まで、Jenkinsの幾つかの側面に注目して解説をしてきました。シリーズ最後の今回は、Jenkinsをサービスとして使う方法を紹介します。

書籍『抽象によるソフトウェア設計-Alloyではじめる形式手法-』の紹介

Alloyは、MITにて開発された仕様記述言語であり、ツールによる自動解析を使い、インクリメンタルに形式仕様が書けることが特長である。筆者らはAlloy開発者による、Alloyを使った形式手法入門書を翻訳、今夏にオーム社より刊行した。本記事では、Alloyの簡単な概要と、翻訳書『抽象によるソフトウェア設計』(「Alloy本」)を紹介する。

Windows デバイスで開発するタッチユーザーインターフェイス

スマートフォンを中心としたマルチデバイスにおけるタッチユーザーインターフェイスへの対応は、既に必須の項目となりつつある。本記事では、Windows デバイスにおける UX のベースとなっている「メトロ」というデザイン言語を掘り下げながら、既存環境を意識しつつもどのようにタッチユーザーインターフェイス開発に取り組んでいくべきであるかについて解説していく。