̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ IT ニュース&コラム 2016/ 4/25 通巻711号 技術版 ソフトウェアデザイン館 Sage Plaisir 21  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄    テスト駆動開発では、最初に失敗するようなテストを書くな テスト駆動開発は、ケント・ベック氏の XP(エクストリーム プログラミング)の本 に書かれた、次の順番で繰り返す(スパイラル開発する)開発方法です[*1]。 しかし、 その説明には初っ端から問題があります。 ・レッド - 動作しないテストを少しだけ作成する。おそらく最初はコンパイルできない ・グリーン - テストをすぐに動作させる。そのためには、どのようなコードでもよい ・リファクタリング - テストを動作させるためだけに作成された重複をすべて取り除く テストはパス(合格)するために作成するものなのに、「動作しないテストを少し だけ作成する」とは、どういうことでしょうか。 本では教えてくれませんでした。 ケント・ベックは、次のようにも言っています。「API に対する理解が正しければ、 このテストには最初からパスする。[*2]」 本人は TDD の手順を説明をするときには 気が付いていないかもしれませんが、最初から動くテストを書いてもよいのでしょう。 やはり、テストは正しく書くべきなのです。 最初にテストを書くと、テスト対象が 無いために動作しないことはよくありますが、それは結果であって手順として意識 することではありません。 こうした、因果関係の認識ミスに気づかないために、 言っていることやっていることが違ってしまうのでしょう。 内包的定義ではコードに、外延的定義ではテストに対応しますが、要求仕様が、 内包的定義(テスト対象)で書かれているか、サンプル(外延的定義)で書かれて いるかは、仕様書によってバラバラです。 つまり、コードとテストのどちらを先に 書くかは、仕様書によります。 内包的定義が適する仕様でよくある表現は、○○の機能をする(例:ソートする) という表現です。 ソートについては、開発の初期段階でサンプル(外延的定義) を使って具体的にしていかなくても明らかなので、早いうちにコードに組み込ん でしまうでしょう。 なぜなら、ソート機能が実現できないリスクは低いので、 開発の初期段階ではもっと実現可能性を検証する必要があるリスクの高い機能の 実現性を先に確認することになるからです。 そのときに、ソートの機能がないと 動かないのであれば、先にコードができるでしょう。(最終的には、サンプル データを使って、それぞれの要素を比較することでダブルチェック的な詳細テスト をしますが。) 以上のように、コードとテストのどちらが先であるかが仕様書次第であることを 踏まえて、修正 TDD を提案します。 ・仕様のままのシンプルなサンプル兼テスト コードを開発の早い段階から作成する 以上です。 駆動(テスト ファースト)に厳密になる必要はありません。 ただし、ウォーター フォール開発が公式として主流であることから、駆動という言葉を使って強く 主張することはよいでしょう。 それ以外(グリーン、リファクタリング)については、あえて説明しなくても自発的 にできます。 テスト スイートを開発すれば、レッド、グリーンは必ずあります。 リファクタリングは、ツールの発達はありますが、エクセルの集計機能のような 機能であって、習得すべき方針や技術ではありません。 [*1] テスト駆動開発、ケント・ベック著、2003、まえがきp5、978-4894717114 [*2] 同上、p135 注目ニュース 一覧 ◇ Google、Android Studio 2.0 安定版を公開。 http://www.forest.impress.co.jp/docs/news/20160408_752362.html … Instant Run機能でちょっとした変更は素早くアップロード。 ◇ 次期バージョンの Microsoft Edge ではVP9-Opusを利用したWebM形式をサポート。 http://www.forest.impress.co.jp/docs/news/20160419_753996.html … ゲーミング PC でないと、重たいらしい。 ◇ VR空間へ自由にウィンドウを展開できる仮想デスクトップアプリ Virtual Desktop。 http://www.forest.impress.co.jp/docs/serial/oculusclub/20160412_752781.html … 解像度が HD より少ないから、解像度が低い PC として使うことになる。 ◇ マイクロソフト、プラグインフリー版 Skype for Web をプレビュー公開。Web標準のORTCでSkypeを実装。 http://www.publickey1.jp/blog/16/skype_for_webwebortcskype.html … YouTube のように、動画の中に広告を入れてきそう。 ◇ FBIの iPhone ロック解除、ハッカーからの協力で成功か。 http://japan.cnet.com/news/service/35081159/ http://japan.cnet.com/news/society/35081638/ … 賞金稼ぎに約1億円。 ◇ Google AlphaGoの仕組みを理解する。AI技術は今、どこまで進化したのか? http://it.impressbm.co.jp/articles/-/13474 … 常識外れな局面ではまだ弱い。 ◇ クラウドサービスの短縮URL、情報流出のリスク--研究者らが指摘。 http://japan.cnet.com/news/service/35081341/ … 短縮URLは、秘密情報の場所を公開しているようなもの。 ◇ くまモン、震災支援活動でのイラスト利用が許諾不要に 県が特例措置。 http://www.itmedia.co.jp/news/articles/1604/19/news095.html … 悪意のあるくまモンに騙されるな。 ◇ 肌に貼れる有機ELディスプレイ、東大が開発 脈拍数など表示。 http://www.itmedia.co.jp/news/articles/1604/19/news091.html … プライバシーの問題が大きい。 ◇ EU、グーグルに異議告知書を送付 Android の独占的地位を乱用の疑い。 http://japan.cnet.com/news/business/35081526/ … デフォルト ブラウザーの問題が、今度はグーグルに。 ソフトウェアデザイン館 Sage Plaisir 21 ホームページ >>> http://www.sage-p.com/ メルマガ >>> http://www.mag2.com/m/0000083983.html ブログ >>> http://blog.livedoor.jp/sage_p/ ツイッター >>> http://twitter.com/Ts_Neko ダウンロード >>> http://www.sage-p.com/freesoft.htm サポート掲示板 >>> http://www.sage-p.com/kg_ban09/z6037C8.cgi 東日本大震災 >>> http://www.sage-p.com/saigai.html メール >>> ts-neko◇sage-p.com ←◇を@に変えてください 緊急メールは件名に「うどんメール」を付けてください。 このメルマガの登録・解除 - http://www.mag2.com/m/0000083983.htm