情報伝播によるオブジェクト指向プログラム理解支援の提案

Slides:



Advertisements
Similar presentations
オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
Advertisements

ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
OWL-Sを用いたWebアプリケーションの検査と生成
シーケンス図の生成のための実行履歴圧縮手法
XHTML構文検証手法における スクリプト要素の静的解析アルゴリズム
プログラミング基礎I(再) 山元進.
Javaのための暗黙的に型定義される構造体
Myoungkyu Song and Eli Tilevich 発表者: 石尾 隆(大阪大学)
オブジェクト指向プログラミング(2) OOPの三大要素 「クラス」「ポリモーフィズム」「継承」
データフロー情報を用いたコード ナビゲーションツールの実装と評価
変数のスコープの設計判断能力 を育成するプログラミング教育
AspectScope によるアスペクトとクラスのつながりの視覚化
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
プログラム実行履歴を用いたトランザクションファンクション抽出手法
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
アルゴリズムとプログラミング (Algorithms and Programming)
識別子の命名支援を目的とした動詞-目的語関係の辞書構築
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
第9章 例外処理,パッケージ 9.1 例外処理 9.2 ガーベッジコレクション.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
動的スライスを用いた バグ修正前後の実行系列の比較
暗黙的に型付けされる構造体の Java言語への導入
動的依存グラフの3-gramを用いた 実行トレースの比較手法
ポインタ解析におけるライブラリの スタブコードへの置換の効果
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
インラインスクリプトに対するデータフロー 解析を用いた XHTML 文書の構文検証
シーケンス図を用いて実行履歴を可視化するデバッグ環境の試作
変数のデータフローを考慮した API利用コード例の検索 井上研究室 竹之内 啓太.
Javaプログラムの変更を支援する 影響波及解析システム
横断的関心事に対応したオブジェクト指向言語GluonJとその織り込み関係の可視化ツール
コードクローンの動作を比較するためのコードクローン周辺コードの解析
ソースコード縮退による ソースコード理解 神谷年洋 科学技術振興事業団 さきがけ研究21 オブジェクト指向シンポジウム2003.
ソフトウェア制作論 平成30年11月21日.
バイトコードを単位とするJavaスライスシステムの試作
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
プログラムの織り込み関係を可視化するアウトラインビューの提案と実装
コーディングパターンの あいまい検索の提案と実装
JAVAバイトコードにおける データ依存解析手法の提案と実装
JavaScriptを含んだHTML文書に対する データフロー解析を用いた構文検証手法の提案
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
統合開発環境によって表現された 言語機構によるコードのモジュール化
C#プログラミング実習 第3回.
設計情報の再利用を目的とした UML図の自動推薦ツール
「マイグレーションを支援する分散集合オブジェクト」
アスペクト指向言語のための視点に応じた編集を可能にするツール
メソッドの同時更新履歴を用いたクラスの機能別分類法
第5回 プログラミングⅡ 第5回
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
コードクローン解析に基づく デザインパターン適用候補の検出手法
回帰テストにおける実行系列の差分の効率的な検出手法
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
プログラム理解のための 付加注釈 DocumentTag の提案
情報処理Ⅱ 小テスト 2005年2月1日(火).
オブジェクト生成の観測に基づく プログラム実行の要約の抽出
Presentation transcript:

情報伝播によるオブジェクト指向プログラム理解支援の提案 大阪大学 ○田中昌弘,石尾隆,井上克郎 大阪大学の田中です. 情報伝播によるオブジェクト指向プログラム理解支援の提案というタイトルで発表を始めさせていただきます.

概要 オブジェクト指向プログラムにタグを付加する手法を提案 発表の流れ ソースコード中の変数やメソッドについて記した注釈 目的に従ってタグを伝播 ⇒処理の記述が断片化したソースコード理解を支援 発表の流れ 背景 関連研究 提案手法の説明 まず概要ですが,本発表ではオブジェクト指向プログラムにタグを付加する手法を提案します. 本手法でのタグとは,ソースコードの中の変数やメソッドについてしるした注釈のことで,このタグを目的に従って 効果的に伝播することで,処理の記述が断片化したソースコードの理解を支援します. 以下背景から本手法の説明について発表を行います.

