Copyright©2019 NTT corp. All Rights Reserved.
リバースエンジニアリングを利⽤した
テストスクリプトの⾃動⽣成技術
「Regumo」の紹介
⽇本電信電話株式会社
ソフトウェアイノベーションセンタ
吉村 優, 安達 悠, 切貫 弘之, 倉林 利⾏, 丹野 治⾨
2Copyright©2019 NTT corp. All Rights Reserved.
1.ソフトウェア開発におけるテストの現状
テスト⾃動化による作業の省⼒化への期待
 ソフトウェア開発では、新規開発時だけでなく機能追加・修正やOSのアップデ
ート時等、システムのライフサイクルを通じて頻繁にテストが必要となる。
 近年では、リリース期間の更なる短縮、環境の多様化に伴い、テスト稼働が⼀層
増⼤する傾向にあり、テスト⾃動化による作業の省⼒化が期待されている。
• 既存機能への悪影響を確認する回帰テストは、同じテストをリリース毎に繰り返すう
え、システム規模に応じて増⼤し続けるため、⾃動化による稼働削減が⼀層効果的
膨⼤な数のテストを
様々な環境で実施
⼤量のテスト結果を
1つ1つ⽬視で確認
システムの仕様を理解して
⼤量のテストを作成
テスト設計 テスト実施 テスト結果確認
3Copyright©2019 NTT corp. All Rights Reserved.
テスト設計 テスト実装
2.テスト⾃動化の課題
テスト
結果確認
テスト
実施
テスト実⾏
⾃動化ツール
(市中技術活⽤)
UIレイアウト
テスト技術
(NTT技術)
【課題①】
テストスクリプトの実装は、
スキルが必要なうえ、作業
量も膨⼤
【課題②】
テスト技術者の経験や能⼒
による属⼈的な作業スキル
がテスト品質にも影響
テスト⾃動化の促進には、テストスクリプト実装の省⼒化が課題
 これまで、テスト結果確認に必要な作業の省⼒化に取組んできたが、テスト設計・
実装作業は⼈⼿の作業が中⼼で経験や能⼒に依存するため、更なる省⼒化と品質の
底上げが課題となっている。
 特に、テストスクリプトの実装は、スキルに加えて膨⼤な稼働も必要とするため、
テスト全体の⾃動化を進めるうえでの阻害要因となっている。
【課題③】
重厚⻑⼤な設計書や曖昧な仕
様の理解に加え、⻑期の保
守・運⽤では有識者も不⾜
4Copyright©2019 NTT corp. All Rights Reserved.
3.Regumoの⽬的と狙い
 本研究では、テスト⾃動化の課題を解決するため、動作システムやプログラムを
解析してシステムの仕様を復元し、実⾏可能なテストスクリプトを⾃動⽣成する
技術を実現する。
 これにより、テスト結果確認の作業だけでなく、テスト設計・実装の領域まで⾃
