20100329 Department of Computer Science Graduate School of

  • Slides: 22
Download presentation

コーディングパターン ~メソッド呼び出しに関するパターン~ 名阪和ソフトウェア 学ミニワークショップ 2010/03/29 Department of Computer Science, Graduate School of Information Science

コーディングパターン ~メソッド呼び出しに関するパターン~ 名阪和ソフトウェア 学ミニワークショップ 2010/03/29 Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 3

メソッド内の正規化(1/2) • メソッド中から特徴列を抽出する処理 – 1つのメソッドから1つの特徴列を抽出 int sample. Method(int x, int y) { int result

メソッド内の正規化(1/2) • メソッド中から特徴列を抽出する処理 – 1つのメソッドから1つの特徴列を抽出 int sample. Method(int x, int y) { int result = x * y; while ( result < 100 ) { method. Call(); result = result * 2; メソッド呼び出し } 制御構造 if ( is. Debug. Mode() ) { print. Verbose(result); • 条件分岐 } else { • 繰り返し処理 print. Simple(result); } return result; } 名阪和ソフトウェア 学ミニワークショップ 2010/03/29 • メソッド中の特徴とは? – – Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 6

メソッド内の正規化の例 int sample. Method(int x, int y) { int result = x * y;

メソッド内の正規化の例 int sample. Method(int x, int y) { int result = x * y; while ( result < 100 ) { method. Call(); result = result * 2; } if ( is. Debug. Mode() ) { print. Verbose(result); } else { print. Simple(result); } return result; } 正規化 LOOP void method. Call() END-LOOP boolean is. Debug. Mode() IF void print. Verbose(int) ELSE void print. Simple(int) END-IF 特徴列 メソッド 名阪和ソフトウェア 学ミニワークショップ 2010/03/29 Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 8

パターンマイニング • シーケンシャルパターンマイニング – Prefix. Spanアルゴリズム • マイニング例 – 条件 • パターン長: 4以上,サポート値: 2以上

パターンマイニング • シーケンシャルパターンマイニング – Prefix. Spanアルゴリズム • マイニング例 – 条件 • パターン長: 4以上,サポート値: 2以上 is. Debug. Mode() IF print. Verbose() ELSE print. Simple() END-IF 特徴列A method. Call 1() IF print. Verbose() END-IF method. Call 2() 特徴列B is. Debug. Mode() IF print. Verbose() END-IF method. Call 1() 特徴列C 名阪和ソフトウェア 学ミニワークショップ 2010 is. Debug. Mode() method. Call 3() print. Verbose() LOOP print() END-LOOP 特徴列D 2010/03/29 Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 9

パターンマイニング(結果) 抽出されたコーディングパターン is. Debug. Mode() IF print. Verbose() END-IF パターン長: 4 サポート値: 2 instanceof

パターンマイニング(結果) 抽出されたコーディングパターン is. Debug. Mode() IF print. Verbose() END-IF パターン長: 4 サポート値: 2 instanceof is. Debug. Mode() IF print. Verbose() ELSE print. Simple() END-IF 特徴列A method. Call 1() IF print. Verbose() END-IF method. Call 2() 特徴列B is. Debug. Mode() IF print. Verbose() END-IF method. Call 1() 特徴列C 名阪和ソフトウェア 学ミニワークショップ 2010 is. Debug. Mode() method. Call 3() print. Verbose() LOOP print() END-LOOP 特徴列D 2010/03/29 Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 10

コーディングパターンに基づく コード補完ツール 名阪和ソフトウェア 学ミニワークショップ 2010/03/29 Department of Computer Science, Graduate School of Information Science

コーディングパターンに基づく コード補完ツール 名阪和ソフトウェア 学ミニワークショップ 2010/03/29 Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 11

パターンデータベースの構築 • コーディングパターンを保存したデータベース をパターン検索の前に構築 コーディングパターン j. Editに頻出するコード片 if (!buffer. is. Editable()) { get. Toolkit().

パターンデータベースの構築 • コーディングパターンを保存したデータベース をパターン検索の前に構築 コーディングパターン j. Editに頻出するコード片 if (!buffer. is. Editable()) { get. Toolkit(). beep(); return ; }. . . コーディング パターンの抽出 JEdit. Buffer. is. Editable() IF JComponent. get. Toolkit() Toolkit. beep() END-IF 名阪和ソフトウェア 学ミニワークショップ 2010/03/29 Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 15

パターンの検索 • 入力キーワードに関連したパターン – パターンに入力キーワードと一致する単語が多く出 現 – 一致する単語のうち,重みの大きい単語が多い • 単語の重みは自然言語検索で利用されているTF-IDF [Salton, 1987]で決定 • 検索結果

パターンの検索 • 入力キーワードに関連したパターン – パターンに入力キーワードと一致する単語が多く出 現 – 一致する単語のうち,重みの大きい単語が多い • 単語の重みは自然言語検索で利用されているTF-IDF [Salton, 1987]で決定 • 検索結果 入力キーワード関連が高いパターン [Salton, 1987] Term Frequency – Inverse Document Frequency, Salton G. and Buckley, C. 1987 Term Weighting Approaches in Automatic Text Retrieval. Technical Report. UMI Order Number: TR 87 -881. , Cornell University. 名阪和ソフトウェア 学ミニワークショップ 2010/03/29 Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 16

コード片の生成: パターン要素の変換 • パターンの各要素をコード片へ変換 • このステップでは参照する変数は未定とする コード片 パターン JEdit. Buffer. is. Editable() ? ?

コード片の生成: パターン要素の変換 • パターンの各要素をコード片へ変換 • このステップでは参照する変数は未定とする コード片 パターン JEdit. Buffer. is. Editable() ? ? ? . is. Editable(); IF if (? ? ? ) { JComponent. get. Toolkit() ? ? ? . get. Toolkit(); Toolkit. beep() ? ? ? . beep(); END-IF } 名阪和ソフトウェア 学ミニワークショップ 2010/03/29 Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 17

コード片の生成: 参照変数の決定 • 挿入箇所の直前で宣言した変数を使用 • メソッド呼び出しの戻り値は新しく宣言した変数 編集中のソースコード へ代入 JEdit. Buffer buf =. . .

コード片の生成: 参照変数の決定 • 挿入箇所の直前で宣言した変数を使用 • メソッド呼び出しの戻り値は新しく宣言した変数 編集中のソースコード へ代入 JEdit. Buffer buf =. . . ; コード片 ? ? ? . is. Editable(); if (? ? ? ) { ? ? ? . get. Toolkit(); ? ? ? . beep(); } ソースコードへ挿入 するコード片 boolean var 0 = buf. is. Editable(); if (var 0) { JComponent var 1; Toolkit var 2 = var 1. get. Toolkit(); var 2. beep(); } 名阪和ソフトウェア 学ミニワークショップ 2010/03/29 Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 18

コード片の生成(失敗例) • 変数の使用方法が異なるパターンの特徴 – GUIの設定 – 同じ型の引数を複数とるメソッド呼び出しが出現 – 基本データ型が出現 • int 型など int caret,

コード片の生成(失敗例) • 変数の使用方法が異なるパターンの特徴 – GUIの設定 – 同じ型の引数を複数とるメソッド呼び出しが出現 – 基本データ型が出現 • int 型など int caret, new. Caret; . . . { if (. . . ) this. extend. Selection(caret, new. Caret); else {. . . this. select. None(); } }. . . boolean var 0; if (var 0) { this. extend. Selection(new. Caret, new. Caret); } else { this. select. None(); } 同じ型の引数を複数とるメソッド呼び出しが出現する例 名阪和ソフトウェア 学ミニワークショップ 2010/03/29 Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 19

実装: Eclipseプラグイン コード片 入力キーワード 名阪和ソフトウェア 学ミニワークショップ 2010/03/29 Department of Computer Science, Graduate School of

実装: Eclipseプラグイン コード片 入力キーワード 名阪和ソフトウェア 学ミニワークショップ 2010/03/29 Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 21