2015年12月8日火曜日

ミューテーションテスト

●テストの評価基準
[1] テスト網羅率
  • ステートメントカバレッジ (C0)
  • ブランチカバレッジ (C1)
⇒テストカバレッジではテスト網羅率の評価のみで、バグ検出能力は評価できない。

[2] バグ検出能力
  • ミューテーションテスト
ソースコードの一部を機械的に変更し、改変されたことをみつけられるかを計測する事で、バグ検出能力を評価する。



<用語の説明>
  • ミュータント ・・・ ソースコードを機械的に変更する事で埋め込まれた因子(不具合)
  • ミューテーションオペレータ ・・・ ソースコードを変更するルール(※1)
  • ミューテーションスコア ・・・ 対象のテストでどれだけのミュータントを摘出出来たかの度合い。バグ検出能力の指標(※2)
(※1)不等号の変更(>,<, ==, || など)、演算子の変更(+,- など)、値の変更
(※2)Score(%)=k/(m-e) で求まる
k:摘出できたミュータントの総数
m:埋め込んだミュータントの総数
e:等価ミュータントの総数
機械的にソースコードを変更したとしても、論理的に元のコードと同等であった場合は、不具合として摘出する事は出来ない。このようなミュータントを等価ミュータントと呼び、ミューテーションスコアの算出時には母数から減算する必要がある。
一方で、論理的に等価であることを機械的に判別する事は出来ないため、精度の高いミューテーションスコアを得るためには、等価ミュータントが生成されう割合が少なくなるようなミュータントオペレータを用意する事が重要となる。

<ミューテーションオペレータ>
  • Value Mutations ・・・ 値の書換。
  • Decision Mutations ・・・ 不等号の書換。
  • Statement Mutations ・・・ ステートメントの書換。ステートメントの実施順序の変更など。
以下はStatement Mutationsの一部。
  • Statement Deletion Operator (SDL) ・・・ ステートメントを削除。等価ミュータントの割合が少ないらしい。

<ミューテーションテスト用のツール(C#向け)でサポートしているVSのバージョン>
  • CREAM V.3.0 ・・・ Visual Studio 2010 Premium/Ultimate, 2008 Team System
  • NinjaTurtles 0.8.0.2 ・・・ Visual Studio 2005 (Editionは問わず?)
  • Nester 0.3 ・・・ Visual Studio 2010 (Editionは問わず?)
  • Visual Mutator 2.0 ・・・ Visual Studio Professional or higher version 2012/2013

自前環境が2012ProなのでVisual Mutatorを試してみたが、何故か.NETのバージョンチェックでNG。インストールされているのになぁ。なんでー。


2015/12/09 18:28:22 - 拡張機能の Microsoft Visual Studio Professional 2012 へのインストールを開始しています...
2015/12/09 18:28:22 - インストール エラー : Microsoft.VisualStudio.ExtensionManager.MissingTargetFrameworkException: 拡張機能 'VisualMutator' には、インストールされていない .NET Framework のバージョンが必要です。
   場所 Microsoft.VisualStudio.ExtensionManager.ExtensionManagerService.CheckForValidDotNetFramework(IExtension extension)
・・・


<ミューテーションテストの技法>
  • Strong (standard mutation) ・・・ 適用した全てのミュータントオペレータで生成された全てのミュータントをカバーするTestCase
  • Selective (constrained mutation) ・・・ 適用した一部のミュータントオペレータで生成された全てのミュータントをカバーするTestCase
  • Week mutation ・・・ 適用した全てのミュータントオペレータで生成された指定割合のミュータントをカバーするTestCase


0 件のコメント:

コメントを投稿