ソースコードの差分を用いた
関数呼び出しパターン抽出手法の提案
中山 崇 ††

松下 誠 †

井上 克郎 †

大阪大学 大学院情報科学研究科〒 560-8531 大阪府豊中市待兼山町 1-3

一般にソフトウェア部品の利用法の理解には部品に附属するドキュメント等が用いられるが，それらが無い部品では利用法の学習が困難である．こうした部品の利用法理解を支援する手法にコーディングパター
ンの抽出が挙げられる．コーディングパターンとはソースコードに頻出する構造のよく似たコード記述であり，開発者はこれを閲覧する事で実現したい機能に必要な処理を学習できる．しかし，既存のパターン抽出手法では関連の無い機能が 1 つのパターンにまとめられてしまうため，正確な利用法の学習ができないという問題点が存在した．本稿では，この問題点を解決するため，ソースコードの差分から個別の機能に限定した関数呼び出しパターンを抽出する手法を提案する．

Extracting Function Call Patterns from Source Code Deltas
Takashi Nakayama††

Makoto Matsushita†

Katsuro Inoue†

Graduate School of Information Science and Technology, Osaka University
1-3 Machikaneyama-cho, Toyonaka, Osaka 560-8531, Japan

Generally, we learn software components usage from documents attached to them. But it is difﬁcult to learn usage
if the components have no documents. Extracting coding patterns is a method to support comprehending usageof components with no documents. A coding pattern is a code description which appears frequently in source
codes, and developers can learn a series of a process by viewing it. Existing pattern extracting methods, however,combine several features into one pattern, thus developers cannot comprehend correct usage. We propose a method
to extract function call patterns from source code deltas in order to improve the problem.

-1-

1

まえがき

2 ソフトウェア再利用

近年のインターネットの普及により，WWW を

本節では，ソフトウェア部品の利用法と，その通じて大量のソフトウェア資産が容易に入手可能

理解を支援するコーディングパターンについて説となった．このようなソフトウェア資産を新たな明する．

ソフトウェアの部品として開発を進めることをソ

2.1 ソフトウェア部品の利用法

フトウェア再利用と呼び，高品質なソフトウェア

ソフトウェア部品を再利用するには，まず再利を一定期間内に効率良く開発するための代表的な用する部品の利用法を学習する必要がある．例え

ソフトウェア工学技術の一つとして知られている

ば，再利用する部品が関数である場合は，実現し[3, 6]．実際に再利用を行うには，まず再利用する
ソフトウェア部品の利用法を理解する必要がある．
一般に，ソフトウェア部品の利用法の理解はそれたい処理に必要な他の関数群やそれらの呼び出しに附属するドキュメント等をもとに行うが，それ一般に，部品の利用法の学習はそれに附属するらが附属していないソフトウェア部品では利用法

ドキュメントやサンプルプログラムをもとに行わに関する情報が得られないため，部品の利用法をれる．開発者はドキュメントを読む事でその部品学習するのは困難であった．

への理解を深め，サンプルプログラムを見ること

順，各関数の引数や返り値の扱い方などを学習しなければ望んだ機能を実現できない．

こうした問題を解決する手法としてコーディン

事で基本的なコーディングの仕方を学習する．

グパターンの抽出手法がある．コーディングパター

商用のソフトウェア部品等にはこのようなドキュ

ンとはソースコードに頻繁に現れる構造のよく似メントが附属しているため，そこから利用法の学

たコード記述である．開発者はこれを閲覧する事習ができる．しかし，一般に入手できる多くのソでソフトウェア部品の再利用に必要な処理を学習

フトウェアではこれらが附属していないことも多できる．しかし，既存のパターン抽出手法は，同い．そのような部品では利用法の学習が困難となじ箇所で呼び出される関数には関連があるとする

り，再利用が難しくなる．

仮定を持つことから，特に関連の無いコード記述

2.2 コーディングパターン

