メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法

Slides:



Advertisements
Similar presentations
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 1 ソフトウェア部品推薦のための.
Advertisements

シーケンス図の生成のための実行履歴圧縮手法
シーケンシャルパターンマイニングに基づくオブジェクト指向プログラムのための 欠陥検出手法
プログラミング基礎I(再) 山元進.
メソッド周辺の識別子と メソッド本体のAPI利用実績に基づいたAPI集合推薦手法
Javaのための暗黙的に型定義される構造体
Myoungkyu Song and Eli Tilevich 発表者: 石尾 隆(大阪大学)
アクセス修飾子過剰性の変遷に着目したJavaプログラム部品の分析
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
アルゴリズムとデータ構造 2011年6月13日
動詞に着目した相関ルールを利用するメソッド名の命名支援手法の評価
変数のスコープの設計判断能力 を育成するプログラミング教育
JSFによるWebアプリケーション開発 第6回
相関ルールマイニングを用いた メソッドの命名方法の分析
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
ソースコード中に出現する 動詞-目的語関係を利用した メソッド名の命名支援手法
コーディングパターンと キーワードを用いて生成したコードスニペットの推薦
Javaクラスの利用関係を用いた ソフトウェア部品のカテゴリ階層構築法
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
識別子の命名支援を目的とした動詞-目的語関係の辞書構築
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
Javaプログラムの変更を支援する 影響波及解析システム
7.4 intanceof 演算子 7.5~7.9パッケージ 2003/11/28 紺野憲一
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
Java8について 2014/03/07.
コードクローンの動作を比較するためのコードクローン周辺コードの解析
ソースコード縮退による ソースコード理解 神谷年洋 科学技術振興事業団 さきがけ研究21 オブジェクト指向シンポジウム2003.
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
プログラムで多用される 動詞と目的語の関係を利用した メソッド名提案ツール
不確実データベースからの 負の相関ルールの抽出
コード片に共通した特性を自動抽出する ソースコード閲覧ツールの試作
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
オブジェクト・プログラミング 第8回.
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
既存ソフトウェア中の 頻出コード片を用いた コード補完手法の提案
コーディングパターンの あいまい検索の提案と実装
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
メソッドに用いられる 動詞-目的語関係を収録した 辞書構築手法の提案
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
プログラムスライスを用いた凝集度メトリクスに基づく 類似メソッド集約候補の順位付け手法
設計情報の再利用を目的とした UML図の自動推薦ツール
アルゴリズムとデータ構造 2012年6月11日
「マイグレーションを支援する分散集合オブジェクト」
オープンソースソフトウェアに対する コーディングパターン分析の適用
メソッドの同時更新履歴を用いたクラスの機能別分類法
アルゴリズムとデータ構造1 2009年6月15日
状況に応じて適切な 例外処理が行なえる アスペクト指向分散環境実験の 支援ツール
統合開発環境のための プログラミング言語拡張 フレームワーク
ソフトウェア理解支援を目的とした 辞書の作成法
JAVA入門⑥ クラスとインスタンス.
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
アルゴリズムとデータ構造 2010年6月17日
コードクローン解析に基づく デザインパターン適用候補の検出手法
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
識別子の読解を目的とした名詞辞書の作成方法の一試案
プログラム理解のための 付加注釈 DocumentTag の提案
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
プログラム依存グラフを用いた ソースコードのパターン違反検出法
Presentation transcript:

メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法 井上研究室 柏原 由紀

値を書き込むためのオブジェクトを取得する 背景 メソッド名が不適切だとソースコードの理解に時間がかかる メソッド名から動作を推測できるようなメソッド名にするべき 処理内容を表す 他の開発者に通じる 値を設定している ・・・ ・・・ 実は 値を書き込むためのオブジェクトを取得する

メソッドの命名 適切なメソッド名をつけることは難しい メソッド名の構造 動詞,目的語を選択して組み合わせる必要がある 複数の単語を組み合わせて動作を表現する 動詞+目的語(open+BinaryStream)での命名が多い 動詞,目的語を選択して組み合わせる必要がある 処理内容と対象を正確に表現する ドメイン知識やプログラミング経験が必要 適切なメソッド名をつけることは難しい

