1 / 5

Metadata Invariants: Checking and Inferring Metadata Coding Conventions

論文 R2. Metadata Invariants: Checking and Inferring Metadata Coding Conventions. Myoungkyu Song and Eli Tilevich 発表者: 石尾 隆(大阪大学). 論文の概要. Metadata Invariants という概念の提案 特定のパターンに該当するプログラム要素(パッケージ / クラス / メソッド / フィールド)が持つべきメタデータを指定する Metadata Invariants Language (MIL) の定義

teneil
Download Presentation

Metadata Invariants: Checking and Inferring Metadata Coding Conventions

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 論文の概要 • 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 属性とフィールド名が一致すること

  3. 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 が存在することを要求 例

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

  5. ケーススタディ • 様々な対象に対して実験 • 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 pMethod m in c Where (@Override m) • Assert (c.super has m)

More Related