同士が 1 つのパターンとして抽出されるという問

ドキュメント等が附属していない部品の利用法

題点が存在するため，部品の再利用が困難になっの学習を支援するために，再利用対象の部品を利ていた．

用しているソースコードからその部品の利用例を

そこで本稿では，版管理システムに蓄積されて取り出す事で利用法の理解に役立てるという研究いるソースコードの差分から，個別の機能に限定

が過去になされている [8, 11]．その中の一つに，再したソフトウェア部品の利用法を理解するための利用対象の部品を利用しているソースコードから

関数呼び出しパターン抽出手法を提案する．このコーディングパターンと呼ばれるものを抽出し，そ手法は，版管理システムへのソースコードの変更

れを開発者に提示する事で利用法の学習を支援す

内容の保存が一般に個別の機能毎に行なわれているという研究が行なわれている [2]．コーディング

るという仮定にもとづき，ソースコードの差分にパターンとはソースコードに頻出する構造のよく含まれる関数利用実績に共通して現れるコード記

似たコード記述である．コーディングパターンを

述を関数呼び出しパターンとして抽出する．

閲覧する事で，開発者は実現したい処理に必要な以降，2 節では背景となるソフトウェア部品の関数群とその呼び出し順を，そしてパターンを利再利用とコーディングパターンについて，3 節で用しているソースコードを閲覧する事で関数への版管理システムについて述べる．次に，4 節では本

引数の与え方や返り値の扱い方などを学習できる．

稿で提案する関数呼び出しパターン抽出手法につ

既存のコーディングパターン抽出手法では，同いて説明し，5 節でその実装について述べる．そじ箇所に現れる関数呼び出しは一連の機能を実現

して 6 節で評価を行ない，7 節でまとめと今後のするためのものであると見なす，という特徴をも課題について述べる．

つ．構造化手法をはじめ，様々な開発技法において，関連するコードを 1 つの単位にまとめる事の-2-

重要性が強調されている [4, 7]．

クインという操作によって版管理システムに保存

しかし，この仮定のもとでコーディングパター

する事で開発作業を進めていく．

ンを抽出すると，実際には関連のない関数間に関3.2 ソースコード更新時の傾向連があると誤判定する場合も少なからず存在する．

版管理システムを用いた開発では，一度のチェッ

例えば図 1 のように，ソースコード内の幾つかの箇

クインで変更されるソースコードはある 1 つの機能

所で，計算処理を行うコード記述とデータ出力をについてのソースコードである事が一般的である．

行うコード記述が続けて書かれていたとする．前
述の仮定のもとでコーディングパターンを抽出す

Gall らは版管理システム内の開発履歴から，ソー
スコードからは分からない，Logical Couplings とると，この 2 つの処理は同じ箇所で呼び出されて呼ばれる依存関係を抽出し，ソフトウェアの理解やいるため，関連があるコード記述として 1 つのコー

保守に役立てる研究を行なった [5]．Zimmermann

ディングパターンにまとめられる．その後，他のらは開発履歴からソースコードの変更ルールの抽開発者がこのソフトウェアの計算処理部分を再利出を行ない，変更点の予測や不完全な変更による用する事になったとする．この開発者は計算処理不具合を防ぐ為のシステムを開発している [12]．

部の利用法を学習するために関連するコーディン

これらの研究では，一度のチェックインで扱う

グパターンを閲覧するが，そこには計算処理に関

ソースコードが共通の機能を実装しているという連の無いデータ出力処理が混在しているため，こ事を仮定している事が共通している．これらの研れを閲覧した開発者は計算処理を正しくコーディ

究が良い結果を残している事を考えると，実際のングできないことになる．

