SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine(コードジン) DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

トップエスイーからのアウトカム ~ ソフトウェア工学の現場から

組み合わせテストにおける最適な因子数――カバレッジとミューテーションスコアの収束をもとに推定する

トップエスイーからのアウトカム ~ ソフトウェア工学の現場から 第10回

ミューテーションスコアでテストケースのバグ検出能力を測る

 「ミューテーションスコア(MS)」とはプログラムに対して故意にわずかに異なる誤り(バグ)を作り出し、埋め込まれたバグを「テストスイート」(テストケースの集合)のテストでどれだけ検出できるかを計測し、数値化したものです。ミューテーションスコアが高ければ高いほど、そのテストスイートのバグ検出能力が高いことを指します。

 作成するわずかに異なる誤り(バグ)を埋め込んだプログラムを「ミュータント」と呼びます。ミュータントにバグが埋め込まれたことをテストスイートが発見するのは「キルする」と呼びます。ミュータントが元のプログラムと同等な動作をする場合、そのミュータントは「等価ミュータント」と呼びます。

 ミューテーションスコアの算出方法は以下の通りです。分母の「m - e」は、言い換えれば発見可能なバグが埋め込まれたミュータント数で、そのうち発見できたものの比率がミューテーションスコアということになります。

  • k:キルしたミュータントの総数
  • m:生成したミュータントの総数
  • e:等価ミュータントの総数

 埋め込む誤りは表7に示すようにいくつものパターンがありますが、今回は条件分岐に直接影響を及ぼす可能性が高い、算術演算子(+, -, *, /)、真偽値の逆転、関係演算子(<, <=, >, >=)を対象としました。

表7 埋め込み可能な誤り(ミュータントオペレーター)と利用した設定
表7 埋め込み可能な誤り(ミュータントオペレーター)と利用した設定

 例えば、関係演算子(<, <=, >, >=)を対象にミューテーション操作によりミュータントを作成すると、図5のように変換されたソースコードが作成されます。

 単体テストは仕様に基づく入力データを事前条件としてインプットするため、このように明らかにソースコードに誤りがある場合、単体テストは失敗となるべきです。

図5 ミューテーション操作の例
図5 ミューテーション操作の例

組み合わせ因子数に対するミューテーションスコアの測定結果

 このようにして作成したソースコードを対象に、オールペア法で作成した組み合わせテストケースを用いて単体テストを行うことで、作成したテストケースのバグ検出能力、つまりテストケース自体の品質を測定しました。その結果を表8~10に示します。

表8 因子数18の関数での結果
表8 因子数18の関数での結果
表9 因子数8の関数での結果
表9 因子数8の関数での結果
表10 因子数5の関数での結果
表10 因子数5の関数での結果

 組み合わせの因子数が少ないとミューテーションスコアは低くなり、テストケース自体のバグ検出能力は低いことがわかります。一方で、ある組み合わせ因子数に達すると、その後因子数を増やしてもミューテーションスコアが高くなることはありません。このミューテーションスコアが収束する組み合わせ因子数が、オールペア法で作成したテストケースにおいてテストケースの品質の観点での最適な数と判断できます。

次のページ
因子の収束ポイントから最適な因子数を評価する

この記事は参考になりましたか?

トップエスイーからのアウトカム ~ ソフトウェア工学の現場から連載記事一覧

もっと読む

この記事の著者

藤澤 克貴(テクマトリックス株式会社 システムエンジニアリング事業部)(フジサワ カツキ)

 2016年度第11期生としてトップエスイーを受講。テクマトリックス株式会社ソフトウェアエンジニアリング技術部所属。Parasoft社製 C/C++言語対応テストツール 「C++test」のプリセールス、導入支援、保守サポート業務に従事。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/10846 2018/06/04 14:00

おすすめ

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー