シーケンス図を用いて実行履歴を可視化するデバッグ環境の試作

Slides:



Advertisements
Similar presentations
Powerpoint 機能の使い方. 1.簡単な図の作成 例として植物個体の図を作成 (1)輪郭を大まかに描く まず、「オートシェイプ」 → 「線」 → 「曲 線」を選び、輪郭を適当に描く.
Advertisements

シーケンス図の生成のための実行履歴圧縮手法
4 相互作用図 後半 FM13001 青野大樹.
相互作用図 FM11010 田中健太.
Microsoft PowerPoint98 Netscape Communicator 4.06[ja]
JavaによるCAI学習ソフトウェアの開発
プログラムの変更前後での 実行履歴の差分検出手法
情報伝播によるオブジェクト指向プログラム理解支援の提案
Object Group ANalizer Graduate School of Information Science and Technology, Osaka University OGAN visualizes representative interactions between a pair.
F5 を押すか、または [スライド ショー] > [最初から] をクリックして、コースを開始してください。
プログラムの動作を理解するための技術として
Web上で管理・利用できる 面接予約データベースシステムの構築
CSP記述によるモデル設計と ツールによる検証
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
クラス動作シナリオ可視化手法の プログラム理解作業に対する有効性評価
UMLとは           032234 田邊祐司.
プログラミング演習3 第2回 GUIの復習.
Java ソフトウェア部品検索システム SPARS-J のための リポジトリ自動更新機能の実現
ソースコードに対する適用可能な修正手順を 可視化するリファクタリング支援手法の提案
情報コミュニケーション入門b 第5回 プレゼンテーション支援ツール入門
プログラム実行履歴を用いたトランザクションファンクション抽出手法
暗黙的に型付けされる構造体の Java言語への導入
動的依存グラフの3-gramを用いた 実行トレースの比較手法
クローンセットに対する主要編集者の分析法の提案と調査
OpenGLライブラリを用いた3次元フラクタルの描画
プログラミング演習3 第2回 GUIの復習.
社会シミュレーションのための モデル作成環境
プログラム動作理解支援を目的とした オブジェクトの振舞いの同値分割手法
MSET使用方法  一時中断したい場合には、マウスの右クリックをしてください(小ウインドウが開き一時停止します)。続行する場合には、開いた小ウインドウ以外の適当な場所を右クリックしてください。
動的データ依存関係解析を用いた Javaプログラムスライス手法
オープンソース開発支援のための ソースコード及びメールの履歴対応表示システム
オープンソース開発支援のための リビジョン情報と電子メールの検索システム
・タイプ別のフレームワーク ・デジタルTips(小技テクニック情報)
プログラミング基礎a 第12回 Java言語による図形処理入門(3) アニメーション入門
プログラミング基礎a 第11回 Java言語による図形処理入門(3) アニメーション入門
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
シナリオのアニメーション表示による 妥当性確認支援
バイトコードを単位とするJavaスライスシステムの試作
ネットワークプログラミング 05A1302 円田 優輝.
シナリオを用いたレビュー手法PBRの追証実験 - UMLで記述された設計仕様書を対象として -
ソフトウェア保守のための コードクローン情報検索ツール
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
UMLの概要とオブジェクト指向の基本概念
プログラムの織り込み関係を可視化するアウトラインビューの提案と実装
JAVAバイトコードにおける データ依存解析手法の提案と実装
★C++/オブジェクト指向実践企画★ Othelloゲーム作成
コードクローン間の依存関係に基づく リファクタリング支援環境の実装
オブジェクトの協調動作を用いた オブジェクト指向プログラム実行履歴分割手法
類似した振舞いのオブジェクトの グループ化による クラス動作シナリオの可視化
設計情報の再利用を目的とした UML図の自動推薦ツール
vc-2. Visual Studio C++ のデバッガー (Visual Studio C++ の実用知識を学ぶシリーズ)
保守請負時を対象とした 労力見積のためのメトリクスの提案
アスペクト指向言語のための視点に応じた編集を可能にするツール
オブジェクトの動的支配関係解析を 用いたシーケンス図の縮約
オブジェクトの動的支配関係解析を用いた シーケンス図の縮約手法の提案
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
サブゼミ第7回 実装編① オブジェクト型とキャスト.
メソッドの同時更新履歴を用いたクラスの機能別分類法
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
ソフトウェア工学 知能情報学部 新田直也.
コードクローン解析に基づく デザインパターン適用候補の検出手法
木構造の比較に基づく メソッド呼び出し履歴の変化の可視化手法
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
識別子の読解を目的とした名詞辞書の作成方法の一試案
オブジェクト指向メトリクスを用いた 開発支援に関する研究 --- VC++とMFCを用いた開発を対象として ---
プログラム理解のための 付加注釈 DocumentTag の提案
オブジェクト生成の観測に基づく プログラム実行の要約の抽出
オブジェクト生成の観測に基づく プログラム実行の要約の抽出
Presentation transcript:

シーケンス図を用いて実行履歴を可視化するデバッグ環境の試作 井上研究室の淺利です. ただいまから、 「シーケンス図を用いて実行履歴を可視化するデバッグ環境の試作」 というタイトルで発表します. (タイトルを読み上げるのは能がない(谷口先生)というので、) 「デバッグ上の問題を解決するために、実行履歴をシーケンス図として表示するデバッグ環境を作りましたので、それについて説明します」 大阪大学基礎工学部情報科学科 井上研究室 淺利 勇太

研究の背景 デバッグプロセス Step1: テストで発見された不具合の再現 Step2: 不具合の原因であるバグ位置の特定 デバッガによる支援が行われている まず始めに、本研究の背景として デバッグプロセスについて簡単に説明します. デバッグプロセスは一般に3つの作業から構成されます. まず、テストで発見された不具合の再現、 つぎに、不具合の原因であるバグ位置の特定 そして、バグ修正 です この中で、「バグ位置の特定」が最もコストを必要とする作業だと言われていて、 デバッガによる支援が行われています

デバッガの機能 ブレークポイントによる、プログラムの実行の一時停止 ステップ実行による、文単位の実行   一時停止状態では、停止した時点のスタック内の各変数の値を取得できる 次に、一般的なデバッガの機能について説明します. デバッガでは、 ユーザが設定したブレークポイントによって、プログラムを実行中に一時停止させることができます. また、ステップ実行による、文単位の実行ができます. さらに、一時停止状態では、停止した時点のスタック内の各変数の値を取得できます. これらの機能を用いて、ユーザはバグ位置の特定を行います.

オブジェクト指向プログラムの デバッグの難しさ OOPでは、動的束縛のために、ソースコード上のメソッド呼び出しの記述と、実際のメソッド呼び出しの動作が異なる オブジェクト群がどのような相互作用(状態)を経て現在に至ったか 特定のオブジェクトに対するメソッド呼び出し履歴 しかし、これらのデバッグ機能だけでは対処できない問題もあります. オブジェクト指向プログラムでは、動的束縛のために、 ソースコード上のメソッド呼び出しの記述と、実際のメソッド呼び出しの動作が異なることがあります。 そこで、以下のような情報が必要です。 一つ目は、オブジェクト群がどのような相互作用を経て現在に至ったかという情報です. 二つ目は、特定のオブジェクトに対するメソッド呼び出し履歴です。 これらは、通常のデバッガでは取得できません

研究の目的 通常のデバッガでは得られない、メソッド呼び出し履歴をシーケンス図として表示することで、デバッグ支援を行う 対象:Javaプログラム シーケンス図: オブジェクト間のメッセージのやり取りを時間に沿って表すための図 そこで、本研究では、 通常のデバッガでは得られないメソッド呼び出しの履歴を シーケンス図として表示することで、デバッグ支援を行うことを目的とします. 対象はJavaプログラムとします. ここで出てきた「シーケンス図」とは、オブジェクト間のメッセージのやり取りを時間に沿って表すための図のことです.

