What is it, naokirin?

TDDのテスト vs. QAのための単体テスト について考えてみた

最近ソフトウェアテストについての知識を深めようと頑張っている中でTDDのテストとQAのための単体テストの差というものを考えてみたくなりました。

もちろんこれらが違うものであることは認識にあったのですが、より正確に認識するために、そして人に聞かれて納得できる説明ができるように自分の中で整理してみることにしました。ここで書くことは私の独自見解であったりするので、「ここは違う」だったり、「そこはこうじゃないか」といった意見があればコメントなどに書いてもらえると幸いです。

TDDのテスト vs. QAのための単体テスト

とりあえず最初にそれぞれのテストについて雑多に書きだすことにしてみました。ただ現状TDDはいろいろな解釈や派生形があることを考慮して、まずはKent Beck氏のテスト駆動開発入門で書かれていたTDDを元にして考えていくことにしました。

TDDのテスト 単体テスト
コーディングのため 品質(保証)のため
開発促進のため 欠陥を取り除くため
リファクタリングのため 品質確認のため
テストファーストで行う コーディング後に行う
詳細設計によるテスト 単体テスト設計によるテスト
設計技法としてのテスト 検証と妥当性確認のためのテスト
開発者が即座にフィードバックを得るため
プログラマのためのテスト
三角測量

まだまだあると思うのですが、テストに焦点を当てた場合に思いつくのはここまででした。

ここまで書きだして、やはり違いとして大きい点は「何のためか」という点でした。
書きだしていった中でも「〜ためのテスト」というフレーズが多くなっていました。

他に気になった点としてはTDDでは単体テストの設計があるかどうかはわからないため、基本的には詳細設計をもとにテストコードが書かれる可能性も十分にあるということでした。この点はVモデルやWモデルと言った開発モデルによってできるかどうかに大きな差がでるのではないかと思いました。

そして最後にTDDのテストは原則に則って行った場合、「三角測量」で作られていることが非常に気になりました。
「三角測量」で作ったテストは基本的には「同値分割」としてのテストが行えること以外保証できていないことに気が付きました。もちろんプログラマー自身が境界値分析などを無意識に行ってそれがTDDのテストコードに反映されている可能性もあると思いますが、基本的にはそれは保証されていないということがあるのではと思いました。


このあたりを考えているときに@kyon_mmさんから

というツイートをもらいました。

このあたりはあまり詳しくないのでまだまだ知識不足でしたが、TDDのテストとQAの単体テストの差を意識すると逆によりTDDのテストを良く書くための方向性が見えてきた気がしました。

以上、雑記でした。


追記:
その時気が付いていなかったのですがTwitterでリプライをもらっていました。QAテストに関してすごく有用な情報だと感じたので追記で載せさせてもらうことにしました。

感覚で書きだしていたので、知識が足りてない部分が露呈した気がします…。
Wモデルの場合はテストが先にあるはずなのでどちらかと言うと「TDDでは“必ず”テストファーストのはず」というのが大きくて、単体テストの場合は「必ずしも先にテストがなくてもいい」という程度だった気がします。リプライありがとうございました。