SHOEISHA iD

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

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

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

ソフトウェアのテスト品質を効果的に測定するミューテーション解析

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

  • X ポスト
  • このエントリーをはてなブックマークに追加

ミューテーション解析のためのプログラム作成

 いよいよミューテーション解析に取り掛かります(図13)。AjaxMutatorを用いたミューテーション解析は、図13のQuizzyConfigクラスのmainメソッドに記述しました。一連のプログラムの解説を以下に記載します。

図13 ミューテーション解析
図13 ミューテーション解析
  1. ミューテーション操作を適用したいJavaScriptコードのファイルを獲得します。ConfigHelperクラスを利用することで、設定ファイルから獲得できます。
  2. 適用したいミューテーション操作を登録します。AjaxMutatorには、表2のミューテーション操作が実装されていますが、すべてを用いてミュータントを生成すると、多くのミュータントが生成されテスト実行に大きな時間を要する恐れがあります。従って、AjaxMutatorは、例えばjQuery向けに整理したミューテーションの操作のセットを提供しています。
  3. 登録したミューテーション操作を対象ソースコードに適用してミュータントを生成します。ミュータントはソースコードの差分を表すパッチファイルとして生成されます(図14)。AjaxMutatorは生成されたパッチファイルを対象ソースコードに適用することでWebアプリケーションに欠陥を埋め込みます。
図14 生成されたミュータント
図14 生成されたミュータント
  1. ミュータント上でテストケースを実行し、その結果が失敗するか判定します。AjaxMutatorは、ミューテーション解析の結果をCSV形式のファイルで出力します(図15)。
図15 ミューテーション解析の結果
図15 ミューテーション解析の結果

 開発者は、AjaxMutatorから得られるミューテーション解析の結果から、テストケースの欠陥検出能力が十分であるか判断します。どの程度のミューテーションスコアであれば十分かは一概には言えませんが、100%を目指してテストケースを最大限改善することが望ましいでしょう。

ミューテーション解析結果からテストケースを改良

 ここまでのミューテーション解析の結果(図15)を検討します。1列目がmutant2.diffと記述されている1行を「ミュータント2」とします。その、2列目の結果が「non-equivalent live」となっており、図11で作成した簡単なテストケースでは、ミュータント2を検出できなかったことを示しています。

 ミュータント2を生成するためのパッチファイル(図16)を見てみましょう。このファイルは、「クイズの開始ボタンをクリックすればクイズが開始される」というプログラムを、「クイズの開始ボタンをクリックしても、クイズが開始されない」という動作に置き換えることを意味します。つまり、ミュータントに埋め込まれる欠陥により、開始ボタンでクイズが始まらないという不具合を引き起こしていることが分かります。

図16 検出できなかったミュータント
図16 検出できなかったミュータント

 このミュータント2に含まれた欠陥を検出可能なテストケースに変更することで、これまで検出できなかった不具合が検出できるようすれば、より検出力の高いテストコードが記述できることになります。そこで、「開始ボタンをクリックするとクイズが開始される」ことを確認するテストケースをstartQuizメソッドとして追加し、再度ミューテーション解析を実施してみます(図17)。

図17 テストケースの改良
図17 テストケースの改良

 テストケースを追加し、ミューテション解析の結果を確認すると、ミュータント2を検出できるようになったことが確認できます(図18)。Quizzyを保守する過程で開発者がミュータント2と同様の欠陥を作り込んでも、改善されたテストケースはその欠陥を検出できるようになりました。

 

図18 テストケースの欠陥検出能力が向上したことの確認
図18 テストケースの欠陥検出能力が向上したことの確認

おわりに

 ミューテーション解析は、テストケースの欠陥検出能力を効果的に測定する手法です。しかし、ミューテーション解析の有用性はそれだけではありません。開発者は、検出できなかったミュータントを分析することで、これから埋め込んでしまうかもしれないが、今のテストケースでは検出できない欠陥を知ることができます。開発者はそれら欠陥を検出できるようにテストケースを改良することで、ソフトウェアテストにおいてより多くの欠陥を発見できるようになると期待されます。ソフトウェアの高品質化に向けて、ミューテーション解析のさらなる現場適用が望まれます。

トップエスイーについて

 「トップエスイー」は、国立情報学研究所で提供している社会人エンジニア向けのソフトウェア工学に関する教育プログラムです。トップエスイーでは講義や制作課題を通して、最先端の研究成果や現場で得られた知見が蓄積されてきました。その「アウトカム」、つまり成果やそこに至る過程を紹介し、現場のエンジニアの方々に活用していただけるような記事を掲載しています。トップエスイーでは、テストに関する講義を複数開講しており、それらを受講することテストの基礎やさまざまな技術を習得できます。加えて、実際に学習したことを開発現場で早期に適用できるようなカリキュラムを構築しているのが特徴で、実践的な知識が身につく講義にもなっています。

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
トップエスイーからのアウトカム ~ ソフトウェア工学の現場から連載記事一覧

もっと読む

この記事の著者

前澤 悠太(国立情報学研究所)(マエザワ ユウタ)

国立情報学研究所GRACEセンター特任助教。博士(情報理工学)(東京大学)。ソフトウェアテストを中心にソフトウェア工学分野の研究開発に従事。最近は、最先端の学術研究成果を、産業界で実用化することを目指している。

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/10066 2017/03/30 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング