Myoungkyu Song and Eli Tilevich 発表者: 石尾 隆(大阪大学)

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

シーケンス図の生成のための実行履歴圧縮手法
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
Applet 岡部 祐典 鈴木 敬幸.
背景 我々の研究室で開発しているJavaプログラム解析フレ ームワークでは,解析情報はメモリ上に保持される 問題点
第5回 iPhoneアプリ開発勉強会 Objective-C 「継承とクラス」
Javaプログラムの開発履歴における アクセス修飾子過剰性の分析
JSFによるWebアプリケーション開発 第11回
アルゴリズムとデータ構造1 2007年6月12日
アクセス修飾子過剰性の変遷に着目したJavaプログラム部品の分析
JSFによるWebアプリケーション開発 第6回
第2章 Eclipseと簡単なオブジェクト 指向プログラミング
AspectScope によるアスペクトとクラスのつながりの視覚化
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
プログラミング演習3 第2回 GUIの復習.
overload / override / overwrite の違いについて
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
ソフトウェア工学 知能情報学部 新田直也.
識別子の命名支援を目的とした動詞-目的語関係の辞書構築
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
Javaによる Webアプリケーション入門 第6回
ソフトウェア制作論 平成30年10月3日.
Javaプログラムの変更を支援する 影響波及解析システム
アスペクト指向に基づく 拡張可能な MDAモデルコンパイラ
Javaによる Webアプリケーション入門 第2回
豊富な情報を基にした pointcut を記述できるアスペクト指向言語
Java8について 2014/03/07.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
コードクローンの動作を比較するためのコードクローン周辺コードの解析
UMLモデルを対象とした リファクタリング候補検出の試み
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
Javaによる Webアプリケーション入門 第11回
Servlet ソフトウェア特論 第7回.
コード片に共通した特性を自動抽出する ソースコード閲覧ツールの試作
pointcut に関して高い記述力を持つ アスペクト指向言語 Josh
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
プログラムの織り込み関係を可視化するアウトラインビューの提案と実装
コーディングパターンの あいまい検索の提案と実装
インスタンスの型を考慮したJavaプログラムの実行経路の列挙手法の提案
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
計算機プログラミングI 第3回 プリミティブ値 クラスメソッド クラス変数 式と演算 変数の利用
Annotation EJB 3.0 コース 第3回 2006年8月4日.
オープンソースソフトウェアに対する コーディングパターン分析の適用
WebアプリケーションとTomcat ― これまでの復習とこれからの予習 ―
Jakarta Struts (1) ソフトウェア特論 第10回.
JSPの基本 J2EE I (データベース論) 第8回 /
UMLモデルを対象とした リファクタリング候補検出手法の提案と実現
統合開発環境のための プログラミング言語拡張 フレームワーク
開発者との対話を活かした 横断的構造の表現
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
コードクローン解析に基づく デザインパターン適用候補の検出手法
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
プログラム理解のための 付加注釈 DocumentTag の提案
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
プログラム依存グラフを用いた ソースコードのパターン違反検出法
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
Presentation transcript:

Myoungkyu Song and Eli Tilevich 発表者: 石尾 隆(大阪大学) 論文R2 Metadata Invariants: Checking and Inferring Metadata Coding Conventions Myoungkyu Song and Eli Tilevich 発表者: 石尾 隆(大阪大学)

論文の概要 Metadata Invariants という概念の提案 特定のパターンに該当するプログラム要素(パッケージ/クラス/メソッド/フィールド)が持つべきメタデータを指定する Metadata Invariants Language (MIL) の定義 Java 5 Annotation, XML によるメタデータ記述の2種類に対応 AspectJ のポイントカットに類似した宣言的記述を提供 MIL をソースコードから自動推論する方法の提案 出てきたものを人間が確認・加工して,検査ツールに投入できる 例 JUnit では,名前が “Test” で終わるクラスの “public void” で始まるメソッドは “@Test”, “@Before”, “@After” のいずれかを持つこと Hibernate では,@Column{ name=“fieldName” } int fieldname; というように,@Column の name 属性とフィールド名が一致すること

Metadata Invariants とは 構成要素 プログラム要素を選択するパターン “class *Test” や “public void *” など,Java のパッケージ/クラス/メソッド/フィールド宣言の形式で表現.一部をワイルドカード (*) に変換してもよい パターンに該当した要素が満たすべき条件 @Test のような Java 5 Annotation <class name=“C”><field name=“f”>… のような特定のXMLメタデータ 名前や継承関係に関するルール 検証方法 対象プログラムから,パターンにマッチするプログラム要素をすべて列挙し,それぞれが,Invariants に定義された条件のメタデータを持つことを確認する 例 Class c in p Where (* class *Test) -- 名前がTest で終わるクラス c の Method m in c Where (public void *) -- public void メソッド m について Assert (@Test m) -- @Test が存在することを要求

Metadata Invariants の推論 候補の列挙 各メタデータについて,それを持っているプログラム要素をすべて列挙(たとえば @Test を持つメソッド) 列挙された名前から共通部分文字列を計算し,それ以外の部分を “*” で置き換えて,プログラム要素のパターンを作成する ※ ケーススタディに出てくる結果を見る限り,論文に書かれていないルールがかなりありそう 候補の検査 プログラム要素のパターンを実際に適用し,マッチした要素が,メタデータを持っている割合を評価する 実験では閾値 96% 以上であれば Invariant として出力

ケーススタディ 様々な対象に対して実験 Metadata Invariants が存在していることを示した Hibernate, JEdit, Spring, JBoss Seam, IntelliJ, RunaWFE, OpenVPN ALS Metadata Invariants が存在していることを示した 例1: Hibernate のソースコードから,Hibernate での JUnit の使い方が出てきた 例2: JEdit では,オーバーライドを表現する @Override の記述が抽出された False positive も発生するが,個数などは紹介されていない Class c in p Where (* class *Test | * class Test*) Method m in c Where (public void *)    Assert (@Test m) Class c in p Method m in c Where (@Override m) Assert (c.super has m)