シーケンス図の生成方法 Amida: 実行履歴からシーケンス図を生成するツール A(1).a(){ B(2).b(){ } a() a() では次にシーケンス図の生成方法について説明します. 実行履歴からのシーケンス図の生成には、我々の研究グループで開発したツール、 Amidaを利用します. ここでいう実行履歴とは.メソッド開始と終了のイベントの履歴であり、また、 どのオブジェクトのメソッドか、ということも含まれます. この図は実行履歴の例です.これを用いて説明すると まず、クラスA、ID[1]のオブジェクト のメソッドa() が呼び出されています、 その中でクラスB、ID[2]のオブジェクト のメソッドb() が呼び出されています. 次に、もう一度メソッドb()が呼び出されています この実行履歴をシーケンス図に表現すると、このようになります。 横方向にオブジェクトを並べて、縦軸は時間軸を表しています。 時間の経過に従って、オブジェクト間のメソッド呼び出しが記述されます。 しかし、このような実行履歴は膨大な量になるため、そのままシーケンス図を生成しても理解しにくくなってしまいます. そのため、Amidaはループや再帰を圧縮し 圧縮した結果を元に、シーケンス図を生成します. (アニメーション) この実行履歴では、 同じメソッドb() が2回続けて呼び出されているので、ここが圧縮され、 シーケンス図はこのように生成されます. A(1).a(){ B(2).b(){ } 谷口、 石尾、 神谷、 楠本、 井上: "Javaプログラムの実行履歴に基づくシーケンス図の作成"、 ソフトウェア工学の基礎XI、日本ソフトウェア科学会FOSE2004、pp.5-15(2004).

シーケンス図からのバグ位置の特定 プログラムの設計と、生成されたシーケンス図の比較 設計では呼び出す(呼び出されない)はずのメソッドが実際は呼ばれていない(呼ばれている) メソッド呼び出しの順序 不具合が見つかったオブジェクトに対してのメソッド呼び出し履歴の調査 では次に、デバッグ作業において、シーケンス図からのバグ位置の特定方法について説明します. 一つめは、プログラムの設計と、実行履歴から生成されたシーケンス図の比較です. 設計では呼び出すはずのメソッドが実際は呼ばれていない、 逆に、設計では呼び出されないはずのメソッドが実際は呼ばれている、 といった状況をチェックします。 また、メソッド呼び出しの順序は設計通りか、などをチェックします.

設計と生成されたシーケンス図との比較 設計時に作成したシーケンス図 実行履歴から生成されたシーケンス図 A[1] B[2] C[3] その例を図に示します. 左が設計時に作成されたシーケンス図で、 右が実行履歴を元に生成されたシーケンス図です。 この例の場合、 a1()では、b1() を呼び出した後、b2() を呼び出す、という設計だったのに、 実際はb1() の呼び出しを忘れている、 また、c2()、c3()という順番で呼び出す設計だったのに、 実際はc3()、c2という順番で呼び出している ということが 設計と、生成されたシーケンス図との比較により分かります. b2() b2() c1() c1() c2() c3() c3() c2()

シーケンス図からのバグ位置の特定 プログラムの設計と、生成されたシーケンス図の比較 設計では呼び出す(呼び出されない)はずのメソッドが実際は呼ばれていない(呼ばれている) メソッド呼び出しの順序 不具合が見つかったオブジェクトに対してのメソッド呼び出し履歴の調査 バグ位置の特定のもう1つの方法は、 不具合が見つかったオブジェクトに対してのメソッド呼び出し履歴を調査することです. シーケンス図にはオブジェクトごとのメソッド呼び出しが記述されるので、 不具合が見つかったオブジェクトに対するメソッド呼び出しが分かります.

不具合が見つかったオブジェクトについてのメソッド呼び出し履歴 実行履歴から生成されたシーケンス図 A[1] B[2] C[3] b1() その例を図に示します. ブレークポイントで停止した際に、 ID2のオブジェクトの変数に不正な値が格納されていたとします、 そのとき、生成されたシーケンス図上でそのオブジェクトについてのメソッド履歴をたどります. すると、このように呼び出されていることが分かります. これらのメソッドの中で、不正な値の変数について代入を行っている処理があれば、 その中にバグがあるかもしれない、ということが分かります a1() b2() b3() c1() 不正な値の変数 ブレークポイントでの停止位置

開発環境への実装 シーケンス図生成機能を、統合開発環境Eclipseのプラグインとして組み込み、デバッグ環境を試作 デバッグ時に実行履歴の取得 ブレークポイントでの停止時・実行終了時に実行履歴をシーケンス図として表示・更新 シーケンス図からソースコードへの参照 次に、この手法の開発環境への実装について説明します. 本研究ではJavaプログラムの開発環境として代表的なEclipseを選びました. そして、提案手法をEclipseのプラグインとして組み込み、シーケンス図生成機能を持ったデバッグ環境を試作しました. このデバッグ環境の機能は以下の3つです. 一つ目は、デバッグ時に実行履歴を取得する機能、 二つ目は、ブレークポイントでの停止時、または実行の終了時に、実行履歴をシーケンス図として表示、更新する機能、 三つ目は、表示されたシーケンス図から各メソッドのソースコードを参照する機能 です。

実行画面 エディタ シーケンス図表示部 スタックトレース これは、作成したデバッグ環境の実行画面です. この図では、Eclipseの右半分に、実行履歴から生成されたシーケンス図が表示されています. エディタ シーケンス図表示部

適用例 試作した環境でドローツールを開発 バグの特定作業にシーケンス図生成機能を利用 直線、長方形、楕円の配置 配置済みの図形のリスト表示 マウスによる配置 パラメータ設定エリアからの座標入力による配置と着色 配置済みの図形のリスト表示 図形の重なりの順序変更 図形の削除 不具合:マウスによる図形配置の際に、頂点の座標が別の値に変更されてしまう 次に、適用例について説明します. 試作したデバッグ環境の有効性を確認するために、 実際の開発作業に適用しました。 適用対象は、 簡単なドローツールの開発です。 その際に実際に作り込んでしまったバグの特定作業に、シーケンス図生成機能を利用しました. このドローツールには、このような機能があります. 直線、長方形、楕円のマウスによる配置 パラメータ設定エリアからの座標入力による配置と着色 配置済みの図形のリスト表示 図形の重なりの順序変更 図形の削除 です ここで紹介する不具合は、 マウスによる図形配置の際に、頂点の座標が別の値に変更されてしまう というものです.

適用例: 正常な図形配置動作 追加 図形リスト 頂点座標をセット パラメータ設定エリア 図形描画部 この不具合について具体的に説明します. まず、正常な図形配置の動作ですが、 マウスのボタンを押して、ドラッグしてから、離すと、 図形が配置され、リストにその図形が追加、パラメータ設定エリアに座標がセットされます. 図形リスト 頂点座標をセット パラメータ設定エリア 図形描画部

適用例: 不具合 追加 不正な頂点座標をセット しかし、最初に作った時は今から説明するような不具合が発生しました. 先ほどの例と同じ操作で、 ドラッグを終了して、図形を配置しようとすると、 頂点の座標がおかしくなって、 図形リストには正しい座標が出ていますが、 指定した場所には描画されず、 パラメータ設定エリアには正しい頂点座標がセットされませんでした. この左上隅を拡大すると、小さく長方形が描画されているのが分かります.

適用例: 設計と生成されたシーケンス図との比較 図形配置の処理設計 実行履歴から生成されたシーケンス図 キャンバス 図形オブジェクト キャンバス 図形オブジェクト ドラッグの終了() 頂点2の座標設定() ここで、この実行履歴からシーケンス図を生成し、設計との比較を行ないます. これは、図形配置の処理の設計です. マウスのドラッグが終わると、頂点の座標を設定するメソッドが呼ばれる、という設計でした. しかし、生成されたシーケンス図と比較すると、 設計にはない頂点設定のメソッドが呼ばれていることが分かりました. なぜこのメソッドが呼ばれているのかと考えて、呼び出し元へたどっていくと、 バグが見つかりました。 図形の配置と パラメータ設定エリアの更新() バグ 設計にはない

考察 シーケンス図から実際の動作を把握し、バグ位置の特定をすることができた 設計と実際の動作との比較は、デバッグに有効であると確認できた 有効に使うには、対象のプログラムについての設計情報が利用できることが必要 全体の大まかな設計についての知識 クラス名、メソッド名から処理内容が分かること 考察を行います. まず、シーケンス図から実際の動作を把握し、バグ位置の特定をすることができました また、設計と実際の動作との比較は、デバッグに有効であると確認できました. さらに、デバッグ環境を有効に使うためには、対象のプログラムについての設計情報が利用できること、つまり 全体の大まかな設計についての知識や、クラス名、メソッド名から処理内容が分かることなどが 必要だと分かりました.

まとめ 主な結果 今後の課題 デバッグ支援のため、プログラム実行履歴からシーケンス図を生成する機能を持つデバッグ環境を試作した Javaプログラムの実際の開発に使用し、デバッグにおける有効性を確認した 今後の課題 より多くのソフトウェア開発への適用 最後にまとめです. デバッグ支援のため、プログラム実行履歴からシーケンス図を生成する機能を持つデバッグ環境を試作しました. また、Javaプログラムの実際の開発に使用し、シーケンス図生成機能のデバッグにおける有効性を確認しました. 今後の課題としては、 より多くのソフトウェア開発への適用 が考えられます 以上で発表を終わります.