メソッド名に用いられる動詞-目的語関係の辞書作成にむけて
鹿島悠†1

裕†1

早 瀬 康井 上克郎†1

オブジェクト指向プログラムにおいて，メソッド名はプログラムの動作を表わす重要な部分である
ため，メソッド名に不適切な命名が行なわれた場合，プログラムの理解が困難になることが知られている．本研究では，メソッド名やシグネチャに用いられる動詞-目的語の組を収録した辞書の作成方法を提案する．

A Dictionary of Verb-Object Relations in Method Names
Yu Kashima,†1 Yasuhiro Hayase†1 and Katsuro Inoue†1
In Object-Oriented Programs, names of methods have an important roll because they noticeactions of a program. Therefore, irrelevant names of methods make program comprehensiondiﬃcult. This paper proposes an approach to create a dictionary of verb-object relations inmethod names.

1. は じ め に空である場合がある．
本手法では，まず，Java ソースコード集合を解析し，オブジェクト指向プログラムにおいて，メソッド名メソッドのシグネチャやメソッドを定義しているクラはプログラムの動作を表わす重要な部分である．メソッスの名前を取得する．その後メソッド名をアンダース

ド名は動詞や動詞句で始まることが推奨され3) ，そのコアや CamelCase で分解し，単語列に分解する．そ

後に目的語が続く場合が多い．例えば，changeValue()の単語列に対し品詞解析を行い，単語ごとの品詞情報というメソッドでは change が動詞，Value がその目を決定する．そして，切り分けた単語のうち，連続す的語である．もし，メソッドに不適切な命名がなされる名詞と，形容詞の後に名詞が続く部分を結合し，1た場合，プログラムを利用しようとしている開発者につの名詞として扱う．また，クラス名とメソッドの引誤解や混乱を招く．

数は，全て一つの名詞として扱う．

そこで，本研究では開発者に適切なメソッドへの命

本手法では，動詞-目的語の組の抽出ルールを事前名を促すために，メソッド名に頻繁に使われる単語のに複数作成しておく．そして，品詞情報を付加された例を収録した辞書を作ることを目指す．具体的には，シグネチャとクラス名に対して抽出ルールを適用し，多くのプログラム中で使用されている，動詞-目的語動詞-目的語の組の抽出を行なう．個々の抽出ルールの組を収録した辞書を作成する手法を提案する．プロは，特定の品詞列で構成されるシグネチャとクラス名

グラム解析ツールの出力には大量の識別子が出現するを対象に，どの単語を動詞-直接目的語-間接目的語とため，提案する辞書によってプログラム解析ツールをより簡単に使用することが出来るようになると期待される．

[1](void) 動詞 名詞1 (名詞1) in class 名詞2→ < 動詞，名詞1，名詞2 >2. 提 案 手 法
図 1 に本手法の概要を示す．本手法の入力は Java
プログラムのソースコード集合であり，出力はプログ

抽出ルール
抽出ルール[2]入力(void) add Product (Product) in class Stock
動詞 名詞1 名詞1名詞2

ラム中の動詞-直接目的語-間接目的語の関係を表わす三つ組を記述した辞書である．ただし，間接目的語は抽出された組された組[3] 抽出された< add， Product， Stock >†1 大阪大学 情報科学研究科
Osaka University

図 2 抽出ルールの適用例

抽出ルール
抽出ルール(void) addProduct(Product) in class Stock…etc(void) 動詞 名詞1 (名詞1) in class 名詞2→ < 動詞, 名詞1, 名詞2 >動詞

適用
フィルタリング

StockfindDeadlocks…

…

[名詞名詞]
名詞

間接目的語

Product…

(void) add Product (Product) in class Stock→ < add, Product, Stock >add Product[動詞動詞]
動詞

直接目的語

add

［動詞］ ［直接目的語］ ［間接目的語］

ソースコード集合シグネチャとクラス名の取得
メソッド名の分解と品詞解析

