SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

C#で始めるテスト駆動開発入門

TDDで仕様変更とデバッグをする方法

C#で始めるテスト駆動開発入門(4)

  • X ポスト
  • このエントリーをはてなブックマークに追加

デバッグ(その2)

ある日の夜

新人テスター「あの、b先輩。バグ票です…」
b君「ご苦労さま。あ、1枚だけ? じゃ、内容を140字以内で説明してみて♪」
新人テスター「ええっと…。12を入れると、"Fizz"のはずが、"Buzz"が出てきます」
b君「了解。よく見つけてくれたね、ありがとう」(よしよし、ちゃんと入力・期待値・実際の出力を区別して言えるようになったな!)
新人テスター「あの…、チーフが今日中にと…」
b君「あー、たぶん僕の単純ミスだからすぐ直ると思うよ。そう伝えておいて」

 b君は、12のときのテストケースを書いた覚えがあったので、たぶんそのテストケースを書き間違えた単純なミスだろうとアタリを付けています。前述したテストケース漏れでなければ、バグの原因はテストケースの誤りにあるはずです。まず、そのテストケースを見つけます。

バグの原因となったテストケース
[TestCase(12, "Buzz")]

 たしかに間違えています。12のときは"Fizz"が返らなくてはいけませんね。テストケースを修正して、バグを再現させます。

テストケースを修正してバグを再現させる
[TestCase(12, "Fizz")]

 テストケースを修正したら、予想通りのREDになることを必ず確認します。

REDになり、エラー内容は報告されたバグと一致する
CsTdd04.FizzBuzzTest.FizzBuzzerTest.SayTest(12,"Fizz"):
  String lengths are both 4. Strings differ at index 0.
  Expected: "Fizz"
  But was:  "Buzz"
  -----------^

 報告されたバグを再現するテストケースができました。これを含めてオールGREENにできれば、バグフィックスは完了です。直すのは簡単ですね。では、製品コードを修正します。

変更したテストケースをGREENにするための修正
public string Say(int n) {
  // 略
  switch (n % 15) {
    case 3:
    case 6:
    case 9:
    case 12:   // ←追加
      return "Fizz";
    case 5:
    case 10:
    //case 12: // ←削除
      return "Buzz";
    // 略
  }
}

 これでオールGREENになったので、デバッグ完了です。なお、今回の例では、リファクタリングが必要な場面が出てきませんでしたが、実際の開発ではデバッグの前後にリファクタリングをすることもよくあります。

 注意点としては、デバッグ中(再現テストを書いてREDになっている間)はリファクタリングしてはいけません。リファクタリングはオールGREENを維持しつつ、実装を改善するものだからです。

まとめ

  • 仕様変更も、新仕様を表現するテストケースを書いて、RED ⇒ GREEN ⇒ リファクタリング
  • デバッグも、バグを再現するテストケースを書いて、RED ⇒ GREEN ⇒ リファクタリング
  • 最小限のテストケースと、テストコードも含めたリファクタリングによって、変更時のテストコードの修正量を減らすことができる

 説明に使ったサンプルコードはあまりにも単純なものなので、実際の開発ではこれほど簡単にいかないことも多いでしょう。1つの仕様変更のために修正すべき製品コードのメソッドが数十にも及ぶとか、1か所バグを修正したら何十ものテストケースがREDになるとか、そんなこともあります。それでも、原則は変わりません。まずテストケース(外部設計)を変更し、それから製品コード(内部設計)を修正します。

修正履歴

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
C#で始めるテスト駆動開発入門連載記事一覧

もっと読む

この記事の著者

biac(ばいあっく)

HONDA R&Dで自動車の設計をやっていた機械屋さんが、技術の進化スピードに魅かれてプログラマーに。以来30年ほど、より良いコードをどうやったら作れるか、模索の人生。わんくま同盟の勉強会(名古屋)で、よく喋ってたりする。2014/10~2019/6 Microsoft MVP (Windows Devel...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6590 2012/05/29 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング