Observable modified Condition/Decision coverage

Slides:



Advertisements
Similar presentations
A Simple Constant Time Enumeration Algorithm for Free Trees 中野 眞一 宇野 毅明 群馬大学 情報学研究所 2003 年 9 月 19 日 アルゴリズム研究会.
Advertisements

OWL-Sを用いたWebアプリケーションの検査と生成
logistic regression をしたい場合の STATISTICA2000のアプリケーションの使い方について
背景 ソフトウェアの大規模化・複雑化 生産性と品質の向上 ↓ オブジェクト指向分析設計の適用 開発ツールの投入.
3次元nクイーン問題の 解に関する研究 論理工学研究室 伊藤精一
点対応の外れ値除去の最適化によるカメラの動的校正手法の精度向上
XHTML構文検証手法における スクリプト要素の静的解析アルゴリズム
Fortran と有限差分法の 入門の入門の…
OJT研修 「テスト実施、テスト設計の技術習得」 日時: 8月22日(月)  場所: 本社5階.
On the Enumeration of Colored Trees
モード付き並列機械における オンラインスケジューリング
遺伝アルゴリズムによる NQueen解法 ~遺伝補修飾を用いた解探索の性能評価~
プログラムの動作を理解するための技術として
ノンプログラマのための Selenium de DDT はじめの一歩
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
プログラム実行履歴を用いたトランザクションファンクション抽出手法
Occam言語による マルチプリエンプティブシステムの 実装と検証
第6回 よく使われる組合せ回路 瀬戸 重要な組合せ回路を理解し、設計できるようにする 7セグディスプレイ用デコーダ 加算回路・減算回路
静的情報と動的情報を用いた プログラムスライス計算法
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
組込みシステムの外部環境分析のためのUMLプロファイル
決定木とランダムフォレスト 和田 俊和.
動的依存グラフの3-gramを用いた 実行トレースの比較手法
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
シーケンス図を用いて実行履歴を可視化するデバッグ環境の試作
動的スライスを用いたバグ修正前後の実行系列の差分検出手法
モデルの逆解析 明治大学 理工学部 応用化学科 データ化学工学研究室 金子 弘昌.
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
クローンセットに対する主要編集者の分析法の提案と調査
TDDとメソッドの外部設計 テストファーストの秘訣 2009/08 biac.
アップデート 株式会社アプライド・マーケティング 大越 章司
実行時情報に基づく OSカーネルのコンフィグ最小化
只見町 インターネット・エコミュージアムの「キーワード」検索の改善
限られた保存領域を使用する Javaプログラムの実行トレース記録手法の 提案と評価
巡回冗長検査CRC32の ハード/ソフト最適分割の検討
リファクタリング支援のための コードクローンに含まれる識別子の対応関係分析
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
言語XBRLで記述された 財務諸表の分析支援ツールの試作
決定木 Decision Tree DT 明治大学 理工学部 応用化学科 データ化学工学研究室 金子 弘昌.
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
Webコミュニティ概念を用いた Webマイニングについての研究 A study on Web Mining Based on Web Communities 清水 洋志.
プログラム理解におけるThin sliceの 統計的調査による有用性評価
バイトコードを単位とするJavaスライスシステムの試作
背景 課題 目的 手法 作業 期待 成果 有限体積法による汎用CFDにおける 流体構造連成解析ソルバーの計算効率の検証
ソフトウェア保守のための コードクローン情報検索ツール
11.再帰と繰り返しの回数.
コンパイラ 2011年10月20日
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
Virtualizing a Multiprocessor Machine on a Network of Computers
SIFTとGraph Cutsを用いた 物体認識及びセグメンテーション
コーディングパターンの あいまい検索の提案と実装
JAVAバイトコードにおける データ依存解析手法の提案と実装
インスタンスの型を考慮したJavaプログラムの実行経路の列挙手法の提案
オブジェクトの協調動作を用いた オブジェクト指向プログラム実行履歴分割手法
構造的類似性を持つ半構造化文書における頻度分析
設計情報の再利用を目的とした UML図の自動推薦ツール
保守請負時を対象とした 労力見積のためのメトリクスの提案
オブジェクトの動的支配関係解析を 用いたシーケンス図の縮約
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
情報工学科 4年 中山直飛 中間発表.
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
コンパイラ 2012年10月11日
コードクローン解析に基づく デザインパターン適用候補の検出手法
回帰テストにおける実行系列の差分の効率的な検出手法
情報数理Ⅱ 第10章 オートマトン 平成28年12月21日.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
情報処理Ⅱ 2006年10月20日(金).
Presentation transcript:

Observable modified Condition/Decision coverage Session:B1

概要 背景 問題点 解決策(OMC/DC) テストを評価する指標として有効なMC/DCというC2カバレッジがある Session:B1

MC/DCの問題点 MC/DCを100%にするテストでも内部状態の変化が隠れてしまうとバグを発見できない e1 = i1 or i2 o1 = e1 and i3 100%MC/DCテスト test i1 i2 i3 o1 1 T F 2 3 4 以下の様に2つのinput, i1とi2が中間変数e1をへて外部に影響する場合を考えてみます。 左下に4つのテストケースがあり、これでMC/DCは100%になるんですが、例えばtest1とtest2をみてみると I1の変化がo1に伝わっていません。このように本来伝わるべきはずの変化が伝わらないので、全てのテストケースに 対して結果が同じになり、バグを発見できないことになります。 e1 = i1 and i2 o1’ = e1 and i3 ※MC/DCとは? ある条件の変化が独立に出力に影響するかどうかの指標 Session:B1

OMC/DCによる改善 MC/DCにオブザーバビリティという指標を追加することで内部状態の変化を出力に伝える e1 = i1 or i2 o1 = e1 and i3 100%OMC/DCテスト test i1 i2 i3 o1 1 T F 2 3 4 この基準に基づいて筆者達はテスト生成も行っているが、詳細は論文を読んでください e1 = i1 and i2 o1’ = e1 and i3 ※オブザーバビリティとは? ある条件の全ての変化が独立に出力に影響するかどうかの指標 Session:B1

評価 基準 設定 対象 方法 バグ検出率 構造に対する堅牢性 手法:MC/DC or OMC/DC 第三者が作成した大小さまざまなプログラム5つ 方法 250個のバグを埋め込んでテスト Session:B1

バグ発見率 全てにおいて改善 特にNon-Inlined+Output-Only Non-Inlined Inlined DWM1 DWM2 Latctl Vertmax Microwave Non-Inlined OMC/DC Output-Only 91% 96% 95% 98% 93% MC/DC Output-Only 3% 77% 55% 41% 59% OMC/DC Maximum 100% 99% MC/DC Maximum 86% 92% 89% Inlined 88% 97% 82% 80% 73% Session:B1

構造に対する堅牢性 プログラムの構造が変わってもバグの発見率が変わらない Case Example Oracle OMC/DC MC/DC DWM1 Output-Only -3 79 Maximum 13 DMW2 1 18 6 Latctl 2 37 Vertmax -2 39 3 Microwave 14 4 一般性が高い Session:B1

Billions and Billions of Constraints: Whitebox Fuzz Testing in Production Ella Bounimova, Patrice Godefroid, David Molnar 概要 超大規模にwhitebox fuzzingを適用した結果の報告 大規模に長期間のテストを行うと問題が発生 Windows 7のバグの1/3を発見 こんにちは。東京大学本位田研究室の鈴木です。 本日はBillions and Billions of Constraints: Whitebox Fuzz Testing in Productionという論文の内容を発表いたします。 この論文は、Whitebox fuzzingというテスト入力自動生成手法を超大規模に運用した結果の報告論文です。 大規模かつ長期間に亘ってテストを走らせると様々な問題が発生します。 そこで、人間がそれらの問題を解決できるよう、テスト環境の監視と制御を支援するシステムを開発しました。 その結果、マイクロソフト社内において、2007年から2013年までの総計500マシン年に亘って大規模に運用することができ、バグを大量に発見することができました。 人間による監視と制御を支援するシステムを開発 マイクロソフト社内で500マシン年の規模で運用できバグを大量に発見

背景知識|Whitebox fuzzing ランダムに生成した入力を利用して 記号的実行を行う 記号的実行で収集された条件の一部 を反転して制約を生成する 生成された制約をソルバに解かせる ソルバが求めた解を新たな入力とし て1.に戻る 入力: x = 0 , y = -1 , y = 4 if x = 0 if x = 0 x = 0 x != 0 if y > 3 if y > 3 y > 3 y <= 3 背景知識としてwhitebox fuzzingについて説明します。 これは記号的実行とfuzzingを組み合わせたテスト入力の自動生成手法です。 制御フローグラフを深さ優先探索するように新たな入力を生成していきます。 まず、ランダムに生成された入力に沿って記号的実行を行い、パスを記憶しておきます。 例えば、入力としてx = 0, y = -1を与えると、最初の条件文はtrueですから左へ行き、次の条件文はfalseですから右へ行きます。 このようにして記号的実行のパスが得られます。 次にこの条件の一部を反転してこのような制約を作り、このパスを通るような入力をソルバに求めさせます。 解としてたとえばx = 0, y = 4が得られますから、これを新たな入力として同様の手順を繰り返します。 これがwhitebox fuzzingです。 a = x + y a = x + y 制約: x = 0 , !(y > 3) , y > 3

提案システム SAGAN JobCenter 運用中に発生する問題を人間が解決する必要 ⇒ 大量のマシンの監視・制御を支援するシステムを開発 SAGEからのログを収集するシステム JobCenter SAGEを中央からコントロールするシステム このwhitebox fuzzingを大規模かつ長期間に亘って運用すると、当然のことながら様々な問題が発生します。 それらの問題を解決するために大量のマシンからなるテスト環境の監視と制御を支援するシステムが必要になります。 ここではwhitebox fuzzingツールSAGEからのログを収集するSAGANと、SAGEを中央からコントロールするJobCenterという二つのシステムを開発しました。 共著者らが提案したWhitebox fuzzingツール

提案システムによる運用 長期間の運用が可能に (台) (台) (台) (日) (日) (日) その結果長期間の運用が可能になり、バグの発見に大きく寄与しました。 ここでは運用結果の一例としてSAGEの稼働台数に関する統計を紹介します。 このグラフは横軸が日数で、縦軸がSAGEの稼働台数です。 1番目のセットでは稼働期間が長くなるとエラーによりどんどんSAGEが落ちていきますが、 提案システムによって収集されたログの分析とチューニングを行うことで、 テ落ちるSAGEの割合が少なくなり、バグの発見に寄与しています。 その他にも収集されたログを分析することで記号的実行を補完したり制約を枝狩りしたりなどが可能になっています。 (日) (日) (日) 分析とチューニングを挟んで3セット実行した時の台数の遷移の比較(横軸:日数、縦軸:台数)