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