研究概要 開発者のメソッド名変更を支援する メソッドの内容を推測できる候補を提示する メソッド名の候補を提示 メソッドを特徴づける識別子を利用 過去に開発されたソースコード中のメソッドから事例を学習 返り値がbooleanのときメソッド名の動詞はhasが多い フィールドnameSetにアクセスしているメソッドの目的語はNameが多い 命名相関ルール

提案手法 1:命名相関ルールの作成 2:メソッド名変更候補の生成 変更したい メソッドの指定 記述中のソースコード ソースコード集合 開発者 メソッド名 候補の提示 メソッド名変更候補

1:命名相関ルールの作成 ソースコード集合から命名相関ルールを作成する 1-1:名前と周辺識別子の取得 1-2:命名相関ルールのマイニング メソッドごとの 名前と周辺識別子の集合 命名相関ルール

1-1:メソッド名と周辺識別子 メソッド名の構成要素 周辺識別子 メソッド本体の内容を表す識別子 メソッドが定義されている場所 動詞 目的語 返り値の型 引数の型と名前 呼び出しているメソッド名 アクセスしているフィールド名 クラス名,親クラス名 インターフェース名 メソッド本体の内容を表す識別子 public class NameList implements Serializable { LinkedList<String> namelist; int size; public String findName(String n){ if (namelist.contains(n)) { return n; } return null; public void setName(Integer size) { this.size = size; メソッド名の動詞:find メソッド名の目的語:Name 返り値の型:String  … メソッドが定義されている場所

1-2:命名相関ルールのマイニング メソッド名の構成要素と周辺識別子の集合 相関ルールマイニング[1] 命名相関ルール 1 動詞:open 目的語:OutputStream 返り値の型:OutputStream 呼び出しメソッド名:free ... 2 動詞:new … 3 目的語:File 返り値の型:OutputStream フィールド名:name 4 動詞:find 目的語Name 返り値の型:String 相関ルールマイニング[1] 命名相関ルール 条件部   帰結部 1:{返り値の型:OutputStream} → {動詞:open} 2:{返り値の型:OutputStream,呼び出しメソッド名:free} → {目的語:OutputStream} [1] Agrawal, Rakesh and Imielinski, Tomasz and Swami, Arun “Mining association rules between sets of items in large databases“

2:メソッド名変更候補の生成 周辺識別子 命名相関ルール 現在のメソッド名 2-1:命名相関ルールの検索 記述中のソースコード 2-2:メソッド名候補の生成 openOutputStream setBinaryStream setField 1:{返り値の型:OutputStream} → {動詞:open} 2:{返り値の型:OutputStream,呼び出しメソッド名:free} → {目的語:OutputStream} メソッド名の候補

2-1:命名相関ルールの検索 周辺識別子を検索キーとする 変更対象のメソッドの周辺識別子を取得 周辺識別子が条件部を満たす命名相関ルールを取得 収集した周辺識別子 返り値の型:OutputStream フィールド名:outStream 呼び出しメソッド名:free 返り値の型:OutputStream フィールド名:outStream 呼び出しメソッド名:free 周辺識別子で検索する 命名相関ルール   条件部   帰結部 1:{返り値の型:OutputStream} → {動詞:open} 2:{返り値の型:OutputStream,呼び出しメソッド名:free} → {目的語:OutputStream} 3:{返り値の型:void,呼び出しメソッド名:free} → {動詞:find} 4:{フィールド名:outStream,返り値の型:OutPutStream} → {動詞:close} ・・・   条件部   帰結部 1:{返り値の型:OutputStream} → {動詞:open} 2:{返り値の型:OutputStream,呼び出しメソッド名:free} → {目的語:OutputStream} 3:{返り値の型:void,呼び出しメソッド名:free} → {動詞:find} 4:{フィールド名:outStream,返り値の型:OutPutStream} → {動詞:close} ・・・

2-2:メソッド名候補の生成 命名相関ルールと元のメソッド名を利用 動詞と目的語を組み合わせて生成 優先度が高い順に提示 元のメソッド名の動詞,目的語同士は組み合わせない 優先度が高い順に提示 命名相関ルールや候補の性質から計算 動詞 目的語 メソッド名候補 open close OutputStream openOutputStream openBinaryStream setOutputStream closeBinaryStream ・・・ 命名相関ルール         から得た 元のメソッド名      から得た set BinaryStream 生成と並び替え

手法を実現したツール 開発環境:統合開発環境Eclipseのプラグイン 対象言語:Java 開発者が指定したメソッドに対して メソッド名の変更候補を提示する

③ビューにメソッド名の候補リストが表示される 手法を実現したツール ②ツールを起動する ①メソッド内にカーソルを置く ③ビューにメソッド名の候補リストが表示される

評価実験 目的 適切なメソッド名が生成できるか 適切なメソッド名が上位に提示できるか 適切なメソッド名 オープンソースソフトウェアに記述されたメソッド 動詞と目的語の組で命名されたメソッド @Override修飾子がついていないメソッド 評価に用いたオープンソースソフトウェア ArgoUMLとjEdit 命名相関ルール生成に用いていない

評価実験:方法 元のメソッド名を変更する メソッド名の候補リストを生成する 元のメソッド名の構成要素がリストのどの位置に出現するか調べる 動詞,目的語を変更 動詞のみ変更 目的語のみ変更 メソッド名の候補リストを生成する 元のメソッド名の構成要素がリストのどの位置に出現するか調べる 元のメソッド名そのもの 元のメソッド名の動詞 元のメソッド名の目的語 動詞,目的語を変更

評価実験:結果(ArgoUML) 動詞は87.9%が生成できている 目的語は18.9%が生成できている 正解が出現するメソッドの数 動詞は87.9%が生成できている 全体の46.8%が100位以内 目的語は18.9%が生成できている 全体の4.9%が100位以内 メソッド名は16.7%が生成できている 全体の0.9%が100位以内 6000 対象メソッド数5542 5000 4000 3000 2000 1000 1 10 100 1000 10000 100000 正解が出現する順位

まとめと今後の課題 まとめ 今後の課題 メソッド本体に対して関係がある可能性が高いメソッド名を提示する手法を提案し,ツールを実装した 動詞は多くのメソッドで比較的高い順に生成できた 目的語は提示できている数は少ない メソッド名は提示できても順位が低い 今後の課題 被験者実験による評価をおこなう 並び替えの方法を見直す 目的語を提示するためにルールの生成方法を見直す

評価実験:結果(jEdit) 正解が出現する順位 対象メソッド数2162 正解が出現するメソッド

評価実験:動詞変更(ArgoUML) 正解が出現する順位 対象メソッド:6204 正解が出現するメソッド

評価実験:目的語変更(ArgoUML) 正解が出現する順位 対象メソッド:6204 正解が出現するメソッド

命名相関ルール メソッドの周辺識別子が出現したときのメソッド名の構成要素の出現しやすさの関係 {返り値:String,フィールド名:nameset}→{目的語:Name} 返り値がStringでnamesetという名前のフィールドにアクセスしているメソッドの目的語はNameであることが多い {呼び出しメソッド名:hasNext}→{動詞:find,目的語Field} メソッド本体でhasNext()というメソッドを呼び出しているメソッド名の動詞にfindが,目的語にFieldがつかわれていることが多い

相関ルールマイニング 入力データ内で同時に出現しやすい要素の関係を見つける手法 支持度:条件部と帰結部の要素が同時に出現する数 バスケット分析 支持度:条件部と帰結部の要素が同時に出現する数 確信度:条件部が出現するとき,帰結部が出現する割合 相関 ルールマイニング  支持度 確信度 {オムツ} →{ビール} 2 1 {牛乳} →{パン} 1 1 {オムツ,パン}→{ビール} 1 1 {パン,ビール}→{オムツ} 1 1 ・・・ A パン 牛乳 B オムツ ビール C D E ・オムツを買う人は同時にビールを買うことが多い ・オムツとパンを買う人は同時にビールを買うことが多い

評価実験:結果(ArgoUML) 動詞は87.9%が生成できている 目的語は18.9%が生成できている 正解が出現するメソッドの数 動詞は87.9%が生成できている 5542個中4871個 このうち53.3%が100位以内に生成できている 4871個中2595個 目的語は18.9%が生成できている 5542個中1048個 メソッド名は16.7%が生成できている 5542個中928個 6000 5000 4000 3000 2000 1000 1 10 1000 100000 正解が出現する順位 100 10000

並び替えの基準 命名相関ルールの支持度,確信度 周辺識別子の数に対する条件部の一致率 動詞と目的語を同一ルールから得たか 動詞が呼び出しメソッド名の動詞に使われているかどうか 目的語がメソッド本体に出現する識別子の命名に使われているかどうか 動詞と目的語の組で生成されているかどうか