ソフトウェア開発において一度のチェックインでE (+FHG(JI
!#"%$!&')(+*-,!. &         
3+465#7%8 "%$!9扱うソースコードは個別の機能に関わるものであるという仮定は妥当であると考える事ができる．

  1 
2 /10    
0

4 ソースコードの差分を用いた関数呼び出しパターン抽出手法/:#;=<?>A@!BAC%D

本節では，版管理システム内のソースコードの

図 1: 関連の無い処理を含むパターン

差分から，個別の機能に限定したコーディングパ
ターンを抽出する手法について述べる．

本稿ではこの問題点を解決するために，版管理
システム内のソースコードの差分から個別の機能

本手法では C 言語でかかれたソースコードを対に限定したコーディングパターンを抽出する手法

象としてパターンの抽出を行う．また，本手法でを提案する．

は部品の利用法を関数の利用関係という面から捉えているため，コーディングパターンという語句

版管理システム3ではなく，関数呼び出しパターンという語句を用

本節では，まず版管理システムとその役割についる．

いて説明した後，ソースコードを更新する際に見本手法は図 2 のように，3 つのステップに分けらられる一般的な傾向について述べる．

3.1

れる．まず，ソースコードの差分からソースコード

版管理システムの特徴を取得する．次に，取得されたソースコー

版管理システムとは，プロダクトの開発履歴をドの特徴から特徴シーケンスを生成する．最後に，保存，提供する機構である．ソースコードやリソー

生成された全特徴シーケンスに対して sequential

スといった各プロダクトの履歴データは，リポジ
トリと呼ばれるデータ格納庫に蓄積される．そのpattern mining と呼ばれる手法を適用する事で関数呼び出しパターンを抽出する．以下，これら 3 つ

内部では，プロダクトのある時点における状態でのステップについて説明する．

あるリビジョンを単位として管理する．1 つのリ

4.1 ソースコードの特徴の取得

ビジョンには，ソースコードやリソースなどの実

始めに，版管理システム内のソースコードの差

データと，作成日時やログメッセージなどの属性分からソースコードの特徴を取得する．ソースコー

データが格納されている．開発者はソースコード

ドの特徴とは，関数の利用例を構成する要素であに対して変更を加える度に，その変更内容をチェッ-3-

 

 "!#"$%  " & ' 798;:=<>8@?BA C D@EBFBDGA A 8=H ?JIJC ?;C ?>K&')( *+*",-

NOL MMM./1506 ,2314

図 2: 関数呼び出しパターン抽出の流れ
り，本手法では関数呼び出し，及び条件文，繰りFHG8IKJLGNMPORQRS   
   
 
  ! #"$% & 
(''

返し文の開始，終了位置をソースコードの特徴とする．以下では，条件文の開始，終了位置と繰返し文の開始，終了位置といったソースコードの特徴を制御文要素と呼ぶ．
ソースコードの特徴の取得は，全ての隣接する
リビジョン間のソースコードの差分の内，新しい

FTG8IKJUGVMORWYX

%%EEE
% &E'WRXVZ[G]\-^_I)+*-,/./02143
56*87 9:13<;=6*-,/.?>@143
AB*DC

図 3: 差分からの特徴シーケンス抽出の流れ

リビジョンにおいて追加，編集された行のみから行われる．ソースコードの差分のみから取得するの全てのリビジョン，全ての関数定義に対して行のは，3.2 節で述べたように，ソースコードの差分う事で，全ての特徴シーケンスの生成が出来る．こに注目する事で個別の機能に限定したソースコーのとき，関数呼び出しを一つも含まないような特ドを取得できるからである．

徴シーケンスは関数呼び出しパターンの抽出に用いる事ができないので除去する．

次に，後の計算にかかるコストを抑えるために，

4.3 Sequential pattern mining を用いたパターン

不要なソースコードの特徴を除去する．本手法で抽出は不要な要素を標準関数呼び出しと，同じ構造の制御文要素のみの繰り返しとする．標準関数はド

最後に，生成した全ての特徴シーケンスを対象

キュメント等が充実していることから，本手法をにして sequential pattern mining と呼ばれる手法を用いて利用法を理解する必要が無いため，除去の適用する事で，関数呼び出しパターンの抽出を行対象とした．また，制御文要素のみが同じ形で繰

う．Sequential pattern mining とは与えられた複数り返されるものも，関数呼び出しパターンに寄与のリストから，ユーザが指定した閾値以上の頻度しているとは考えにくいため，除去の対象とした．

で共通して現れる部分リストを求める手法である

4.2

特徴シーケンスの生成[1]．4.2 節で述べたように，特徴シーケンスは関次に，取得したソースコードの特徴から特徴シー数の利用実績を表すので，これらの間に共通するケンスを生成する．特徴シーケンスとは関数の利シーケンスを抽出する事で，関数呼び出しパター

用実績を抽象化したものであり，具体的には，1 つンとしている．

の関数定義内におけるソースコードの特徴のリス

Sequential pattern mining を行うアルゴリズムはいくつか存在するが，本研究では一般的に用いられトである．ただし，本手法ではソースコードの差分から関数呼び出しパターンを抽出するため，特ることが多い PreﬁxSpan[9] を採用した．PreﬁxSpan

徴シーケンスを構成する各要素は編集後のソース

はサポート値計算と射影と呼ばれる操作が中心とコードにおいて追加，編集された行にあるもののなるアルゴリズムである．サポート値計算とは，与みに限定される．

えられたシーケンス群を構成する各要素のサポー

図 3 は，追加，編集が起こった行に存在するソート値を求める操作である．サポート値とは対象のスコードの特徴から特徴シーケンスを生成する様要素を含むシーケンスの数である．射影とは，全子を表している．この操作を全てのソースコードてのシーケンスから特定の要素からの接尾辞を取-4-

り出す操作である．

全てのパターン抽出が終った後に，各パターン

PreﬁxSpan アルゴリズムでは図 4 のように，射影したシーケンス群の各要素についてサポート値を計算し，閾値以上の各要素について更に射影をに対して条件判断を行ない，制御文要素の数が行うといった事を繰り返す事で sequential pattern

あるパターンを除去する．

そのパターン全体の要素数の 3 分の 2 を越えている，もしくは関数呼び出し要素が 1 個以下でmining を行う．
 995;:2<"= ()>?@BA)CD
 

 
 
 
 

 "!$#
%'&)($*,+

5 実装

9;;:2<"= ()>?E@FAGCD




















本節では，4 節で述べたソースコードの差分か






 

らの関数呼び出しパターン抽出手法を実装したシステムについて述べる．

-$
/.
01
223
4563
78

本システムは大まかに 3 つのサブシステムに分ける事ができる．1 つ目は，4.1 節と 4.2 節で説明
した処理を行なう特徴シーケンス生成部である．2
つ目は，4.3 節で説明した処理を行なう関数呼び出
しパターン抽出部である．3 つ目は，抽出した関図 4: PreﬁxSpan によるマイニング

数呼び出しパターンと，それを実現しているソー
スコードを閲覧する為のパターンブラウザ部であしかし，単純に特徴シーケンスに対して sequen-

る．システム全体の概要を図 5 に示す．

tial pattern mining を適用するだけでは，有用な関: ;C数呼び出しパターンと共に，非常に多くの部品利

DE

用法の理解に用いることのできないパターンが抽出される．具体的には，制御文要素の対応がとれ @A2B& 3) +*,"-F GIHIJLK ,M
9
F+GNHJLO 7ていないパターン，制御文要素の数がパターン全& 3
465798 & 3 >"?
 

体の 3 分の 2 を越えるパターン，そして関数呼び 出し要素を 1 個以下しか持たないパターンが挙げられる．

) +*,".0/1

このような関数呼び出しパターンは利用法の理2!#$%& 3

: ;<=>2?
  "!#$% ( $ 
& '解に用いることができないどころか，パターン抽出にかかるコストが大きくなり，抽出されたパター

図 5: システムの概要

ンの検索を困難にする．そこで，本手法ではこれ
以下では本システムの 3 つのサブシステムにつらの不要な関数呼び出しパターンを以下のようにして除去する．

いて説明する．

マイニング時における除去:

5.1 特徴シーケンス生成部

PreﬁxSpan では，閾値以上のサポート値を持つ

特徴シーケンス生成部では，版管理システム CVS

要素に対して射影を行なってパターンを出力すから全てのリビジョンにおけるソースコードの差分るが，その結果制御文要素の対応がとれていなを取得し，4.1 節と 4.2 節で述べた手法にしたがっいパターンが出力される場合はその射影を実行て特徴シーケンスを生成する．ただし，対象のリしないようにする．この結果，不要なパターン

ビジョンが CVS によるマージ操作によって自動的が出力されないだけでなく，PreﬁxSpan アルゴに更新されたものと判断した場合は特徴シーケン

リズムの探索空間が大幅に削減され，計算時間スの生成を行なわない．ここでマージ動作とは，ブと消費メモリ量が軽減される．

ランチ上に蓄積された更新を他のブランチに適用

また，1 つのパターンに同じ制御文要素を 2 つする操作である．この操作では一般に複数の機能以上持たせない，制御文要素を連続させない，が同時に更新されるので，個別の機能に関する関同じ関数呼び出し要素を連続させないという制

数呼び出しパターンの取得には向かない．そのた限も射影操作に加える．

め特徴シーケンスの生成を行わない．

パターン抽出後における除去:

-5-

5.2

関数呼び出しパターン抽出部

しパターン数は 74 個，パターンのカテゴリ数は 45個となった．

関数呼び出しパターン抽出部では，特徴シーケ

6.1 関数呼び出しパターンの評価

ンス生成部によって生成された特徴シーケンスから sequential pattern mining を用いて関数呼び出し

ここでは，抽出された関数呼び出しパターンをパターンを抽出する．

実際に確認する事で，それらの部品の利用法理解

Sequential pattern mining の対象となる特徴シー

における有用性を評価する．

ケンスは，計算時間と消費メモリ量削減の為，全て

図 7 は，提案するシステムによって抽出され整数値の配列に変換した上で計算を行なっている．

たクライアントのリサイズを行う際の関数呼び抽出された関数呼び出しパターンは，同じ関数

出しパターンである．パターンを詳しく見ると，呼び出し要素を持つもの同士でカテゴリ分けされclient_sizeframe 関数を用いてクライアント

る．これによって，同じ関数群が少し違う呼び出のリサイズを行なった後，client 変数の状態かし方をされている状況を把握しやすくした．また，

ら条件分岐を行ない，条件に合致しているならばパターンを一行の文字列として簡単に表現するサ

action_send_config 関数を用いてリサイズ結

マリや，各パターンがどのリビジョンのどの箇所

果を X サーバに送信していることが分かる．このに存在したかという情報も抽出し，データベース

パターンから，本手法を用いることで制御構造もへと格納する．これらの情報は 5.3 節で述べる関数

含めた関数呼び出しパターンを取得できることが呼び出しパターンブラウザ部によって用いられる．

分かる．

5.3

関数呼び出しパターンブラウザ部

また，この例と同じように抽出された全てのパ関数呼び出しパターンブラウザ部は，抽出されたターンを閲覧していったところ，抽出された 45 個

関数呼び出しパターンとそれを実現しているソーのパターンカテゴリのうち，33 個のパターンカテ

スコードを提示する事で開発者による部品利用法

ゴリが利用法の理解に有用な関数呼び出しパターの理解を支援する．図 6 に関数呼び出しパターンンを含んでいた．これらのことから，本稿での提ブラウザのスクリーンショットを示す．

案手法は部品の利用法理解に有用な関数呼び出し
パターンを抽出できることが分かる．

画面上部のパターンリストと左下部のリビジョ

6.2 既存手法との比較

ンリストから項目を選択する事で，開発者は関数呼び出しパターンとそれを利用しているソースコー

ここでは，既存の関数呼び出しパターン抽出手

ドを同時に閲覧する事ができる．右下部のソース法に存在した問題点が本手法によって改善されてコードのうち，行頭に’+’ が付いているものは追加，いるかどうかについて評価する．既存手法の問題

編集が起こった行であり，背景に色が付いた行は

点とは，一つの関数呼び出しパターンの中に複数パターンに該当する行である．また，パターン検の機能に関する処理が含まれるおそれがあるとい

索画面からユーザが指定した関数呼び出しを含む

う事である．

パターンを検索する事もできる．

6

評価を行う為に，2 種類の方法で関数呼び出しパ
ターンの抽出を行なった．一方は本研究で提案し評価
本節では，提案手法が実際に部品の利用法理解

たソースコードの差分からの関数呼び出しパターに有用なパターンを抽出できるかどうか，そして，ン抽出手法である．もう一方は対象をソースコー

既存手法の問題点が改善されているかどうかにつドの差分でなく，最新版のソースコード全体としいて評価する．

て提案手法を適用したものである．この手法は「同評価に際して，関数呼び出しパターンを抽出するじ箇所で呼び出される事の多い関数群を 1 つのパ

対象のソフトウェアプロジェクトには The Golem

ターンにまとめる」という既存手法の特徴を持ち

X11 Window Manager[10] を選択した．Golem のCVS リポジトリ中のソースコードの差分から本手

つつ，出力されるパターンの形式が提案手法のも法を用いて関数呼び出しパターンを抽出したとこ

法で抽出した関数呼び出しパターンを比較する事

ろ，計算時間は約 1 分半，抽出された関数呼び出

で，既存手法との比較を行ない，問題点が改善さのと同じになるようにしている．この 2 種類の方れているかどうか評価する．

-6-   

0132!4 (56,- ./  
 ! ! #"$  %'&'() '* +
図 6: 関数呼び出しパターンブラウザとその検索画面         
!"#$ %&'(  %"  )* ,+- -  (. 
図 7: 関数呼び出しパターンとそれを利用しているソースコードの例
表 1: 最新版と差分から抽出したパターンの違いするパターンを含んでいた．以上の事から，複数の関連の無い機能が 1 つのパターンにされるとい

既存手法によるパターン
PDEBUG
if(){
XCreatePixmap
DefaultDepth
image_scale
image_put
DefaultGC
image_destroy

提案手法によるパターン

う既存手法の問題点を提案手法が改善している事が分かる．

XCreatePixmap
DefaultDepth

しかし，既存手法では利用パターンが抽出できるが，提案手法では抽出できないような部品が多く存在することもわかった．これは，初期状態から

image_put
DefaultGC
image_destroy

変更が加わっていない部品など，ソースコードの差分に利用実績が現れない部品も存在しているからである．また，提案手法からは最新版に存在し表 1 は画像の描画に関する関数呼び出しパター

ない部品に関するパターンも抽出されていた．こンの，既存手法と提案手法による違いを表していのようなパターンは最新版の部品を用いる場合にる．既存手法のパターンを見てみると，明らかには活用する事ができない．

画像の描画に関係の無い PDEBUG というデバッグ

これらのことから，提案手法と既存手法を組み

出力マクロが含まれている事や，画像の描画に必合わせた関数呼び出しパターン抽出手法の確立が須ではない image_scale 関数の呼び出しが含ま

今後の課題として挙げられる．これによって，それれている事が分かる．しかし，提案手法のパター

ぞれのパターンが持つ問題点が相互に補われ，よ

ンではそうした要素は含まれていない．よって，提り質の高い関数呼び出しパターンを得ることがで案手法によるパターンは既存手法によるパターン

きると考えられる．

から余分な要素を除去したものであるといえる．

7 まとめ

他にも，抽出された利用法理解に有用なパターンを含むパターンカテゴリのうち，およそ半分が本稿では，ソフトウェア部品の利用法理解を支援

既存手法によるパターンを更に細かい単位に分割するため，版管理システム内のソースコードの差-7-

分から個別の機能に限定した関数呼び出しパター

tion for buisiness success, ACM Press/Addison-

ンを抽出する手法を提案した．本手法では，一度Wesley Publishing Co., New York, NY, USA(1997).

の更新で扱うソースコードは 1 つの機能のものであるという版管理システムを用いたソフトウェア[7] 松本吉弘：ソフトウェアの考え方・作り方，電気書院 (1981).

開発の特性に注目して関数呼び出しパターンの抽出を行なった．また，提案手法を実装し，実際のオープンソースソフトウェアに対して適用したと[8] Michail, A.: Data Mining Library Reuse Pat-

ころ，部品の利用法理解に有用な関数呼び出しパ

terns Using Generalized Association Rules,
ICSE ’00: Proceedings of the 22nd Interna-

ターンを抽出することができた．さらに，既存手法との比較を行い，提案手法が実際に個別の機能

tional Conference on Software Engineering, pp.
167–176 (2000).

に限定した関数呼び出しパターンを抽出し，既存手法の問題点を改善している事が確認した．

[9] Pei, J., Han, J., Mortazavi-Asl, B., Pinto, H.,

今後の課題としては，関数呼び出しパターンブ

Chen, Q., Dayal, U. and Hsu, M.: PreﬁxSpan:
Mining Sequential Patterns by Preﬁx-Projected

ラウザのさらなる改良や，既存手法と提案手法を組み合わせた関数呼び出しパターン抽出手法の確Growth, ICDE ’01: Proceedings of the 17th
International Conference on Data Engineering,pp. 215–224 (2001).

立などが挙げられる．

参考文献[1] Agrawal, R. and Srikant, R.: Mining Sequential Patterns, ICDE ’95: Proceedings of the 11th
International Conference on Data Engineering,[10] The Golem X11 Window Manager: . http://golem.sourceforge.net/.

pp. 3–14 (1995).

[11] Williams, C. C. and Hollingsworth, J. K.: Recovering System Speciﬁc Rules from Software
Repositories, MSR ’05: Proceedings of the[2] 渥美紀寿，山本晋一郎，結縁祥治，阿草清滋：
FCDG に基づいたコーディングパターン，日本ソフトウェア科学会 コンピュータソフト
ウェア， Vol. 21, No. 4, pp. 27–36 (2004).

2005 International Workshop on Mining Software Repositories, pp. 7–11 (2005).
[12] Zimmermann, T., Weisgerber, P., Diehl, S. andZeller, A.: Mining Version Histories to Guide
Software Changes, ICSE ’04: Proceedings of[3] Basili, V., Caldiera, G., McGarry, F., Pajerski,
R., Page, G. and Waligora, S.: The Software
Engineering Laboratory - an Operational Software Experience Factory, Proceedings of the
Fourteenth International Conference on Soft-the 26th International Conference on Software
Engineering, pp. 563–572 (2004).

ware Enigineering, pp. 370–381 (1992).
[4] Dijkstra, E. W.: Notes on Structured Programming.
http://www.cs.utexas.edu/
users/EWD/ewd02xx/EWD249.PDF.
[5] Gall, H., Jazayeri, M. and Krajewski, J.: CVS
Release History Data for Detecting Logical
Couplings, IWPSE: ’03: Proceedings of the 6thInternational Workshop on Principles of Software Evolution, pp. 13–23 (2003).
[6] Jacobson, I., Griss, M. and Jonsson, P.: Software reuse: architecture, process and organiza--8-c