メソッドに用いられる 動詞-目的語関係を収録した 辞書構築手法の提案 鹿島 悠† ,早瀬 康裕‡ , 真鍋 雄貴† ,松下 誠† , 井上 克郎† † 大阪大学, ‡ 東洋大学
概要 研究目的 提案手法 評価実験 識別子の命名支援 動詞-目的語関係の辞書構築 メソッドから動詞-目的語関係を抽出 特定のアプリケーションドメインを対象とした辞書の構築 評価実験 構築した辞書にドメイン固有の動詞-目的語関係が多数収録されていることを確認 同じプログラミング言語を使用したプログラムに一般的に出現する関係も多く収録されていた
プログラム理解 識別子の名前が重要な役割を果たす[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と少なかったため,辞書のドメイン以外に所属する関係を取り除けなかった 入力するソフトウェアの数を増やして対応したい 入力したソフトウェアが複数のドメインを扱っていた プログラムで一般的に見られる関係や他のドメインで見られる関係を取り除くことで解決を狙う
まとめと今後の課題 まとめ 今後の課題 特定のドメインを対象とした,メソッドに出現する動詞-目的語関係を収録した辞書の構築手法を提案 他のドメインに所属する関係や,命名支援に有用でない関係を辞書から取り除く方法の開発 辞書を利用した命名支援環境の構築