辞書の作成

動詞ー目的語関係の候補を抽出

図1

手法の概要して抽出するかを定めたものである．例を図 2 に示す．

動詞-目的語の組の抽出を行なった．その結果抽出でき事前に定めた抽出ルールが図中の [1] である．ソース

た動詞，直接目的語，間接目的語，動詞-直接目的語-コード集合より (void)addProduct(Product) in class

間接目的語の組の，総数と複数のソフトウェアに跨っStock というシグネチャとクラス名を取得したとき，て出現した数を表 1 に示した．

[2] のように品詞情報が決定される．そして，[2] のシグ以下に，予備実験により得られた知見を記す．まず，ネチャは [1] のルールに適合するため，[3] の通り動詞-ソフトウェア毎に識別子中で使用される単語が異なる

直接目的語-間接目的語の組として，<add，Product，ため，同じ三つ組が出現することは非常に少ないこと

Stock>を得る．

が分かった．一方，単一のソフトウェア内では似通っ最後に，抽出された動詞-直接目的語-間接目的語のた単語と命名方法が使われている場合があった．例え組のうち，多くのソフトウェアで出現した組は一般的

ば，あるソフトウェアでは，「add + 形容詞 + Consist」

な動詞-目的語の関係であると考えられるので，辞書という識別子名が多く出現していた．さらに，ソフトに収録する．

ウェア中で使われる動詞について調査したところ，getや add， find などの一般的な動詞はほとんどのソフ

3. 予 備 実 験トウェアに出現していたが，adapt や contribute と抽出ルールを作成するため，予備実験を行った．予備実験では，sourceforge.net で公開されている Javaで記述されたソフトウェアの中から無作為に 11 個を選び，それらのソフトウェアに含まれるソースコードをいった 1 つのソフトウェアにしか出現しない動詞も存在していた．

4. 将来の課題

読み，人手で抽出ルールを作成した．具体的には，メより多くの関係を取得するために，メソッド名が前

ソッド名の先頭語が動詞であるものを対象に，メソッ置詞を複数含む場合に対する抽出ルールや，複数の引ド名が動詞のみまたは動詞と動詞の直後に続く名詞だ数を持つメソッドに対する抽出ルールの作成が必要でけで構成され，引数が 0 個または 1 個の場合や，メある．また，適用実験として，提案手法を大規模なソソッド名中に直接目的語と間接目的語が書かれている

フトウェア集合に対して適用し，得られた関係を評価と考えた場合の抽出ルールを作成した．作成したルーする必要もある．さらに，作成する辞書を効果的に開ルの例を以下に示す．

発者へ提供する方法も考案する必要がある．

• (名詞 1) 動詞 名詞 1() in class 名詞 2

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

→ <動詞，名詞 1，名詞 2>• (*) 動詞 名詞 1 前置詞 名詞 2 (*) in class *→ <動詞，名詞 1，名詞 2>（*は任意の語句を表す）
抽出ルールの作成後，作成した抽出ルールを用いて対象とした 11 個のソフトウェアのソースコードから

表 1 各品詞と動詞-目的語の組の出現回数
出現ソフトウェア数
動詞
直接目的語
間接目的語
動詞-直接目的語-間接目的語

総数

単独155
5378
2869
14501

7748752719
14433

複数78503
150
68

参考文献

1) Fry, Z.P., Shepherd, D., Hill, E., Pollock, L.
and Vijay-Shanker, K.: Analysing source code:
looking for useful verb-direct object pairs in all
the right places., IET Software, Vol. 2, No. 1,pp.27–36 (2008).
2) Hill, E., Pollock, L. and Vijay-Shanker, K.:
Automatically capturing source code context ofNL-queries for software maintenance and reuse,Proc. 31st ICSE, pp.232–242 (2009).
3) Sun Mycrosistems: Sun Java Tutorial, http://java.sun.com/docs/books/tutorial/java/
javaOO/methods.html.