NTT ソフトウェアイノベーションセンタ 丹野 治門

Slides:



Advertisements
Similar presentations
プログラムの変更前後での 実行履歴の差分検出手法
Advertisements

Heap Cloning: Enabling Dynamic Symbolic Execution of Java Programs
Observable modified Condition/Decision coverage
岩井 儀雄 コンピュータ基礎演習  ー探索、整列ー 岩井 儀雄
【ICSE2012 勉強会】 Recovering Links between an API and Its Learning Resources 担当 : 岩崎 慎司(NTTデータ)
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
Semi-Supervised QA with Generative Domain-Adaptive Nets
プログラム実行履歴を用いたトランザクションファンクション抽出手法
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
識別子の命名支援を目的とした動詞-目的語関係の辞書構築
ソードコードの編集に基づいた コードクローンの分類とその分析システム
決定木とランダムフォレスト 和田 俊和.
ネットワーク理論 Text. Part 3 pp 最短路問題 pp 最大流問題 pp.85-94
動的スライスを用いた バグ修正前後の実行系列の比較
コードクローンの分類に基づいた メソッド引き上げ手順の提案とその有効性評価
動的依存グラフの3-gramを用いた 実行トレースの比較手法
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
動的スライスを用いたバグ修正前後の実行系列の差分検出手法
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
Online Decoding of Markov Models under Latency Constraints
クローンセットに対する主要編集者の分析法の提案と調査
重複コードと非重複コードにおける 修正頻度の比較
TDDとメソッドの外部設計 テストファーストの秘訣 2009/08 biac.
仮想メモリを用いた VMマイグレーションの高速化
限られた保存領域を使用する Javaプログラムの実行トレース記録手法の 提案と評価
Javaプログラムの変更を支援する 影響波及解析システム
訓練データとテストデータが 異なる分布に従う場合の学習
社会シミュレーションのための モデル作成環境
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
コードクローンの動作を比較するためのコードクローン周辺コードの解析
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
Data Clustering: A Review
プログラム実行に対するフェイズ検出を用いた ログ取得量の動的変更手法の提案
Webコミュニティ概念を用いた Webマイニングについての研究 A study on Web Mining Based on Web Communities 清水 洋志.
プログラム理解におけるThin sliceの 統計的調査による有用性評価
バイトコードを単位とするJavaスライスシステムの試作
プログラミング 4 探索と計算量.
シナリオを用いたレビュー手法PBRの追証実験 - UMLで記述された設計仕様書を対象として -
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
VMが利用可能なCPU数の変化に対応した 並列アプリケーション実行の最適化
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
既存ソフトウェア中の 頻出コード片を用いた コード補完手法の提案
コーディングパターンの あいまい検索の提案と実装
インスタンスの型を考慮したJavaプログラムの実行経路の列挙手法の提案
ソフトウェアプロダクト集合に対する 派生関係木の構築
オブジェクトの協調動作を用いた オブジェクト指向プログラム実行履歴分割手法
プログラムスライスを用いた凝集度メトリクスに基づく 類似メソッド集約候補の順位付け手法
保守請負時を対象とした 労力見積のためのメトリクスの提案
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
オープンソースソフトウェアに対する コーディングパターン分析の適用
メソッドの同時更新履歴を用いたクラスの機能別分類法
蓄積されたオブジェクトの動作履歴を用いた 実行履歴削減手法の提案
ソフトウェア理解支援を目的とした 辞書の作成法
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
動的スライスを用いたバグ修正前後の実行系列の差分検出手法の提案
コードクローン解析に基づく デザインパターン適用候補の検出手法
回帰テストにおける実行系列の差分の効率的な検出手法
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
メソッド抽出リファクタリングが 行われるメソッドの特徴調査
プログラム依存グラフを用いた ソースコードのパターン違反検出法
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
Detecting Software Modularity Violations
ICSE'11勉強会 Riding the Design Wave I セッション
Presentation transcript:

NTT ソフトウェアイノベーションセンタ 丹野 治門 make test-zesti: A Symbolic Execution Solution for Improving Regression Testing NTT ソフトウェアイノベーションセンタ 丹野 治門

目的と貢献 目的 現状の問題点 提案 主な貢献点 ソフトウェアにおけるより多くのバグを見つけたい 開発者が作るテスト(○意味あるテスト,✕高コスト) 機械的に作るテスト(○低コスト, ✕無意味なものが多い) (例) パスカバレッジ向上を目指したSymbolic Execution 提案 開発者が作った(回帰テスト向け)テストケースを種にし て様々なバリエーションを生成 主な貢献点 OSSでしっかり評価,未知のバグを発見 ICSE'12 勉強会 2012/8/30

着眼点 Sensitive Operationsの周辺を徹底的にテスト するようにする 具体例:配列へのアクセス 回帰テスト用テストケース (開発者が作成) int v[100]; void f(int x){ if(x > 99){ x = 99; } v[x] = 0; この2つのテストケースでパスカバレッジ(分岐網羅)は100%だが・・・ TestCase01 x = 100 TestCase02 x = 50 x = -1のとき配列不正アクセスエラー Sensitive Operation周辺はバグが存在する可能性が高い! ICSE'12 勉強会 2012/8/30

着眼点 Sensitive Operationsの周辺を徹底的にテスト するようにする 具体例:配列へのアクセス 回帰テスト用テストケース (開発者が作成) int v[100]; void f(int x){ if(x > 99){ x = 99; } v[x] = 0; この2つのテストケースでパスカバレッジ(分岐網羅)は100%だが・・・ TestCase01 x = 100 TestCase02 x = 50 x = -1のとき配列不正アクセスエラー! 提案手法 TestCase03 x = -1 ICSE'12 勉強会 2012/8/30

手法 テスト実行と同時にSymbolic Executionを実施 「Symbolic Execution結果+追加条件」で新規テスト生成 提案手法によるテストケース生成の一例 TestCase02 x = 50 int v[100]; void f(int x){ if(x > 99){ x = 99; } v[x] = 0; 入力変数:  x = x0 パス条件:  not(x0 > 99) テストケース 生成 TestCase03 x = -1 Symbolic Execution 境界値条件  x0 > 0 &&  x0 <100 追加! ICSE'12 勉強会 2012/8/30

評価 評価に用いたOSS(3つ) 評価結果 GNU Coreutils,libdwarf,readelf 合計58件(うち,52件は未知)のバグを検出 OSSコミュニティに報告,バグ改修も進んでいる 提案手法で発見したCoreutilsのバグ一覧 Min Depth バグに到達するまでの「条件分岐」の数 通常のSymbolic Executionでは時間がかかりすぎて発見しにくいバグ ICSE'12 勉強会 2012/8/30 Paul Dan Marinescu and Cristian Cadar “make test-zesti: A Symbolic Execution Solution for Improving Regression Testing” ICSE2012. Table1より引用

NTT ソフトウェアイノベーションセンタ 張 暁晶 BALLERINA: Automatic Generation and Clustering of Efficient Random Unit Tests for Multithreaded Code NTT ソフトウェアイノベーションセンタ 張 暁晶

背景・目的・貢献 背景 目的 貢献 マルチスレッドを用いるソースコードの単体試験は、手間がかかる テスト対象が持つオブジェクトを、複数のスレッドで触るような試験である このような単体試験を「ランダム生成」する従来手法では・・・ 生成された単体試験の実行が遅い 並行性バグをうまく見つけられない バグじゃないのにバグだという誤報(false alarm)が出る 目的 並行性バグをうまく見つけられるような単体試験をランダム生成する 貢献 並行性バグをうまく見つけられるような単体試験をランダム生成す る手法を提案 生成された単体試験でのfailureを、人手で点検する手間を軽減でき る「クラスタリング手法」も提案 評価:実際のバグ検出による効果確認 ICSE'12 勉強会 2012/8/30

→既存手法Randoop algorithm[1]を改造 手法概要1 単体試験のランダム生成: 2つのスレッドのみ用意する それぞれが、ランダムに選ばれたテスト対象のメソッドを1つだけ実行する 並行性バグにあたる確率を上げるために、上記のような「シンプルな」並行コー ドを、「より複雑な」シーケンシャルなランダム生成コードの後ろに追記する BALLERINAが生成した単体試験 シーケンシャルな ランダム生成コード →既存手法Randoop algorithm[1]を改造 並行実行する 2つのスレッド Adrian Nistor et al. “BALLERINA: Automatic Generation and Clustering of Efficient Random Unit Tests for Multithreaded Code”, In Proc. of ICSE 2012, pp.727-737, Figure 2 より [1] C. Pacheco, S. K. Lahiri, M. D. Ernst, and T. Ball, “Feedbackdirected random test generation,” in ICSE, 2007. ICSE'12 勉強会 2012/8/30

手法概要2 点検すべきfailureを絞り込むクラスタリング手法: Test Oracleとして既存手法linearizability[2]を採用してい るので誤報が出る可能性がある 「似たような」バグレポートはたぶん、 全部誤報か全部本物のバグかだろう →バグレポートを下記2点によりクラスタリングする Failure発生時に実行していたメソッド Failureの種類 評価では、1個の本物のバグに対して、数百個の誤報が出る →非実用的 クラスタリングの導入後では誤報は3~4個にまで減った [2] S. Burckhardt, C. Dern, M. Musuvathi, and R. Tan, “Line-Up: A complete and automatic linearizability checker,” in PLDI, 2010. ICSE'12 勉強会 2012/8/30

評価 6件のOSSに含まれる14個の本物のバグで評価 提案手法は、既存ランダム生成手法より、 2~10倍速くバグを見つけた Groovy, JDK, JFreeChart, Apache Log4j, Apache Lucene, Apache Pool 提案手法は、既存ランダム生成手法より、 2~10倍速くバグを見つけた クラスタリング手法により、点検すべきfailure の数を4~8倍減らした 未知のバグをさらに3件検出できた Apache Log4j, Apache Poolから ICSE'12 勉強会 2012/8/30

On-Demand Test Suite Reduction Dan Hao@Peking University (株)NTTデータ 技術開発本部 朱峰 錦司

議 異 ! り あ 裁判長!コードカバレッジを保っていても・・・バグ発見能力には疑いの余地があります! 背景(1/2) 従来のテストケース削減手法は、コードカバ レッジを一定に保てれば減らしてよい、という ものが多い チ ョ シ ャ 裁判長!コードカバレッジを保っていても・・・バグ発見能力には疑いの余地があります! ICSE'12 勉強会 2012/8/30

背景(2/2) 2つの既存手法を試してみると… 20%以上の確率でバグ発見能力6割減 20%以上の確率でバグ発見能力4割減 ※元論文P.2から抜粋 ICSE'12 勉強会 2012/8/30

テストケース削減によるバグ発見能力低下の実績データをもとに、この集合を線形計画法で発見する! 目的 バグ発見能力を一定に保ちながらテストケース を削減する手法の提案 全てのテストケースの集合 以下を満たす最小のテストケースの集合 ・バグ発見能力の低下は l% 以下 ・(統計学に頼るので)信頼度は c% テストケース削減によるバグ発見能力低下の実績データをもとに、この集合を線形計画法で発見する! ICSE'12 勉強会 2012/8/30

手法概要(1/2) 実績データの作成 既存のソフトウェアをもとに、テストケースの削減と バグ発見能力の低下との相関を分析 信頼度は90%,95%,99%の3パターンに決め打ち ※元論文P.4から抜粋 テストケース数を4から2に減らすと、99%の確率で バグ発見能力は(最高で)83.3%減少してしまう ICSE'12 勉強会 2012/8/30

手法概要(2/2) 線形計画法の適用 モデル式の簡易化(省略) 2種類のモデル式を提案 local constraintsに基づく式 あるテストケースの部分集合において、q行目のソースコードをカバーするケースがもともとp_j個あった状態からq個に減少した際に… 線形計画法の適用 2種類のモデル式を提案 local constraintsに基づく式 global constraintsに基づく式 モデル式の簡易化(省略) 全ての行個別で不等式が成り立たたないといけない ※元論文P.5から抜粋 過去の実績では、テストケースをp_j個からq個に減らすとこれぐらい能力が落ちる ソースコード全体で成り立てばよい ※元論文P.5から抜粋 ICSE'12 勉強会 2012/8/30

評価 3つのシナリオで手法を評価 他手法との比較 テストケース削減効果は少ないが、バグ発見能力を維 持したい場合は非常に効果的 対象 実績データ 適用対象 結果 1 8つのCプログラム 1つのプログラムの半分 プログラムの残り半分 全てのプログラムにおいて、2つのモデル式の場合ともに、結果は妥当であった 2 1つのJavaプログラムの3リビジョン 前バージョン 後バージョン バージョン番号が近いほうがより結果は妥当であった 3 7つのCプログラム 6プログラム 残り1プログラム globalの場合のほうが削減効果は大きいが、localの場合のほうがバグ発見能力が高い ICSE'12 勉強会 2012/8/30