背景 オブジェクト指向プログラミング [1] 問題点 情報隠蔽 再利用性が向上 情報隠蔽による処理の断片化 [2] カプセル化,継承,多相性,.. 再利用性が向上 問題点 情報隠蔽による処理の断片化 [2] デバッグ,インスペクションで実行の詳細を追う作業が困難 まず背景ですが,オブジェクト指向プログラムは,カプセル化や継承,多相性といった概念がありますが, これらによって情報隠蔽を行うことによってプログラムの再利用性が向上します. ですが,その情報隠蔽によって処理が断片化し,デバッグやインスペクションでの作業が困難となるという問題があります. 複数のファイルで階層的に記述されるのはよいことですが,情報隠蔽を行うことで,そのクラス間,ファイル間の関係が このように隠蔽されてしまうので,実行の詳細を追う作業が困難になります. [1] N. Wilde et al., Maintenance Support for Object-Oriented Programs. IEEE TSE, Vol.18, No.12, pp.1038-1044, 1992. [2] M. Desmond et al., Fluid Source Code Views for Just In-Time Comprehension. SPLAT 2006.

関連研究 ソースコード上の移動を支援 [3] 問題点 開発者が注釈を記入 タグとして一覧に登録 登録した箇所へ瞬時に移動 記入した情報が別の場所で活かされない メソッドについての注釈は呼び出されている場所でも参照したい このような問題を対処するために関連研究では,その断片化したソースコードの移動を支援するというツールがあります. 小さいですが,エディタ内でのテキストの選択位置で,開発者が,右クリックしてタグの作成を選択して, 注釈を記入すると,それが,この下のビューで一覧に追加されます. そして,この一覧の項目をダブルクリックなどで選択すると,タグとして登録したファイルと位置に瞬時に移動できます. これによってソースコード上の移動がスムーズになったのですが,問題として, タグとして登録したタグが,ソースコード上の別の場所で活かされないという問題があります. 例えばメソッドについて選択した注釈は,そのメソッドが呼び出されている場所でも表示できるようにしたいということなどです. [3] M.-A. Storey et al., How Programmers can Turn Comments into Waypoints for Code Navigation. ICSM 2007, pp.265-274.

提案手法の概要 開発者がソースコード中の識別子 (変数やメソッド) にタグを付加 タグを関連する箇所に伝播 ソースコード中の変数やメソッドについての注釈 タグを関連する箇所に伝播 同一の識別子といえる関係 データフローグラフ上の関係  ⇒参照中の箇所で関連情報を確認できる この関連研究と問題とを踏まえて本研究では,以下の手法を提案します, まず開発者がソースコード中の識別子にタグを付加します. このタグとは,ソースコード中の変数やメソッドについての注釈ですが, その識別子に対して付加したタグが,関連する箇所に伝播されます. 伝播には,同一の識別子といえる関係や,データフローグラフ上での関係というものを用います. このようにタグを付加し,関連する箇所に伝播することで, 現在参照しているソースコードに,以前に付加したタグが伝播されて関連情報がその場で確認しながら読んでいくことができるので, 理解がよりしやすくなると考えられます.

タグの種類 注釈の種類に応じてタグを分類 仕様情報タグ 一時情報タグ 識別子の仕様情報を扱う 実行過程を追っている際の一時的な情報を扱う メソッドの機能の説明,値の説明など 一時情報タグ 実行過程を追っている際の一時的な情報を扱う 変数が特定の値である場合の実行過程 多相性のある型で,特定の型の場合の実行過程 具体的に手法の説明をしていきますが,まず,注釈の種類に応じてタグを以下の2つに分類します. 1つ目は識別子の仕様情報を扱う仕様情報タグで,メソッドの機能の説明などを注釈に記します. 2つ目は一時情報タグで,例えば変数が特定の値である場合の実行状況を記すことで, 値の影響範囲を調べながら読み進めていくなどのことが可能となります. 同じように多相性のある型で,特定の型の場合にどのように実行されていくかという情報を記しながら 読み進めていくことができます. 以降それぞれについて具体的に説明します

仕様情報タグ 宣言位置が同じ識別子間でタグが共通 A.java 参照中のファイル内で開発者が仕様情報タグを付加 EditorUtil.java : String s = editorUtil.getSelectedWord(); : : public getSelectedWord() { : } B.java 別の場所を開発者が参照している際に以前付加したタグが伝播される まずこの仕様情報タグについてですが, これは宣言位置が同じ識別子同士でタグが共通となるように伝播を行います. 例えば開発者がこのメソッドに仕様情報タグを付加すると,この識別子が宣言されている位置の識別子に タグが伝播されます.でこの後で別のファイルを参照しているときに,同じ識別子が現れると, 宣言部のタグを自動的に伝播してこのファイルを参照している際にこのメソッドについての情報を確認 することができます.このようにして,同じ識別子間でタグが共通になるようにします. : = super.getSelectedWord(); : 付加したタグは宣言位置の識別子へと伝播

