識別子の読解を目的とした名詞辞書の作成方法の一試案
藤木 哲 也†1

早 瀬 康 裕†1

井 上 克 郎†1

本稿では，識別子の読解を支援するために，識別子に用いられる単語の辞書を自動的に作成する手法を提案する．作成する辞書には，識別子に用いられる名詞の説明文が収録される．説明文の作成には，プログラム中に記述された識別子名とコメントを利用する．

Towards Noun Lexicon for Identiﬁer Comprehension
Tetsuya Fujiki,†1 Yasuhiro Hayase†1 and Katsuro Inoue†1
This paper proposes a method to generate a lexicon that helps comprehending identiﬁer.
The lexicon consists of descriptions of nouns which are used in identiﬁers. The description isgenerated from identiﬁers and comments in source code.

1. は じ め に詞が含まれているため，作成する辞書を利用することで類推を支援できる場面は多い．また，プログラム解プログラムの保守において，ソースコードの理解に析ツールの出力には多くの識別子が含まれるため，提1)掛かるコストは全体の中で大きな割合を占める．
さら案する辞書はプログラム解析技術の普及にも役立つとに，ソースコードの可読性及び開発者の知識等によっ期待される．て，理解に要するコストは大きく変化する．
一般に，ソフトウェア開発者はソースコードからソ

2. 提 案 手 法

フトウェアの動作を理解する際に，識別子名から関数提案手法の概要を図１に示す．提案手法では，Javaや変数の役割や振舞いを類推する．しかし，識別子にソースコード集合を入力とし，識別子に用いられる名適切な命名がなされていない場合にはうまく類推が行詞の説明を収録した辞書を出力する．本手法では，各えず，理解に要する労力が増えてしまう．また，識別名詞に対して，ソースコード中にあるクラスや変数の子の命名規則や識別子中に現れる単語の用法は自然言説明として記述されているコメントから，名詞を説明語と異なる場合があるために，識別子に適切な命名をする文を抽出することにより，説明を作成する．以降，行うことは容易でない．そして，類推や適切な命名の各処理について説明する

ために，開発者には多くの経験や開発するソフトウェア分野に対する知識が必要である．
その問題を解決するため，我々は，ソフトウェアに用いられている単語の種々の情報を収録した辞書を作成することで，ソフトウェアの理解を支援することを目標としている．

初めに，Java ソースコード集合から識別子とそれを説明するコメントのペアを取得する．また，ドキュメンテーションコメントを利用することで，識別子とコメントの対応付けを行う．
次に，識別子名を分解し名詞を抽出し，名詞とコメント集合のペアを作成する．まず，識別子名をキャメ

本論文は，識別子からの読解を支援するために，識ルケースやスネークケースを利用し，複数の単語に分別子に使用される名詞の説明文を，ソースコード中の解する2) ．そして，一定回数以上ソースコード集合中コメントを利用することで，自動的に作成する手法をに出現した名詞についてのみコメントを収集する．そ提案する．

れから，識別子に対応するコメントを，識別子に含ま名詞には変数の型，データの構造や関数の操作の対象などの情報が含まれている．多くの識別子名には名れる名詞のコメント集合に追加する．
最後に，自動要約技術を利用し，説明文を作成する．
コメント集合を一つの文章とみなし，その文章に対す†1 大阪大学
Osaka Universityる要約を作成し，その要約結果を名詞の説明文として                                                                                              "# $ # %&図1

提案手法の概要

かれていることは少ないため，本研究の目的を達成す

Copernic Summarizer による要約

るためには文を加工する必要がある．また，コメント

Buﬀer:
A class for reading arbitrary numbers of bits from abyte array.
StringBuﬀer is a variable size contiguous indexable
array of characters.

Tree:
Displays a tree showing all the elements in a text Document.
Selecting a node will result in reseting the selection of
the JTextComponent.
図2                        !

中には名詞と関係の無い記述 (例: デバッグ用情報など) が含まれており，これらの記述が要約結果に影響を与えていることも分かった．さらに， tree に関係するコメントには，名詞の役割を説明する文が一切含まれていなかった．この原因は，コメントを記述した開発者が，名詞の意味を常識と考えたために説明を省略したことであると考えられる．

実験結果の例

4. 今後の課題選択する．

3. 予 備 実 験

実験の結果を踏まえて，名詞の説明としてより適当な説明文を作成することを目指す．

本研究に適した説明文作成手法を調べるために予備説明文の作成方法によって，得られる説明文は大き実験を行った．実験では識別子に頻繁に用いられる５く変化する．そのため，実験を繰り返し行うことで，つの名詞（tree,node,page,buﬀer,table）を説明する文

説明文作成に適したアルゴリズムを決定する必要があを作成し，作成した説明文が名詞の説明文として適当る．説明文の作成方法として，コメント集合中に複数であるかを主観的に評価した．また，コメント集合の回出現するフレーズを抽出し，組み合せることで説明コメントの内容を調査した．コメントの収集は，複数文を作成する方法を考えている．のソフトウェアのソースコードから手作業で行った．

次に，要約に与える入力を改善する．具体的には，そして，収集したコメントは，クラス名に目的の名単語の説明する文を多く，説明と無関係な文を少なく詞を含んでいるクラス，及びクラス名の末尾が目的する．目的の名詞を含む識別子を説明するコメントだの名詞であるクラスに対するコメントである．名詞

けでなく，親・子クラスのコメントや，識別子名に名の説明文作成には，商用の自動要約ツール Copernic

詞が含まれていなくてもコメント中に名詞が出現する

Summarizer?1?2と Intellexer Summarizer を用いた．

コメントなどをコメント集合に含める．また，コメン

実験結果の一部を図２に示す．

トから，タイムスタンプ，デバッグ用情報，開発環境

5 つの名詞のうち buﬀer に関しては，buﬀer のによる自動挿入文などを削除する．

役 割 を 連 想 で き る 文 が 得 ら れ た と 考 え る ．ま た ，node,page,table に関しては，名詞に関連する文が得られた．しかし，tree に対する要約では，特定のクラスの振舞いを記述した文が出力されてしまった．
この実験から得られた知見を以下に記す．今回使用
した 2 つの自動要約ツールは，入力の文章に含まれる文を無加工で抜き出し，要約文として出力する．しかし，コメント中に名詞の説明として適切な文が直接書?1 Copernic Summarizer:http://www.copernic.com?2 Intellexer Summarizer:http://summarizer.intellexer.com

謝辞 本研究は科研費（21700031）の助成を受けた．

参考文献1) LaToza, T.D., Garlan, D., Herbsleb, J.D.
andMyers, B.A.: Program comprehension as
factﬁnding, ESEC-FSE 07, New York, NY,USA,ACM, pp.361-370 (2007).
2) Dave, Binkley., Marcia, ADaavis., Dawn,Lawire., and Chjristopher, Morrell. : To
CamelCase or Under score,2009 IEEE 17thICPC,pp.158-167 (2009).