JP6996936B2 - ソースコード解析装置、ソースコード解析方法、ソースコード解析プログラム - Google Patents
ソースコード解析装置、ソースコード解析方法、ソースコード解析プログラム Download PDFInfo
- Publication number
- JP6996936B2 JP6996936B2 JP2017206106A JP2017206106A JP6996936B2 JP 6996936 B2 JP6996936 B2 JP 6996936B2 JP 2017206106 A JP2017206106 A JP 2017206106A JP 2017206106 A JP2017206106 A JP 2017206106A JP 6996936 B2 JP6996936 B2 JP 6996936B2
- Authority
- JP
- Japan
- Prior art keywords
- program
- information
- source code
- logical coupling
- analysis
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Stored Programmes (AREA)
Description
特許文献1には、システムで用いられるプログラムを分析し、当該プログラムのアンチパターンを抽出するソースコード評価システムにおいて、前記システムのソースコードを含む稼働に関する情報からメトリクスを計測する手段と、前記計測されたメトリクスを用いて、前記ソースコードがアンチパターンの該当可否をその複雑さ示す指標を用いて評価する手段と、前記評価された結果について、前記ソースコードのリファクタリングの優先度を算出・提示する手段を有するソースコード評価システムが開示されている。
本発明の第2の態様によるソースコード解析方法は、コンピュータにより、ソースコードを解析して前記ソースコードに含まれるプログラム要素同士の関連性を分析しプログラム関連性指標情報を生成することと、コンピュータにより、前記ソースコードの変更履歴を用いて、同時変更されやすい前記プログラム要素の組み合わせを示す情報であるロジカルカップリング情報を生成することと、コンピュータにより、少なくとも前記ロジカルカップリング情報に基づいて、前記ソースコードの品質に関する評価値を含むプログラム要素情報を前記プログラム要素ごとに生成することと、コンピュータにより、前記ロジカルカップリング情報に含まれる前記プログラム要素のうち、前記プログラム要素情報および前記プログラム関連性指標情報がそれぞれ所定の条件を満たす前記プログラム要素を示すアンチパターン情報を生成することと、前記アンチパターン情報をコンピュータから出力することとを含む。
本発明の第3の態様によるソースコード解析プログラムは、コンピュータに、ソースコードを解析して前記ソースコードに含まれるプログラム要素同士の関連性を分析しプログラム関連性指標情報を生成することと、前記ソースコードの変更履歴を用いて、同時変更されやすい前記プログラム要素の組み合わせを示す情報であるロジカルカップリング情報を生成することと、少なくとも前記ロジカルカップリング情報に基づいて、前記ソースコードの品質に関する評価値を含むプログラム要素情報を前記プログラム要素ごとに生成することと、前記ロジカルカップリング情報に含まれる前記プログラム要素のうち、前記プログラム要素情報および前記プログラム関連性指標情報がそれぞれ所定の条件を満たす前記プログラム要素を示すアンチパターン情報を生成することと、前記アンチパターン情報を出力することとを実行させる。
以下、図1~図24を参照して、ソースコード解析装置の第1の実施の形態を説明する。
図1はソースコード解析装置10のハードウェア構成を示す図である。ソースコード解析装置10は、ソフトウェアシステムの開発や保守等に利用される情報処理装置、すなわちコンピュータである。ソースコード解析装置10は、クラウドシステムにより提供されるクラウドサーバ等のように仮想的に実現されるものであってもよい。すなわち複数のコンピュータが協調して動作することにより、その機能を実現してもよい。
図2は、ソースコード解析装置10の機能構成図である。ソースコード解析装置10はその機能として、ロジカルカップリング分析部101と、プログラム解析部102と、ロジカルカップリンググラフ生成部103と、アンチパターン検出部104と、情報記憶部105と、プログラム関連性分析部119とを備える。これらの機能は、たとえば、プロセッサ11が、主記憶装置12や補助記憶装置13に格納されているプログラムを読み出して実行することにより実現される。またこれらの機能は、たとえば、ソースコード解析装置10が備えるハードウェア、たとえばASICなどによって実現されてもよい。ただし情報記憶部105は、主記憶装置12または補助記憶装置13により実現される。またソースコード解析装置10には、後述する処理の過程で変更依存関係ルール114と、ソフトウェアメトリクス情報115と、ロジカルカップリンググラフ116と、プログラム要素情報117と、プログラム関連性指標情報120とが生成される。これら生成される情報は、情報記憶部105に格納される。
図3は、プログラム要素変更履歴106の一例を示す図である。プログラム要素変更履歴106は1以上のレコードから構成される。プログラム要素変更履歴106の各レコードには、解析対象となるソースコード108のプログラムに発生した変更の履歴が記録される。このレコードは、変更が発生するたびに新たなレコードとして記録される。各レコードは、レコードを識別するために一意に付与される変更番号301と、プログラム中の変更された要素が全て格納される変更プログラム要素名302とから構成される。たとえば、符号303で示す1番目のレコードは、変更番号301が「1」であり、変更プログラム要素名302に記載されたプログラム要素A、プログラム要素B、プログラム要素Cのプログラム要素が同時変更されたことを示している。
図4は、バスケット解析閾値107の一例を示す図である。バスケット解析閾値107には、ロジカルカップリング分析部101がバスケット解析を行う際に用いる閾値が記録される。なお、ここでいうバスケット解析とは、プログラム要素変更履歴106を解析して同時に変更されやすいプログラム要素の組み合わせを抽出する処理である。バスケット解析閾値107は複数のレコードから構成され、各レコードはルール評価値名401と閾値402とから構成される。図4に示す例では、支持度403、確信度404、およびリフト値405の3つのルール評価値が示されている。閾値402には、0以上1以下の値が設定される。
図5は、変更依存関係ルール114の一例を示す図である。変更依存関係ルール114には、ロジカルカップリング分析部101がバスケット解析を行った結果である、同時に変更されやすいプログラム要素の順序対が格納される。変更依存関係ルール114は1以上のレコードから構成され各レコードは、ルール番号501と、変更対象プログラム要素名502と、同時変更プログラム要素名503と、プログラム関連属性505とから構成される。
図6は、グラフパターンマッチロジック110の一例を示す図である。グラフパターンマッチロジック110には、ロジカルカップリンググラフ生成部103が作成するロジカルカップリンググラフ116において、グラフの頂点ごとに値が定まるグラフパラメータ値を取得するためのロジックが記録される。グラフパターンマッチロジック110は、取得するグラフパラメータの種類ごとに作成され、グラフパラメータ名601とグラフパターンマッチロジック本体602とから構成される。グラフパラメータ名601には、グラフパラメータの種類が格納され、図6に示す例ではグラフパラメータの種類が「入次数」である。グラフパラメータの種類は、有向グラフの頂点の入次数または出次数などの、一般的にグラフ理論で定義される種類を用いてもよい。グラフパターンマッチロジック本体602の記述に制限はなく、たとえば実行可能なプログラミング言語やスクリプトで記述してもよい。
図7は、ロジカルカップリンググラフ116の一例を示す図である。ロジカルカップリンググラフ116は、ロジカルカップリンググラフ生成部103により作成される有向グラフである。ロジカルカップリンググラフ116では、プログラム要素が頂点701として表現され、同時変更されやすいプログラム要素の順序対が有向辺702、704として表現される。図5に例示した変更依存関係ルール114において、プログラム関連属性505に識別子が一つも設定されていない場合は線種が点線である有向辺702が用いられ、プログラム関連属性505に少なくとも一つの識別子が設定されている場合は線種が破線である有向辺704が用いられる。すなわち、ロジカルカップリンググラフ116は、有向辺702、704を用いて、同時変更されやすいプログラム要素の組み合わせごとに、そのプログラム関連性指標の値がプログラム関連性閾値121で規定された条件を満たすか否かを表している。ロジカルカップリンググラフ116は、ロジカルカップリンググラフ生成部103でロジカルカップリンググラフ116の作成処理を行う前に頂点と有向辺が登録されていない状態に初期化される。
図8は、アンチパターングラフ118の一例を示す図である。アンチパターングラフ118は、ロジカルカップリンググラフ116の頂点のうち、特に問題特徴を有する頂点703を強調的に表現したものである。ロジカルカップリンググラフ116の頂点701が問題特徴を有する頂点703か否かは、当該頂点703に対応するプログラム要素のプログラム要素情報117に記録されたパラメータの値804(図9参照)と、ソフトウェアメトリクス閾値111およびグラフパラメータ閾値112の少なくとも一つとを用いて、パラメータ論理式113で定義した方法によって評価した真偽値により判断される。この真偽値が真である場合は、当該頂点は問題特徴を有する頂点703であり、当該真偽値が偽である場合は、当該頂点は問題特徴を有しない頂点701である。すなわち、アンチパターングラフ118は、ロジカルカップリンググラフ116と同様に、同時変更されやすいプログラム要素の組み合わせごとに、プログラム関連性指標の値がプログラム関連性閾値121で規定された条件を満たすか否かを表している。さらに加えて、各プログラム要素がパラメータ論理式113で規定された条件を満たすか否かを表している。問題特徴を有する頂点703の表現方法としては、当該頂点を着色または発光または点滅または拡大などの手法を採用してもよい。アンチパターングラフ118は出力装置15を用いてユーザに出力される。ユーザは、アンチパターングラフ118を見ることによって、プログラム要素間にどのような同時変更されやすい関係があるかを確認できる。
図9は、プログラム要素情報117の一例を示す図である。プログラム要素情報117には、ロジカルカップリンググラフ生成部103によって作成されるロジカルカップリンググラフ116における頂点701に関するグラフパラメータ値が格納される。プログラム要素情報117は、プログラム要素ごとに作成され、プログラム要素801とパラメータテーブル802とから構成される。プログラム要素801は、プログラム要素名とプログラム要素の値との組み合わせである。
図10は、グラフパラメータ閾値112の一例を示す図である。グラフパラメータ閾値112は複数のレコードから構成され、各レコードにはグラフパターンマッチロジック110でグラフパラメータ名601ごとに定義したグラフパラメータのロジックに対し、当該ロジックに応じたグラフパラメータ値が異常であると判断するための閾値が格納される。具体的には各レコードは、各レコードを識別するために一意に付与されるグラフパラメータ識別子901と、グラフパラメータ名902と、グラフパラメータ閾値903と、グラフパラメータ値がグラフパラメータ閾値903と比べてどのような値をとる場合に異常とみなすかを判断するためのグラフパラメータ判定条件904とで構成される。ここで、グラフパラメータ判定条件904には、グラフパラメータ値とグラフパラメータ閾値903を比較するための関係演算子を記述してもよい。なお、グラフパラメータ値をグラフパラメータ判定条件904およびグラフパラメータ閾値903を用いて評価した結果を、当該グラフパラメータ値に対する判定結果と呼ぶ。
図11はソフトウェアメトリクス閾値111の一例を示す図である。ソフトウェアメトリクス閾値111は複数のレコードから構成され、各レコードにはソフトウェアメトリクス情報115に記録されたソフトウェアメトリクス値1902(図14参照)に対し、当該ソフトウェアメトリクス値1902が異常であると判断するための閾値が格納される。具体的には各レコードは、各レコードを識別するために一意に付与されるソフトウェアメトリクス識別子2101と、ソフトウェアメトリクス名2102と、ソフトウェアメトリクス閾値2103と、ソフトウェアメトリクス判定条件2104とから構成される。
図12は、パラメータ論理式113の一例を示す図である。パラメータ論理式113は、複数のパラメータ値に対する判定結果を総合的に評価して、当該パラメータ値の組が異常であるかどうかを判断するための論理式である。パラメータ論理式113は、論理学で用いられる一般的な文字や記号を用いて記述し、一般的な推論規則によってその真偽値が評価可能であるとする。たとえば、パラメータ論理式113は、グラフパラメータ識別子901、ソフトウェアメトリクス識別子2101、論理演算記号(”&”または”|”)、括弧記号(”(”または”)”)などを用いて記述してもよい。ここで、グラフパラメータ識別子901の真偽値は、当該グラフパラメータの値804に対する判定結果とする。またグラフパラメータ識別子901およびソフトウェアメトリクス識別子2101を原子論理式として論理演算記号を用いて得られる論理式の真偽値は、論理学の一般的な推論規則に従うものとする。
図13はソフトウェアメトリクス取得ロジック109の一例を示す図である。ソフトウェアメトリクス取得ロジック109には、プログラム要素ごとに値が定まるソフトウェアメトリクス値を取得するためのロジックが記録される。ソフトウェアメトリクス取得ロジック109は、取得したいソフトウェアメトリクスの種類ごとに作成され、ソフトウェアメトリクス名1801とソフトウェアメトリクス取得ロジック本体1802とから構成される。ソフトウェアメトリクス名1801には、ソフトウェアメトリクスの種類を示す情報が格納され、図13に示す例ではソフトウェアメトリクスの種類が「保守容易性指数」である。ソフトウェアメトリクスの種類は、プログラム要素の規模や複雑度などの、一般的なプログラム解析で評価される値を用いてもよい。ソフトウェアメトリクス取得ロジック本体1802の記述に制限はなく、たとえば実行可能なプログラミング言語やスクリプトで記述してもよい。
図14は、ソフトウェアメトリクス情報115の一例を示す図である。ソフトウェアメトリクス情報115は、複数のレコードから構成され、各レコードはプログラム要素ごとに作成される。すなわちソフトウェアメトリクス情報115の各レコードはあるプログラム要素について、ソフトウェアメトリクス取得ロジック109において定義したソフトウェアメトリクスの値が格納される。ソフトウェアメトリクス情報115の各レコードは、プログラム要素名1901と、1以上のソフトウェアメトリクス値1902とが含まれる。たとえば符号1903で示す1番目のレコードは、プログラム要素Aのソフトウェアメトリクス値として、保守容易性指数が75、凝集度が0.3であることを示している。なおソフトウェアメトリクス情報115は、プログラム解析部102でプログラム解析を行う前に初期化される。
図15は、プログラム関連性指標取得ロジック125の一例を示す図である。プログラム関連性指標取得ロジック125には、プログラム要素の対ごとに値が定まるプログラム関連性指標の値を取得するロジックが記録される。プログラム関連性指標取得ロジック125は、プログラム関連性指標の種類ごとに作成され、プログラム関連性指標名2901とプログラム関連性指標取得ロジック本体2902とで構成される。プログラム関連性指標名2901はたとえば、プログラム要素間のソースコードの類似度や、共通して参照する他のプログラム要素数や、参照関係に基づくプログラム要素間の距離などの、一般的にプログラム解析で評価される指標である。プログラム関連性指標取得ロジック本体2902の記述に制限はなく、たとえば実行可能なプログラミング言語やスクリプトで記述してもよい。
図16は、プログラム関連性指標情報120の一例を示す図である。プログラム関連性指標情報120は、複数のレコードから構成され、各レコードはプログラム要素の組み合わせごとに作成される。すなわちプログラム関連性指標情報120の各レコードはあるプログラム要素対について、プログラム関連性指標取得ロジック125において定義したプログラム関連性指標のプログラム要素対ごとの値が格納される。プログラム関連性指標情報120の各レコードは、要素対となる始点プログラム要素名3002と、終点プログラム要素名3003と、1以上のプログラム関連性指標値3004とから構成される。たとえば図16に符号3001で示す1つ目のレコードは、プログラム要素Aを始点としプログラム要素Bを終点とする組み合わせにおけるプログラム関連性指標値として、共通参照変数数が20でコード類似度が0.3であることが示されている。
図17は、プログラム関連性閾値121の一例を示す図である。プログラム関連性閾値121は複数のレコードから構成され各レコードは、関連性属性を有するか否かを判断するための閾値であって、プログラム関連性指標情報120に記録されたプログラム関連性指標値3004に対する閾値が記録される。各レコードは、関連性属性を一意に識別する識別子である関連属性識別子3202、プログラム関連性指標名3203、プログラム関連性閾値3204、およびプログラム関連性条件3205から構成される。ただしプログラム関連性閾値3204およびプログラム関連性条件3205はそれぞれ、閾値3204および条件3205とも呼ぶ。
図18は、ロジカルカップリング分析部101の動作を表すフローチャートである。まずロジカルカップリング分析部101はプログラム要素変更履歴106を読み込み(S1201)、バスケット解析閾値107を読み込む(S1202)。そしてロジカルカップリング分析部101は、読み込んだプログラム要素変更履歴106からプログラム要素の全ての順序対を生成し、各順序対(E1,E2)に対してS1204~S1208の処理を実施する(S1203)。
図19は、プログラム解析部102の動作を表すフローチャートである。プログラム解析部102はまずソースコード108を読み込み(S2401)、ソフトウェアメトリクス取得ロジック109を読み込む(S2402)。そしてプログラム解析部102は読み込んだソースコード108に含まれる全てのプログラム要素に対して処理対象のプログラム要素Eを順番に変更してS2404~S2407の処理を実施する(S2403)。プログラム解析部102は全てのソフトウェアメトリクス取得ロジック109に対して処理対象のソフトウェアメトリクス取得ロジック109を順番に変更してS2405の処理を実施する(S2404)。ただし次のS2405では処理対象のソフトウェアメトリクス取得ロジック109を符号「L」で表す。
図20は、プログラム関連性分析部119の動作を表すフローチャートである。プログラム関連性分析部119はまずソースコード108を読み込み(S3501)、続いて全てのプログラム関連性指標取得ロジック125を読み込む(S3502)。続いてプログラム関連性分析部119は、ソースコード108に含まれる全てのプログラム要素同士の組み合わせであるプログラム要素対Pを順番に変更してS3504~S3507の処理を実施する(S3503)。プログラム関連性分析部119は全てのプログラム関連性指標取得ロジック125に対して処理対象のプログラム関連性指標取得ロジック125を順番に変更してS3505の処理を実施する(S3504)。ただし次のS3505では処理対象のプログラム関連性指標取得ロジック125を符号「L」で表す。
図21は、ロジカルカップリンググラフ生成部103の動作を表すフローチャートである。ロジカルカップリンググラフ生成部103は、ソフトウェアメトリクス情報115と変更依存関係ルール114(S1305)、プログラム関連性指標情報120(S1306)、プログラム関連性閾値121(S1307)、およびグラフパターンマッチロジック110(S1308)を読み込む。次にロジカルカップリンググラフ生成部103は、図22を参照して後に説明するように、ロジカルカップリンググラフ116を生成する(S1303)。次にロジカルカップリンググラフ生成部103は、図23を参照して後に説明するように、プログラム要素情報117を生成し(S1308)、図21に示す処理を終了する。
図24は、アンチパターン検出部104の動作を示すフローチャートである。アンチパターン検出部104はまず、ロジカルカップリンググラフ116、プログラム要素情報117およびパラメータ論理式113を読み込む(S1601)。次にアンチパターン検出部104は、S1603~S1605の処理をS1601で読み込んだロジカルカップリンググラフ116の全ての頂点Nに対して実施する。アンチパターン検出部104は、S1601で読み込んだプログラム要素情報117の各パラメータ値に基づき、処理対象の頂点Nに対するパラメータ論理式113の真偽値を算出する(S1603)。このとき、パラメータ論理式113で指定されたグラフパラメータ識別子901やソフトウェアメトリクス識別子2101に対応するレコードを、必要に応じてソフトウェアメトリクス閾値111やグラフパラメータ閾値112からそれぞれ読み出し、パラメータ値と比較する。その結果、アンチパターン検出部104はパラメータ論理式113の真偽値が真であると判断すると(S1604:真)、ロジカルカップリンググラフ116における処理対象の頂点Nを強調表示して(S1605)、S1606にすすむ。アンチパターン検出部104はパラメータ論理式113の真偽値が偽であると判断すると(S1604:偽)、そのままS1606に進む。アンチパターン検出部104は、全ての頂点Nに対してS1603~S1605の処理を実施したと判断する場合は図24に示す処理を終了し、実施していない頂点Nが存在すると判断する場合はS1602に戻る(S1606)。以上説明した処理により、アンチパターン検出部104は、プログラム要素情報117がパラメータ論理式113で規定された条件を満たすプログラム要素を強調表示された頂点703によって示し、さらに、プログラム関連性指標情報120がプログラム関連性閾値121で規定された条件を満たすプログラム要素を破線の有向辺704によって示したアンチパターングラフ118を、生成することができる。
(1)ソースコード解析装置10は、ソースコード108を解析してソースコード108に含まれるプログラム要素同士の関連性を分析しプログラム関連性指標情報120を生成するプログラム関連性分析部119と、プログラム要素変更履歴106を用いて、同時変更されやすいプログラム要素の対を示す情報であるロジカルカップリンググラフ116に表される情報を生成するロジカルカップリング分析部101と、少なくともロジカルカップリング情報に基づいて、評価値であるプログラム要素情報117をプログラム要素ごとに生成するロジカルカップリンググラフ生成部103と、ロジカルカップリング情報に含まれるプログラム要素のうち、プログラム要素情報およびプログラム関連性指標情報が所定の条件を満たすプログラム要素を示すアンチパターングラフ118を生成するアンチパターン検出部104と、アンチパターングラフ118を出力する出力装置15とを備える。
上述した第1の実施の形態では、関連属性識別子は単一のプログラム関連性指標に基づき設定された。しかし関連属性識別子は複数のプログラム関連性指標に基づき設定されてもよい。
上述した第1の実施の形態では、ソフトウェアメトリクス情報115が算出され、算出されたソフトウェアメトリクス情報115がプログラム要素情報117やアンチパターングラフ118の作成に利用された。しかしソースコード解析装置10は、ソフトウェアメトリクス情報115を算出しなくてもよい。
上述した第1の実施の形態では、アンチパターン検出部104は図8に示すアンチパターングラフ118を出力した。しかしアンチパターン検出部104は、アンチパターングラフ118に代えて、アンチパターングラフ118に表現されている情報を文字や表として出力してもよい。プログラム要素の数が膨大な場合など、出力装置15にアンチパターングラフ118の全体を視認可能な大きさで表示することが困難な場合に有効である。
上述した第1の実施の形態では、ソースコード解析装置10はアンチパターングラフ118およびプログラム関連性指標情報120を出力装置15から出力した。しかしソースコード解析装置10はプログラム関連性指標情報120を出力しなくてもよい。アンチパターングラフ118には、プログラム関連性指標情報120に基づいて設定されたプログラム関連属性の情報が有向辺の線種として含まれているからである。
上述した第1の実施の形態では、ソースコード解析装置10はプログラム要素変更履歴106を読み込んだ。しかしソースコード解析装置10は複数のソースコード108を読み込んでプログラム要素変更履歴106を作成してもよい。すなわちプログラム要素変更履歴106があらかじめ作成されていなくてもよい。
図27~図28を参照して、ソースコード解析装置の第2の実施の形態を説明する。以下の説明では、第1の実施の形態と同じ構成要素には同じ符号を付して相違点を主に説明する。特に説明しない点については、第1の実施の形態と同じである。本実施の形態では、主に、各種パラメータの設定をユーザインタフェース上でインタラクティブに行う点で、第1の実施の形態と異なる。本実施の形態では、ソフトウェアメトリクス閾値111、グラフパラメータ閾値112、パラメータ論理式113、バスケット解析閾値107、およびプログラム関連性閾値121の入力と、これら入力された値の変化に伴うアンチパターングラフ118の出力を、ユーザインタフェース上でインタラクティブに行う例を説明する。
(1)アンチパターン検出部104は、プログラム要素情報117に記載される値とソフトウェアメトリクス2701およびグラフパラメータ2702において入力される第1閾値との関係、およびプログラム関連性指標情報120とプログラム関連性指標2721において入力される第2閾値との関係を評価する。ソースコード解析装置10は、第1閾値および第2閾値が入力される入力ユーザインタフェース2700を備える。そのためユーザは、入力ユーザインタフェース2700から閾値を入力して、その結果であるアンチパターングラフ118をインタラクティブに取得することができる。
入力ユーザインタフェース2700は、ソフトウェアメトリクス閾値入力部2701、グラフパラメータ閾値入力部2702、パラメータ論理式入力部2703、バスケット解析閾値入力部2716、およびプログラム関連性閾値入力部2721の少なくとも1つを備える構成でもよい。
図29~図31を参照して、ソースコード解析装置の第3の実施の形態を説明する。以下の説明では、第1の実施の形態と同じ構成要素には同じ符号を付して相違点を主に説明する。特に説明しない点については、第1の実施の形態と同じである。本実施の形態では、主に、バスケット解析閾値を自動的に決定する点で、第1の実施の形態と異なる。
図29は第3の実施の形態におけるソースコード解析装置10の機能構成図である。ソースコード解析装置10の機能構成は、第1の実施の形態における機能に加えて、バスケット解析閾値導出部123を備える。バスケット解析閾値導出部123は、プロセッサ11が、主記憶装置12や補助記憶装置13に格納されているプログラムを読み出して実行することにより実現される。ただしバスケット解析閾値導出部123は、ソースコード解析装置10が備えるハードウェア、たとえばASICなどによって実現されてもよい。バスケット解析閾値導出部123は、バスケット解析閾値107を設定する。バスケット解析閾値導出部123によるバスケット解析閾値107の設定方法に特に制限はなく、たとえば従前の閾値を所定の割合だけ増減させてもよいし所定の値だけ増減させてもよい。また閾値は、支持度、確信度、およびリフト値を連動して変更してもよいし、1つずつ変更してもよい。
図30は、バスケット解析期待値124の一例を示す図である。バスケット解析期待値124には、有益なアンチパターングラフ118を得るために適当と想定される変更依存関係ルール114の生成条件が記録される。バスケット解析期待値124は1以上のレコードから構成され、各レコードは、ルール数など変更依存関係ルールの項目4102と、当該項目に対応する期待値4103と、当該項目値が期待値4103と比べてどのような値をとる場合に満たすかを判断するための条件4104とで構成される。ここで、変更依存関係ルールの条件4104には、変更依存関係ルールの項目4102と変更依存関係ルールの期待値4103を比較するための関係演算子を記述してもよい。なお、変更依存関係ルールの項目4102を変更依存関係ルールの期待値4103と変更依存関係ルールの条件4104とを用いて評価した結果を、変更依存関係ルールに対する判定結果という。
図31は、バスケット解析閾値導出部123の動作を表すフローチャートである。バスケット解析閾値導出部123はまず、プログラム要素変更履歴106を読み込む(S4201)。バスケット解析閾値導出部123はバスケット解析閾値107を設定する(S4203)。バスケット解析閾値導出部123は、ロジカルカップリング分析部101により変更依存関係ルール114が作成されるのを待機する(S4204)。バスケット解析閾値導出部123は、作成された変更依存関係ルール114がバスケット解析期待値124の条件を満たすか否かを判断する(S4205)。バスケット解析閾値導出部123は条件を満たすと判断する場合は図31に示す処理を終了し、条件を満たさないと判断する場合はS4203に戻る。
バスケット解析閾値導出部123は、バスケット解析閾値107の設定にあたり、支持度403または確信度404またはリフト値405のうち少なくとも一つの値について増加もしくは減少させる。バスケット解析閾値107の設定にあたり、たとえば、ロジカルカップリング分析部101が一度も実行されていないときに、プログラム要素変更履歴106のレコード数に基づき、レコード数が3000未満であれば、支持度403の閾値402を、プログラム要素変更履歴106に含まれるプログラム要素数をレコード数で除算した値に3を乗算した値とし、レコード数が3000以上であれば、支持度403の閾値402を、プログラム要素変更履歴106に含まれるプログラム要素数をレコード数で除算した値に3を乗算した値とする方法としても良い。
(1)ロジカルカップリング分析部101は、プログラム要素の対ごとに同時変更のされやすさを示す指標であるグラフパラメータを算出し、グラフパラメータとバスケット解析閾値107との関係によりロジカルカップリング情報、すなわち変更依存関係ルール114を生成する。ソースコード解析装置10は、ロジカルカップリング情報が所定の条件を満たすようにバスケット解析閾値107を設定するバスケット解析閾値導出部123を備える。そのためユーザはバスケット解析閾値107を自ら設定する必要がなく、ソースコード解析装置10を簡便に使用できる。
15…出力装置
101…ロジカルカップリング分析部
102…プログラム解析部
103…ロジカルカップリンググラフ生成部
104…アンチパターン検出部
105…情報記憶部
106…プログラム要素変更履歴
107…バスケット解析閾値
108…ソースコード
109…ソフトウェアメトリクス取得ロジック
110…グラフパターンマッチロジック
111…ソフトウェアメトリクス閾値
112…グラフパラメータ閾値
113…パラメータ論理式
114…変更依存関係ルール
115…ソフトウェアメトリクス情報
116…ロジカルカップリンググラフ
117…プログラム要素情報
118…アンチパターングラフ
119…プログラム関連性分析部
120…プログラム関連性指標情報
121、121A、121B…プログラム関連性閾値
122…プログラム関連情報
123…バスケット解析閾値導出部
124…バスケット解析期待値
125…プログラム関連性指標取得ロジック
Claims (13)
- ソースコードを解析して前記ソースコードに含まれるプログラム要素同士の関連性を分析しプログラム関連性指標情報を生成するプログラム関連性分析部と、
前記ソースコードの変更履歴を用いて、同時変更されやすい前記プログラム要素の組み合わせを示す情報であるロジカルカップリング情報を生成するロジカルカップリング分析部と、
少なくとも前記ロジカルカップリング情報に基づいて、前記ソースコードの品質に関する評価値を含むプログラム要素情報を前記プログラム要素ごとに生成する評価部と、
前記ロジカルカップリング情報に含まれる前記プログラム要素のうち、前記プログラム要素情報および前記プログラム関連性指標情報がそれぞれ所定の条件を満たす前記プログラム要素を示すアンチパターン情報を生成するアンチパターン検出部と、
前記アンチパターン情報を出力する出力部とを備えるソースコード解析装置。 - 請求項1に記載のソースコード解析装置において、
前記出力部は前記プログラム関連性指標情報をさらに出力するソースコード解析装置。 - 請求項1に記載のソースコード解析装置において、
前記アンチパターン情報は、前記同時変更されやすい前記プログラム要素の組み合わせ、および前記プログラム要素情報および前記プログラム関連性指標情報がそれぞれ前記所定の条件を満たす前記プログラム要素を視覚的に表示するための情報であるソースコード解析装置。 - 請求項1に記載のソースコード解析装置において、
前記プログラム要素のそれぞれについて保守性を示す指標を含むソフトウェアメトリクス情報を生成するプログラム解析部をさらに備え、
前記評価部は、前記ソフトウェアメトリクス情報も考慮して前記プログラム要素が前記所定の条件を満たすか否かを判断するソースコード解析装置。 - 請求項1に記載のソースコード解析装置において、
前記アンチパターン検出部は、前記プログラム要素情報と第1閾値との関係、および前記プログラム関連性指標情報と第2閾値との関係を評価し、
前記第1閾値および前記第2閾値を入力するインタフェースをさらに備えるソースコード解析装置。 - 請求項1に記載のソースコード解析装置において、
前記ロジカルカップリング分析部が所定の生成条件に応じた前記ロジカルカップリング情報を生成するためのバスケット解析閾値を設定するバスケット解析閾値導出部をさらに備え、
前記ロジカルカップリング分析部は、前記プログラム要素の組み合わせごとに同時変更のされやすさを示す指標であるルール評価値を算出し、前記ルール評価値と前記バスケット解析閾値との関係により前記ロジカルカップリング情報を生成するソースコード解析装置。 - コンピュータにより、ソースコードを解析して前記ソースコードに含まれるプログラム要素同士の関連性を分析しプログラム関連性指標情報を生成することと、
コンピュータにより、前記ソースコードの変更履歴を用いて、同時変更されやすい前記プログラム要素の組み合わせを示す情報であるロジカルカップリング情報を生成することと、
コンピュータにより、少なくとも前記ロジカルカップリング情報に基づいて、前記ソースコードの品質に関する評価値を含むプログラム要素情報を前記プログラム要素ごとに生成することと、
コンピュータにより、前記ロジカルカップリング情報に含まれる前記プログラム要素のうち、前記プログラム要素情報および前記プログラム関連性指標情報がそれぞれ所定の条件を満たす前記プログラム要素を示すアンチパターン情報を生成することと、
前記アンチパターン情報をコンピュータから出力することとを含むソースコード解析方法。 - 請求項7に記載のソースコード解析方法において、
さらに前記プログラム関連性指標情報をコンピュータから出力することを含むソースコード解析方法。 - 請求項7に記載のソースコード解析方法において、
前記アンチパターン情報は、前記同時変更されやすい前記プログラム要素の組み合わせ、および前記プログラム要素情報および前記プログラム関連性指標情報がそれぞれ前記所定の条件を満たす前記プログラム要素を視覚的に表示するための情報であるソースコード解析方法。 - 請求項7に記載のソースコード解析方法において、
コンピュータにより、前記プログラム要素のそれぞれについて保守性を示す指標を含むソフトウェアメトリクス情報を生成することをさらに含み、
前記アンチパターン情報の生成において、前記ソフトウェアメトリクス情報も考慮して前記プログラム要素が前記所定の条件を満たすか否かを判断するソースコード解析方法。 - 請求項7に記載のソースコード解析方法において、
前記アンチパターン情報の生成において、前記プログラム要素情報と第1閾値との関係、および前記プログラム関連性指標情報と第2閾値との関係を評価し、
前記第1閾値および前記第2閾値はインタフェースから入力されることとを含むソースコード解析方法。 - 請求項7に記載のソースコード解析方法において、
所定の生成条件に応じた前記ロジカルカップリング情報を生成するためのバスケット解析閾値を設定することと、
前記プログラム要素の組み合わせごとに同時変更のされやすさを示す指標であるルール評価値を算出することとをさらに含み、
前記ロジカルカップリング情報は、前記ルール評価値と前記バスケット解析閾値との関係により生成されるソースコード解析方法。 - コンピュータに、
ソースコードを解析して前記ソースコードに含まれるプログラム要素同士の関連性を分析しプログラム関連性指標情報を生成することと、
前記ソースコードの変更履歴を用いて、同時変更されやすい前記プログラム要素の組み合わせを示す情報であるロジカルカップリング情報を生成することと、
少なくとも前記ロジカルカップリング情報に基づいて、前記ソースコードの品質に関する評価値を含むプログラム要素情報を前記プログラム要素ごとに生成することと、
前記ロジカルカップリング情報に含まれる前記プログラム要素のうち、前記プログラム要素情報および前記プログラム関連性指標情報がそれぞれ所定の条件を満たす前記プログラム要素を示すアンチパターン情報を生成することと、
前記アンチパターン情報を出力することとを実行させるためのソースコード解析プログラム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2017206106A JP6996936B2 (ja) | 2017-10-25 | 2017-10-25 | ソースコード解析装置、ソースコード解析方法、ソースコード解析プログラム |
CN201811243196.1A CN109710306B (zh) | 2017-10-25 | 2018-10-24 | 源代码解析装置、源代码解析方法、计算机可读记录介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2017206106A JP6996936B2 (ja) | 2017-10-25 | 2017-10-25 | ソースコード解析装置、ソースコード解析方法、ソースコード解析プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2019079312A JP2019079312A (ja) | 2019-05-23 |
JP6996936B2 true JP6996936B2 (ja) | 2022-01-17 |
Family
ID=66254738
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2017206106A Active JP6996936B2 (ja) | 2017-10-25 | 2017-10-25 | ソースコード解析装置、ソースコード解析方法、ソースコード解析プログラム |
Country Status (2)
Country | Link |
---|---|
JP (1) | JP6996936B2 (ja) |
CN (1) | CN109710306B (ja) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP7199555B2 (ja) * | 2019-09-19 | 2023-01-05 | 三菱電機株式会社 | 変更影響分析装置、変更影響分析システム、および変更影響分析方法 |
JP7478011B2 (ja) * | 2020-03-31 | 2024-05-02 | 株式会社日本総合研究所 | プロジェクト管理システムにおける管理サーバ、管理方法及びプログラム |
US11487533B2 (en) | 2021-01-13 | 2022-11-01 | Tata Consultancy Services Limited | Method and system for inferencing logic out of an application source |
JP2022186541A (ja) | 2021-06-04 | 2022-12-15 | 株式会社日立製作所 | ソースコード解析装置およびソースコード解析方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2013218381A (ja) | 2012-04-04 | 2013-10-24 | Mitsubishi Electric Corp | ソフトウェア評価支援装置及びプログラム |
US20170091073A1 (en) | 2015-09-30 | 2017-03-30 | International Business Machines Corporation | Detection of antipatterns through statistical analysis |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8312415B2 (en) * | 2007-04-17 | 2012-11-13 | Microsoft Corporation | Using code analysis for requirements management |
JP2012230512A (ja) * | 2011-04-26 | 2012-11-22 | Hitachi Ltd | ソースコード中の関数ごとの変更回数と複雑度の対応一覧を表示するシステム |
JP2016024784A (ja) * | 2014-07-24 | 2016-02-08 | 日本電信電話株式会社 | バグ予測装置及び方法及びプログラム |
JP6722528B2 (ja) * | 2016-06-30 | 2020-07-15 | クラリオン株式会社 | ソフトウェア開発支援方法及びシステム |
US9690553B1 (en) * | 2016-09-26 | 2017-06-27 | International Business Machines Corporation | Identifying software dependency relationships |
CN108563555B (zh) * | 2018-01-10 | 2020-03-31 | 江苏工程职业技术学院 | 基于四目标优化的故障更改代码预测方法 |
-
2017
- 2017-10-25 JP JP2017206106A patent/JP6996936B2/ja active Active
-
2018
- 2018-10-24 CN CN201811243196.1A patent/CN109710306B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2013218381A (ja) | 2012-04-04 | 2013-10-24 | Mitsubishi Electric Corp | ソフトウェア評価支援装置及びプログラム |
US20170091073A1 (en) | 2015-09-30 | 2017-03-30 | International Business Machines Corporation | Detection of antipatterns through statistical analysis |
Also Published As
Publication number | Publication date |
---|---|
CN109710306B (zh) | 2022-06-07 |
CN109710306A (zh) | 2019-05-03 |
JP2019079312A (ja) | 2019-05-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6996936B2 (ja) | ソースコード解析装置、ソースコード解析方法、ソースコード解析プログラム | |
JP6158623B2 (ja) | データベース分析装置及び方法 | |
EP3788560A1 (en) | Systems and methods for enriching modeling tools and infrastructure with semantics | |
JP2014085926A (ja) | データベース分析装置及びデータベース分析方法 | |
JP2022037955A (ja) | 学習モデルを選択するシステム | |
US20090158244A1 (en) | Detecting aspectual behavior in unified modeling language artifacts | |
US20210124752A1 (en) | System for Data Collection, Aggregation, Storage, Verification and Analytics with User Interface | |
US20150379064A1 (en) | Dependency management during model compilation of statistical models | |
US9785404B2 (en) | Method and system for analyzing data in artifacts and creating a modifiable data network | |
JP2003099442A (ja) | キー概念抽出規則作成方法、キー概念抽出方法、キー概念抽出規則作成装置、キー概念抽出装置、そのためのプログラム及び記録媒体 | |
US10296496B2 (en) | Data editing device and data editing method | |
JP2018088087A (ja) | データ分析装置、データ分析方法、及びデータ分析プログラム | |
JP2017156896A (ja) | 分析支援方法、分析支援装置、および分析支援プログラム | |
JP7029915B2 (ja) | ソースコード解析装置およびソースコード解析方法 | |
CN112699642B (zh) | 复杂医疗文书的索引提取方法及装置、介质及电子设备 | |
JP7292235B2 (ja) | 分析支援装置及び分析支援方法 | |
US9529833B2 (en) | Graph pruning in hipergraph | |
JP7235269B2 (ja) | データ項目名推定装置、データ項目名推定プログラム、及びデータ項目名推定方法 | |
JP6123372B2 (ja) | 情報処理システム、名寄せ判定方法及びプログラム | |
US10176607B2 (en) | Interactive pattern detection in data sets | |
JP2018190219A (ja) | ソフトウェア仕様分析装置、及びソフトウェア仕様分析方法 | |
JP6563549B1 (ja) | データ傾向分析方法、データ傾向分析システム及び絞り込み及び復元装置 | |
WO2023243103A1 (ja) | 判定装置、判定方法、及びプログラム | |
US10235393B2 (en) | Normalization rule generation and implementation systems and methods | |
JP7075011B2 (ja) | 情報処理装置、パッチ適用確認システム、パッチ適用確認方法、およびパッチ適用確認プログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A625 | Written request for application examination (by other person) |
Free format text: JAPANESE INTERMEDIATE CODE: A625 Effective date: 20201020 |
|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A711 Effective date: 20210514 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20210514 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20211012 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20211130 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20211216 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6996936 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |