メソッドに用いられる 動詞-目的語関係を収録した 辞書構築手法の提案

Slides:



Advertisements
Similar presentations
大規模コーパスから獲得した 名詞の出現パターンを用いた 事態名詞の項構造解析
Advertisements

最大エントロピーモデルに基づく形態素解析と辞書による影響
XHTML構文検証手法における スクリプト要素の静的解析アルゴリズム
JavaScript プログラミング入門 2006/11/10 神津.
知識情報演習Ⅲ(後半第1回) 辻 慶太(水)
メソッド周辺の識別子と メソッド本体のAPI利用実績に基づいたAPI集合推薦手法
Myoungkyu Song and Eli Tilevich 発表者: 石尾 隆(大阪大学)
実験 関数・記号付き文型パターンを用いた機械翻訳の試作と評価 石上真理子 水田理夫 徳久雅人 村上仁一 池原悟 (鳥取大) ◎評価方法1
情報伝播によるオブジェクト指向プログラム理解支援の提案
プログラムの動作を理解するための技術として
ユースケース図2-4~ FM11012 中島拓也.
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
クラス動作シナリオ可視化手法の プログラム理解作業に対する有効性評価
動詞の共起パターンを用いた 動作性名詞の述語項構造解析
Javaソフトウェア部品検索システムのための索引付け手法の提案と実装
プログラム実行履歴を用いたトランザクションファンクション抽出手法
プログラム実行時情報を用いたトランザクションファンクション抽出手法
情報管理論 2018/11/9 情報分析の道具 2018/11/9 情報分析の道具 情報分析の道具.
相関ルールマイニングを用いた メソッドの命名方法の分析
ソースコード中に出現する 動詞-目的語関係を利用した メソッド名の命名支援手法
Javaクラスの利用関係を用いた ソフトウェア部品のカテゴリ階層構築法
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
識別子の命名支援を目的とした動詞-目的語関係の辞書構築
コードクローンの分類に基づいた メソッド引き上げ手順の提案とその有効性評価
動的依存グラフの3-gramを用いた 実行トレースの比較手法
ポインタ解析におけるライブラリの スタブコードへの置換の効果
インラインスクリプトに対するデータフロー 解析を用いた XHTML 文書の構文検証
シーケンス図を用いて実行履歴を可視化するデバッグ環境の試作
利用関係に基づく類似度を用いたJavaコンポーネント分類ツールの作成
Javaプログラムの変更を支援する 影響波及解析システム
コードクローン検出ツールを用いた ソースコード分析システムの試作と プログラミング演習への適用
リファクタリング支援のための コードクローンに含まれる識別子の対応関係分析
プログラム動作理解支援を目的とした オブジェクトの振舞いの同値分割手法
ソースコードの特徴量を用いた機械学習による メソッド抽出リファクタリング推薦手法
コードクローンの動作を比較するためのコードクローン周辺コードの解析
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
Webコミュニティ概念を用いた Webマイニングについての研究 A study on Web Mining Based on Web Communities 清水 洋志.
プログラムで多用される 動詞と目的語の関係を利用した メソッド名提案ツール
バイトコードを単位とするJavaスライスシステムの試作
Javaソフトウェア部品検索システムSPARS-Jの実験的評価
シナリオを用いたレビュー手法PBRの追証実験 - UMLで記述された設計仕様書を対象として -
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
コーディングパターンの あいまい検索の提案と実装
JAVAバイトコードにおける データ依存解析手法の提案と実装
JavaScriptを含んだHTML文書に対する データフロー解析を用いた構文検証手法の提案
アルゴリズムとプログラミング (Algorithms and Programming)
プログラムスライスを用いた凝集度メトリクスに基づく 類似メソッド集約候補の順位付け手法
設計情報の再利用を目的とした UML図の自動推薦ツール
保守請負時を対象とした 労力見積のためのメトリクスの提案
クローン検出ツールを用いた ソフトウェアシステムの類似度調査
オープンソースソフトウェアに対する コーディングパターン分析の適用
メソッドの同時更新履歴を用いたクラスの機能別分類法
欠陥検出を目的とした類似コード検索法 吉田則裕,石尾隆,松下誠,井上克郎 大阪大学 大学院情報科学研究科
ソフトウェア理解支援を目的とした 辞書の作成法
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
複雑度メトリクスを用いた JAVAプログラム品質特性の実験的評価
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
コードクローン解析に基づく デザインパターン適用候補の検出手法
回帰テストにおける実行系列の差分の効率的な検出手法
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
木構造の比較に基づく メソッド呼び出し履歴の変化の可視化手法
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
識別子の読解を目的とした名詞辞書の作成方法の一試案
オブジェクト指向メトリクスを用いた 開発支援に関する研究 --- VC++とMFCを用いた開発を対象として ---
プログラム理解のための 付加注釈 DocumentTag の提案
情報処理Ⅱ 小テスト 2005年2月1日(火).
Presentation transcript:

メソッドに用いられる 動詞-目的語関係を収録した 辞書構築手法の提案 鹿島 悠† ,早瀬 康裕‡ , 真鍋 雄貴† ,松下 誠† , 井上 克郎† † 大阪大学, ‡ 東洋大学

概要 研究目的 提案手法 評価実験 識別子の命名支援 動詞-目的語関係の辞書構築 メソッドから動詞-目的語関係を抽出 特定のアプリケーションドメインを対象とした辞書の構築 評価実験 構築した辞書にドメイン固有の動詞-目的語関係が多数収録されていることを確認 同じプログラミング言語を使用したプログラムに一般的に出現する関係も多く収録されていた

プログラム理解 識別子の名前が重要な役割を果たす[2][3] 識別子に不適切な命名がなされた場合,プログラム理解に多大な時間を要する ソフトウェア保守の際大きな時間を消費する[1] 識別子の名前が重要な役割を果たす[2][3] 作業者はプログラム要素の役割を名前から推測し,アプリケーションドメインの知識と対応づける 識別子に不適切な命名がなされた場合,プログラム理解に多大な時間を要する [1] : R. K. Fieldstad and W. T. Hamlen. Application Program Maintenance Study: Report to Our Respondents [2]: A. Von Mayrhauser and A. M. Vans. Identication of Dynamic Comprehension Processes During Large Scale Maintenance [3]: Nancy Pennington. Comprehension strategies in programming

識別子への適切な命名 適切な命名のためには,名前に使用される単語や命名規則を知る必要がある 単語や命名規則は以下の状況で変化 プログラミング言語 開発組織 アプリケーションドメイン 単語や命名規則が文書化されていない場合,多数のソースコードを読解し,学習する必要がある

名詞の辞書 ソースコード中の名詞の辞書[4] メソッドでは動詞と名詞の関係が重要となる 収録される関係 名詞の上位下位関係 名詞と修飾語の修飾関係 クラス名や変数名の命名支援に役立つと考えられる メソッドでは動詞と名詞の関係が重要となる 名詞の辞書だけでは不十分 [4]:早瀬 康裕, 市井 誠, 井上 克郎. ソフトウェア理解支援を目的とした辞書の作成法

メソッド中の識別子 メソッドの各要素の識別子 メソッド名 メソッド定義時 MenuListener を JMenu に 追加(add)する 複合語となっていることが多い 動詞,目的語,前置詞などから構成 メソッド定義時 所属するクラス・仮引数が目的語になる Ex. Jmenu クラスの void addMenuListener(MenuListener) MenuListener を JMenu に 追加(add)する 直接目的語 間接目的語 動詞 (しかし,識別子の中には複数の語で意味を表現しているものもあることを説明する) ここで,識別子の名前の特徴について述べます. 識別子の名前は,複数の単語から構成される場合があり,また,複数の識別子に出現する語の組み合わせで動作を表現している場合もあります. 例として,オブジェクト指向プログラム中のメソッドに出現する識別子について述べます. メソッドのメソッド名は,複合語となっていることが多く,動詞,目的語,前置詞などから構成されています また,メソッドを定義する際,所属するクラスや仮引数がメソッド名中の動詞の目的語になっている場合があります. 例として,Jmenuクラスの addMenuListenerというメソッドではMenuListenerが直接目的語,Jmenuが間接目的語,addが動詞として 出現しています.

提案手法 動詞-目的語関係の辞書の作成 辞書の活用 メソッドから動詞-目的語の関係を抽出 特定のドメインを対象とした辞書の作成 識別子の命名支援 収録された動詞-目的語関係を開発者に例示 特定のドメインで使用される単語や命名規則の学習を支援

提案手法の概要 事前に人手で定義 パターンマッチ 辞書 特定のドメインに所属する ソフトウェアのソースコード 抽出パターン メソッド情報 戻り値 メソッド名 引数 クラス名 void 動詞1 名詞2 名詞2 名詞3 メソッド情報 動詞 直接目的語 間接目的語 動詞1 名詞2 名詞3 戻り値 メソッド名 引数 クラス名 void addProduct Product Stock add Product パターンマッチ void 動詞 名詞 名詞 名詞 動詞-直接目的語-間接目的語 辞書 動詞 直接目的語 間接目的語 出現したソフトウェアの数 Add Product Stock 3 Build Data BooleanMatrex 1 Set Password User 4 Describe Alias Xml 動詞 直接目的語 間接目的語 出現したソフトウェアの数 Add Product Stock 3 Build Data BooleanMatrex 1 Set Password User 4 Describe Alias Xml

メソッド情報 戻り値,メソッド名,引数,クラス名に出現する単語に,品詞情報を付けた単語列の4つ組 戻り値 メソッド名 引数 クラス名 名詞一つ void 複合語を分解し 単語の列にして 品詞解析を行う (OpenNLPを利用) 名詞の列 名詞一つ メソッド情報の例 void createTicketForUser User Server create Ticket For User void 動詞 名詞 前置詞 名詞 名詞 名詞

抽出パターン 抽出を行う条件の4つ組と 動詞,直接目的語,間接目的語として抽出する単語の指定 戻り値 メソッド名 引数 クラス名 void 名詞一つ ワイルドカード 名詞の列 ワイルドカード 名詞一つ ワイルドカード 品詞の列 各品詞に番号を付与 動詞,直接目的語,間接目的語として抽出する単語の指定 抽出パターンの例 戻り値 メソッド名 引数 クラス名 void 動詞1 名詞2 前置詞3 名詞4 ワイルドカード ワイルドカード 動詞 直接目的語 間接目的語 動詞1 名詞2 名詞4

パターンマッチ 抽出パターンで指定した条件の4つ組を,メソッド情報が全て満たしているか検査 条件が満たされた場合,抽出パターンに従い動詞,直接目的語,間接目的語を抽出 メソッド情報 動詞 直接目的語 間接目的語 create Ticket User void createTicketForUser User Server create Ticket For User void 動詞 名詞 前置詞 名詞 名詞 名詞 抽出パターン 完全一致であることを説明する. 抽出パターン中のワイルドカード以外の部分で,.... この抽出パターンのワイルドカード以外の品詞情報と,これに対応するメソッド情報の品詞情報が一致しますので,指定に従い,動詞1,名詞2,名詞4の単語を抽出し,三つ組を抽出します. 戻り値 メソッド名 引数 クラス名 void 動詞1 名詞2 前置詞3 名詞4 ワイルドカード ワイルドカード 動詞 直接目的語 間接目的語 動詞1 名詞2 名詞4

評価実験 評価基準 事前準備 メソッドの動詞-目的語関係を抽出した辞書が作成できたかどうか 特定のドメインを対象とした命名支援用の辞書として有効かどうか 事前準備 抽出パターンを31個定義 著者が経験的に判断し,抽出パターンを定義

抽出パターンの作成方法 void addElement Element List add Element void 名詞 名詞 メソッド名 メソッド情報 void addElement Element List add Element void 名詞 名詞 動詞 名詞 抽出パターン メソッド名 引数 クラス名 戻り値 void 動詞1 名詞2 名詞2 名詞3 動詞 直接目的語 間接目的語 動詞1 名詞2 名詞3

実験対象 4つのドメインの辞書を作成 辞書には2つ以上のソフトウェアで出現した動詞-直接目的語-間接目的語の三つ組を収録 Web Application (WEB) XML Database (DB) GUI 辞書には2つ以上のソフトウェアで出現した動詞-直接目的語-間接目的語の三つ組を収録 ドメイン 入力した ソフトウェア数 メソッド数 収録した 三つ組の数 WEB 10 74707 282 XML 11 55812 547 DB 9 74127 672 GUI 7 298696 407 評価実験の実験対象として, Web Application,XML,Database,GUIのドメインの辞書を作成しました. 辞書を作成する際に入力したソフトウェアの数,入力ソフトウェア内のメソッドの数,そして最終的に辞書に収録された三つ組の数を表に記しています. なお,辞書には2つ以上のソフトウェアで出現した三つ組が収録されています.

実験方法 各辞書からランダムに90個の組を抽出 抽出した三つ組に対するアンケート調査 各三つ組は以下のドメインで見られる組かどうか 辞書が対象とするドメイン Javaプログラム一般 動詞,直接目的語,間接目的語の判断が正しいか どうか 各三つ組を以下のドメインの命名支援用の辞書に 収録してもよいかどうか 実験方法について説明します. まず,作成した各辞書から,ランダムに90組を抽出します. そして抽出した各三つ組に対してアンケート調査を行いました. 質問の内容はこのようになっていまして, まず,収録された三つ組は,辞書が対象としているドメインで見られる組と思うかかどうか,また,Javaプログラム一般で見られる組だと思うかどうかについて質問しました. また,三つ組について,動詞,直接目的語,間接目的語の判断が正しいと思うかどうかについて質問しました. さらに,各三つ組を辞書が対象とするドメインを対象とした命名支援用の辞書に収録してもよいかどうか,またはJavaプログラム一般を対象とした命名支援用の辞書に収録してもよいかどうか,について質問しました.

被験者 著者の所属する研究室の学生6人 全員Javaを用いた開発経験あり 被験者が開発経験のあるドメインを対象とした辞書に対して回答 1人あたり2つの辞書に対して回答 1つの辞書につき3人の被験者に30組づつ評価してもらう アンケートの被験者は,私の所属する研究室の学生6人です. 彼らは全員Javaを用いた開発経験があり,被験者が開発経験のあるドメインの辞書に収録された三つ組について回答してもらいました. 一人あたり2つの辞書を,一つの辞書につき30組づつ評価してもらいました.

実験結果の概要 メソッドに出現する動詞-目的語関係の辞書の作成に成功 ドメイン専用の辞書としては改善の余地あり その他改善の余地がある点 命名支援用の辞書に収録してもよいと判定された組を多数収録していた ドメイン専用の辞書としては改善の余地あり Javaに出現する関係も多く収録されていた その他改善の余地がある点 動詞,直接目的語,間接目的語の判定に間違いがある組が収録されていた 命名支援には有用でない関係が収録されていた

実験結果(1/3) 辞書のドメインで見られる組の割合 62% ~ 75% Javaプログラム一般で見られる組の割合 38% ~ 76%

実験結果(2/3) 6% ~ 13% 動詞,直接目的語,間接目的語の判定が間違っていると評価 された三つ組の割合 次に,辞書に収録された三つ組のうち,動詞,直接目的語,間接目的語いずれかの判定が間違っている,と評価された三つ組の割合を,グラフで示します. これも横に各辞書が並び,縦軸は最低0最大100% で割合となっています. 実験の結果,判定が間違っているとされた三つ組の割合は,最大がXMLの13%,最低がWEBの6%となりました. 動詞,直接目的語,間接目的語の判定が間違っていると評価 された三つ組の割合 6% ~ 13%

実験結果(3/3) 53% ~ 71% Javaプログラム一般の辞書に収録しても良いと評価された三つ組の割合 30% ~ 61% 最後に,辞書を作成したときに対象としていたドメイン の命名支援用の辞書に収録しても良いと評価された三つ組の割合と, Javaプログラム一般の辞書に収録しても良いと判断された三つ組の割合を示します. 先程示したグラフと同じく,横に各辞書を並べ,縦軸は最低0最大値100%で割合を示しています. 青のグラフが辞書のドメインの命名支援用の辞書に収録しても良いと評価された三つ組の割合,赤のグラフがJavaの命名支援用の辞書に収録しても良いと評価された三つ組の割合となっています. 辞書のドメインでの最大値はDBの71%,最低はXMLの53%となっています.Javaプログラム一般での最大値はGUIの61%,最低はXMLでの30%となっています. 辞書のドメインの辞書に収録しても良いと評価された三つ組の割合 53% ~ 71% Javaプログラム一般の辞書に収録しても良いと評価された三つ組の割合 30% ~ 61%

被験者が収録しても良いと判断した組 ドメイン 動詞 直接目的語 間接目的語 WEB Destroy Session HttpSessionEvent XML Declare Prefix NamespaceSupport DB Add Constraint Table GUI Click Mouse MouseEvent

被験者が収録すべきでないと判断した組 判断の理由 例 対象ドメインとは異なるドメインに所属している 動詞,直接目的語,間接目的語の判定が間違っている 直接目的語や間接目的語に何らかの語の省略語と思われる語が出現していた あまりにも一般的すぎる関係だった 特定のライブラリに依存して出現する関係であり,ドメインの辞書に入れるには不適当と判断した 例 ドメイン 動詞 直接目的語 間接目的語 DB Release Mouse MouseEvent GUI Gain Focus Fe

実験結果に対する考察 異なるドメインに所属する関係が収録されてしまった理由について 辞書作成のために入力したソフトウェアの数が7~11と少なかったため,辞書のドメイン以外に所属する関係を取り除けなかった 入力するソフトウェアの数を増やして対応したい 入力したソフトウェアが複数のドメインを扱っていた プログラムで一般的に見られる関係や他のドメインで見られる関係を取り除くことで解決を狙う

まとめと今後の課題 まとめ 今後の課題 特定のドメインを対象とした,メソッドに出現する動詞-目的語関係を収録した辞書の構築手法を提案 他のドメインに所属する関係や,命名支援に有用でない関係を辞書から取り除く方法の開発 辞書を利用した命名支援環境の構築