Python
テスト
静的解析

MC/DCのフェイクバージョン

ここで告白しますが、私は私のクライアントを欺いたことあります。

もちろん悪意を持ってだまさではありません。テスト設計技法の中で、MC/ DCが難しく、これはツールを使用して、ほとんど実行することを見せようした心が急みるMC/DCを「実装ふり」するロジックを作りました。

原理は難しくなかったんです。

1.各条件節の部分を抽出する。

2.条件節の構成パターンを分析する。

3.構成パターンに合わせて、MC/DCの結果をパターン別に事前に保存して合う結果を探し、変数だけ変えて代入してMC/DCの結果を仕上げる。

4.条件節ごとに見つかったMC/DC結果をOne-Wayの組み合わせで最終仕上げ。

4番は前にある程度の努力して実装されたので、2,3回の実装をすると「実装ふり」することを作ることができるかなとおもいました。

だから、実際に作ったのがpyinstallerを利用したApp(PC、Mac)版であり、これをgithubに上げました。ソースコードははずかしくて除きました。 1

この方法の限界は...皆さんもすぐ予想できるかもしれませんが、さまざまな条件のパターンのすべてのMC/DCの組み合わせの結果を全部保存して持つのは不可能です。制限をかけなければなりません。

だから、私は条件構造から体調3個まで可能なもので制限を置いた。すなわち


A and B

A or B


の各MC/DCの結果と


A and B and C

A and B or C

A or B and C

A or B or C


の各MC/DCの結果を事前に保存していて、このパターンの中のマッチングがされると、MC/DCの結果を返しそうでなければただSkipをする…そんなちゃちなロジックでした。 2

当時には、MC/DCをプログラミングで具現するロジックはないと思って、ほとんどのテスト設計ツールは、このようにMC/DCの計算を行うこと誤判に陥っていました。しかし、これは、次のインド系の人が作ったツールを見ながら間違っていることはすぐにわかりました。

http://aerotools.blogspot.com

こちのツールを実行をさせてみると、logファイルが残るのに、Python + wxPythonで作ったぽいです。このプログラムは、単一の条件のみの分析が可能ですが、条件節内のコンディションの数の制約なしに、MC/DCの結果を計算してくれます。何かプログラミングでこれを具現するロジックがあることを示しています。この時から、プログラミング的にMC/DCを実装するためのロジックの実装に没頭していたようだ。 3

結果を出すために、上記Fake MC/DCアプリを持ってシュード・コードを作成してくることができるMC/DCケースを適用し、結果はどのくらい出てきて終えることができました。私はガイドをするとき、シュード・コードの条件節のコンディションの数は三つ以上しないようにしましたから...

今では、私の結果を書いてくれたクライアントには申し訳ない気持ちだが、当時の無謀でした、このような試みが後に発展を牽引していただろうかと思われます。





  1. もちろん、今はすべて削除された状態だ。 



  2. 括弧がある場合は、順序を変更した。たとえばA and(B or C)はB or C and Aに変更して、パターンを計算した。 



  3. 後で別の投稿を書きますが、結局はロジックを見つけて完成した。このロジックが反映されたバージョンがanalyzingcontext.comに反映されている。