(57)【要約】      （修正有）【課題】プログラム要素が問題特徴を備えているか否かを判断する。【解決手段】ソースコード解析装置１０は、ソースコード１０８を解析してソースコード１０８に含まれるプログラム要素同士の関連性を分析しプログラム関連性指標情報１２０を生成する。またソースコード１０８の変更履歴１０６を用いて、同時変更されやすいプログラム要素の組み合わせを示す情報であるロジカルカップリング情報を生成する。さらに少なくともロジカルカップリング情報に基づいて、ソースコード１０８の品質に関する評価値を含むプログラム要素情報１１７をプログラム要素ごとに生成する。そしてロジカルカップリング情報に含まれるプログラム要素のうち、プログラム要素情報１１７およびプログラム関連性指標情報１２０がそれぞれ所定の条件を満たすプログラム要素を示すアンチパターン情報を生成し、出力する。【選択図】図２
2019079312.tif 000002
【特許請求の範囲】
【請求項１】
ソースコードを解析して前記ソースコードに含まれるプログラム要素同士の関連性を分析しプログラム関連性指標情報を生成するプログラム関連性分析部と、
前記ソースコードの変更履歴を用いて、同時変更されやすい前記プログラム要素の組み合わせを示す情報であるロジカルカップリング情報を生成するロジカルカップリング分析部と、
少なくとも前記ロジカルカップリング情報に基づいて、前記ソースコードの品質に関する評価値を含むプログラム要素情報を前記プログラム要素ごとに生成する評価部と、
前記ロジカルカップリング情報に含まれる前記プログラム要素のうち、前記プログラム要素情報および前記プログラム関連性指標情報がそれぞれ所定の条件を満たす前記プログラム要素を示すアンチパターン情報を生成するアンチパターン検出部と、
前記アンチパターン情報を出力する出力部とを備えるソースコード解析装置。
【請求項２】
請求項１に記載のソースコード解析装置において、
前記出力部は前記プログラム関連性指標情報をさらに出力するソースコード解析装置。
【請求項３】
請求項１に記載のソースコード解析装置において、
前記アンチパターン情報は、前記同時変更されやすい前記プログラム要素の組み合わせ、および前記プログラム要素情報および前記プログラム関連性指標情報がそれぞれ前記所定の条件を満たす前記プログラム要素を視覚的に表示するための情報であるソースコード解析装置。
【請求項４】
請求項１に記載のソースコード解析装置において、
前記プログラム要素のそれぞれについて保守性を示す指標を含むソフトウェアメトリクス情報を生成するプログラム解析部をさらに備え、
前記評価部は、前記ソフトウェアメトリクス情報も考慮して前記プログラム要素が前記所定の条件を満たすか否かを判断するソースコード解析装置。
【請求項５】
請求項１に記載のソースコード解析装置において、
前記アンチパターン検出部は、前記プログラム要素情報と第１閾値との関係、および前記プログラム関連性指標情報と第２閾値との関係を評価し、
前記第１閾値および前記第２閾値を入力するインタフェースをさらに備えるソースコード解析装置。
【請求項６】
請求項１に記載のソースコード解析装置において、
前記ロジカルカップリング分析部が所定の生成条件に応じた前記ロジカルカップリング情報を生成するためのバスケット解析閾値を設定するバスケット解析閾値導出部をさらに備え、
前記ロジカルカップリング分析部は、前記プログラム要素の組み合わせごとに同時変更のされやすさを示す指標であるルール評価値を算出し、前記ルール評価値と前記バスケット解析閾値との関係により前記ロジカルカップリング情報を生成するソースコード解析装置。
【請求項７】
コンピュータにより、ソースコードを解析して前記ソースコードに含まれるプログラム要素同士の関連性を分析しプログラム関連性指標情報を生成することと、
コンピュータにより、前記ソースコードの変更履歴を用いて、同時変更されやすい前記プログラム要素の組み合わせを示す情報であるロジカルカップリング情報を生成することと、
コンピュータにより、少なくとも前記ロジカルカップリング情報に基づいて、前記ソースコードの品質に関する評価値を含むプログラム要素情報を前記プログラム要素ごとに生成することと、
コンピュータにより、前記ロジカルカップリング情報に含まれる前記プログラム要素のうち、前記プログラム要素情報および前記プログラム関連性指標情報がそれぞれ所定の条件を満たす前記プログラム要素を示すアンチパターン情報を生成することと、
前記アンチパターン情報をコンピュータから出力することとを含むソースコード解析方法。
【請求項８】
請求項７に記載のソースコード解析方法において、
さらに前記プログラム関連性指標情報をコンピュータから出力することを含むソースコード解析方法。
【請求項９】
請求項７に記載のソースコード解析方法において、
前記アンチパターン情報は、前記同時変更されやすい前記プログラム要素の組み合わせ、および前記プログラム要素情報および前記プログラム関連性指標情報がそれぞれ前記所定の条件を満たす前記プログラム要素を視覚的に表示するための情報であるソースコード解析方法。
【請求項１０】
請求項７に記載のソースコード解析方法において、
コンピュータにより、前記プログラム要素のそれぞれについて保守性を示す指標を含むソフトウェアメトリクス情報を生成することをさらに含み、
前記アンチパターン情報の生成において、前記ソフトウェアメトリクス情報も考慮して前記プログラム要素が前記所定の条件を満たすか否かを判断するソースコード解析方法。
【請求項１１】
請求項７に記載のソースコード解析方法において、
前記アンチパターン情報の生成において、前記プログラム要素情報と第１閾値との関係、および前記プログラム関連性指標情報と第２閾値との関係を評価し、
前記第１閾値および前記第２閾値はインタフェースから入力されることとを含むソースコード解析方法。
【請求項１２】
請求項７に記載のソースコード解析方法において、
所定の生成条件に応じた前記ロジカルカップリング情報を生成するためのバスケット解析閾値を設定することと、
前記プログラム要素の組み合わせごとに同時変更のされやすさを示す指標であるルール評価値を算出することとをさらに含み、
前記ロジカルカップリング情報は、前記ルール評価値と前記バスケット解析閾値との関係により生成されるソースコード解析方法。
【請求項１３】
コンピュータに、
ソースコードを解析して前記ソースコードに含まれるプログラム要素同士の関連性を分析しプログラム関連性指標情報を生成することと、
前記ソースコードの変更履歴を用いて、同時変更されやすい前記プログラム要素の組み合わせを示す情報であるロジカルカップリング情報を生成することと、
少なくとも前記ロジカルカップリング情報に基づいて、前記ソースコードの品質に関する評価値を含むプログラム要素情報を前記プログラム要素ごとに生成することと、
前記ロジカルカップリング情報に含まれる前記プログラム要素のうち、前記プログラム要素情報および前記プログラム関連性指標情報がそれぞれ所定の条件を満たす前記プログラム要素を示すアンチパターン情報を生成することと、
前記アンチパターン情報を出力することとを実行させるためのソースコード解析プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースコード解析装置、ソースコード解析方法、およびソースコード解析プログラムに関する。
【背景技術】
【０００２】
近年のソフトウェア開発では、開発済みの母体ソフトウェアを拡張または変更することによって新しいソフトウェアを開発する派生開発が主流である。ソフトウェアの派生開発においては、長年に渡る機能拡張または変更の繰り返しにより、ソフトウェアが複雑化し、ソースコードの可読性が低下しやすい。このような状況を解決するため、ソフトウェアのリファクタリングが一般的に行われている。リファクタリングとは、ソフトウェアの振る舞いを変えず、その内部構造を変更することである。保守性が低い関数、クラス、ファイルなどのプログラム構成要素（以下、「プログラム要素」）を適切にリファクタリングすれば、ソフトウェアが拡張または変更しやすくなる。リファクタリングを支える技術にアンチパターンがある。アンチパターンとは、保守性が低いプログラム要素が持つ特徴（以下、「問題特徴」）と、この問題特徴を持つプログラム要素のリファクタリング方法のパターンをまとめたものである。リファクタリング対象ソフトウェアにおいて、アンチパターンが示すような問題特徴を持つプログラム要素を特定できれば、アンチパターンを適用することでリファクタリングすることができる。
特許文献１には、システムで用いられるプログラムを分析し、当該プログラムのアンチパターンを抽出するソースコード評価システムにおいて、前記システムのソースコードを含む稼働に関する情報からメトリクスを計測する手段と、前記計測されたメトリクスを用いて、前記ソースコードがアンチパターンの該当可否をその複雑さ示す指標を用いて評価する手段と、前記評価された結果について、前記ソースコードのリファクタリングの優先度を算出・提示する手段を有するソースコード評価システムが開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１６−１４３１０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１に記載されている発明では、プログラム要素が問題特徴を備えているか否かを判断することが難しい。
【課題を解決するための手段】
【０００５】
本発明の第１の態様によるソースコード解析装置は、ソースコードを解析して前記ソースコードに含まれるプログラム要素同士の関連性を分析しプログラム関連性指標情報を生成するプログラム関連性分析部と、前記ソースコードの変更履歴を用いて、同時変更されやすい前記プログラム要素の組み合わせを示す情報であるロジカルカップリング情報を生成するロジカルカップリング分析部と、少なくとも前記ロジカルカップリング情報に基づいて、前記ソースコードの品質に関する評価値を含むプログラム要素情報を前記プログラム要素ごとに生成する評価部と、前記ロジカルカップリング情報に含まれる前記プログラム要素のうち、前記プログラム要素情報および前記プログラム関連性指標情報がそれぞれ所定の条件を満たす前記プログラム要素を示すアンチパターン情報を生成するアンチパターン検出部と、前記アンチパターン情報を出力する出力部とを備える。
本発明の第２の態様によるソースコード解析方法は、コンピュータにより、ソースコードを解析して前記ソースコードに含まれるプログラム要素同士の関連性を分析しプログラム関連性指標情報を生成することと、コンピュータにより、前記ソースコードの変更履歴を用いて、同時変更されやすい前記プログラム要素の組み合わせを示す情報であるロジカルカップリング情報を生成することと、コンピュータにより、少なくとも前記ロジカルカップリング情報に基づいて、前記ソースコードの品質に関する評価値を含むプログラム要素情報を前記プログラム要素ごとに生成することと、コンピュータにより、前記ロジカルカップリング情報に含まれる前記プログラム要素のうち、前記プログラム要素情報および前記プログラム関連性指標情報がそれぞれ所定の条件を満たす前記プログラム要素を示すアンチパターン情報を生成することと、前記アンチパターン情報をコンピュータから出力することとを含む。
本発明の第３の態様によるソースコード解析プログラムは、コンピュータに、ソースコードを解析して前記ソースコードに含まれるプログラム要素同士の関連性を分析しプログラム関連性指標情報を生成することと、前記ソースコードの変更履歴を用いて、同時変更されやすい前記プログラム要素の組み合わせを示す情報であるロジカルカップリング情報を生成することと、少なくとも前記ロジカルカップリング情報に基づいて、前記ソースコードの品質に関する評価値を含むプログラム要素情報を前記プログラム要素ごとに生成することと、前記ロジカルカップリング情報に含まれる前記プログラム要素のうち、前記プログラム要素情報および前記プログラム関連性指標情報がそれぞれ所定の条件を満たす前記プログラム要素を示すアンチパターン情報を生成することと、前記アンチパターン情報を出力することとを実行させる。
【発明の効果】
【０００６】
本発明によれば、プログラム要素が問題特徴を備えているか否かを判断することができる。
【図面の簡単な説明】
【０００７】
【図１】ソースコード解析装置１０のハードウェア構成図
【図２】第１の実施の形態におけるソースコード解析装置１０の機能構成図
【図３】プログラム要素変更履歴１０６の一例を示す図
【図４】バスケット解析閾値１０７の一例を示す図
【図５】変更依存関係ルール１１４の一例を示す図
【図６】グラフパターンマッチロジック１１０の一例を示す図
【図７】ロジカルカップリンググラフ１１６の一例を示す図
【図８】アンチパターングラフ１１８の一例を示す図
【図９】プログラム要素情報１１７の一例を示す図
【図１０】グラフパラメータ閾値１１２の一例を示す図
【図１１】ソフトウェアメトリクス閾値１１１の一例を示す図
【図１２】パラメータ論理式１１３の一例を示す図
【図１３】ソフトウェアメトリクス取得ロジック１０９の一例を示す図
【図１４】ソフトウェアメトリクス情報１１５の一例を示す図
【図１５】プログラム関連性指標取得ロジック１２５の一例を示す図
【図１６】プログラム関連性指標情報１２０の一例を示す図
【図１７】プログラム関連性閾値１２１の一例を示す図
【図１８】ロジカルカップリング分析部１０１の動作を表すフローチャート
【図１９】プログラム解析部１０２の動作を表すフローチャート
【図２０】プログラム関連性分析部１１９の動作を表すフローチャート
【図２１】ロジカルカップリンググラフ生成部１０３の動作を表すフローチャート
【図２２】図２１のＳ１３０３の詳細を示すフローチャート
【図２３】図２１のＳ１３０８の詳細を示すフローチャート
【図２４】アンチパターン検出部１０４の動作を示すフローチャート
【図２５】プログラム関連性閾値１２１の異なる例を示す図。図２５（ａ）は既存の関連属性識別子を用いる例を示す図、図２５（ｂ）は既存の関連属性識別子を用いない例を示す図。
【図２６】変形例２におけるソースコード解析装置１０の機能構成図
【図２７】入力ユーザインタフェース２７００の一例を示す図
【図２８】入出力ユーザインタフェース３９００の一例を示す図
【図２９】第３の実施の形態におけるソースコード解析装置１０の機能構成図
【図３０】バスケット解析期待値１２４の一例を示す図
【図３１】バスケット解析閾値導出部１２３の動作を表すフローチャート
【発明を実施するための形態】
【０００８】
―第１の実施の形態―
以下、図１〜図２４を参照して、ソースコード解析装置の第１の実施の形態を説明する。
【０００９】
（ハードウエア構成）
図１はソースコード解析装置１０のハードウェア構成を示す図である。ソースコード解析装置１０は、ソフトウェアシステムの開発や保守等に利用される情報処理装置、すなわちコンピュータである。ソースコード解析装置１０は、クラウドシステムにより提供されるクラウドサーバ等のように仮想的に実現されるものであってもよい。すなわち複数のコンピュータが協調して動作することにより、その機能を実現してもよい。
【００１０】
図１に示すように、ソースコード解析装置１０は、プロセッサ１１、主記憶装置１２、補助記憶装置１３、入力装置１４、出力装置１５、および通信装置１６を備える。これらは図示しないバス等の通信手段を介して互いに通信可能に接続されている。
【００１１】
プロセッサ１１は、たとえば、ＣＰＵ（Central Processing Unit）やＭＰＵ（Micro Processing Unit）を用いて構成される。プロセッサ１１が、主記憶装置１２や補助記憶装置１３に格納されているプログラムを読み出して実行することにより、後述する機能を実現する。主記憶装置１２は、プログラムやデータを記憶する装置であり、たとえば、ＲＯＭ（Read Only Memory）、ＲＡＭ（Random Access Memory）、不揮発性半導体メモリ（Non Volatile RAM）等である。
【００１２】
補助記憶装置１３は、たとえば、ハードディスクドライブ、ＳＳＤ（Solid State Drive）、光学式記憶装置（CD(Compact Disc)、DVD(Digital Versatile Disc)等）、ストレージシステム、ＩＣカード、ＳＤメモリカードや光学式記録媒体等の記録媒体の読取／書込装置、クラウドサーバの記憶領域等である。補助記憶装置１３に格納されているプログラムやデータは主記憶装置１２に随時読み込まれる。
【００１３】
入力装置１４は、たとえば、キーボード、マウス、タッチパネル、カードリーダ、音声入力装置等である。出力装置１５は、ユーザに処理経過や処理結果等の各種情報を提供するユーザインタフェースであり、たとえば、画面表示装置（液晶モニタ、グラフィックカード等）、音声出力装置（スピーカ等）、印字装置等である。尚、たとえば、ソースコード解析装置１０が通信装置１６を介して他の装置との間で情報の入力や出力を行う構成としてもよい。
【００１４】
通信装置１６は、ＬＡＮやインターネット等の通信手段を介した他の装置との間の通信を実現する有線方式又は無線方式の通信インタフェースであり、例示すれば、ＮＩＣ（Network Interface Card）、無線通信モジュール、ＵＳＢ（Universal Serial Interface）モジュール、シリアル通信モジュール等である。
【００１５】
（機能構成）
図２は、ソースコード解析装置１０の機能構成図である。ソースコード解析装置１０はその機能として、ロジカルカップリング分析部１０１と、プログラム解析部１０２と、ロジカルカップリンググラフ生成部１０３と、アンチパターン検出部１０４と、情報記憶部１０５と、プログラム関連性分析部１１９とを備える。これらの機能は、たとえば、プロセッサ１１が、主記憶装置１２や補助記憶装置１３に格納されているプログラムを読み出して実行することにより実現される。またこれらの機能は、たとえば、ソースコード解析装置１０が備えるハードウェア、たとえばＡＳＩＣなどによって実現されてもよい。ただし情報記憶部１０５は、主記憶装置１２または補助記憶装置１３により実現される。またソースコード解析装置１０には、後述する処理の過程で変更依存関係ルール１１４と、ソフトウェアメトリクス情報１１５と、ロジカルカップリンググラフ１１６と、プログラム要素情報１１７と、プログラム関連性指標情報１２０とが生成される。これら生成される情報は、情報記憶部１０５に格納される。
【００１６】
なお図２においてプログラム関連性指標情報１２０は、ソースコード解析装置１０の内部と外部に合計２つ示されているが、両者は同一である。ソースコード解析装置１０の内部に存在するプログラム関連性指標情報１２０は、情報記憶部１０５に格納されることを示している。ソースコード解析装置１０の外部に存在するプログラム関連性指標情報１２０は、出力装置１５から出力されることを示している。
【００１７】
ソースコード解析装置１０は後述する処理を行うために、補助記憶装置１３に格納されている情報である、プログラム要素変更履歴１０６と、バスケット解析閾値１０７と、ソースコード１０８と、ソフトウェアメトリクス取得ロジック１０９と、グラフパターンマッチロジック１１０と、ソフトウェアメトリクス閾値１１１と、グラフパラメータ閾値１１２と、パラメータ論理式１１３と、プログラム関連性閾値１２１と、プログラム関連性指標取得ロジック１２５とを読み込む。そしてソースコード解析装置１０は、アンチパターングラフ１１８およびプログラム関連性指標情報１２０を出力装置１５から出力する。以下ではまず、ソースコード解析装置１０が読み込む情報およびソースコード解析装置１０が生成する情報について説明し、その後にソースコード解析装置１０の動作を説明する。
【００１８】
（プログラム要素変更履歴１０６）
図３は、プログラム要素変更履歴１０６の一例を示す図である。プログラム要素変更履歴１０６は１以上のレコードから構成される。プログラム要素変更履歴１０６の各レコードには、解析対象となるソースコード１０８のプログラムに発生した変更の履歴が記録される。このレコードは、変更が発生するたびに新たなレコードとして記録される。各レコードは、レコードを識別するために一意に付与される変更番号３０１と、プログラム中の変更された要素が全て格納される変更プログラム要素名３０２とから構成される。たとえば、符号３０３で示す１番目のレコードは、変更番号３０１が「１」であり、変更プログラム要素名３０２に記載されたプログラム要素Ａ、プログラム要素Ｂ、プログラム要素Ｃのプログラム要素が同時変更されたことを示している。
【００１９】
プログラム要素変更履歴１０６には、たとえば、解析対象となるプログラムを版管理する版管理システムの変更履歴情報を用いてもよい。この場合、一般的な版管理システムではファイル単位で版管理するため、解析対象となるプログラム要素の種類はファイルとなる。またプログラム要素変更履歴１０６には、変更履歴情報をプログラム構造情報に基づいて関数単位、クラス単位、またはファイル単位の変更履歴情報に変換したものを用いてもよい。この場合、解析対象となるプログラム要素の種類は関数、クラス、またはファイルとなる。
【００２０】
（バスケット解析閾値１０７）
図４は、バスケット解析閾値１０７の一例を示す図である。バスケット解析閾値１０７には、ロジカルカップリング分析部１０１がバスケット解析を行う際に用いる閾値が記録される。なお、ここでいうバスケット解析とは、プログラム要素変更履歴１０６を解析して同時に変更されやすいプログラム要素の組み合わせを抽出する処理である。バスケット解析閾値１０７は複数のレコードから構成され、各レコードはルール評価値名４０１と閾値４０２とから構成される。図４に示す例では、支持度４０３、確信度４０４、およびリフト値４０５の３つのルール評価値が示されている。閾値４０２には、０以上１以下の値が設定される。
【００２１】
（変更依存関係ルール１１４）
図５は、変更依存関係ルール１１４の一例を示す図である。変更依存関係ルール１１４には、ロジカルカップリング分析部１０１がバスケット解析を行った結果である、同時に変更されやすいプログラム要素の順序対が格納される。変更依存関係ルール１１４は１以上のレコードから構成され各レコードは、ルール番号５０１と、変更対象プログラム要素名５０２と、同時変更プログラム要素名５０３と、プログラム関連属性５０５とから構成される。
【００２２】
ルール番号５０１は各レコードを識別するために一意に付与される番号である。変更対象プログラム要素名５０２は、変更対象であるプログラム要素名である。同時変更プログラム要素名５０３は、変更対象プログラム要素名５０２と同時に変更されるプログラム要素名である。すなわち、変更対象プログラム要素名５０２が変更された場合は、同時変更プログラム要素名５０３も同時に変更される傾向にあることを示す。なお同時変更プログラム要素名５０３が変更された場合に変更対象プログラム要素名５０２が変更される傾向にあるか否かは不問である。プログラム関連属性５０５は、後述するように算出されるプログラム関連性指標の値と、後述するプログラム関連性閾値１２１とを用いて導出されるものであり、当該プログラム要素の組み合わせに対するプログラム関連性指標の値が、プログラム関連性閾値１２１が示す所定の条件を満たすか否かを表している。なお変更依存関係ルール１１４は、ロジカルカップリング分析部１０１がバスケット解析を行う前にレコードが登録されていない状態に初期化されているものとする。
【００２３】
（グラフパターンマッチロジック１１０）
図６は、グラフパターンマッチロジック１１０の一例を示す図である。グラフパターンマッチロジック１１０には、ロジカルカップリンググラフ生成部１０３が作成するロジカルカップリンググラフ１１６において、グラフの頂点ごとに値が定まるグラフパラメータ値を取得するためのロジックが記録される。グラフパターンマッチロジック１１０は、取得するグラフパラメータの種類ごとに作成され、グラフパラメータ名６０１とグラフパターンマッチロジック本体６０２とから構成される。グラフパラメータ名６０１には、グラフパラメータの種類が格納され、図６に示す例ではグラフパラメータの種類が「入次数」である。グラフパラメータの種類は、有向グラフの頂点の入次数または出次数などの、一般的にグラフ理論で定義される種類を用いてもよい。グラフパターンマッチロジック本体６０２の記述に制限はなく、たとえば実行可能なプログラミング言語やスクリプトで記述してもよい。
【００２４】
（ロジカルカップリンググラフ１１６）
図７は、ロジカルカップリンググラフ１１６の一例を示す図である。ロジカルカップリンググラフ１１６は、ロジカルカップリンググラフ生成部１０３により作成される有向グラフである。ロジカルカップリンググラフ１１６では、プログラム要素が頂点７０１として表現され、同時変更されやすいプログラム要素の順序対が有向辺７０２、７０４として表現される。図５に例示した変更依存関係ルール１１４において、プログラム関連属性５０５に識別子が一つも設定されていない場合は線種が点線である有向辺７０２が用いられ、プログラム関連属性５０５に少なくとも一つの識別子が設定されている場合は線種が破線である有向辺７０４が用いられる。すなわち、ロジカルカップリンググラフ１１６は、有向辺７０２、７０４を用いて、同時変更されやすいプログラム要素の組み合わせごとに、そのプログラム関連性指標の値がプログラム関連性閾値１２１で規定された条件を満たすか否かを表している。ロジカルカップリンググラフ１１６は、ロジカルカップリンググラフ生成部１０３でロジカルカップリンググラフ１１６の作成処理を行う前に頂点と有向辺が登録されていない状態に初期化される。
【００２５】
なお上述したとおりロジカルカップリンググラフ１１６はロジカルカップリンググラフ生成部１０３により生成されるが、ロジカルカップリンググラフ１１６の生成に必要な情報はロジカルカップリング分析部１０１により生成される。すなわちロジカルカップリンググラフ１１６に表現される情報を実質的に生成しているのはロジカルカップリング分析部１０１であり、ロジカルカップリンググラフ生成部１０３はデータの表現を変更したに過ぎない。したがって、ロジカルカップリンググラフ１１６に表されている情報を生成しているのはロジカルカップリング分析部１０１であると言える。なお、ロジカルカップリング分析部１０１は、上記のロジカルカップリンググラフ１１６の生成に必要な情報を表現するために、前述の変更依存関係ルール１１４を生成する。そのため以下の説明では、変更依存関係ルール１１４が表す情報を「ロジカルカップリング情報」とも称する。
【００２６】
（アンチパターングラフ１１８）
図８は、アンチパターングラフ１１８の一例を示す図である。アンチパターングラフ１１８は、ロジカルカップリンググラフ１１６の頂点のうち、特に問題特徴を有する頂点７０３を強調的に表現したものである。ロジカルカップリンググラフ１１６の頂点７０１が問題特徴を有する頂点７０３か否かは、当該頂点７０３に対応するプログラム要素のプログラム要素情報１１７に記録されたパラメータの値８０４（図９参照）と、ソフトウェアメトリクス閾値１１１およびグラフパラメータ閾値１１２の少なくとも一つとを用いて、パラメータ論理式１１３で定義した方法によって評価した真偽値により判断される。この真偽値が真である場合は、当該頂点は問題特徴を有する頂点７０３であり、当該真偽値が偽である場合は、当該頂点は問題特徴を有しない頂点７０１である。すなわち、アンチパターングラフ１１８は、ロジカルカップリンググラフ１１６と同様に、同時変更されやすいプログラム要素の組み合わせごとに、プログラム関連性指標の値がプログラム関連性閾値１２１で規定された条件を満たすか否かを表している。さらに加えて、各プログラム要素がパラメータ論理式１１３で規定された条件を満たすか否かを表している。問題特徴を有する頂点７０３の表現方法としては、当該頂点を着色または発光または点滅または拡大などの手法を採用してもよい。アンチパターングラフ１１８は出力装置１５を用いてユーザに出力される。ユーザは、アンチパターングラフ１１８を見ることによって、プログラム要素間にどのような同時変更されやすい関係があるかを確認できる。
【００２７】
（プログラム要素情報１１７）
図９は、プログラム要素情報１１７の一例を示す図である。プログラム要素情報１１７には、ロジカルカップリンググラフ生成部１０３によって作成されるロジカルカップリンググラフ１１６における頂点７０１に関するグラフパラメータ値が格納される。プログラム要素情報１１７は、プログラム要素ごとに作成され、プログラム要素８０１とパラメータテーブル８０２とから構成される。プログラム要素８０１は、プログラム要素名とプログラム要素の値との組み合わせである。
【００２８】
パラメータテーブル８０２は、１以上のレコードから構成され、各レコードはパラメータ名８０３とパラメータの値８０４とから構成される。パラメータテーブル８０２に格納されるパラメータは、解析対象であるソースコード１０８の品質に関する各プログラム要素の評価値を表すものであり、グラフパターンマッチロジック１１０で定義されたグラフパラメータの値と、ソフトウェアメトリクス取得ロジック１０９で定義されたソフトウェアメトリクスの値とを含む。たとえば図９に示す例では、符号８０５で示すパラメータテーブル８０２の最初のレコードには、「保守容易性指数」という名称のソフトウェアメトリクスの値が「７５」であることが記載されている。また、符号８０６で示すパラメータテーブル８０２の三番目のレコードには、「入次数」という名称のグラフパラメータの値が「３」であることが記載されている。プログラム要素情報１１７は出力装置１５を用いてユーザに出力される。ユーザは、プログラム要素情報１１７を見ることによって、プログラム要素に対応するグラフ要素が有するグラフパラメータおよびソフトウェアメトリクスの種類およびその値を確認できる。プログラム要素情報１１７は、ロジカルカップリンググラフ生成部１０３がプログラム要素情報作成処理を行う前に、未作成状態に初期化される。
【００２９】
（グラフパラメータ閾値１１２）
図１０は、グラフパラメータ閾値１１２の一例を示す図である。グラフパラメータ閾値１１２は複数のレコードから構成され、各レコードにはグラフパターンマッチロジック１１０でグラフパラメータ名６０１ごとに定義したグラフパラメータのロジックに対し、当該ロジックに応じたグラフパラメータ値が異常であると判断するための閾値が格納される。具体的には各レコードは、各レコードを識別するために一意に付与されるグラフパラメータ識別子９０１と、グラフパラメータ名９０２と、グラフパラメータ閾値９０３と、グラフパラメータ値がグラフパラメータ閾値９０３と比べてどのような値をとる場合に異常とみなすかを判断するためのグラフパラメータ判定条件９０４とで構成される。ここで、グラフパラメータ判定条件９０４には、グラフパラメータ値とグラフパラメータ閾値９０３を比較するための関係演算子を記述してもよい。なお、グラフパラメータ値をグラフパラメータ判定条件９０４およびグラフパラメータ閾値９０３を用いて評価した結果を、当該グラフパラメータ値に対する判定結果と呼ぶ。
【００３０】
（ソフトウェアメトリクス閾値１１１）
図１１はソフトウェアメトリクス閾値１１１の一例を示す図である。ソフトウェアメトリクス閾値１１１は複数のレコードから構成され、各レコードにはソフトウェアメトリクス情報１１５に記録されたソフトウェアメトリクス値１９０２（図１４参照）に対し、当該ソフトウェアメトリクス値１９０２が異常であると判断するための閾値が格納される。具体的には各レコードは、各レコードを識別するために一意に付与されるソフトウェアメトリクス識別子２１０１と、ソフトウェアメトリクス名２１０２と、ソフトウェアメトリクス閾値２１０３と、ソフトウェアメトリクス判定条件２１０４とから構成される。
【００３１】
ソフトウェアメトリクス判定条件２１０４とは、ソフトウェアメトリクス値１９０２がソフトウェアメトリクス閾値２１０３と比べてどのような値をとる場合に異常とみなすかを判断するための条件である。なおソフトウェアメトリクス判定条件２１０４には、ソフトウェアメトリクス値１９０２とソフトウェアメトリクス閾値２１０３を比較するための関係演算子を記述してもよい。なお、ソフトウェアメトリクス値１９０２をソフトウェアメトリクス判定条件２１０４およびソフトウェアメトリクス閾値２１０３を用いて評価した結果を、当該ソフトウェアメトリクス値に対する判定結果という。
【００３２】
（パラメータ論理式１１３）
図１２は、パラメータ論理式１１３の一例を示す図である。パラメータ論理式１１３は、複数のパラメータ値に対する判定結果を総合的に評価して、当該パラメータ値の組が異常であるかどうかを判断するための論理式である。パラメータ論理式１１３は、論理学で用いられる一般的な文字や記号を用いて記述し、一般的な推論規則によってその真偽値が評価可能であるとする。たとえば、パラメータ論理式１１３は、グラフパラメータ識別子９０１、ソフトウェアメトリクス識別子２１０１、論理演算記号（”＆”または”｜”）、括弧記号（”（”または”）”）などを用いて記述してもよい。ここで、グラフパラメータ識別子９０１の真偽値は、当該グラフパラメータの値８０４に対する判定結果とする。またグラフパラメータ識別子９０１およびソフトウェアメトリクス識別子２１０１を原子論理式として論理演算記号を用いて得られる論理式の真偽値は、論理学の一般的な推論規則に従うものとする。
【００３３】
（ソフトウェアメトリクス取得ロジック１０９）
図１３はソフトウェアメトリクス取得ロジック１０９の一例を示す図である。ソフトウェアメトリクス取得ロジック１０９には、プログラム要素ごとに値が定まるソフトウェアメトリクス値を取得するためのロジックが記録される。ソフトウェアメトリクス取得ロジック１０９は、取得したいソフトウェアメトリクスの種類ごとに作成され、ソフトウェアメトリクス名１８０１とソフトウェアメトリクス取得ロジック本体１８０２とから構成される。ソフトウェアメトリクス名１８０１には、ソフトウェアメトリクスの種類を示す情報が格納され、図１３に示す例ではソフトウェアメトリクスの種類が「保守容易性指数」である。ソフトウェアメトリクスの種類は、プログラム要素の規模や複雑度などの、一般的なプログラム解析で評価される値を用いてもよい。ソフトウェアメトリクス取得ロジック本体１８０２の記述に制限はなく、たとえば実行可能なプログラミング言語やスクリプトで記述してもよい。
【００３４】
ソフトウェアメトリクスは、たとえば保守容易性指標、凝集度、およびサイクロマチック数である。保守容易性指標とは、行数やサイクロマチック数などを組み合わせた保守性メトリクスである。凝集度とは、プログラム要素が属するクラスにおける情報要素間の関連性の強さを表す指標である。サイクロマチック数は循環的複雑度とも呼ばれ、線形的に独立した経路の数に基づき算出される。
【００３５】
（ソフトウェアメトリクス情報１１５）
図１４は、ソフトウェアメトリクス情報１１５の一例を示す図である。ソフトウェアメトリクス情報１１５は、複数のレコードから構成され、各レコードはプログラム要素ごとに作成される。すなわちソフトウェアメトリクス情報１１５の各レコードはあるプログラム要素について、ソフトウェアメトリクス取得ロジック１０９において定義したソフトウェアメトリクスの値が格納される。ソフトウェアメトリクス情報１１５の各レコードは、プログラム要素名１９０１と、１以上のソフトウェアメトリクス値１９０２とが含まれる。たとえば符号１９０３で示す１番目のレコードは、プログラム要素Ａのソフトウェアメトリクス値として、保守容易性指数が７５、凝集度が０．３であることを示している。なおソフトウェアメトリクス情報１１５は、プログラム解析部１０２でプログラム解析を行う前に初期化される。
【００３６】
（プログラム関連性指標取得ロジック１２５）
図１５は、プログラム関連性指標取得ロジック１２５の一例を示す図である。プログラム関連性指標取得ロジック１２５には、プログラム要素の対ごとに値が定まるプログラム関連性指標の値を取得するロジックが記録される。プログラム関連性指標取得ロジック１２５は、プログラム関連性指標の種類ごとに作成され、プログラム関連性指標名２９０１とプログラム関連性指標取得ロジック本体２９０２とで構成される。プログラム関連性指標名２９０１はたとえば、プログラム要素間のソースコードの類似度や、共通して参照する他のプログラム要素数や、参照関係に基づくプログラム要素間の距離などの、一般的にプログラム解析で評価される指標である。プログラム関連性指標取得ロジック本体２９０２の記述に制限はなく、たとえば実行可能なプログラミング言語やスクリプトで記述してもよい。
【００３７】
プログラム関連性指標は、たとえば共通参照変数数やコード類似度である。共通参照変数数とは、２つの関数が共通して参照する変数の数である。コード類似度とは２つの関数に共通して出現するシンボル、すなわち変数参照や関数呼び出しの割合であり、共通するシンボルが多いほど「１」に近づき、共通するシンボルが少ないほど「０」に近づく。
【００３８】
（プログラム関連性指標情報１２０）
図１６は、プログラム関連性指標情報１２０の一例を示す図である。プログラム関連性指標情報１２０は、複数のレコードから構成され、各レコードはプログラム要素の組み合わせごとに作成される。すなわちプログラム関連性指標情報１２０の各レコードはあるプログラム要素対について、プログラム関連性指標取得ロジック１２５において定義したプログラム関連性指標のプログラム要素対ごとの値が格納される。プログラム関連性指標情報１２０の各レコードは、要素対となる始点プログラム要素名３００２と、終点プログラム要素名３００３と、１以上のプログラム関連性指標値３００４とから構成される。たとえば図１６に符号３００１で示す１つ目のレコードは、プログラム要素Ａを始点としプログラム要素Ｂを終点とする組み合わせにおけるプログラム関連性指標値として、共通参照変数数が２０でコード類似度が０．３であることが示されている。
【００３９】
プログラム関連性指標情報１２０は、プログラム関連性分析部１１９がプログラム関連性分析を行う前にいずれのレコードも記録されていない状態に初期化される。プログラム関連性指標情報１２０は出力装置１５を用いてユーザに出力される。ユーザは、プログラム関連性指標情報１２０を見ることによって、プログラム要素対がどのようなプログラム関連性指標を持つかを確認できる。
【００４０】
（プログラム関連性閾値１２１）
図１７は、プログラム関連性閾値１２１の一例を示す図である。プログラム関連性閾値１２１は複数のレコードから構成され各レコードは、関連性属性を有するか否かを判断するための閾値であって、プログラム関連性指標情報１２０に記録されたプログラム関連性指標値３００４に対する閾値が記録される。各レコードは、関連性属性を一意に識別する識別子である関連属性識別子３２０２、プログラム関連性指標名３２０３、プログラム関連性閾値３２０４、およびプログラム関連性条件３２０５から構成される。ただしプログラム関連性閾値３２０４およびプログラム関連性条件３２０５はそれぞれ、閾値３２０４および条件３２０５とも呼ぶ。
【００４１】
条件３２０５は、図１６のプログラム関連性指標情報１２０におけるプログラム関連性指標値３００４がプログラム関連性閾値３２０４と比べてどのような値をとる場合にプログラム関連性属性をもつとみなすかを判断するための条件である。ただしプログラム関連性条件３２０５には、プログラム関連性指標値３００４とプログラム関連性閾値３２０４を比較するための関係演算子を記述してもよい。なお、プログラム関連性指標値３００４を条件３２０５および閾値３２０４を用いて評価した結果を、当該プログラム関連性に対する判定結果と呼ぶ。
【００４２】
（ソースコード解析装置１０の動作）
図１８は、ロジカルカップリング分析部１０１の動作を表すフローチャートである。まずロジカルカップリング分析部１０１はプログラム要素変更履歴１０６を読み込み（Ｓ１２０１）、バスケット解析閾値１０７を読み込む（Ｓ１２０２）。そしてロジカルカップリング分析部１０１は、読み込んだプログラム要素変更履歴１０６からプログラム要素の全ての順序対を生成し、各順序対（Ｅ１，Ｅ２）に対してＳ１２０４〜Ｓ１２０８の処理を実施する（Ｓ１２０３）。
【００４３】
Ｓ１２０４ではロジカルカップリング分析部１０１は、順序対（Ｅ１，Ｅ２）に対する支持度を計算する。ここで、順序対（Ｅ１，Ｅ２）に対する支持度とは、プログラム要素Ｅ１とＥ２の同時変更されやすさを表す０以上１以下の値であり、Ｅ１とＥ２を変更プログラム要素名３０２に含む変更履歴レコード３０３の数を全ての変更履歴レコード３０３の数で割った値である。Ｓ１２０５ではロジカルカップリング分析部１０１は、順序対（Ｅ１，Ｅ２）に対する確信度を計算する。ここで、順序対（Ｅ１，Ｅ２）に対する確信度とは、プログラム要素Ｅ１が変更されたときのＥ２の変更されやすさを表す０以上１以下の値であり、Ｅ１とＥ２を変更プログラム要素名３０２に含む変更履歴レコード３０３の数を、Ｅ１を変更プログラム要素名３０２に含む変更履歴レコード３０３の数で割った値である。
【００４４】
Ｓ１２０６ではロジカルカップリング分析部１０１は、順序対（Ｅ１，Ｅ２）に対するリフト値を計算する。ここで、順序対（Ｅ１，Ｅ２）に対するリフト値とは、プログラム要素Ｅ１の変更とＥ２の変更の相関関係について、値が１の場合は無相関、１より大きい場合は正の相関、１より小さい場合は負の相関があることを表す０以上の値である。順序対（Ｅ１，Ｅ２）に対するリフト値は、順序対（Ｅ１，Ｅ２）に対する確信度を、順序対（Ｅ２，Ｅ２）に対する支持度で割った値である。
【００４５】
続くＳ１２０７ではロジカルカップリング分析部１０１は、順序対（Ｅ１，Ｅ２）に対する支持度、確信度、およびリフト値の全てが、バスケット解析閾値１０７から与えられるそれぞれのルール評価値名４０１の閾値４０２を超過しているか否かを判定する。ロジカルカップリング分析部１０１は、支持度、確信度、リフト値およびリフト値の全てが閾値を超過していると判断する場合は、変更依存関係ルール１１４に、一意的なルール番号５０１を付与した新しい変更依存関係ルールレコード５０４を追加し、当該変更依存関係ルールレコード５０４の変更対象プログラム要素名５０２にプログラム要素Ｅ１を、同時変更プログラム要素名５０３にプログラム要素Ｅ２を記録する（Ｓ１２０８）。ロジカルカップリング分析部１０１は、支持度、確信度、リフト値およびリフト値のいずれか１つでも閾値を超過していないと判断する場合はＳ１２０９に進む。Ｓ１２０９ではロジカルカップリング分析部１０１は、全ての順序対（Ｅ１，Ｅ２）に対してＳ１２０４〜Ｓ１２０８の処理を実施する。
【００４６】
続くＳ１２１０ではロジカルカップリング分析部１０１は、プログラム関連性指標情報１２０の評価を行い、その評価結果を変更依存関係ルール１１４に書き込んで図１８に示す処理を終了する。Ｓ１２１０を詳述するとロジカルカップリング分析部１０１は、まずプログラム関連性閾値１２１およびプログラム関連性分析部１１９が生成するプログラム関連性指標情報１２０を読み込む。そしてプログラム関連性指標情報１２０に格納されたプログラム関連性指標値３００４がプログラム関連性閾値１２１の条件を満たすか否かを判断し、条件を満たす場合は対応する関連属性識別子を変更依存関係ルール１１４のプログラム関連属性５０５の欄に書き込む。たとえば図１６の最初のレコードに記載されている例では共通参照変数数が「２０」であり、図１７に示すプログラム関連性閾値１２１では最初のレコードに記載されている条件は共通参照変数数が「２５未満」である。「２０」は、「２５未満」の条件を満たすので、図５の最初のレコードに示すように、プログラム関連属性５０５に、図１７の最初のレコードで関連属性識別子３２０２に設定されている識別子である「Ｒ１」が記載される。
【００４７】
（プログラム解析部１０２の動作）
図１９は、プログラム解析部１０２の動作を表すフローチャートである。プログラム解析部１０２はまずソースコード１０８を読み込み（Ｓ２４０１）、ソフトウェアメトリクス取得ロジック１０９を読み込む（Ｓ２４０２）。そしてプログラム解析部１０２は読み込んだソースコード１０８に含まれる全てのプログラム要素に対して処理対象のプログラム要素Ｅを順番に変更してＳ２４０４〜Ｓ２４０７の処理を実施する（Ｓ２４０３）。プログラム解析部１０２は全てのソフトウェアメトリクス取得ロジック１０９に対して処理対象のソフトウェアメトリクス取得ロジック１０９を順番に変更してＳ２４０５の処理を実施する（Ｓ２４０４）。ただし次のＳ２４０５では処理対象のソフトウェアメトリクス取得ロジック１０９を符号「Ｌ」で表す。
【００４８】
プログラム解析部１０２は、符号Ｌで表す処理対象のソフトウェアメトリクス取得ロジック１０９を用いて、処理対象のプログラム要素Ｅのメトリクスを取得する（Ｓ２４０５）。このＳ２４０５の処理は、前述の繰り返し処理により、全てのプログラム要素Ｅについて全てのソフトウェアメトリクス取得ロジック１０９ごとに算出される。処理対象のプログラム要素Ｅについて全てのソフトウェアメトリクス取得ロジック１０９についてメトリクスの取得が完了すると（Ｓ２４０６）、処理対象のプログラム要素Ｅのメトリクス値をソフトウェアメトリクス情報１１５に追加する（Ｓ２４０７）。プログラム解析部１０２は、以上の処理を全てのプログラム要素Ｅを対象に実行すると（Ｓ２４０８）、図１９に示す処理を終了する。
【００４９】
（プログラム関連性分析部１１９の動作）
図２０は、プログラム関連性分析部１１９の動作を表すフローチャートである。プログラム関連性分析部１１９はまずソースコード１０８を読み込み（Ｓ３５０１）、続いて全てのプログラム関連性指標取得ロジック１２５を読み込む（Ｓ３５０２）。続いてプログラム関連性分析部１１９は、ソースコード１０８に含まれる全てのプログラム要素同士の組み合わせであるプログラム要素対Ｐを順番に変更してＳ３５０４〜Ｓ３５０７の処理を実施する（Ｓ３５０３）。プログラム関連性分析部１１９は全てのプログラム関連性指標取得ロジック１２５に対して処理対象のプログラム関連性指標取得ロジック１２５を順番に変更してＳ３５０５の処理を実施する（Ｓ３５０４）。ただし次のＳ３５０５では処理対象のプログラム関連性指標取得ロジック１２５を符号「Ｌ」で表す。
【００５０】
プログラム関連性分析部１１９は、符号Ｌで表す処理対象のプログラム関連性指標取得ロジック１２５を用いて、処理対象のプログラム要素対Ｐのプログラム関連性指標を取得する（Ｓ３５０５）。このＳ３５０５の処理は、前述の繰り返し処理により、全てのプログラム要素対Ｐについて全てのプログラム関連性指標取得ロジック１２５ごとに算出される。処理対象のプログラム要素対Ｐについて全てのプログラム関連性指標取得ロジック１２５についてプログラム関連性指標の取得が完了すると（Ｓ３５０６）、処理対象のプログラム要素対Ｐのプログラム関連性指標をプログラム関連性指標情報１２０に追加する（Ｓ３５０７）。プログラム関連性分析部１１９は、以上の処理を全てのプログラム要素対Ｐを対象に実行すると（Ｓ３５０８）、図２０に示す処理を終了する。
【００５１】
なおＳ３５０５の動作は、商用ツールとして販売されているプログラム解析ツールや、オープンソースで公開されているプログラム解析ツールを利用して実行してもよい。
【００５２】
（ロジカルカップリンググラフ生成部１０３の動作）
図２１は、ロジカルカップリンググラフ生成部１０３の動作を表すフローチャートである。ロジカルカップリンググラフ生成部１０３は、ソフトウェアメトリクス情報１１５と変更依存関係ルール１１４（Ｓ１３０５）、プログラム関連性指標情報１２０（Ｓ１３０６）、プログラム関連性閾値１２１（Ｓ１３０７）、およびグラフパターンマッチロジック１１０（Ｓ１３０８）を読み込む。次にロジカルカップリンググラフ生成部１０３は、図２２を参照して後に説明するように、ロジカルカップリンググラフ１１６を生成する（Ｓ１３０３）。次にロジカルカップリンググラフ生成部１０３は、図２３を参照して後に説明するように、プログラム要素情報１１７を生成し（Ｓ１３０８）、図２１に示す処理を終了する。
【００５３】
図２２は、図２１のＳ１３０３の詳細を示すフローチャートである。ロジカルカップリンググラフ生成部１０３は、全てのプログラム要素Ｅに対してＳ１４０２〜Ｓ１４０３の処理を実施する（Ｓ１４０１）。ロジカルカップリンググラフ生成部１０３は、ロジカルカップリンググラフ１１６に、プログラム要素Ｅに対応する頂点Ｎを追加する（Ｓ１４０２）。ロジカルカップリンググラフ生成部１０３は、Ｓ１４０２において追加した頂点Ｎに対応するプログラム要素情報１１７を作成し、そのプログラム要素名にプログラム要素Ｅを記録する（Ｓ１４０３）。ただしここでは各パラメータの値は書き込まれない。ロジカルカップリンググラフ生成部１０３は、全てのプログラム要素Ｅに対してＳ１４０２〜Ｓ１４０３の処理を実施したと判断するとＳ１４０５に進み、未処理のプログラム要素が存在すると判断する場合はＳ１４０２に戻る（Ｓ１４０４）。
【００５４】
ロジカルカップリンググラフ生成部１０３は、変更依存関係ルール１１４に記載されたプログラム要素の全ての順序対（Ｅ１，Ｅ２）に対してＳ１４０６の処理を実施する（Ｓ１４０５）。ロジカルカップリンググラフ生成部１０３は、ロジカルカップリンググラフ１１６に、Ｅ１を始点、Ｅ２を終点とする有向辺を追加する（Ｓ１４０６）。ただしこのとき有向辺の線種は、プログラム関連属性５０５の値に応じたものとする。たとえばプログラム関連属性５０５が何も設定されていない場合は点線、何らかの属性が設定されている場合は破線を用いる。ただし線種だけで設定されている属性が識別可能なように、一点鎖線や２点鎖線、さらには二重線など様々な線種を用いてもよい。これにより、図１６のプログラム関連性指標情報１２０に記載された当該プログラム要素の組み合わせに対する各プログラム関連性指標値３００４が、図１７のプログラム関連性閾値１２１で規定された条件を満たすか否かを、ロジカルカップリンググラフ１１６において表現する。次にロジカルカップリンググラフ生成部１０３は、プログラム要素の全ての順序対（Ｅ１，Ｅ２）に対して実施したと判断すると図２２に示す処理を終了し、未処理の順序対が存在すると判断する場合はＳ１４０６に戻る（Ｓ１４０７）。
【００５５】
図２３は、図２１のＳ１３０８の詳細を示すフローチャートである。ロジカルカップリンググラフ生成部１０３は、ロジカルカップリンググラフ１１６における全ての頂点Ｎに対してＳ１５０７〜Ｓ１５０５の処理を実行する（Ｓ１５０１）。ロジカルカップリンググラフ生成部１０３は、全てのプログラム要素Ｅに対してＳ１５０８の処理を実行する。ロジカルカップリンググラフ生成部１０３は、頂点Ｎに対応するプログラム要素Ｅのソフトウェアメトリクス値を、頂点Ｎのプログラム要素情報１１７に追加する（Ｓ１５０８）。すなわち、図１４のソフトウェアメトリクス情報１１５における当該プログラム要素Ｅの各ソフトウェアメトリクス値１９０２を、プログラム要素情報１１７のパラメータテーブル８０２に追加する。ロジカルカップリンググラフ生成部１０３は、全てのプログラム要素Ｅに対してＳ１５０８の処理を実施したと判断する場合はＳ１５０２に進み、実施していないプログラム要素が存在すると判断する場合はＳ１５０８に戻る（Ｓ１５０９）。
【００５６】
ロジカルカップリンググラフ生成部１０３は全てのグラフパターンマッチロジック１１０に対してＳ１５０３の処理を実施する（Ｓ１５０２）。ただしＳ１５０３では処理対象のグラフパターンマッチロジック１１０を符号「Ｌ」で表す。ロジカルカップリンググラフ生成部１０３は符号Ｌで表す処理対象のグラフパターンマッチロジック１１０を用いて、処理対象の頂点Ｎに対応するグラフパラメータ値を取得する（Ｓ１５０３）。ロジカルカップリンググラフ生成部１０３は全てのグラフパターンマッチロジック１１０に対してＳ１５０３の処理を実施したと判断する場合はＳ１５０５に進み、実施していないグラフパターンマッチロジック１１０が存在すると判断する場合はＳ１５０３に戻る（Ｓ１５０９）。ロジカルカップリンググラフ生成部１０３は処理対象の頂点Ｎのグラフパラメータ値を頂点Ｎのプログラム要素情報１１７に追加する（Ｓ１５０５）。ロジカルカップリンググラフ生成部１０３は、全ての頂点Ｎに対してＳ１５０７〜Ｓ１５０５の処理を実施したと判断する場合は図２３に示す処理を終了し、実施していない頂点Ｎが存在すると判断する場合はＳ１５０７に戻る（Ｓ１５０６）。
【００５７】
（アンチパターン検出部１０４の動作）
図２４は、アンチパターン検出部１０４の動作を示すフローチャートである。アンチパターン検出部１０４はまず、ロジカルカップリンググラフ１１６、プログラム要素情報１１７およびパラメータ論理式１１３を読み込む（Ｓ１６０１）。次にアンチパターン検出部１０４は、Ｓ１６０３〜Ｓ１６０５の処理をＳ１６０１で読み込んだロジカルカップリンググラフ１１６の全ての頂点Ｎに対して実施する。アンチパターン検出部１０４は、Ｓ１６０１で読み込んだプログラム要素情報１１７の各パラメータ値に基づき、処理対象の頂点Ｎに対するパラメータ論理式１１３の真偽値を算出する（Ｓ１６０３）。このとき、パラメータ論理式１１３で指定されたグラフパラメータ識別子９０１やソフトウェアメトリクス識別子２１０１に対応するレコードを、必要に応じてソフトウェアメトリクス閾値１１１やグラフパラメータ閾値１１２からそれぞれ読み出し、パラメータ値と比較する。その結果、アンチパターン検出部１０４はパラメータ論理式１１３の真偽値が真であると判断すると（Ｓ１６０４：真）、ロジカルカップリンググラフ１１６における処理対象の頂点Ｎを強調表示して（Ｓ１６０５）、Ｓ１６０６にすすむ。アンチパターン検出部１０４はパラメータ論理式１１３の真偽値が偽であると判断すると（Ｓ１６０４：偽）、そのままＳ１６０６に進む。アンチパターン検出部１０４は、全ての頂点Ｎに対してＳ１６０３〜Ｓ１６０５の処理を実施したと判断する場合は図２４に示す処理を終了し、実施していない頂点Ｎが存在すると判断する場合はＳ１６０２に戻る（Ｓ１６０６）。以上説明した処理により、アンチパターン検出部１０４は、プログラム要素情報１１７がパラメータ論理式１１３で規定された条件を満たすプログラム要素を強調表示された頂点７０３によって示し、さらに、プログラム関連性指標情報１２０がプログラム関連性閾値１２１で規定された条件を満たすプログラム要素を破線の有向辺７０４によって示したアンチパターングラフ１１８を、生成することができる。
【００５８】
上述した第１の実施の形態によれば、次の作用効果が得られる。
（１）ソースコード解析装置１０は、ソースコード１０８を解析してソースコード１０８に含まれるプログラム要素同士の関連性を分析しプログラム関連性指標情報１２０を生成するプログラム関連性分析部１１９と、プログラム要素変更履歴１０６を用いて、同時変更されやすいプログラム要素の対を示す情報であるロジカルカップリンググラフ１１６に表される情報を生成するロジカルカップリング分析部１０１と、少なくともロジカルカップリング情報に基づいて、評価値であるプログラム要素情報１１７をプログラム要素ごとに生成するロジカルカップリンググラフ生成部１０３と、ロジカルカップリング情報に含まれるプログラム要素のうち、プログラム要素情報およびプログラム関連性指標情報が所定の条件を満たすプログラム要素を示すアンチパターングラフ１１８を生成するアンチパターン検出部１０４と、アンチパターングラフ１１８を出力する出力装置１５とを備える。
【００５９】
ソースコード解析装置１０を使用するユーザはプログラム関連性指標情報１２０を判定したアンチパターングラフ１１８が得られるので、アンチパターンが示す問題特徴をプログラム要素が備えているかどうかをより高い精度で判定できる。具体的には、アンチパターングラフ１１８において、問題特徴を有するプログラム要素は強調表示され、何らかのプログラム関連属性を有する場合には破線で示されるので、両方の特徴を併せ持つプログラム要素に注目すればよいことが容易に判別できる。以下、アンチパターンであるShotgun surgeryを例に説明する。
【００６０】
Shotgun surgeryは、当該プログラム要素を拡張または変更すると多くの他のプログラム要素も同時に拡張または変更される、という問題特徴を持つプログラム要素をリファクタリングするためのパターンである。Shotgun surgeryが示す問題特徴はプログラム要素そのものの特徴ではなく、プログラム要素の変更に関する特徴であるため、ソフトウェアメトリクスを用いて当該問題特徴を持つプログラム要素を特定することは困難である。
【００６１】
Shotgun surgeryの間接的な要因としては、たとえばプログラム要素間の類似関係がある。類似関係とはたとえばプログラムコードの重複である。プログラムコードが重複する場合、同様の変更を重複したプログラムコードそれぞれに加えることがあるため、Shotgun surgeryとなる可能性がある。ただし、プログラムコードの重複は、定型処理や、意図的な派生機能の作成により存在しうるため、そもそも変更が加わらない場合や、異なる変更が行われていく場合も多く、その存在が必ずしもShotgun surgeryを引き起こすわけではない。
【００６２】
Shotgun surgeryの異なる間接的な要因としては、たとえばプログラム要素間の参照関係がある。参照関係とはたとえば複数の異なるプログラム要素から同一のデータを読み書きしている場合である。この場合、データの書き込み側のプログラム要素に変更が加わったとき、当該データを読み込む他の異なるプログラム要素もまた変更が必要となることがある。ただし、同一のデータを複数のプログラム要素から読み書きすることは一般的なプログラム構造であり、この関係が必ずしもShotgun surgeryを引き起こすわけではない。
【００６３】
以上のように、アンチパターンが示す問題特徴をプログラム要素が備えているか否かを判定するためには、プログラム関連性指標情報１２０およびアンチパターングラフ１１８を考慮することが望ましく、ソースコード解析装置１０はこれらの情報を提供できる。
【００６４】
（２）出力装置１５は、プログラム関連性指標情報１２０をさらに出力する。そのためユーザは、プログラム関連性指標の詳しい情報を閲覧して詳細な判断をすることができる。
【００６５】
（３）アンチパターングラフ１１８は、同時変更されやすいプログラム要素の対、および所定の条件を満たすプログラム要素を視覚的に表示する情報である。アンチパターングラフ１１８は有向グラフなのでユーザは容易に情報の把握が可能であり、文字や表で情報が提示されるよりも効率的である。
【００６６】
（４）プログラム要素のそれぞれについて保守性を示す指標であるソフトウェアメトリクス情報１１５を生成するプログラム解析部１０２を備える。ロジカルカップリンググラフ生成部１０３は、ソフトウェアメトリクス情報１１５も考慮してプログラム要素が所定の条件を満たすか否かを判断する。そのためアンチパターングラフ１１８はソフトウェアメトリクス情報１１５も考慮して作成されるので、ユーザはこのアンチパターングラフ１１８およびプログラム関連性指標情報１２０を参照することでより適切に、アンチパターンが示す問題特徴をプログラム要素が備えているか否かを判定することができる。以下、アンチパターンであるThe Blobを例に説明する。
【００６７】
The Blobは、複数の機能が１箇所にまとめて実装されている、という問題特徴を持つプログラム要素をリファクタリングするためのパターンである。The Blobが示す問題特徴を持つプログラム要素は、大規模化または複雑化する傾向があるため、その特定には、プログラム要素の規模または複雑度というソフトウェアメトリクスが有効である。しかし、単一の機能が実装されたプログラム要素でも規模や複雑度が大きくなる場合はあるため、判定結果にはノイズが載りやすい。一方で、The Blobが示す問題特徴を持つプログラム要素は、当該プログラム要素が実装する複数の機能が拡張または変更されるたびに併せて拡張または変更される場合が多い。
【００６８】
以上のように、アンチパターンが示す問題特徴をプログラム要素が備えているか否かを判定するためには、ソフトウェアメトリクス情報１１５も考慮することが望ましく、ソースコード解析装置１０はソフトウェアメトリクス情報１１５も考慮した情報を提供できる。
【００６９】
（変形例１）
上述した第１の実施の形態では、関連属性識別子は単一のプログラム関連性指標に基づき設定された。しかし関連属性識別子は複数のプログラム関連性指標に基づき設定されてもよい。
【００７０】
図２５は、関連属性識別子が複数のプログラム関連性指標に基づき設定される例を示す図、換言するとプログラム関連性閾値１２１の異なる例を示す図である。図２５（ａ）は既存の関連属性識別子を用いる例を示す図、図２５（ｂ）は既存の関連属性識別子を用いない例を示す図である。図２５（ａ）に示すプログラム関連性閾値１２１Ａは、第１の実施の形態において示したプログラム関連性閾値１２１とともに用いられ、プログラム関連性閾値１２１におけるプログラム関連性指標名３２０３、プログラム関連性閾値３２０４、およびプログラム関連性条件３２０５の代わりに論理式３３０３を備える。論理式３３０３は、プログラム関連性閾値１２１における関連属性識別子３２０２を用いた論理式である。たとえば図２５（ａ）に示す例では、１つ目のレコード３３０１は、Ｒ１およびＲ２の両方が真の場合にＲ３の属性を有することが示されている。
【００７１】
図２５（ｂ）に示すプログラム関連性閾値１２１Ｂは、第１の実施の形態において示したプログラム関連性閾値１２１とともに用いられてもよいし、プログラム関連性閾値１２１と統合されてもよい。図２５（ｂ）に示す例は図２５（ａ）に示す例と同じ条件を示している。図２５（ｂ）では関連属性識別子を用いずにプログラム関連性指標を用いている点が図２５（ａ）と異なる。
【００７２】
（変形例２）
上述した第１の実施の形態では、ソフトウェアメトリクス情報１１５が算出され、算出されたソフトウェアメトリクス情報１１５がプログラム要素情報１１７やアンチパターングラフ１１８の作成に利用された。しかしソースコード解析装置１０は、ソフトウェアメトリクス情報１１５を算出しなくてもよい。
【００７３】
図２６は、ソフトウェアメトリクス情報１１５を算出しない場合のソースコード解析装置１０の機能構成図である。図２６に示す機能構成図では図２に比べて、プログラム解析部１０２、ソフトウェアメトリクス閾値１１１、ソフトウェアメトリクス取得ロジック１０９、およびソフトウェアメトリクス情報１１５が削除されている。またプログラム要素情報１１７やパラメータ論理式１１３からもソフトウェアメトリクスに関する情報が削除される。
【００７４】
（変形例３）
上述した第１の実施の形態では、アンチパターン検出部１０４は図８に示すアンチパターングラフ１１８を出力した。しかしアンチパターン検出部１０４は、アンチパターングラフ１１８に代えて、アンチパターングラフ１１８に表現されている情報を文字や表として出力してもよい。プログラム要素の数が膨大な場合など、出力装置１５にアンチパターングラフ１１８の全体を視認可能な大きさで表示することが困難な場合に有効である。
【００７５】
（変形例４）
上述した第１の実施の形態では、ソースコード解析装置１０はアンチパターングラフ１１８およびプログラム関連性指標情報１２０を出力装置１５から出力した。しかしソースコード解析装置１０はプログラム関連性指標情報１２０を出力しなくてもよい。アンチパターングラフ１１８には、プログラム関連性指標情報１２０に基づいて設定されたプログラム関連属性の情報が有向辺の線種として含まれているからである。
【００７６】
（変形例５）
上述した第１の実施の形態では、ソースコード解析装置１０はプログラム要素変更履歴１０６を読み込んだ。しかしソースコード解析装置１０は複数のソースコード１０８を読み込んでプログラム要素変更履歴１０６を作成してもよい。すなわちプログラム要素変更履歴１０６があらかじめ作成されていなくてもよい。
【００７７】
―第２の実施の形態―
図２７〜図２８を参照して、ソースコード解析装置の第２の実施の形態を説明する。以下の説明では、第１の実施の形態と同じ構成要素には同じ符号を付して相違点を主に説明する。特に説明しない点については、第１の実施の形態と同じである。本実施の形態では、主に、各種パラメータの設定をユーザインタフェース上でインタラクティブに行う点で、第１の実施の形態と異なる。本実施の形態では、ソフトウェアメトリクス閾値１１１、グラフパラメータ閾値１１２、パラメータ論理式１１３、バスケット解析閾値１０７、およびプログラム関連性閾値１２１の入力と、これら入力された値の変化に伴うアンチパターングラフ１１８の出力を、ユーザインタフェース上でインタラクティブに行う例を説明する。
【００７８】
図２７は、出力装置１５に表示される入力ユーザインタフェース２７００の一例を示す図である。入力ユーザインタフェース２７００は、ソフトウェアメトリクス閾値入力部２７０１、グラフパラメータ閾値入力部２７０２、パラメータ論理式入力部２７０３、バスケット解析閾値入力部２７１６、およびプログラム関連性閾値入力部２７２１を備える。
【００７９】
ソフトウェアメトリクス閾値入力部２７０１は、１以上のソフトウェアメトリクス閾値要素入力部２７０４から構成される。ソフトウェアメトリクス閾値要素入力部２７０４は、ソフトウェアメトリクス識別子２１０１が表示されるソフトウェアメトリクス識別子表示部２７０５、ソフトウェアメトリクス名２１０２が表示されるソフトウェアメトリクス名表示部２７０６、ソフトウェアメトリクス閾値２１０３を入力するためのソフトウェアメトリクス閾値入力部２７０７、ソフトウェアメトリクス判定条件２１０４を入力するためのソフトウェアメトリクス判定条件入力部２７０８、およびソフトウェアメトリクス閾値２１０３を視覚的に入力できるソフトウェアメトリクス閾値入力スライダー２７０９から構成される。
【００８０】
グラフパラメータ閾値入力部２７０２は、１以上のグラフパラメータ閾値要素入力部２７１０から構成される。グラフパラメータ閾値要素入力部２７１０は、グラフパラメータ識別子９０１が表示されるグラフパラメータ識別子表示部２７１１、グラフパラメータ名９０２が表示されるグラフパラメータ名表示部２７１２、グラフパラメータ閾値９０３を入力するためのグラフパラメータ閾値入力部２７１３、グラフパラメータ判定条件９０４を入力するためのグラフパラメータ判定条件入力部２７１４、およびグラフパラメータ閾値９０３を視覚的に入力できるグラフパラメータ閾値入力スライダー２７１５から構成される。
【００８１】
バスケット解析閾値入力部２７１６は、１以上のバスケット解析ルール評価値入力部２７１７から構成される。バスケット解析ルール評価値入力部２７１７は、バスケット解析のルール評価値名４０１が表示されるバスケット解析ルール評価値名表示部２７１８、バスケット解析の閾値４０２を入力するためのバスケット解析閾値入力部２７１９、バスケット解析の閾値４０２を視覚的に入力できるバスケット解析閾値入力スライダー２７２０から構成される。
【００８２】
プログラム関連性閾値入力部２７２１は、１以上のプログラム関連性閾値要素入力部２７２２および１以上のプログラム関連性論理式要素入力部２７２８から構成される。プログラム関連性閾値要素入力部２７２２は、プログラム関連属性識別子３２０２が表示されるプログラム関連属性識別子表示部２７２３、プログラム関連性指標名３２０３が表示されるプログラム関連性指標名表示部２７２４、プログラム関連性指標閾値３２０４を入力するためのプログラム関連性指標閾値入力部２７２５、プログラム関連性指標判定条件３２０５を入力するためのプログラム関連性指標判定条件入力部２７２６、プログラム関連性指標閾値３２０４を視覚的に入力できるプログラム関連性指標閾値入力スライダー２７２７から構成される。
【００８３】
プログラム関連性論理式要素入力部２７２８は、プログラム関連属性識別子３３０２が表示されるプログラム関連属性識別子表示部２７２９、プログラム関連属性論理式３３０３を入力するためのプログラム関連属性論理式入力部２７３０から構成される。
【００８４】
ユーザは、ソフトウェアメトリクス閾値入力部２７０７、ソフトウェアメトリクス判定条件入力部２７０８、ソフトウェアメトリクス閾値入力スライダー２７０９、グラフパラメータ閾値入力部２７１３、グラフパラメータ判定条件入力部２７１４、グラフパラメータ閾値入力スライダー２７１５、パラメータ論理式入力部２７０３、バスケット解析閾値入力部２７１９、バスケット解析閾値入力スライダー２７２０、プログラム関連性指標閾値入力部２７２５、プログラム関連性指標判定条件入力部２７２６、プログラム関連性指標閾値入力スライダー２７２７、およびプログラム関連属性論理式入力部２７３０を用いてソフトウェアメトリクス閾値、グラフパラメータ閾値、パラメータ論理式、プログラム関連性指標閾値、およびプログラム関連属性論理式を入力する。そしてユーザは出力されるアンチパターングラフ１１８を確認することで、ソフトウェアメトリクス値およびプログラム関連性のインタラクティブな入力が可能になる。
【００８５】
図２８は、入出力ユーザインタフェース３９００の一例を示す図である。入出力ユーザインタフェース３９００は、入力ユーザインタフェース２７００と詳細情報表示部３９０１とから構成される。図２７の例と同様に、入力ユーザインタフェース２７００は、ソフトウェアメトリクス閾値入力部２７０１、グラフパラメータ閾値入力部２７０２、パラメータ論理式入力部２７０３、バスケット解析閾値入力部２７１６、およびプログラム関連性閾値入力部２７２１から構成される。詳細情報表示部３９０１は、アンチパターングラフ１１８と詳細情報表示部３９０１から構成される。アンチパターングラフ１１８は、ソフトウェアメトリクス閾値１１１、グラフパラメータ閾値１１２、パラメータ論理式１１３、バスケット解析閾値１０７、およびプログラム関連性閾値１２１の入力値に伴い変化する。詳細情報表示部３９０１には、変更依存関係ルール１１４、ソフトウェアメトリクス情報１１５、およびプログラム関連性指標情報１２０のいずれかが表示される。この３つのいずれが表示されるかは、表示選択部３９０２による選択に基づいて決定される。
【００８６】
ただし詳細情報表示部３９０１は、ユーザによる入力ユーザインタフェース２７００への入力により変化したアンチパターングラフ１１８に含まれるプログラム要素を含むレコードのみを出力しても良い。また詳細情報表示部３９０１には、プログラム要素情報１１７やプログラム関連情報１２２が表示されてもよい。
【００８７】
上述した第２の実施の形態によれば、次の作用効果が得られる。
（１）アンチパターン検出部１０４は、プログラム要素情報１１７に記載される値とソフトウェアメトリクス２７０１およびグラフパラメータ２７０２において入力される第１閾値との関係、およびプログラム関連性指標情報１２０とプログラム関連性指標２７２１において入力される第２閾値との関係を評価する。ソースコード解析装置１０は、第１閾値および第２閾値が入力される入力ユーザインタフェース２７００を備える。そのためユーザは、入力ユーザインタフェース２７００から閾値を入力して、その結果であるアンチパターングラフ１１８をインタラクティブに取得することができる。
【００８８】
（第２の実施の形態の変形例）
入力ユーザインタフェース２７００は、ソフトウェアメトリクス閾値入力部２７０１、グラフパラメータ閾値入力部２７０２、パラメータ論理式入力部２７０３、バスケット解析閾値入力部２７１６、およびプログラム関連性閾値入力部２７２１の少なくとも１つを備える構成でもよい。
【００８９】
―第３の実施の形態―
図２９〜図３１を参照して、ソースコード解析装置の第３の実施の形態を説明する。以下の説明では、第１の実施の形態と同じ構成要素には同じ符号を付して相違点を主に説明する。特に説明しない点については、第１の実施の形態と同じである。本実施の形態では、主に、バスケット解析閾値を自動的に決定する点で、第１の実施の形態と異なる。
【００９０】
（機能構成）
図２９は第３の実施の形態におけるソースコード解析装置１０の機能構成図である。ソースコード解析装置１０の機能構成は、第１の実施の形態における機能に加えて、バスケット解析閾値導出部１２３を備える。バスケット解析閾値導出部１２３は、プロセッサ１１が、主記憶装置１２や補助記憶装置１３に格納されているプログラムを読み出して実行することにより実現される。ただしバスケット解析閾値導出部１２３は、ソースコード解析装置１０が備えるハードウェア、たとえばＡＳＩＣなどによって実現されてもよい。バスケット解析閾値導出部１２３は、バスケット解析閾値１０７を設定する。バスケット解析閾値導出部１２３によるバスケット解析閾値１０７の設定方法に特に制限はなく、たとえば従前の閾値を所定の割合だけ増減させてもよいし所定の値だけ増減させてもよい。また閾値は、支持度、確信度、およびリフト値を連動して変更してもよいし、１つずつ変更してもよい。
【００９１】
本実施の形態では補助記憶装置１３にはバスケット解析期待値１２４がさらに記憶される。バスケット解析閾値導出部１２３は算出したバスケット解析閾値１０７に基づきロジカルカップリング分析部１０１が算出した変更依存関係ルール１１４がバスケット解析期待値１２４を満たすか否かを判断し、満たしていないと判断する場合はバスケット解析閾値１０７を再度算出する。バスケット解析閾値導出部１２３によるバスケット解析閾値１０７の算出は、変更依存関係ルール１１４がバスケット解析期待値１２４を満たすまで繰り返される。
【００９２】
（バスケット解析期待値１２４）
図３０は、バスケット解析期待値１２４の一例を示す図である。バスケット解析期待値１２４には、有益なアンチパターングラフ１１８を得るために適当と想定される変更依存関係ルール１１４の生成条件が記録される。バスケット解析期待値１２４は１以上のレコードから構成され、各レコードは、ルール数など変更依存関係ルールの項目４１０２と、当該項目に対応する期待値４１０３と、当該項目値が期待値４１０３と比べてどのような値をとる場合に満たすかを判断するための条件４１０４とで構成される。ここで、変更依存関係ルールの条件４１０４には、変更依存関係ルールの項目４１０２と変更依存関係ルールの期待値４１０３を比較するための関係演算子を記述してもよい。なお、変更依存関係ルールの項目４１０２を変更依存関係ルールの期待値４１０３と変更依存関係ルールの条件４１０４とを用いて評価した結果を、変更依存関係ルールに対する判定結果という。
【００９３】
（バスケット解析閾値導出部１２３の動作）
図３１は、バスケット解析閾値導出部１２３の動作を表すフローチャートである。バスケット解析閾値導出部１２３はまず、プログラム要素変更履歴１０６を読み込む（Ｓ４２０１）。バスケット解析閾値導出部１２３はバスケット解析閾値１０７を設定する（Ｓ４２０３）。バスケット解析閾値導出部１２３は、ロジカルカップリング分析部１０１により変更依存関係ルール１１４が作成されるのを待機する（Ｓ４２０４）。バスケット解析閾値導出部１２３は、作成された変更依存関係ルール１１４がバスケット解析期待値１２４の条件を満たすか否かを判断する（Ｓ４２０５）。バスケット解析閾値導出部１２３は条件を満たすと判断する場合は図３１に示す処理を終了し、条件を満たさないと判断する場合はＳ４２０３に戻る。
【００９４】
（バスケット解析閾値導出部１２３の動作例）
バスケット解析閾値導出部１２３は、バスケット解析閾値１０７の設定にあたり、支持度４０３または確信度４０４またはリフト値４０５のうち少なくとも一つの値について増加もしくは減少させる。バスケット解析閾値１０７の設定にあたり、たとえば、ロジカルカップリング分析部１０１が一度も実行されていないときに、プログラム要素変更履歴１０６のレコード数に基づき、レコード数が３０００未満であれば、支持度４０３の閾値４０２を、プログラム要素変更履歴１０６に含まれるプログラム要素数をレコード数で除算した値に３を乗算した値とし、レコード数が３０００以上であれば、支持度４０３の閾値４０２を、プログラム要素変更履歴１０６に含まれるプログラム要素数をレコード数で除算した値に３を乗算した値とする方法としても良い。  
【００９５】
またバスケット解析閾値導出部１２３は、バスケット解析閾値１０７の設定にあたり、変更依存関係ルール１１４に含まれるルール数が、バスケット解析期待値１２４により示されるルール数の下限値を下回る場合には、当該変更依存関係ルール１１４を得るために用いた支持度４０３の閾値４０２から、プログラム要素変更履歴１０６に含まれるプログラム要素数をレコード数で除算した値に２を乗算した値を減算した値を、新たな支持度４０３の閾値４０２としてもよい。またバスケット解析閾値導出部１２３は、変更依存関係ルール１１４に含まれるルール数が、バスケット解析期待値１２４により示されるルール数の上限値を上回る場合には、当該変更依存関係ルール１１４を得るために用いた支持度４０３の閾値４０２に、プログラム要素変更履歴１０６に含まれるプログラム要素数をレコード数で除算した値に２を乗算した値を加算した値を、新たな支持度４０３の閾値４０２としても良い。
【００９６】
さらにバスケット解析閾値導出部１２３は、ロジカルカップリング分析を際限なく繰り返すことを避けるために、変更依存関係ルール１１４がバスケット解析期待値１２４を満たさない場合も、バスケット解析閾値１０７の支持度４０３または確信度４０４またはリフト値４０５に上限もしくは下限を設ける、もしくは、ロジカルカップリング分析の実行回数に上限を設けるなどの方法で、ロジカルカップリング分析部１０１およびバスケット解析閾値導出部１２３の処理を打ち切り、ロジカルカップリンググラフ生成部１０３の処理に移っても良い。
【００９７】
上述した第３の実施の形態によれば、次の作用効果が得られる。
（１）ロジカルカップリング分析部１０１は、プログラム要素の対ごとに同時変更のされやすさを示す指標であるグラフパラメータを算出し、グラフパラメータとバスケット解析閾値１０７との関係によりロジカルカップリング情報、すなわち変更依存関係ルール１１４を生成する。ソースコード解析装置１０は、ロジカルカップリング情報が所定の条件を満たすようにバスケット解析閾値１０７を設定するバスケット解析閾値導出部１２３を備える。そのためユーザはバスケット解析閾値１０７を自ら設定する必要がなく、ソースコード解析装置１０を簡便に使用できる。
【００９８】
ソースコード解析装置１０が不図示の入出力インタフェースを備え、必要なときに入出力インタフェースと主記憶装置１２や補助記憶装置１３が利用可能な媒体を介して、他の装置からプログラムが読み込まれてもよい。ここで媒体とは、たとえば入出力インタフェースに着脱可能な記憶媒体、または通信媒体、すなわち有線、無線、光などのネットワーク、または当該ネットワークを伝搬する搬送波やディジタル信号、を指す。また、プログラムにより実現される機能の一部または全部がハードウエア回路やＦＰＧＡにより実現されてもよい。
【００９９】
上述した各実施の形態および変形例は、それぞれ組み合わせてもよい。上記では、種々の実施の形態および変形例を説明したが、本発明はこれらの内容に限定されるものではない。本発明の技術的思想の範囲内で考えられるその他の態様も本発明の範囲内に含まれる。
【符号の説明】
【０１００】
１０…ソースコード解析装置
１５…出力装置
１０１…ロジカルカップリング分析部
１０２…プログラム解析部
１０３…ロジカルカップリンググラフ生成部
１０４…アンチパターン検出部
１０５…情報記憶部
１０６…プログラム要素変更履歴
１０７…バスケット解析閾値
１０８…ソースコード
１０９…ソフトウェアメトリクス取得ロジック
１１０…グラフパターンマッチロジック
１１１…ソフトウェアメトリクス閾値
１１２…グラフパラメータ閾値
１１３…パラメータ論理式
１１４…変更依存関係ルール
１１５…ソフトウェアメトリクス情報
１１６…ロジカルカップリンググラフ
１１７…プログラム要素情報
１１８…アンチパターングラフ
１１９…プログラム関連性分析部
１２０…プログラム関連性指標情報
１２１、１２１Ａ、１２１Ｂ…プログラム関連性閾値
１２２…プログラム関連情報
１２３…バスケット解析閾値導出部
１２４…バスケット解析期待値
１２５…プログラム関連性指標取得ロジック
【図１】
2019079312.tif 000003
【図２】
2019079312.tif 000004
【図３】
2019079312.tif 000005
【図４】
2019079312.tif 000006
【図５】
2019079312.tif 000007
【図６】
2019079312.tif 000008
【図７】
2019079312.tif 000009
【図８】
2019079312.tif 000010
【図９】
2019079312.tif 000011
【図１０】
2019079312.tif 000012
【図１１】
2019079312.tif 000013
【図１２】
2019079312.tif 000014
【図１３】
2019079312.tif 000015
【図１４】
2019079312.tif 000016
【図１５】
2019079312.tif 000017
【図１６】
2019079312.tif 000018
【図１７】
2019079312.tif 000019
【図１８】
2019079312.tif 000020
【図１９】
2019079312.tif 000021
【図２０】
2019079312.tif 000022
【図２１】
2019079312.tif 000023
【図２２】
2019079312.tif 000024
【図２３】
2019079312.tif 000025
【図２４】
2019079312.tif 000026
【図２５】
2019079312.tif 000027
【図２６】
2019079312.tif 000028
【図２７】
2019079312.tif 000029
【図２８】
2019079312.tif 000030
【図２９】
2019079312.tif 000031
【図３０】
2019079312.tif 000032
【図３１】
2019079312.tif 000033