|
/*========================================================*/ <<<あゆしゃのC言語プログラミング>>> /*========================================================*/ 第380回 XP3 テスト駆動開発 発行 2003年8月27日(水曜日) 発行数 約3200 {magclick} {magclick} /*========================================================*/ はじめに ( 決り文句 ) /*========================================================*/ ・このメールマガジンはまぐまぐさんから発行しています。 ・ジャンルは、マルチメディアのプログラム、C言語です。 ・このメールマガジンは、横60文字で作成しています。 また、インデントはすべて半角スペース4つで構成しています。 ・ここで扱うプログラムは、C言語と半光年以内のものです。 ・登録解除は、まぐまぐさんのホームページでお願いします。 ・まぐまぐさんのバックナンバー(下欄参照)を活用して下さい。 ・ここは私の復習の場です。内容は約1ヶ月内外に私が勉強した 内容になっています。最新の技術があれば、へたれもあります。 ・わかりやすさを優先させる為、たまに嘘があるかもしれません。 /*========================================================*/ ご挨拶 /*========================================================*/ こんにちは。あゆしゃです。 先日、レンタルビデオにて新生ネバーエンディングストーリー の第1章をみました。 よくもまぁあそこまで、原作を愚弄できるものですねぇ。。 これもハリウッドでしたでしょうか? しかしハリウッドの 最近の愚弄振りはすごいですよねぇ。 バットマンは愚弄しすぎて製作禁止になりましたしねぇ。 ザリングにいたってはホラー映画、ジャンルが違うじゃん。 日本版のリングは、95%つまらないのですが、残りの5%が すごく好きです。 それはリングがホラーではなくミステリーだからです。 それをホラーにするなんて。いったい何を考えているのやら。 まぁ、私はミステリーやホラーは好きではないのでどうでもいい といえばどうでも。。。 {magclick} /*========================================================*/ 今回のお題 << XP3 テスト駆動開発 >> /*========================================================*/ まずは12回分の連載の内容についてまとめます。 1 XPって何? 2 ペアプログラミング 3 テスト駆動開発 4 短期リリース 5 ユーザテスト 6 全員同席 7 最適ペース 8 コード共同所有 9 常時結合 10 リファクタリング 11 シンプル設計 12 計画ゲーム 私の好きな順番で並べました。 XPを知っている人はメタファという項目がないなぁというかも しれませんが、つまり私が嫌いということです。勘弁ください。 コーディング規約という項目もあるのですが、現状においても 当たり前であることなので、あえてはずしました。 そのほか、リリース計画やイテレーション計画もありませんが、 これらは総合的で高度な項目なので、はずしました。 (すいません、本当は12という計画に入らなかった為です) さて、今回は3番ですね。 /*========================================================*/ 3 テスト駆動開発 /*========================================================*/ V字曲線というものを知っているでしょうか。 要求仕様書 要求テスト仕様書 ↓ ↑ 外部仕様書 外部テスト仕様書 ↓ ↑ 内部仕様書 内部テスト仕様書 ↓ ↑ 詳細仕様書 → 詳細テスト仕様書 というようなカーブのことです。 このように、仕様書とテスト仕様書はついになるべきものです。 (テスト仕様書の名称には、いろいろと方便があるでしょうから、 ここでは無理やり仕様書の名前と合わせました) そしてこの2つを同じ高さに並べて、開発を進める順番に線を 引くと、V字になります。 これがV字曲線です。 まぁそれはともかく、プログラムを行うときに、何を見て 作業を行いますか? 仕様書でしょ、普通? しかしXPでは、それが駄目だというのです。 /*========================================================*/ XPは、プロジェクト計画の数ある失敗例をもとにして作られて います。 切羽詰ったプロジェクトはまず、テストをなーなーにします。 まったくしなかったり。したと偽ったり。 テスト駆動開発は、テストという工程が軽視される現実を問題 として、テストが軽視できないルールとして作られました。 どうすれば軽視されないかというと、コーディングよりも先に テストを行う、というルールにしたのです。 /*========================================================*/ コーディングを行う前に、仕様書を見ます。 そしてその仕様書をもとに、コーディングを・・・ するのではなくて、テスト仕様書を作ります。 そしてコーディングは、テスト仕様書に書かれているテスト項目 をパスすることを目的として行います。 通常は仕様書どおりにコーディングすることを考えるでしょうが それに問題があるというのです。 バグも問題の1つですが、作ったら満足して実行確認をしなかっ たり、その実行確認が不十分だったりしがちです。 しなかったというのはともかくとして、実行確認が不十分という のは、仕様書を見ながら頭の中でテスト項目を作り、それを確認 するだけで済ませてしまう、という単体テストの方法によります。 よってXPでは、まずテスト仕様書を作りなさいと教えています。 /*========================================================*/ テスト駆動開発というのは、なんだか画数が多くて分かりづらい 名前ですね。 ちなみに「てすとくどうかいはつ」と読みます。念のため。 ようは、テストが常に行われている開発、ということです。 テストが軽視されていません、ということですね。 少し前は、テストファーストという名称でした。テストを先に、 という、まったく分かりやすい名称です。 テストファーストの何がいけなかったのか、アカデミックでは ないのが気に入らなかったのでしょうか、今はテスト駆動開発と 言われています。 作るよりもテストが先では、何だ、常に欠陥品であり続けると いうことなのか、とかいうイチャモンでもついたのでしょうか。 /*========================================================*/ 皆さん、ある機能を修正する場合にはどうしますか? さすがにいきなり機能を修正する人はいませんよね、念のため。 まずは現状を把握し、次に修正箇所を確認し、修正内容を構築 し、そして修正を行い、最後に確認、しますよね。 テスト駆動開発は、まったくこのとおりなのです。だから、 上記の修正手順を踏んでいれば、もう、テスト駆動開発なんです。 /*========================================================*/ テスト駆動開発を行う場合、 ・機能内容を仕様書から把握 ・機能が実装されていないことを確認 ・機能に対するテスト仕様書を作成 ・テスト仕様書を満足するコーディングを行う ・テスト・デバッグを実行する という流れになりいます。 まだ機能を作っていないから機能が実装されていないことを 確認する必要はあるのでしょうか? 大有りです。 それを怠ったために、私は何度失敗したことか。。。 それにやってみて、この機能が実装できる状態であるという 判断をやっておく必要もあります。 「ちょっとこのサーバのコード、コンパイルが通らないジャン!」 なんてことがあるかもしれません。十分ありえる話です。 なんどそういうソースをサーバに入れて失敗したことか。 100行コーディングしてもコンパイルエラーを出さない妙な 自信があるので、コンパイルせずにアップするのですねぇ。 バカですねぇ。 は〜い、バカです。最近ONEPIECEにはまっているからかな! /*========================================================*/ 冗談はともかく、機能を実装していない状態でテストをパスする こともありえます。 たとえば、えーと、おもいつかんなぁ。。。やばっ。。。 あるんですよ! あ、思い出した、ほかでダミーコードが生きていて、見た目的に この機能が動いているっぽい状態にあるときです。 つまり追加した関数が呼ばれもせず、でもなんだか1発で動いた なぁ、ぼくは天才だなぁ、えっへん、なんて状態になると、将来 大変なことになるでしょう。 <納品後の怖いお話> 「ちょっと、この機能不十分だよ」 「ええ、ちゃんとテストはOKだったのに」 「ブレイクをはってみようか」 「あれ、ブレイクとまらんやん・・・えーなんで?」 「呼び出し元でとめてみて、あ、ダミー関数使っているよ」 「ぐは、まじ? じゃ、ちょっと、呼んでみようか」 「うあ、ダミーよりひどいやん・・・」 「どうしうよう、報告する?」 「うーん、○○さん、電話で怒鳴り散らして、そんな雰囲気じゃ ないしなぁ、夕方ぐらいに」 (そして夕方) 「○○さん、ちょっと落ち着いたみたい」 「実はこうこうこうで・・・」 「昼過ぎにユーザさんに言われたよ」 なんて。ちなみに実話ではないことを望む。 /*========================================================*/ テスト駆動開発により、ソースと一緒にテスト仕様書と、その チェック結果が残ります。 ソースが動作するかどうかは、チェック結果によって証明し ます。 テスト仕様書がないと、口頭で「チェックしました」なんて 報告になりますが、 この報告を信じた人が何万人不幸になったことか。 発覚したころにはいないんだよね、外注さんって。 /*========================================================*/ ペアプログラミングよりも単純なプラクティスですよね。 /*========================================================*/ さいごに /*========================================================*/ 参考文献 よくわかる最新XPの基本と仕組み 長瀬嘉秀 監修 畑田成広 樋口博昭 著 秀和システム ISBN4-7980-9374-3 1900円(税別)(ただし支給品) {magclick} /*========================================================*/ 次回予告 /*========================================================*/ 次回は8月29日(金曜日)に、第381回を送ります。 お題は「XP4 短期リリース」 まだヴィオのアトリエにいそがしいので、周一といたしたい ところですが、そうはいってはいられない事態になりました。 上司の命令により、あゆしゃは9月20日にXPの社内テストを 受けなければなくなりました。 そこでこの1ヶ月の間、囲碁の話題を中断して、1ヶ月12回に わたって、XPの特集を行います。 次回は短期リリースについてです。 お楽しみに! /*========================================================*/ 最後の決り文句 /*========================================================*/ このメールマガジンは、まぐまぐさんから発行しています。 このメールマガジンを解除したい場合は、まぐまぐさんをご利用 ください。このメルマガのまぐまぐアイディーは最後にあります。 このメールマガジンには広告が挿入されます。 このメールマガジンの内容に文面の引用はありません。 めーらっくすの場合はめーらっくすの利用方に従ってください。 このメールマガジンの内容は、転用、流用、宣伝、リンク、 論理的に理由があるからミステリー。 なんて大歓迎です。 {magclick} /*========================================================*/ /*========================================================*/ 発行者 あゆしゃ まぐまぐアイディー 0000020674 まぐまぐバックナンバー http://jazz.tegami.com/backnumber/frame.cgi?id=0000020674 あゆしゃの世界 http://ayusya.hp.infoseek.co.jp/ 登録と解除 http://www.mag2.com/m/0000020674.htm ご意見・ご感想・ご質問メール mailto:ayusya@flamenco.plala.or.jp めーらっくす http://www.mailux.com/mm_dsp.php?mm_id=MM3E1AEE285AB4F |