方針

テスト自動化

テストは動作確認ではない.欠陥を検出できるテストを実装すべきである.テスト対象に人工的な欠陥を埋め込み,テストの欠陥検出能力を測定する手法(Mutation Testing)を研究開発する.

自動プログラム修正

検出した欠陥を除去する必要がある.欠陥プログラムに対して修正パッチを生成し,欠陥が除去されたか検証する手法(Generate-and-Validate Program Repair)を研究開発する.

プロダクト開発

オープンソースソフトウェア(Open Source Software, OSS)として技術を開発する.世界のソフトウェア開発者からフィードバックを得ることで,社会に変革をもたらすプロダクトにまで磨き上げる.


保有技術

科学的知識に基づき,独自の知見を活用して,実社会で役に立つ技術を創出します.

ミューテーション解析

ミューテーション解析とは,テストケースの欠陥検出能力を測定する手法である.

  1. 開発者は「テスト対象プログラム」と「テストケース」を実装する.課題は「テストケースが対象プログラムの欠陥を検出できるか?」である.
  2. 本手法は,対象プログラムに「開発者が実際に作り得る欠陥」を人工的に挿入し,欠陥プログラム(ミュータント)を生成する.テストケースが対象プログラムの欠陥を検出できるならば,この人工的な欠陥を検出できるはずである.
  3. そこで,テストケースをミュータント上で実行し,「テストが失敗する」(つまり,欠陥を検出できた)ことを確認する.
  4. テスト実行の結果から「ミューテーションスコア」を算出できる.開発者はこれを元に,テストケースの欠陥検出能力を定量的に評価できる.
  5. さらに開発者は,未検出な欠陥を検出できるようにテストケースを改良をすることで,その欠陥検出能力を向上できる.

  

開発者は「テスト対象プログラム」と「テストケース」を実装する.課題は,“テストケースが対象プログラムの欠陥を検出できるか?”である.

  

  

ミューテーション解析はまず,対象プログラムに「開発者が実際に作り得る欠陥」を人工的に挿入し,欠陥プログラム(ミュータント)を生成する.テストケースが対象プログラムの欠陥を検出できるならば,この人工的な欠陥を検出できるはずである.

  

  

そこで,テストケースをミュータント上で実行し,「テストが失敗する」(つまり,欠陥を検出できた)ことを確認する.

  

  

テスト実行の結果から「ミューテーションスコア」を算出できる.開発者はこれを元に,テストケースの欠陥検出能力を定量的に評価できる.

  

  

さらに開発者は,未検出な欠陥を検出できるようにテストケースを改良をすることで,その欠陥検出能力を向上できる.

  

生成・検証プログラム修正

自動プログラム修正とは,欠陥プログラムにおいて少なくとも1つのテストケースが失敗した際に,全テストケースをパスさせるプログラムパッチを自動生成する手法である.

  1. テストが失敗した際、開発者は欠陥の除去に多大な労力を要する.課題は「欠陥を自動除去できるか?」である.
  2. 本手法は,欠陥プログラムを変異させることでパッチ(修正候補)を生成する.パッチ生成の課題は,欠陥位置を推定と適切なプログラム変異である.
  3. 本手法はさらに,修正候補上でテスト実行し,全てのテストケースをパス(欠陥プログラムを正しく修正)するか確認する.パッチ検証の課題は,効率的な修正空間探索とパッチの過剰適合回避である.

  

テストが失敗した際、開発者は欠陥の除去に多大な労力を要する.課題は「欠陥を自動除去できるか?」である.

  

  

自動プログラム修正は,欠陥プログラムを変異させることでパッチ(修正候補)を生成する.パッチ生成の課題は,修正箇所を推定と適切なプログラム変異である.

  

  

自動プログラム修正はさらに,修正候補上でテスト実行し,全てのテストケースをパス(欠陥プログラムを正しく修正)するか確認する.パッチ検証の課題は,効率的な修正空間探索とパッチの過剰適合回避である.

  


プロダクト

JSAnalyzer

Webアプリ(Ajax)の状態ベース解析

AjaxMutator

Webアプリ(Ajax)のミューテーション解析

RevAjaxMutator

Webアプリ(Ajax)の自動プログラム修正

AdaMu

適応型ミューテーション解析

AutoPUT

単体テストの自動パラメータ化

To be Continued!