Department of Computer Science, Graduate School of Information Science & Technology, Osaka University コーディングパターンに基づ くコード補完ツールの試作 大阪大学 大学院情報科学研究科 ○ 伊達 浩典.

Slides:



Advertisements
Similar presentations
SPIN. Seach Optimization Exhaustive search requires so much time and memory to perform verification realistically, must perform some shortcuts –reduce.
Advertisements

WSDL と JAX-RPC ソフトウェア特論 第 10 回 / お知らせ レポート課題を出しています。 提出は 7/30 ( 金 ) まで。
3D Wand による 3 次 元形状計測. 3次元形状計測装置  3D Wand(テクノドリーム 21 社 製)  構成 3D Wand 本体: 7 つの発光ダイオー ドとラインレーザー発光装置が一体となっ た手に持って移動できる電池駆動の装置.
SPSSによるHosmer-Lemeshow検定について
7.n次の行列式   一般的な(n次の)行列式の定義には、数学的な概念がいろいろ必要である。まずそれらを順に見ていく。
第 3 回 iPhone アプリ開発勉強会 Objective-C 基礎講座 - インスタンスメソッド - 三井 相和.
9.線形写像.
情報処理A 第10回 Excelの使い方 その3.
麻雀ゲーム 和島研究室 ソ 小林巧人
5.連立一次方程式.
相関.
素数判定法 2011/6/20.
フーリエ係数の性質. どこまで足す? 理想的には無限大であるが、実際に はそれは出来ない これをフーリエ解析してみる.
1章 行列と行列式.
本宮市立白岩小学校. 1 はじめに 2 家庭学習プログラム開発の視点 ① 先行学習(予習)を生かした 確かな学力を形成する授業づく り ② 家庭との連携を図った家庭学習の習慣化.
プログラミングⅠ( 1 組) 第 9 回
プログラミング入門2 第4回 式文 代入式 論理演算子 ループの脱出、スキップ 情報工学科 篠埜 功.
3.エントロピーの性質と各種情報量.
Excelによる積分.
1 6.低次の行列式とその応用. 2 行列式とは 行列式とは、正方行列の特徴を表す一つのスカ ラーである。すなわち、行列式は正方行列からスカ ラーに写す写像の一種とみなすこともできる。 正方行列 スカラー(実数) の行列に対する行列式を、 次の行列式という。 行列 の行列式を とも表す。 行列式と行列の記号.
計算のスピードアップ コンピュータでも、sin、cosの計算は大変です 足し算、引き算、掛け算、割り算は早いです
線形符号(10章).
1 0章 数学基礎. 2 ( 定義)集合 集合については、 3セメスタ開講の「離散数学」で詳しく扱う。 集合 大学では、高校より厳密に議論を行う。そのために、議論の 対象を明確にする必要がある。 ある “ もの ” (基本的な対象、概念)の集まりを、 集合という。 集合に含まれる “ もの ” を、集合の要素または元という。
4.プッシュダウンオートマトンと 文脈自由文法の等価性
1 0章 数学基礎. 2 ( 定義)集合 集合については、 3セメスタ開講の「離散数学」で詳しく扱う。 集合 大学では、高校より厳密に議論を行う。そのために、議論の 対象を明確にする必要がある。 ある “ もの ” (基本的な対象、概念)の集まりを、 集合という。 集合に含まれる “ もの ” を、集合の要素または元という。
システムプログラム論 課題 大村 廉. 課題 Java を用いて Producer / Consumer 問題を解決する MyBuffer クラスを –Synchronized キーワード –Semaphore クラス (java.util.concurrent.Semaphore) を用いてそれぞれ作りなさい.
信号測定. 正弦波 多くの場合正弦波は 0V の上下で振動する しかし、これでは AD 変換器に入れら れないので、オフ セットを調整して データを取った.
1 9.線形写像. 2 ここでは、行列の積によって、写像を 定義できることをみていく。 また、行列の積によって定義される写 像の性質を調べていく。
通信路(7章).
アルゴリズムとデータ構造 補足資料 7-4 「単純交換ソート exsort.c 」 横浜国立大学 理工学部 数物・電子情報系学科 富井尚志.
3.プッシュダウンオートマトンと 文脈自由文法
6.符号化法(6章).
ビット. 十進数と二進数 十進数  0から9までの数字を使って 0、1、2、3、4、5、6、7、8、9、 10、11、12 と数える 二進数  0と1を使って 0、1、10、11、100、101、11 0、111 と数える.
創成C PROGRAMMING PROJECT 中部大学工学部情報工学科:創成Cインタラクティブデザイン( アプリ名: ZIP 2 GPS 作成者: EP00000 藤吉 弘亘.
3.正方行列(単位行列、逆行列、対称行列、交代行列)
学習者の意欲を高める音読指導の 一時例 1 Speak を使った 音読指導 鈴木政浩(西武文理大学)
プログラミング演習B ML編 第3回 2010/6/15 (コミ) 2010/6/16 (情報・知能) 住井 ~sumii/class/proenb2010/ml3/
論理回路 第1回. 今日の内容 論理回路とは? 本講義の位置づけ,達成目標 講義スケジュールと内容 受講時の注意事項 成績の評価方法.
方程式を「算木」で 解いてみよう! 愛媛大学 教育学部 平田 浩一.
データベース入門 日進高等学校 情報化推進委員会. 表計算ソフトとの比較 表計算ソフト (Excel) データベース ( Access ) 編集 二人目はデータの編集が ロックされる 複数の人が同時にデータ を 編集できる 信頼性 ファイルの数だけ データが存在する データは一つ データ処理 自由.
C言語応用 構造体.
Servlet 入門 大岩研究室 川村昌弘. そもそも WEB アプリってなんやね ん n この研究会のテーマは『 WEB アプリケー ションの開発』でした. n じゃぁ WEB アプリケーションって何です か? o WEB アプリってどんなものがありますか? 検索エンジン 乗換え案内サイト 翻訳.
実装の流れと 今後のスケジュール 03k0014 岸原 大祐. システム概要 天気データをもとに、前向き推論をし ていき、親の代わりに子供に服装、持 ち物、気をつけることなどを教える。
DirectX を使った操作が簡単な2 D 格闘ゲームの制 作 ソ20003 蛯名敏規
3.多項式計算アルゴリズム べき乗の計算 多項式の計算.
Li 系化合物の結晶育成と電気的性質の測定 - LabVIEW を用いた計測制御システムの開発 - 矢萩研究室 ソ 佐藤 蓉子
Automatic Language Acquisition, an Interactive Approach † Robert J. Martin † 大西昇 ‡ 山村毅 † 名古屋大学 ‡ 愛知県立大学.
ノベルゲームシステムとネット ワークの連携について 1104081 下元 悠嗣. 研究内容 ノベルゲーム専用のスクリプトエンジン 吉里吉里 /KAG にネットワーク機能を追加 することで従来にない特色を持ったシス テムの開発.
プログラミング演習B ML編 第3回 2006/7/4 (通信コース) 2006/7/12 (情報コース) 住井 ~sumii/class/proenb2006/ml3/
1 中野研究室 4 年ゼミのイロハ 斉藤(修士 2 年) ( 2009 年 ”4 年ゼミのイロハ ” を参考に作りました)
移動エージェントプログラムの 動作表示のためのアニメーション言 語 名古屋大学情報工学コース 坂部研究室 高岸 健.
1 プログラミング言語論 第13回 プログラムの意味論と検証 (2) 表示的意味論 担当:犬塚. 2 表示的意味論 denotational semantics  表示的意味論では、プログラムの要素とそれが 意味するものを対応付ける。 変数 式 文 A B … A+2 2B+C A:=A+2 if.
物体識別のための Adaboost を用いた入力特徴の評価 物体識別のための Adaboost を用いた 入力特徴の評価 情報工学科 藤吉研究室 EP02132 土屋成光.
1 プログラミング言語論 第5回 手続き呼出し 担当:犬塚. 2 今日の講義 手続きや関数などの呼出しに関わること  手続きの宣言、手続きの定義  名前の束縛とスコープ  ブロック構造  スコープ規則  引数渡し  引数渡しと評価(計算)方式.
プログラミングⅠ( 2 組) 第 1 回 / pLB1.pptx.
8.任意のデータ構造 (グラフの表現とアルゴリズム)
プログラミング入門2 第3回 複合文、繰り返し 情報工学科 篠埜 功.
リファクタリング支援のための コードクローンに含まれる識別子の変更内容分析 井上研究室 工藤 良介 1.
メニューに戻る メニューに戻る | 前表示スライド 前表示スライド G*power 3 の web ページ Windows はこちら Mac はこちら ダウンロード後,実行してインストール.
第14回 プログラムの意味論と検証(3) 不動点意味論 担当:犬塚
実験5 規則波 C0XXXX 石黒 ○○ C0XXXX 杉浦 ○○ C0XXXX 大杉 ○○ C0XXXX 高柳 ○○ C0XXXX 岡田 ○○ C0XXXX 藤江 ○○ C0XXXX 尾形 ○○ C0XXXX 足立 ○○
ことばとコンピュータ 2007 年度 1 学期 第 1 回. 2 ことばとコンピュータ 授業科目名:言語情報処理論 授業題目名:ことばとコンピュータ 履修コード: 5067 教室: 323 一学期開講 授業の進め方 – 基本的に講義中心ですすめ,時々コンピュー タを使う.
プログラミング演習( 1 組) 第 8 回
オセロの思考アルゴリズムについて 1103072 岩間 隆浩.
図書館における 個人対応検索システム                03k1001 赤塚 拓巳.
音の変化を視覚化する サウンドプレイヤーの作成
プログラミングの基礎知識 プログラミングの手順と重要概念 アルゴリズム. プログラミングの手順 コーディング エディタなどでコードを記述 コンパイル・インタープリタ 実行可能な形に翻訳 デバッグ(虫取り、不具合の調整) 完成!
IIR 輪講復習 #18 Matrix decompositions and latent semantic indexing.
今日の内容 高階関数  関数を値として扱う 関数を引数にとる 関数を返す関数 プログラミングの例題  クイックソート.
2015/11/19. To foster Historical Thinking Skill by Creating Story Necessary Relationships and Elements of Characters In historical learning, historical.
Presentation transcript:

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University コーディングパターンに基づ くコード補完ツールの試作 大阪大学 大学院情報科学研究科 ○ 伊達 浩典 関山 太朗 石尾 隆 井上 克郎 2010/03/291 名阪和ソフトウェア工学ミニワークショップ 2010

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 目次 コーディングパターン – 構成要素 – 抽出方法 コード補完ツール – コーディングパターンの検索 – 補完コード生成手法 まとめ 2010/03/29 2 名阪和ソフトウェア工学ミニワークショップ 2010

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 背景 同時に利用されるメソッドとその順序 特定条件下で処理を実行 パターンの利用 – プログラム作成時 パターンに従ったコーディング – ソフトウェア保守 パターンに対する一貫した変更 2010/03/29 4 名阪和ソフトウェア工学ミニワークショップ 2010

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University コーディングパターンの抽出手順 1. ソースコードをメソッドに分割 2. 各メソッドから特徴列の抽出 – 正規化 3. パターンマイニング 名阪和ソフトウェア工学ミニワークショップ /03/29 5

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University メソッド内の正規化( 2/2 ) メソッド呼び出し → 戻り値型,メソッド名,引数の型のリスト メソッド名に関しては,パッケージ名,クラス名を無視 制御構造 – 条件分岐 → IF , ELSE , END-IF – 繰り返し → LOOP , END-LOOP 名阪和ソフトウェア工学ミニワークショップ /03/29 7 制御構造正規化ルール

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University メソッド内の正規化の例 名阪和ソフトウェア工学ミニワークショップ /03/29 8 LOOP void methodCall() END-LOOP boolean isDebugMode() IF void printVerbose(int) ELSE void printSimple(int) END-IF int sampleMethod(int x, int y) { int result = x * y; while ( result < 100 ) { methodCall(); result = result * 2; } if ( isDebugMode() ) { printVerbose(result); } else { printSimple(result); } return result; } 正規化 特徴列 メソッド

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University パターンマイニング シーケンシャルパターンマイニング –PrefixSpan アルゴリズム マイニング例 – 条件 パターン長: 4 以上,サポート値: 2 以上 名阪和ソフトウェア工学ミニワークショップ /03/29 9 isDebugMode() IF printVerbose() ELSE printSimple() END-IF isDebugMode() IF printVerbose() END-IF methodCall1() IF printVerbose() END-IF methodCall2() isDebugMode() methodCall3() printVerbose() LOOP print() END-LOOP 特徴列 A 特徴列 C 特徴列 B 特徴列 D

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

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 背景 既存のコード補完 – キーワードを展開し,コードのひな型を生成 問題 – 使用できるパターンが限定されている コード補完の実装であらかじめ用意されている 対象のプログラミング言語でよく使用される 2010/03/29 12 名阪和ソフトウェア工学ミニワークショップ 2010 Eclipse コード補完の例 foreach for ([iterable type] [iterable element] : [iterable]) { }

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 13 提案手法 既存のコード補完の問題点を解決 – ソフトウェア固有のパターンと類似した処理 を再度記述することを防ぐ コーディングパターンに基づくコード補 完手法の提案 – ソフトウェア固有のパターンはコーディング パターンとして得られる 2010/03/29 名阪和ソフトウェア工学ミニワークショップ 2010

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 14 提案手法: コーディングパターンに基づくコード補完手 法 1. パターンの検索 2. コード片の生成 3. ソースコード へ挿入 開発者が入力 した単語 ( キーワード ) 開発者が編集して いるソースコード キーワードに 関連したパターン パターンから 生成したコード片 パターン データベース 2010/03/29 名阪和ソフトウェア工学ミニワークショップ 2010

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

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

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

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

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 20 ソースコードへの挿入 生成したコード片を開発者が編集してい るソースコードへ挿入 挿入後のソースコードを開発者へ提示 開発者は必要に応じて提示されたソース コードを編集 2010/03/29 名阪和ソフトウェア工学ミニワークショップ 2010

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 22 まとめと今後の課題 まとめ – コーディングパターン 抽出方法 – コーディングパターンに基づくコード補完 パターンの検索 コード片の生成 今後の課題 – データフロー情報を利用したコード片の生成 – 実際のソフトウェア開発における評価 2010/03/29 名阪和ソフトウェア工学ミニワークショップ 2010