metadata invariants: checking and inferring metadata coding conventions

5
Metadata Invariants: Checking and Inferring Metadata Coding Conventions Myoungkyu Song and Eli Tilevich 発発発 発発 発 発発発発発 () 発発 R2

Upload: teneil

Post on 07-Jan-2016

36 views

Category:

Documents


1 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Metadata Invariants: Checking and Inferring Metadata Coding Conventions

Metadata Invariants:Checking and Inferring Metadata Coding

Conventions

Myoungkyu Song and Eli Tilevich

発表者: 石尾 隆(大阪大学)

論文 R2

Page 2: Metadata Invariants: Checking and Inferring Metadata Coding Conventions

論文の概要• Metadata Invariants という概念の提案

– 特定のパターンに該当するプログラム要素(パッケージ / クラス / メソッド / フィールド)が持つべきメタデータを指定する

• Metadata Invariants Language (MIL) の定義– Java 5 Annotation, XML によるメタデータ記述の2種類に対応– AspectJ のポイントカットに類似した宣言的記述を提供

• MIL をソースコードから自動推論する方法の提案– 出てきたものを人間が確認・加工して,検査ツールに投入できる

1. JUnit では,名前が “ Test” で終わるクラスの “ public void” で始まるメソッドは “ @Test”, “@Before”, “@After” のいずれかを持つこと

2. Hibernate では, @Column{ name=“fieldName” } int fieldname; というように, @Column の name 属性とフィールド名が一致すること

Page 3: Metadata Invariants: Checking and Inferring Metadata Coding Conventions

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

Page 4: Metadata Invariants: Checking and Inferring Metadata Coding Conventions

Metadata Invariants の推論• 候補の列挙

– 各メタデータについて,それを持っているプログラム要素をすべて列挙(たとえば @Test を持つメソッド)

– 列挙された名前から共通部分文字列を計算し,それ以外の部分を “ *” で置き換えて,プログラム要素のパターンを作成する

※ ケーススタディに出てくる結果を見る限り,論文に書かれていないルールがかなりありそう

• 候補の検査– プログラム要素のパターンを実際に適用し,マッチした要素が,

メタデータを持っている割合を評価する• 実験では閾値 96% 以上であれば Invariant として出力

Page 5: Metadata Invariants: Checking and Inferring Metadata Coding Conventions

ケーススタディ• 様々な対象に対して実験

– 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)