TDDという言葉は呪われている

引き続きTDDBCネタ。
Advent Calender全部俺とか昨日覚えた言葉を使いたいところだが、ネタもしくは自分の勤勉さが続くか心許ないので言わない方向で。

「テスト」という言葉の混乱

これは和田さんの講演の最初の方から。

  • テストという言葉の指すものがバラバラ
  • 会社によって語彙がバラバラ
    • 単体、ユニット、結合(といいつつ結合テストは割とどこでも指すものが一致している)
  • テスト範囲による分類は曖昧で限界がある。話がまとまらない。

そこで再分類のための視点を探す。

「誰が、何のためにテストを行うのか」という視点

  • DeveloperTesting: 開発者が 開発促進のために
  • CustomerTesting: 顧客(のロール)が 進捗管理のために 世に言う「受け入れテスト」
  • QATesting: 品質保証担当者(のロール)が 品質保証のために

TDDはDeveloperTestingの領域にある。

DeveloperTestingとは

  • プログラマの
  • プログラマによる
  • プログラマのための
  • プログラムとしてのテスト書き「ながら」
  • 開発を行っていく手法

TDDは品質保証の技術ではなくソフトウェア開発を促進するための技術。

雑感

このあたりはイントロダクションとして非常に重要な話。
「テスト」という言葉の呪縛から参加者を解き放つ解呪の儀式的な。

TDDという言葉は呪われている

という発言があったのは午後のディスカッションの際。

@t_wada:

  • TDDは品質保証の技術ではなくソフトウェア開発のための技術

@mikantsuki:

  • 「テスト」って言う言葉に振り回されてしまう
  • そこでBDDという言葉が出てきた
  • TDDは開発スコープすべてをカバーするモノではなく そもそもXPのプラクティスのひとつ

@t_wada:

  • BDDという言葉が出たので補足
  • BDDは呪われている言葉 TDDという言葉自体が呪われている
  • BDDという言葉も腐ってきている
  • TDDは何もテストしてないじゃないか、うんそうだねって言う話が2004くらいにすでに行われていた
  • 初期のBDD
    • じゃあTDDじゃなくてBDDって呼ぼうぜ TestというよりBehaviorだし
      • Behaviorの指しているものがもやもやしていて流行らなかった
      • コードの書き方としては残った RSpec等
  • やがて新たなるBDDの定義が出てきた
    • ユーザーストーリーに対して自然言語がそのまま受け入れテストで動くようなもの(Cucumber等)がBDDとなぜか呼ばれ始めた。

@kis:

  • 自分がBDDと思っていたのは新しい方のBDD

この辺りのTDDやBDDという言葉のたどった経緯の話はとても興味深かったので抜粋してみた。
リアルタイムで書き落とした内容なので間違いや勘違いがあればご容赦を。

まー、言葉の定義ってのは難しいもんですね。