動化範囲を拡⼤し、開発全体の⽣産性の向上と品質の底上げを⽬指す。
Regumo
動作システム
<HTML>
<HEAD>
#CONFIG
Param1=あいうえお
public class Hello{
public static void
main(String[] args){
System.out.
println
("Hello, world.");
}
}
プログラム
システムの仕様
テストスクリプト
Input
テスト設計/テスト実装 テスト
結果確認
テスト
実施
テスト実⾏
⾃動化ツール
(市中技術活⽤)
UIレイアウト
テスト技術
(NTT技術)
実⾏可能なテストスクリプトを
復元した仕様から⾃動⽣成(課題①、②)
Output
ソフトウェア解析による
システム仕様の⾃動復元(課題③)
Copyright©2019 NTT Corp. All Rights Reserved. 5
現在対応しているフレームワークは
Struts1, Spring MVC4(Macchinetta)
ファイル出⼒
動的解析
静的解析
⼊⼒:
・ソースコード
・WebアプリのトップページURL
Step2:
アプリにアクセスして⾃動で振る舞いを解析
Step1: ソースコードから画⾯遷移の情報を抽出
Step3:
解析結果からテストを⾃動設計してテスト資
材を⽣成
出⼒:
・テストスクリプト
・画⾯遷移図
4.Regumo 処理概要
Copyright©2019 NTT Corp. All Rights Reserved. 6
@RequestMapping(value = "/owners/new", method = RequestMethod.POST)
public String processCreationForm(@Valid Owner owner, BindingResult result) {
if (result.hasErrors()) {
return VIEWS_OWNER_CREATE_OR_UPDATE_FORM;
} else {
this.clinicService.saveOwner(owner);
return "redirect:/owners/" + owner.getId();
}
}
リクエスト
遷移先
「/owners/new」というリクエストがあった時,
2つの遷移先があることがわかる.
■Springフレームワークでの例
現在対応しているフレームワークは Struts1, Spring MVC4(Macchinetta)
5.静的解析イメージ
Copyright©2019 NTT Corp. All Rights Reserved. 7
名前
PW
実⾏
ホーム ユーザ検索 商品検索
解析対象画⾯
リンクClick遷移先画⾯
フォームSubmitによる遷移先画⾯
リンクを発⾒順にClick
リンク抽出
INPUT要素へ発⾒順にデータ⼊⼒
(予め⽤意した候補値など)
フォーム抽出 照合
照合
静的解析でソース
コードから抽出した
画⾯遷移情報
静的解析で取得した遷移情報
と照合し、全ての遷移を網羅
出来るようにデータ⼊⼒をや
り直しながら試⾏を繰り返す
解析中の画⾯の
遷移先候補が集まったら、
未解析の画⾯を次の解析対象にする
6.動的解析イメージ
8Copyright©2019 NTT Corp. All Rights Reserved.
システムの仕様情報(画⾯遷移図)
7.出⼒イメージ
テストスクリプト
全てのテストスクリプトを実⾏することで、
画⾯遷移図を網羅するテストが実⾏できる
URLを開く
firstNameに「John」を⼊⼒
lastNameに「Doe」を⼊⼒
addressに「0, hogehoge」を⼊⼒
cityに「Foo」を⼊⼒
:

リバースエンジニアリングを利用したテストスクリプトの自動生成技術

  • 1.
    Copyright©2019 NTT corp.All Rights Reserved. リバースエンジニアリングを利⽤した テストスクリプトの⾃動⽣成技術 「Regumo」の紹介 ⽇本電信電話株式会社 ソフトウェアイノベーションセンタ 吉村 優, 安達 悠, 切貫 弘之, 倉林 利⾏, 丹野 治⾨
  • 2.
    2Copyright©2019 NTT corp.All Rights Reserved. 1.ソフトウェア開発におけるテストの現状 テスト⾃動化による作業の省⼒化への期待  ソフトウェア開発では、新規開発時だけでなく機能追加・修正やOSのアップデ ート時等、システムのライフサイクルを通じて頻繁にテストが必要となる。  近年では、リリース期間の更なる短縮、環境の多様化に伴い、テスト稼働が⼀層 増⼤する傾向にあり、テスト⾃動化による作業の省⼒化が期待されている。 • 既存機能への悪影響を確認する回帰テストは、同じテストをリリース毎に繰り返すう え、システム規模に応じて増⼤し続けるため、⾃動化による稼働削減が⼀層効果的 膨⼤な数のテストを 様々な環境で実施 ⼤量のテスト結果を 1つ1つ⽬視で確認 システムの仕様を理解して ⼤量のテストを作成 テスト設計 テスト実施 テスト結果確認
  • 3.
    3Copyright©2019 NTT corp.All Rights Reserved. テスト設計 テスト実装 2.テスト⾃動化の課題 テスト 結果確認 テスト 実施 テスト実⾏ ⾃動化ツール (市中技術活⽤) UIレイアウト テスト技術 (NTT技術) 【課題①】 テストスクリプトの実装は、 スキルが必要なうえ、作業 量も膨⼤ 【課題②】 テスト技術者の経験や能⼒ による属⼈的な作業スキル がテスト品質にも影響 テスト⾃動化の促進には、テストスクリプト実装の省⼒化が課題  これまで、テスト結果確認に必要な作業の省⼒化に取組んできたが、テスト設計・ 実装作業は⼈⼿の作業が中⼼で経験や能⼒に依存するため、更なる省⼒化と品質の 底上げが課題となっている。  特に、テストスクリプトの実装は、スキルに加えて膨⼤な稼働も必要とするため、 テスト全体の⾃動化を進めるうえでの阻害要因となっている。 【課題③】 重厚⻑⼤な設計書や曖昧な仕 様の理解に加え、⻑期の保 守・運⽤では有識者も不⾜
  • 4.
    4Copyright©2019 NTT corp.All Rights Reserved. 3.Regumoの⽬的と狙い  本研究では、テスト⾃動化の課題を解決するため、動作システムやプログラムを 解析してシステムの仕様を復元し、実⾏可能なテストスクリプトを⾃動⽣成する 技術を実現する。  これにより、テスト結果確認の作業だけでなく、テスト設計・実装の領域まで⾃ 動化範囲を拡⼤し、開発全体の⽣産性の向上と品質の底上げを⽬指す。 Regumo 動作システム <HTML> <HEAD> #CONFIG Param1=あいうえお public class Hello{ public static void main(String[] args){ System.out. println ("Hello, world."); } } プログラム システムの仕様 テストスクリプト Input テスト設計/テスト実装 テスト 結果確認 テスト 実施 テスト実⾏ ⾃動化ツール (市中技術活⽤) UIレイアウト テスト技術 (NTT技術) 実⾏可能なテストスクリプトを 復元した仕様から⾃動⽣成(課題①、②) Output ソフトウェア解析による システム仕様の⾃動復元(課題③)
  • 5.
    Copyright©2019 NTT Corp.All Rights Reserved. 5 現在対応しているフレームワークは Struts1, Spring MVC4(Macchinetta) ファイル出⼒ 動的解析 静的解析 ⼊⼒: ・ソースコード ・WebアプリのトップページURL Step2: アプリにアクセスして⾃動で振る舞いを解析 Step1: ソースコードから画⾯遷移の情報を抽出 Step3: 解析結果からテストを⾃動設計してテスト資 材を⽣成 出⼒: ・テストスクリプト ・画⾯遷移図 4.Regumo 処理概要
  • 6.
    Copyright©2019 NTT Corp.All Rights Reserved. 6 @RequestMapping(value = "/owners/new", method = RequestMethod.POST) public String processCreationForm(@Valid Owner owner, BindingResult result) { if (result.hasErrors()) { return VIEWS_OWNER_CREATE_OR_UPDATE_FORM; } else { this.clinicService.saveOwner(owner); return "redirect:/owners/" + owner.getId(); } } リクエスト 遷移先 「/owners/new」というリクエストがあった時, 2つの遷移先があることがわかる. ■Springフレームワークでの例 現在対応しているフレームワークは Struts1, Spring MVC4(Macchinetta) 5.静的解析イメージ
  • 7.
    Copyright©2019 NTT Corp.All Rights Reserved. 7 名前 PW 実⾏ ホーム ユーザ検索 商品検索 解析対象画⾯ リンクClick遷移先画⾯ フォームSubmitによる遷移先画⾯ リンクを発⾒順にClick リンク抽出 INPUT要素へ発⾒順にデータ⼊⼒ (予め⽤意した候補値など) フォーム抽出 照合 照合 静的解析でソース コードから抽出した 画⾯遷移情報 静的解析で取得した遷移情報 と照合し、全ての遷移を網羅 出来るようにデータ⼊⼒をや り直しながら試⾏を繰り返す 解析中の画⾯の 遷移先候補が集まったら、 未解析の画⾯を次の解析対象にする 6.動的解析イメージ
  • 8.
    8Copyright©2019 NTT Corp.All Rights Reserved. システムの仕様情報(画⾯遷移図) 7.出⼒イメージ テストスクリプト 全てのテストスクリプトを実⾏することで、 画⾯遷移図を網羅するテストが実⾏できる URLを開く firstNameに「John」を⼊⼒ lastNameに「Doe」を⼊⼒ addressに「0, hogehoge」を⼊⼒ cityに「Foo」を⼊⼒ :