一時情報タグ 実行過程を追うための一時的な情報を扱う データフロー関係に基づいて伝播される private IRegion getWordRegion(String source, int offset) { String word = ""; int index = offset -1; while(index >= 0){ : } index = offset; offset = offset - word.length(); 次に一時情報タグについてですが,これは変数の値や型が特定の状況の場合にどうなるかということを 注釈に記述するためのタグで,この伝播はデータフロー関係に基づいて行われます. たとえばこのコードのこの位置に位置情報タグを付加すると, この変数の値が使われる識別子にこのように伝播されます.このデータフロー関係によって伝播された タグ間では値が必ず同じとなります. 値が同じになることが条件ですので,このように値が変わる変数や,変わりうる変数には伝播されません ここで用いているデータフロー関係について以降説明していきます. 伝播されたタグは全て同じ値となる 値が変化しうるので伝播されない

一時情報タグの伝播 伝播で用いるデータフロー関係は以下の4種類 変数の定義と参照の集合 演算のない代入 メソッド呼び出しの引数 メソッドの戻り値 一時情報タグの伝播では以下の4種類のデータフロー関係に従って伝播を行います. 資料の方と若干表現が異なっていますがご容赦ください. 以降それぞれについて説明していきます.

変数の定義(代入)と参照の集合 同一の代入結果を意味する識別子へ伝播 複数の定義が到達する識別子へは伝播しない 静的単一代入形式における同一の変数 複数の定義が到達する識別子へは伝播しない a = 0; if (x > 0) { b = a; } else { b = a + 1; } c = b + a; b = a または a + 1 条件分岐を抜けると値が不確定なので伝播しない

一時情報タグの伝播 伝播で用いるデータフロー関係は以下の4種類 変数の定義と参照の集合 演算のない代入 メソッド呼び出しの引数 メソッドの戻り値 一時情報タグの伝播では以下の4種類のデータフロー関係に従って伝播を行います. 資料の方と若干表現が異なっていますがご容赦ください. 以降それぞれについて説明していきます.

演算のない代入 右辺から左辺へ伝播 伝播先に同一のタグがある場合は伝播を停止 a = 0; b = a; c = a + 1; 1つの識別子に複数のタグを伝播できる a = 0; b = a; c = a + 1; d = b + a; 演算のある代入は伝播しない

一時情報タグの伝播 伝播で用いるデータフロー関係は以下の4種類 変数の定義と参照の集合 演算のない代入 メソッド呼び出しの引数 メソッドの戻り値 一時情報タグの伝播では以下の4種類のデータフロー関係に従って伝播を行います. 資料の方と若干表現が異なっていますがご容赦ください. 以降それぞれについて説明していきます.

IShapeは実行時はCircle,Triangle,Ellipseのいずれかの型 メソッド呼び出しの引数 実引数から仮引数へ伝播 多相性のあるメソッド呼び出しでは伝播先を指定 IShapeは実行時はCircle,Triangle,Ellipseのいずれかの型 IShape shape = getSelectedShape(); : shape.setBounds(bounds); ? Circle.setBounds(Rectangle r) Triangle.setBounds(Rectangle r) Ellipse.setBounds(Rectangle r) からどれが実行されるかは静的に解決できない public IShape setBounds (Rectangle r) { }

一時情報タグの伝播 伝播で用いるデータフロー関係は以下の4種類 変数の定義と参照の集合 演算のない代入 メソッド呼び出しの引数 メソッドの戻り値 一時情報タグの伝播では以下の4種類のデータフロー関係に従って伝播を行います. 資料の方と若干表現が異なっていますがご容赦ください. 以降それぞれについて説明していきます.

メソッドの戻り値 戻り値から呼び出し元のメソッドへ伝播 複数のメソッドに呼び出されている場合は伝播先を指定 ? ? region = getWordRegion(s,idx); : .......getWordRegion(s,idx); : ? ? private IRegion getWordRegion(String s, int offset) { : return region; }

一時情報タグの伝播 伝播で用いるデータフロー関係は以下の4種類 変数の定義と参照の集合 演算のない代入 メソッド呼び出しの引数 メソッドの戻り値 一時情報タグの伝播では以下の4種類のデータフロー関係に従って伝播を行います. 資料の方と若干表現が異なっていますがご容赦ください. 以降それぞれについて説明していきます.

まとめと今後の課題 オブジェクト指向プログラムによるソースコードの断片化の問題 ソースコードのタグを付加する手法を提案 仕様情報タグ 同一な識別子間で伝播 一時情報タグ データフロー関係を用いて伝播 ツール実装と適応実験が今後の課題 最後にまとめを行います. 本発表では,ソースコードの断片化の問題に対して,2種類のタグ伝播法を提案し, ソースコード理科を図ることを目的としました. 以上で発表を終わります.ありがとうございました.

参照中のファイル中の識別子のタグ一覧を表示 タグをパッケージ階層で管理するビュー 参照中のファイル中の識別子のタグ一覧を表示 エディタ内にタグを明示するかは検討中