Pairwiseテストのfactor/levelをTDDに適用することの是非

3
新米医療情報技師 @Kengo_TODA

@PoohSunny @Morlin1129 @gen_84 Pairwise test のfactor/levelをtddにおけるテストケース作成に使うのはアンチパターンだ!みたいな話って聞いたことありますか?Pairwiseってtddよりはバグ出し向きという先入観があります。

2013-10-06 20:20:47
新米医療情報技師 @Kengo_TODA

@PoohSunny @Morlin1129 @gen_84 個人的には粒度が粗すぎるものの悪くない方法だと思ってて、特に新人さんに「何を保証すべき・確認すべきか」を体系的に考えてもらうきっかけとして優れてるのではとの仮説を持っております。

2013-10-06 20:23:41
Yotaro TAKAHASHI @PoohSunny

@eller86 @Morlin1129 @gen_84 まず私の知る中ではアンチパターンとは聞いたことはありません。個人的には、効果的なテストケースの実行ができるので、tddするときも予め頭に入っているとすごく良いと思います。(つづく)

2013-10-06 20:29:34
モリリン @Morlin1129

@eller86 @PoohSunny @gen_84 わたしも聞いたことないですね。むしろペアワイズはUnitTestのほうが使い勝手いいかもと言う話をしたことがあるくらいなので、考えたことがなかったなぁ

2013-10-06 20:35:01
Yotaro TAKAHASHI @PoohSunny

@PoohSunny @eller86 @Morlin1129 @gen_84 (つづき)ただし、それをもとにtddしようとすると、おそらく予め複数のテストを書いて赤くしておくことになる気がします。しかもそれらの値の組み合わせは直感的にわかりにくい。(つづく)

2013-10-06 20:40:43
Yotaro TAKAHASHI @PoohSunny

@PoohSunny @eller86 @Morlin1129 @gen_84 そうなると、tdd的には『一度に複数のものを相手にしすぎ』な気がします。tddはあくまで開発促進のための手段なので、一個一個順番にフォーカスしていくほうがいいと考えています。

2013-10-06 20:42:48
Yotaro TAKAHASHI @PoohSunny

@PoohSunny @eller86 @Morlin1129 @gen_84 (つづき)逆に、そのあたりのテストケースの作り方が工夫できて、リズム良く、小刻みにRed Green Refactoringが回せるなら、積極的にやればいいと思います。(つづき)

2013-10-06 20:44:44
Yotaro TAKAHASHI @PoohSunny

@PoohSunny @eller86 @Morlin1129 @gen_84 個人的な感覚から言うと、そういうテストケースに工夫していいtddのリズムを保つことは、結構レベルが高いかな、と思います。なので、とりあえずペアワイズとかは気にせずtddして、ソースをプッシュする際や

2013-10-06 20:46:27
Yotaro TAKAHASHI @PoohSunny

@PoohSunny @eller86 @Morlin1129 @gen_84 レビューする際に、ペアワイズ法でテストケースの圧縮(残さなくてもいいテストを削る)とかするのがいいかな、と思いました。長くなってしまいましたがおしまいです。

2013-10-06 20:47:24
新米医療情報技師 @Kengo_TODA

@PoohSunny @Morlin1129 @gen_84 なるほど、悪くはないがリズムが狂うのではという懸念ですね。ありがとうございます。気にしてみます。

2013-10-06 20:47:25
きょん@アジャイルコーチ、システムアーキテクト @kyon_mm

ペアワイズ法がUnitTest向きってどういう意図なんですかね。。。あんまり理解できないな。 [休眠*´×`*エンジニア]

2013-10-06 20:48:06
Yotaro TAKAHASHI @PoohSunny

@eller86 @Morlin1129 @gen_84 その通りです。特に新人さん向けにtddを伝えるなら、まずはリズムを大事にしたほうがいいと思います。効果的なテストに昇華させるのは次のステップだと考えています。

2013-10-06 20:49:22
きょん@アジャイルコーチ、システムアーキテクト @kyon_mm

因子間の値が結果において直交するときにおいて、因子数増加によるテスト件数増加を比較的ゆるやかにしたいという欲求を満たしやすいのがペアワイズなわけであって、ユニットテストでそういったテストをしたほうがよい場面があるのかな。 [休眠*´×`*エンジニア]

2013-10-06 20:50:38
きょん@アジャイルコーチ、システムアーキテクト @kyon_mm

とりあえずペアワイズを先にやることでバグのあたりをつけるとかはできるかもしれないけれど、ユニットテストくらい小さいものにおいて因子の影響範囲ってあたりをつけるとかそういうことができる範囲なのかわかりにくい気がする。バグが出ればそれでよいのかもな。 [休眠*´×`*エンジニア]

2013-10-06 20:53:15
Yotaro TAKAHASHI @PoohSunny

@eller86 @Morlin1129 @gen_84 あ、それもそうかもですね。ならふっかけても良いかもです。最終的に自分の型を見つけられればそれでいいと思うので。

2013-10-06 20:53:48
新米医療情報技師 @Kengo_TODA

@PoohSunny @Morlin1129 @gen_84 あと、Javaでテスト可能な実装を考えるとやはりDIかつSRPが中心になるので、早い段階で責務の数と種類を認識することが大切だと考えてます。factorを意識することはこの一助になるので、早めに考えて欲しいかなと。

2013-10-06 20:54:26
Yotaro TAKAHASHI @PoohSunny

@kyon_mm 待ってました(タイミング的にも内容的にも)! 識者からのコメントうれしー!

2013-10-06 20:54:59
新米医療情報技師 @Kengo_TODA

@PoohSunny @Morlin1129 @gen_84 リズムというのは気にしたことがなかった(やれて当然というバイアスがあった)ので、次クールから優先度上げて見て行きます。ありがとうございます。

2013-10-06 20:56:03
きょん@アジャイルコーチ、システムアーキテクト @kyon_mm

ユニットテストのレビューで境界値を綺麗に並べたペアワイズであるということをどれくらい意識的にできるのか難しいような気がした。対象関数のレイヤーにもよるよなぁ。パブリックというかユーザーに近いレイヤーであれば効果が大きいけど、小さい関数だと辛いだけでは [休眠*´×`*エンジニア]

2013-10-06 20:58:06
Yotaro TAKAHASHI @PoohSunny

@eller86 @Morlin1129 @gen_84 はーい! 私の知る識者からもコメントをいただいてますので、適宜そちらもご参考にしていただければと思います!

2013-10-06 20:58:40
新米医療情報技師 @Kengo_TODA

@PoohSunny @Morlin1129 @gen_84 きょん氏のみ観測してますので、他にいらしたら教えてください。

2013-10-06 20:59:48
Masaki Kase @softest

@kyon_mm 微則を狙った組合せテスト(ペアワイズ等)がユニットテストで有効だとすると、そのユニット内がまだ最小単位にできていない、とも取れますよね。なので、ペアワイズはより大きな範囲で効果的、だと思います。

2013-10-06 21:00:15
Yotaro TAKAHASHI @PoohSunny

@eller86 @Morlin1129 @gen_84 あ、そちらのお方で大丈夫ですー!

2013-10-06 21:00:35
きょん@アジャイルコーチ、システムアーキテクト @kyon_mm

つまりは、ペアワイズしないといけないくらい関数が大きいのはある程度責務の大きい関数なわけで、そうではない場所で「ずっと残そうと思って書いたテストコード」としてペアワイズを書くのは負債になる可能性がでかい。気がする。 [休眠*´×`*エンジニア]

2013-10-06 21:00:41