ペア構成テスト技法とTDD

ペア構成テストをTDDに使うのは有効か?という議論についてまとめました
10
きょん@アジャイルコーチ、システムアーキテクト @kyon_mm

だれか、HAYST法でTDDとかやらないかな [うさみみ*´×`*エンジニア]

2012-05-31 01:04:38
goyoki @goyoki

HAYST法っていうか、ペア構成テストの技法の多くはTDDでは使いにくいよ。基本自動化されているから直交表等で間引く必要性があまりない、1テストケースがRED>GREENのサイクルに対応しない、一手間かかってスピード落ちる、テストケースの存在意義や意味を読み取りにくい、な理由で

2012-05-31 01:15:08
goyoki @goyoki

Slow Test対策や大規模な自動テストなら有効だけれども。ただそれでも直交表よりall pair法の方がツール自動化の恩恵を受けれて使いやすい

2012-05-31 01:16:29
goyoki @goyoki

HAYST法のさっきのつぶやきは、HAYST法の本でも触れられてるな

2012-05-31 01:18:59
あきやま🍠 @akiyama924

@goyoki 使いにくいというよりも、TDDのTestで使いません。ペア構成テスト(HAYST法含む)はパラメータ間に関係がない(直交している因子)を組み合わせて本当に関係が無いことを検証します。「関係が無いことを定義してから、関係の無いこと開発しよう」なんてするわけもなく…。

2012-05-31 06:21:30
あきやま🍠 @akiyama924

@goyoki TDDでリファクタリングした後にデシジョンカバレッジを100%網羅するテストを書く人がいたとします。もうちょっと深いテストを作りたいなという時にデシジョンを因子に、そのTrue/Falseを水準にしてL4直交表を横並びにして4回のテストを作る方法があります。

2012-05-31 06:26:21
あきやま🍠 @akiyama924

@goyoki これは、あるデシジョンと、その前後4つのデシジョンとのペア網羅を実現します。なんて使い方はall pair法ではないので直交表が便利に使える場面です。all pair法が嫌いなわけじゃないですよー。それぞれ使いどころがあるので便利に使いましょうと言う話です。為念。

2012-05-31 06:29:51
細谷泰夫 @yasuohosotani

@akiyama924 @goyoki 過去の他人が作ったレガシーコードに対してとりあえず直交表でインプットを作ってテストしてみるというのはやったことあります。

2012-05-31 06:32:16
あきやま🍠 @akiyama924

具体的に書くとこういうことです。例えば、ある処理にif文が15個あったら、それぞれを上から順番に因子として見立ててTrue/Falseになる条件をL4直交表を横並びにつなげて組合せを作ります(水準集約法)。 http://t.co/0jjfibX3

2012-05-31 06:43:06
拡大
あきやま🍠 @akiyama924

そうすると、こういう網羅性を持つ表となります。全体が100%ではなく、例えば、if文6に着目すると、if文の4と6、5と6、6と7、6と8のそれぞれのTrue/Falseの組合せが出現します。 http://t.co/iEXUgCai

2012-05-31 06:47:27
拡大
あきやま🍠 @akiyama924

近いところ(前後2つずつ)とのif文との条件網羅を取っているわけです。このテストが有効となる前提は、「近い位置にあるif文は関係性が強い」です。コンポーネントテストでしても良いと思います。

2012-05-31 06:50:12
goyoki @goyoki

@akiyama924 勉強になります!表の作り方は簡便でいいですね

2012-06-01 02:58:08
goyoki @goyoki

@yasuohosotani @akiyama924 組み合わせバグをつぶせそうでいいですね。自分も継続的な回帰テストではペア構成テストの技法使っています

2012-06-01 03:00:05
goyoki @goyoki

@yasuohosotani @akiyama924 TDDとの関係については同意です。確かに無則や直交する因子の組合わせだと、テスト書いてもバグでない限り開発進められませんね・・。細谷さんが言われている通り、活用の余地ができるのがリファクタリングやCIへの組み込みあたりですね

2012-06-01 03:12:46
goyoki @goyoki

@akiyama924 直交表の使いどころも勉強になります。確かに直交表を簡便に確保できるなら、組み合わせのばらつきを整えられてall pair法よりいい場面ありますね

2012-06-01 03:20:55
goyoki @goyoki

直交表奥が深いですね。複数因子があれば単純に2因子間組み合わせ網羅、でなくて、「近い位置にあるif文は関係性が強い」のように実情に合わせて組み合わせ網羅を調整していかないといけないのですね・・ https://t.co/1HuzF5co

2012-06-01 03:28:59
goyoki @goyoki

やっぱりテスト設計は事前のテスト分析が超重要であると思い知らされる

2012-06-01 03:30:00
あきやま🍠 @akiyama924

@goyoki 前後2つずつでなく、前後3つずつにしたいなら、all pairで4つの因子で種となる表を作って、それを水準集約法で横連結してやればよいのです。 http://t.co/CBLlgxfP

2012-06-01 06:06:20
拡大
あきやま🍠 @akiyama924

@goyoki できた、総当たり表はこちらにになります。赤く囲ったところをみてもらうとわかるけど、前後3パラメータそれぞれとの条件組合せがあらわれています(性質から当り前だけれど)。 http://t.co/qiYvcPY5

2012-06-01 06:07:55
拡大
あきやま🍠 @akiyama924

@goyoki はい。JSTQBのテストの原則にあるように「テストは条件次第」ですから条件に応じて、「そのテストに求められている網目の細かさ」をコントロールできる技術が大切です。そのためのテスト分析でもありますね。

2012-06-01 06:12:09