JP6996936B2 - ソースコード解析装置、ソースコード解析方法、ソースコード解析プログラム - Google Patents

ソースコード解析装置、ソースコード解析方法、ソースコード解析プログラム Download PDF

Info

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
Application number
JP2017206106A
Other languages
English (en)
Other versions
JP2019079312A (ja
Inventor
誠 市井
正恭 加藤
愛 利國
真澄 川上
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2017206106A priority Critical patent/JP6996936B2/ja
Priority to CN201811243196.1A priority patent/CN109710306B/zh
Publication of JP2019079312A publication Critical patent/JP2019079312A/ja
Application granted granted Critical
Publication of JP6996936B2 publication Critical patent/JP6996936B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Description

本発明は、ソースコード解析装置、ソースコード解析方法、およびソースコード解析プログラムに関する。
近年のソフトウェア開発では、開発済みの母体ソフトウェアを拡張または変更することによって新しいソフトウェアを開発する派生開発が主流である。ソフトウェアの派生開発においては、長年に渡る機能拡張または変更の繰り返しにより、ソフトウェアが複雑化し、ソースコードの可読性が低下しやすい。このような状況を解決するため、ソフトウェアのリファクタリングが一般的に行われている。リファクタリングとは、ソフトウェアの振る舞いを変えず、その内部構造を変更することである。保守性が低い関数、クラス、ファイルなどのプログラム構成要素(以下、「プログラム要素」)を適切にリファクタリングすれば、ソフトウェアが拡張または変更しやすくなる。リファクタリングを支える技術にアンチパターンがある。アンチパターンとは、保守性が低いプログラム要素が持つ特徴(以下、「問題特徴」)と、この問題特徴を持つプログラム要素のリファクタリング方法のパターンをまとめたものである。リファクタリング対象ソフトウェアにおいて、アンチパターンが示すような問題特徴を持つプログラム要素を特定できれば、アンチパターンを適用することでリファクタリングすることができる。
特許文献1には、システムで用いられるプログラムを分析し、当該プログラムのアンチパターンを抽出するソースコード評価システムにおいて、前記システムのソースコードを含む稼働に関する情報からメトリクスを計測する手段と、前記計測されたメトリクスを用いて、前記ソースコードがアンチパターンの該当可否をその複雑さ示す指標を用いて評価する手段と、前記評価された結果について、前記ソースコードのリファクタリングの優先度を算出・提示する手段を有するソースコード評価システムが開示されている。
特開2016-143107号公報
特許文献1に記載されている発明では、プログラム要素が問題特徴を備えているか否かを判断することが難しい。
本発明の第1の態様によるソースコード解析装置は、ソースコードを解析して前記ソースコードに含まれるプログラム要素同士の関連性を分析しプログラム関連性指標情報を生成するプログラム関連性分析部と、前記ソースコードの変更履歴を用いて、同時変更されやすい前記プログラム要素の組み合わせを示す情報であるロジカルカップリング情報を生成するロジカルカップリング分析部と、少なくとも前記ロジカルカップリング情報に基づいて、前記ソースコードの品質に関する評価値を含むプログラム要素情報を前記プログラム要素ごとに生成する評価部と、前記ロジカルカップリング情報に含まれる前記プログラム要素のうち、前記プログラム要素情報および前記プログラム関連性指標情報がそれぞれ所定の条件を満たす前記プログラム要素を示すアンチパターン情報を生成するアンチパターン検出部と、前記アンチパターン情報を出力する出力部とを備える。
本発明の第2の態様によるソースコード解析方法は、コンピュータにより、ソースコードを解析して前記ソースコードに含まれるプログラム要素同士の関連性を分析しプログラム関連性指標情報を生成することと、コンピュータにより、前記ソースコードの変更履歴を用いて、同時変更されやすい前記プログラム要素の組み合わせを示す情報であるロジカルカップリング情報を生成することと、コンピュータにより、少なくとも前記ロジカルカップリング情報に基づいて、前記ソースコードの品質に関する評価値を含むプログラム要素情報を前記プログラム要素ごとに生成することと、コンピュータにより、前記ロジカルカップリング情報に含まれる前記プログラム要素のうち、前記プログラム要素情報および前記プログラム関連性指標情報がそれぞれ所定の条件を満たす前記プログラム要素を示すアンチパターン情報を生成することと、前記アンチパターン情報をコンピュータから出力することとを含む。
本発明の第3の態様によるソースコード解析プログラムは、コンピュータに、ソースコードを解析して前記ソースコードに含まれるプログラム要素同士の関連性を分析しプログラム関連性指標情報を生成することと、前記ソースコードの変更履歴を用いて、同時変更されやすい前記プログラム要素の組み合わせを示す情報であるロジカルカップリング情報を生成することと、少なくとも前記ロジカルカップリング情報に基づいて、前記ソースコードの品質に関する評価値を含むプログラム要素情報を前記プログラム要素ごとに生成することと、前記ロジカルカップリング情報に含まれる前記プログラム要素のうち、前記プログラム要素情報および前記プログラム関連性指標情報がそれぞれ所定の条件を満たす前記プログラム要素を示すアンチパターン情報を生成することと、前記アンチパターン情報を出力することとを実行させる。
本発明によれば、プログラム要素が問題特徴を備えているか否かを判断することができる。
ソースコード解析装置10のハードウェア構成図 第1の実施の形態におけるソースコード解析装置10の機能構成図 プログラム要素変更履歴106の一例を示す図 バスケット解析閾値107の一例を示す図 変更依存関係ルール114の一例を示す図 グラフパターンマッチロジック110の一例を示す図 ロジカルカップリンググラフ116の一例を示す図 アンチパターングラフ118の一例を示す図 プログラム要素情報117の一例を示す図 グラフパラメータ閾値112の一例を示す図 ソフトウェアメトリクス閾値111の一例を示す図 パラメータ論理式113の一例を示す図 ソフトウェアメトリクス取得ロジック109の一例を示す図 ソフトウェアメトリクス情報115の一例を示す図 プログラム関連性指標取得ロジック125の一例を示す図 プログラム関連性指標情報120の一例を示す図 プログラム関連性閾値121の一例を示す図 ロジカルカップリング分析部101の動作を表すフローチャート プログラム解析部102の動作を表すフローチャート プログラム関連性分析部119の動作を表すフローチャート ロジカルカップリンググラフ生成部103の動作を表すフローチャート 図21のS1303の詳細を示すフローチャート 図21のS1308の詳細を示すフローチャート アンチパターン検出部104の動作を示すフローチャート プログラム関連性閾値121の異なる例を示す図。図25(a)は既存の関連属性識別子を用いる例を示す図、図25(b)は既存の関連属性識別子を用いない例を示す図。 変形例2におけるソースコード解析装置10の機能構成図 入力ユーザインタフェース2700の一例を示す図 入出力ユーザインタフェース3900の一例を示す図 第3の実施の形態におけるソースコード解析装置10の機能構成図 バスケット解析期待値124の一例を示す図 バスケット解析閾値導出部123の動作を表すフローチャート
―第1の実施の形態―
以下、図1~図24を参照して、ソースコード解析装置の第1の実施の形態を説明する。
(ハードウエア構成)
図1はソースコード解析装置10のハードウェア構成を示す図である。ソースコード解析装置10は、ソフトウェアシステムの開発や保守等に利用される情報処理装置、すなわちコンピュータである。ソースコード解析装置10は、クラウドシステムにより提供されるクラウドサーバ等のように仮想的に実現されるものであってもよい。すなわち複数のコンピュータが協調して動作することにより、その機能を実現してもよい。
図1に示すように、ソースコード解析装置10は、プロセッサ11、主記憶装置12、補助記憶装置13、入力装置14、出力装置15、および通信装置16を備える。これらは図示しないバス等の通信手段を介して互いに通信可能に接続されている。
プロセッサ11は、たとえば、CPU(Central Processing Unit)やMPU(Micro Processing Unit)を用いて構成される。プロセッサ11が、主記憶装置12や補助記憶装置13に格納されているプログラムを読み出して実行することにより、後述する機能を実現する。主記憶装置12は、プログラムやデータを記憶する装置であり、たとえば、ROM(Read Only Memory)、RAM(Random Access Memory)、不揮発性半導体メモリ(Non Volatile RAM)等である。
補助記憶装置13は、たとえば、ハードディスクドライブ、SSD(Solid State Drive)、光学式記憶装置(CD(Compact Disc)、DVD(Digital Versatile Disc)等)、ストレージシステム、ICカード、SDメモリカードや光学式記録媒体等の記録媒体の読取/書込装置、クラウドサーバの記憶領域等である。補助記憶装置13に格納されているプログラムやデータは主記憶装置12に随時読み込まれる。
入力装置14は、たとえば、キーボード、マウス、タッチパネル、カードリーダ、音声入力装置等である。出力装置15は、ユーザに処理経過や処理結果等の各種情報を提供するユーザインタフェースであり、たとえば、画面表示装置(液晶モニタ、グラフィックカード等)、音声出力装置(スピーカ等)、印字装置等である。尚、たとえば、ソースコード解析装置10が通信装置16を介して他の装置との間で情報の入力や出力を行う構成としてもよい。
通信装置16は、LANやインターネット等の通信手段を介した他の装置との間の通信を実現する有線方式又は無線方式の通信インタフェースであり、例示すれば、NIC(Network Interface Card)、無線通信モジュール、USB(Universal Serial Interface)モジュール、シリアル通信モジュール等である。
(機能構成)
図2は、ソースコード解析装置10の機能構成図である。ソースコード解析装置10はその機能として、ロジカルカップリング分析部101と、プログラム解析部102と、ロジカルカップリンググラフ生成部103と、アンチパターン検出部104と、情報記憶部105と、プログラム関連性分析部119とを備える。これらの機能は、たとえば、プロセッサ11が、主記憶装置12や補助記憶装置13に格納されているプログラムを読み出して実行することにより実現される。またこれらの機能は、たとえば、ソースコード解析装置10が備えるハードウェア、たとえばASICなどによって実現されてもよい。ただし情報記憶部105は、主記憶装置12または補助記憶装置13により実現される。またソースコード解析装置10には、後述する処理の過程で変更依存関係ルール114と、ソフトウェアメトリクス情報115と、ロジカルカップリンググラフ116と、プログラム要素情報117と、プログラム関連性指標情報120とが生成される。これら生成される情報は、情報記憶部105に格納される。
なお図2においてプログラム関連性指標情報120は、ソースコード解析装置10の内部と外部に合計2つ示されているが、両者は同一である。ソースコード解析装置10の内部に存在するプログラム関連性指標情報120は、情報記憶部105に格納されることを示している。ソースコード解析装置10の外部に存在するプログラム関連性指標情報120は、出力装置15から出力されることを示している。
ソースコード解析装置10は後述する処理を行うために、補助記憶装置13に格納されている情報である、プログラム要素変更履歴106と、バスケット解析閾値107と、ソースコード108と、ソフトウェアメトリクス取得ロジック109と、グラフパターンマッチロジック110と、ソフトウェアメトリクス閾値111と、グラフパラメータ閾値112と、パラメータ論理式113と、プログラム関連性閾値121と、プログラム関連性指標取得ロジック125とを読み込む。そしてソースコード解析装置10は、アンチパターングラフ118およびプログラム関連性指標情報120を出力装置15から出力する。以下ではまず、ソースコード解析装置10が読み込む情報およびソースコード解析装置10が生成する情報について説明し、その後にソースコード解析装置10の動作を説明する。
(プログラム要素変更履歴106)
図3は、プログラム要素変更履歴106の一例を示す図である。プログラム要素変更履歴106は1以上のレコードから構成される。プログラム要素変更履歴106の各レコードには、解析対象となるソースコード108のプログラムに発生した変更の履歴が記録される。このレコードは、変更が発生するたびに新たなレコードとして記録される。各レコードは、レコードを識別するために一意に付与される変更番号301と、プログラム中の変更された要素が全て格納される変更プログラム要素名302とから構成される。たとえば、符号303で示す1番目のレコードは、変更番号301が「1」であり、変更プログラム要素名302に記載されたプログラム要素A、プログラム要素B、プログラム要素Cのプログラム要素が同時変更されたことを示している。
プログラム要素変更履歴106には、たとえば、解析対象となるプログラムを版管理する版管理システムの変更履歴情報を用いてもよい。この場合、一般的な版管理システムではファイル単位で版管理するため、解析対象となるプログラム要素の種類はファイルとなる。またプログラム要素変更履歴106には、変更履歴情報をプログラム構造情報に基づいて関数単位、クラス単位、またはファイル単位の変更履歴情報に変換したものを用いてもよい。この場合、解析対象となるプログラム要素の種類は関数、クラス、またはファイルとなる。
(バスケット解析閾値107)
図4は、バスケット解析閾値107の一例を示す図である。バスケット解析閾値107には、ロジカルカップリング分析部101がバスケット解析を行う際に用いる閾値が記録される。なお、ここでいうバスケット解析とは、プログラム要素変更履歴106を解析して同時に変更されやすいプログラム要素の組み合わせを抽出する処理である。バスケット解析閾値107は複数のレコードから構成され、各レコードはルール評価値名401と閾値402とから構成される。図4に示す例では、支持度403、確信度404、およびリフト値405の3つのルール評価値が示されている。閾値402には、0以上1以下の値が設定される。
(変更依存関係ルール114)
図5は、変更依存関係ルール114の一例を示す図である。変更依存関係ルール114には、ロジカルカップリング分析部101がバスケット解析を行った結果である、同時に変更されやすいプログラム要素の順序対が格納される。変更依存関係ルール114は1以上のレコードから構成され各レコードは、ルール番号501と、変更対象プログラム要素名502と、同時変更プログラム要素名503と、プログラム関連属性505とから構成される。
ルール番号501は各レコードを識別するために一意に付与される番号である。変更対象プログラム要素名502は、変更対象であるプログラム要素名である。同時変更プログラム要素名503は、変更対象プログラム要素名502と同時に変更されるプログラム要素名である。すなわち、変更対象プログラム要素名502が変更された場合は、同時変更プログラム要素名503も同時に変更される傾向にあることを示す。なお同時変更プログラム要素名503が変更された場合に変更対象プログラム要素名502が変更される傾向にあるか否かは不問である。プログラム関連属性505は、後述するように算出されるプログラム関連性指標の値と、後述するプログラム関連性閾値121とを用いて導出されるものであり、当該プログラム要素の組み合わせに対するプログラム関連性指標の値が、プログラム関連性閾値121が示す所定の条件を満たすか否かを表している。なお変更依存関係ルール114は、ロジカルカップリング分析部101がバスケット解析を行う前にレコードが登録されていない状態に初期化されているものとする。
(グラフパターンマッチロジック110)
図6は、グラフパターンマッチロジック110の一例を示す図である。グラフパターンマッチロジック110には、ロジカルカップリンググラフ生成部103が作成するロジカルカップリンググラフ116において、グラフの頂点ごとに値が定まるグラフパラメータ値を取得するためのロジックが記録される。グラフパターンマッチロジック110は、取得するグラフパラメータの種類ごとに作成され、グラフパラメータ名601とグラフパターンマッチロジック本体602とから構成される。グラフパラメータ名601には、グラフパラメータの種類が格納され、図6に示す例ではグラフパラメータの種類が「入次数」である。グラフパラメータの種類は、有向グラフの頂点の入次数または出次数などの、一般的にグラフ理論で定義される種類を用いてもよい。グラフパターンマッチロジック本体602の記述に制限はなく、たとえば実行可能なプログラミング言語やスクリプトで記述してもよい。
(ロジカルカップリンググラフ116)
図7は、ロジカルカップリンググラフ116の一例を示す図である。ロジカルカップリンググラフ116は、ロジカルカップリンググラフ生成部103により作成される有向グラフである。ロジカルカップリンググラフ116では、プログラム要素が頂点701として表現され、同時変更されやすいプログラム要素の順序対が有向辺702、704として表現される。図5に例示した変更依存関係ルール114において、プログラム関連属性505に識別子が一つも設定されていない場合は線種が点線である有向辺702が用いられ、プログラム関連属性505に少なくとも一つの識別子が設定されている場合は線種が破線である有向辺704が用いられる。すなわち、ロジカルカップリンググラフ116は、有向辺702、704を用いて、同時変更されやすいプログラム要素の組み合わせごとに、そのプログラム関連性指標の値がプログラム関連性閾値121で規定された条件を満たすか否かを表している。ロジカルカップリンググラフ116は、ロジカルカップリンググラフ生成部103でロジカルカップリンググラフ116の作成処理を行う前に頂点と有向辺が登録されていない状態に初期化される。
なお上述したとおりロジカルカップリンググラフ116はロジカルカップリンググラフ生成部103により生成されるが、ロジカルカップリンググラフ116の生成に必要な情報はロジカルカップリング分析部101により生成される。すなわちロジカルカップリンググラフ116に表現される情報を実質的に生成しているのはロジカルカップリング分析部101であり、ロジカルカップリンググラフ生成部103はデータの表現を変更したに過ぎない。したがって、ロジカルカップリンググラフ116に表されている情報を生成しているのはロジカルカップリング分析部101であると言える。なお、ロジカルカップリング分析部101は、上記のロジカルカップリンググラフ116の生成に必要な情報を表現するために、前述の変更依存関係ルール114を生成する。そのため以下の説明では、変更依存関係ルール114が表す情報を「ロジカルカップリング情報」とも称する。
(アンチパターングラフ118)
図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を見ることによって、プログラム要素間にどのような同時変更されやすい関係があるかを確認できる。
(プログラム要素情報117)
図9は、プログラム要素情報117の一例を示す図である。プログラム要素情報117には、ロジカルカップリンググラフ生成部103によって作成されるロジカルカップリンググラフ116における頂点701に関するグラフパラメータ値が格納される。プログラム要素情報117は、プログラム要素ごとに作成され、プログラム要素801とパラメータテーブル802とから構成される。プログラム要素801は、プログラム要素名とプログラム要素の値との組み合わせである。
パラメータテーブル802は、1以上のレコードから構成され、各レコードはパラメータ名803とパラメータの値804とから構成される。パラメータテーブル802に格納されるパラメータは、解析対象であるソースコード108の品質に関する各プログラム要素の評価値を表すものであり、グラフパターンマッチロジック110で定義されたグラフパラメータの値と、ソフトウェアメトリクス取得ロジック109で定義されたソフトウェアメトリクスの値とを含む。たとえば図9に示す例では、符号805で示すパラメータテーブル802の最初のレコードには、「保守容易性指数」という名称のソフトウェアメトリクスの値が「75」であることが記載されている。また、符号806で示すパラメータテーブル802の三番目のレコードには、「入次数」という名称のグラフパラメータの値が「3」であることが記載されている。プログラム要素情報117は出力装置15を用いてユーザに出力される。ユーザは、プログラム要素情報117を見ることによって、プログラム要素に対応するグラフ要素が有するグラフパラメータおよびソフトウェアメトリクスの種類およびその値を確認できる。プログラム要素情報117は、ロジカルカップリンググラフ生成部103がプログラム要素情報作成処理を行う前に、未作成状態に初期化される。
(グラフパラメータ閾値112)
図10は、グラフパラメータ閾値112の一例を示す図である。グラフパラメータ閾値112は複数のレコードから構成され、各レコードにはグラフパターンマッチロジック110でグラフパラメータ名601ごとに定義したグラフパラメータのロジックに対し、当該ロジックに応じたグラフパラメータ値が異常であると判断するための閾値が格納される。具体的には各レコードは、各レコードを識別するために一意に付与されるグラフパラメータ識別子901と、グラフパラメータ名902と、グラフパラメータ閾値903と、グラフパラメータ値がグラフパラメータ閾値903と比べてどのような値をとる場合に異常とみなすかを判断するためのグラフパラメータ判定条件904とで構成される。ここで、グラフパラメータ判定条件904には、グラフパラメータ値とグラフパラメータ閾値903を比較するための関係演算子を記述してもよい。なお、グラフパラメータ値をグラフパラメータ判定条件904およびグラフパラメータ閾値903を用いて評価した結果を、当該グラフパラメータ値に対する判定結果と呼ぶ。
(ソフトウェアメトリクス閾値111)
図11はソフトウェアメトリクス閾値111の一例を示す図である。ソフトウェアメトリクス閾値111は複数のレコードから構成され、各レコードにはソフトウェアメトリクス情報115に記録されたソフトウェアメトリクス値1902(図14参照)に対し、当該ソフトウェアメトリクス値1902が異常であると判断するための閾値が格納される。具体的には各レコードは、各レコードを識別するために一意に付与されるソフトウェアメトリクス識別子2101と、ソフトウェアメトリクス名2102と、ソフトウェアメトリクス閾値2103と、ソフトウェアメトリクス判定条件2104とから構成される。
ソフトウェアメトリクス判定条件2104とは、ソフトウェアメトリクス値1902がソフトウェアメトリクス閾値2103と比べてどのような値をとる場合に異常とみなすかを判断するための条件である。なおソフトウェアメトリクス判定条件2104には、ソフトウェアメトリクス値1902とソフトウェアメトリクス閾値2103を比較するための関係演算子を記述してもよい。なお、ソフトウェアメトリクス値1902をソフトウェアメトリクス判定条件2104およびソフトウェアメトリクス閾値2103を用いて評価した結果を、当該ソフトウェアメトリクス値に対する判定結果という。
(パラメータ論理式113)
図12は、パラメータ論理式113の一例を示す図である。パラメータ論理式113は、複数のパラメータ値に対する判定結果を総合的に評価して、当該パラメータ値の組が異常であるかどうかを判断するための論理式である。パラメータ論理式113は、論理学で用いられる一般的な文字や記号を用いて記述し、一般的な推論規則によってその真偽値が評価可能であるとする。たとえば、パラメータ論理式113は、グラフパラメータ識別子901、ソフトウェアメトリクス識別子2101、論理演算記号(”&”または”|”)、括弧記号(”(”または”)”)などを用いて記述してもよい。ここで、グラフパラメータ識別子901の真偽値は、当該グラフパラメータの値804に対する判定結果とする。またグラフパラメータ識別子901およびソフトウェアメトリクス識別子2101を原子論理式として論理演算記号を用いて得られる論理式の真偽値は、論理学の一般的な推論規則に従うものとする。
(ソフトウェアメトリクス取得ロジック109)
図13はソフトウェアメトリクス取得ロジック109の一例を示す図である。ソフトウェアメトリクス取得ロジック109には、プログラム要素ごとに値が定まるソフトウェアメトリクス値を取得するためのロジックが記録される。ソフトウェアメトリクス取得ロジック109は、取得したいソフトウェアメトリクスの種類ごとに作成され、ソフトウェアメトリクス名1801とソフトウェアメトリクス取得ロジック本体1802とから構成される。ソフトウェアメトリクス名1801には、ソフトウェアメトリクスの種類を示す情報が格納され、図13に示す例ではソフトウェアメトリクスの種類が「保守容易性指数」である。ソフトウェアメトリクスの種類は、プログラム要素の規模や複雑度などの、一般的なプログラム解析で評価される値を用いてもよい。ソフトウェアメトリクス取得ロジック本体1802の記述に制限はなく、たとえば実行可能なプログラミング言語やスクリプトで記述してもよい。
ソフトウェアメトリクスは、たとえば保守容易性指標、凝集度、およびサイクロマチック数である。保守容易性指標とは、行数やサイクロマチック数などを組み合わせた保守性メトリクスである。凝集度とは、プログラム要素が属するクラスにおける情報要素間の関連性の強さを表す指標である。サイクロマチック数は循環的複雑度とも呼ばれ、線形的に独立した経路の数に基づき算出される。
(ソフトウェアメトリクス情報115)
図14は、ソフトウェアメトリクス情報115の一例を示す図である。ソフトウェアメトリクス情報115は、複数のレコードから構成され、各レコードはプログラム要素ごとに作成される。すなわちソフトウェアメトリクス情報115の各レコードはあるプログラム要素について、ソフトウェアメトリクス取得ロジック109において定義したソフトウェアメトリクスの値が格納される。ソフトウェアメトリクス情報115の各レコードは、プログラム要素名1901と、1以上のソフトウェアメトリクス値1902とが含まれる。たとえば符号1903で示す1番目のレコードは、プログラム要素Aのソフトウェアメトリクス値として、保守容易性指数が75、凝集度が0.3であることを示している。なおソフトウェアメトリクス情報115は、プログラム解析部102でプログラム解析を行う前に初期化される。
(プログラム関連性指標取得ロジック125)
図15は、プログラム関連性指標取得ロジック125の一例を示す図である。プログラム関連性指標取得ロジック125には、プログラム要素の対ごとに値が定まるプログラム関連性指標の値を取得するロジックが記録される。プログラム関連性指標取得ロジック125は、プログラム関連性指標の種類ごとに作成され、プログラム関連性指標名2901とプログラム関連性指標取得ロジック本体2902とで構成される。プログラム関連性指標名2901はたとえば、プログラム要素間のソースコードの類似度や、共通して参照する他のプログラム要素数や、参照関係に基づくプログラム要素間の距離などの、一般的にプログラム解析で評価される指標である。プログラム関連性指標取得ロジック本体2902の記述に制限はなく、たとえば実行可能なプログラミング言語やスクリプトで記述してもよい。
プログラム関連性指標は、たとえば共通参照変数数やコード類似度である。共通参照変数数とは、2つの関数が共通して参照する変数の数である。コード類似度とは2つの関数に共通して出現するシンボル、すなわち変数参照や関数呼び出しの割合であり、共通するシンボルが多いほど「1」に近づき、共通するシンボルが少ないほど「0」に近づく。
(プログラム関連性指標情報120)
図16は、プログラム関連性指標情報120の一例を示す図である。プログラム関連性指標情報120は、複数のレコードから構成され、各レコードはプログラム要素の組み合わせごとに作成される。すなわちプログラム関連性指標情報120の各レコードはあるプログラム要素対について、プログラム関連性指標取得ロジック125において定義したプログラム関連性指標のプログラム要素対ごとの値が格納される。プログラム関連性指標情報120の各レコードは、要素対となる始点プログラム要素名3002と、終点プログラム要素名3003と、1以上のプログラム関連性指標値3004とから構成される。たとえば図16に符号3001で示す1つ目のレコードは、プログラム要素Aを始点としプログラム要素Bを終点とする組み合わせにおけるプログラム関連性指標値として、共通参照変数数が20でコード類似度が0.3であることが示されている。
プログラム関連性指標情報120は、プログラム関連性分析部119がプログラム関連性分析を行う前にいずれのレコードも記録されていない状態に初期化される。プログラム関連性指標情報120は出力装置15を用いてユーザに出力される。ユーザは、プログラム関連性指標情報120を見ることによって、プログラム要素対がどのようなプログラム関連性指標を持つかを確認できる。
(プログラム関連性閾値121)
図17は、プログラム関連性閾値121の一例を示す図である。プログラム関連性閾値121は複数のレコードから構成され各レコードは、関連性属性を有するか否かを判断するための閾値であって、プログラム関連性指標情報120に記録されたプログラム関連性指標値3004に対する閾値が記録される。各レコードは、関連性属性を一意に識別する識別子である関連属性識別子3202、プログラム関連性指標名3203、プログラム関連性閾値3204、およびプログラム関連性条件3205から構成される。ただしプログラム関連性閾値3204およびプログラム関連性条件3205はそれぞれ、閾値3204および条件3205とも呼ぶ。
条件3205は、図16のプログラム関連性指標情報120におけるプログラム関連性指標値3004がプログラム関連性閾値3204と比べてどのような値をとる場合にプログラム関連性属性をもつとみなすかを判断するための条件である。ただしプログラム関連性条件3205には、プログラム関連性指標値3004とプログラム関連性閾値3204を比較するための関係演算子を記述してもよい。なお、プログラム関連性指標値3004を条件3205および閾値3204を用いて評価した結果を、当該プログラム関連性に対する判定結果と呼ぶ。
(ソースコード解析装置10の動作)
図18は、ロジカルカップリング分析部101の動作を表すフローチャートである。まずロジカルカップリング分析部101はプログラム要素変更履歴106を読み込み(S1201)、バスケット解析閾値107を読み込む(S1202)。そしてロジカルカップリング分析部101は、読み込んだプログラム要素変更履歴106からプログラム要素の全ての順序対を生成し、各順序対(E1,E2)に対してS1204~S1208の処理を実施する(S1203)。
S1204ではロジカルカップリング分析部101は、順序対(E1,E2)に対する支持度を計算する。ここで、順序対(E1,E2)に対する支持度とは、プログラム要素E1とE2の同時変更されやすさを表す0以上1以下の値であり、E1とE2を変更プログラム要素名302に含む変更履歴レコード303の数を全ての変更履歴レコード303の数で割った値である。S1205ではロジカルカップリング分析部101は、順序対(E1,E2)に対する確信度を計算する。ここで、順序対(E1,E2)に対する確信度とは、プログラム要素E1が変更されたときのE2の変更されやすさを表す0以上1以下の値であり、E1とE2を変更プログラム要素名302に含む変更履歴レコード303の数を、E1を変更プログラム要素名302に含む変更履歴レコード303の数で割った値である。
S1206ではロジカルカップリング分析部101は、順序対(E1,E2)に対するリフト値を計算する。ここで、順序対(E1,E2)に対するリフト値とは、プログラム要素E1の変更とE2の変更の相関関係について、値が1の場合は無相関、1より大きい場合は正の相関、1より小さい場合は負の相関があることを表す0以上の値である。順序対(E1,E2)に対するリフト値は、順序対(E1,E2)に対する確信度を、順序対(E2,E2)に対する支持度で割った値である。
続くS1207ではロジカルカップリング分析部101は、順序対(E1,E2)に対する支持度、確信度、およびリフト値の全てが、バスケット解析閾値107から与えられるそれぞれのルール評価値名401の閾値402を超過しているか否かを判定する。ロジカルカップリング分析部101は、支持度、確信度、リフト値およびリフト値の全てが閾値を超過していると判断する場合は、変更依存関係ルール114に、一意的なルール番号501を付与した新しい変更依存関係ルールレコード504を追加し、当該変更依存関係ルールレコード504の変更対象プログラム要素名502にプログラム要素E1を、同時変更プログラム要素名503にプログラム要素E2を記録する(S1208)。ロジカルカップリング分析部101は、支持度、確信度、リフト値およびリフト値のいずれか1つでも閾値を超過していないと判断する場合はS1209に進む。S1209ではロジカルカップリング分析部101は、全ての順序対(E1,E2)に対してS1204~S1208の処理を実施する。
続くS1210ではロジカルカップリング分析部101は、プログラム関連性指標情報120の評価を行い、その評価結果を変更依存関係ルール114に書き込んで図18に示す処理を終了する。S1210を詳述するとロジカルカップリング分析部101は、まずプログラム関連性閾値121およびプログラム関連性分析部119が生成するプログラム関連性指標情報120を読み込む。そしてプログラム関連性指標情報120に格納されたプログラム関連性指標値3004がプログラム関連性閾値121の条件を満たすか否かを判断し、条件を満たす場合は対応する関連属性識別子を変更依存関係ルール114のプログラム関連属性505の欄に書き込む。たとえば図16の最初のレコードに記載されている例では共通参照変数数が「20」であり、図17に示すプログラム関連性閾値121では最初のレコードに記載されている条件は共通参照変数数が「25未満」である。「20」は、「25未満」の条件を満たすので、図5の最初のレコードに示すように、プログラム関連属性505に、図17の最初のレコードで関連属性識別子3202に設定されている識別子である「R1」が記載される。
(プログラム解析部102の動作)
図19は、プログラム解析部102の動作を表すフローチャートである。プログラム解析部102はまずソースコード108を読み込み(S2401)、ソフトウェアメトリクス取得ロジック109を読み込む(S2402)。そしてプログラム解析部102は読み込んだソースコード108に含まれる全てのプログラム要素に対して処理対象のプログラム要素Eを順番に変更してS2404~S2407の処理を実施する(S2403)。プログラム解析部102は全てのソフトウェアメトリクス取得ロジック109に対して処理対象のソフトウェアメトリクス取得ロジック109を順番に変更してS2405の処理を実施する(S2404)。ただし次のS2405では処理対象のソフトウェアメトリクス取得ロジック109を符号「L」で表す。
プログラム解析部102は、符号Lで表す処理対象のソフトウェアメトリクス取得ロジック109を用いて、処理対象のプログラム要素Eのメトリクスを取得する(S2405)。このS2405の処理は、前述の繰り返し処理により、全てのプログラム要素Eについて全てのソフトウェアメトリクス取得ロジック109ごとに算出される。処理対象のプログラム要素Eについて全てのソフトウェアメトリクス取得ロジック109についてメトリクスの取得が完了すると(S2406)、処理対象のプログラム要素Eのメトリクス値をソフトウェアメトリクス情報115に追加する(S2407)。プログラム解析部102は、以上の処理を全てのプログラム要素Eを対象に実行すると(S2408)、図19に示す処理を終了する。
(プログラム関連性分析部119の動作)
図20は、プログラム関連性分析部119の動作を表すフローチャートである。プログラム関連性分析部119はまずソースコード108を読み込み(S3501)、続いて全てのプログラム関連性指標取得ロジック125を読み込む(S3502)。続いてプログラム関連性分析部119は、ソースコード108に含まれる全てのプログラム要素同士の組み合わせであるプログラム要素対Pを順番に変更してS3504~S3507の処理を実施する(S3503)。プログラム関連性分析部119は全てのプログラム関連性指標取得ロジック125に対して処理対象のプログラム関連性指標取得ロジック125を順番に変更してS3505の処理を実施する(S3504)。ただし次のS3505では処理対象のプログラム関連性指標取得ロジック125を符号「L」で表す。
プログラム関連性分析部119は、符号Lで表す処理対象のプログラム関連性指標取得ロジック125を用いて、処理対象のプログラム要素対Pのプログラム関連性指標を取得する(S3505)。このS3505の処理は、前述の繰り返し処理により、全てのプログラム要素対Pについて全てのプログラム関連性指標取得ロジック125ごとに算出される。処理対象のプログラム要素対Pについて全てのプログラム関連性指標取得ロジック125についてプログラム関連性指標の取得が完了すると(S3506)、処理対象のプログラム要素対Pのプログラム関連性指標をプログラム関連性指標情報120に追加する(S3507)。プログラム関連性分析部119は、以上の処理を全てのプログラム要素対Pを対象に実行すると(S3508)、図20に示す処理を終了する。
なおS3505の動作は、商用ツールとして販売されているプログラム解析ツールや、オープンソースで公開されているプログラム解析ツールを利用して実行してもよい。
(ロジカルカップリンググラフ生成部103の動作)
図21は、ロジカルカップリンググラフ生成部103の動作を表すフローチャートである。ロジカルカップリンググラフ生成部103は、ソフトウェアメトリクス情報115と変更依存関係ルール114(S1305)、プログラム関連性指標情報120(S1306)、プログラム関連性閾値121(S1307)、およびグラフパターンマッチロジック110(S1308)を読み込む。次にロジカルカップリンググラフ生成部103は、図22を参照して後に説明するように、ロジカルカップリンググラフ116を生成する(S1303)。次にロジカルカップリンググラフ生成部103は、図23を参照して後に説明するように、プログラム要素情報117を生成し(S1308)、図21に示す処理を終了する。
図22は、図21のS1303の詳細を示すフローチャートである。ロジカルカップリンググラフ生成部103は、全てのプログラム要素Eに対してS1402~S1403の処理を実施する(S1401)。ロジカルカップリンググラフ生成部103は、ロジカルカップリンググラフ116に、プログラム要素Eに対応する頂点Nを追加する(S1402)。ロジカルカップリンググラフ生成部103は、S1402において追加した頂点Nに対応するプログラム要素情報117を作成し、そのプログラム要素名にプログラム要素Eを記録する(S1403)。ただしここでは各パラメータの値は書き込まれない。ロジカルカップリンググラフ生成部103は、全てのプログラム要素Eに対してS1402~S1403の処理を実施したと判断するとS1405に進み、未処理のプログラム要素が存在すると判断する場合はS1402に戻る(S1404)。
ロジカルカップリンググラフ生成部103は、変更依存関係ルール114に記載されたプログラム要素の全ての順序対(E1,E2)に対してS1406の処理を実施する(S1405)。ロジカルカップリンググラフ生成部103は、ロジカルカップリンググラフ116に、E1を始点、E2を終点とする有向辺を追加する(S1406)。ただしこのとき有向辺の線種は、プログラム関連属性505の値に応じたものとする。たとえばプログラム関連属性505が何も設定されていない場合は点線、何らかの属性が設定されている場合は破線を用いる。ただし線種だけで設定されている属性が識別可能なように、一点鎖線や2点鎖線、さらには二重線など様々な線種を用いてもよい。これにより、図16のプログラム関連性指標情報120に記載された当該プログラム要素の組み合わせに対する各プログラム関連性指標値3004が、図17のプログラム関連性閾値121で規定された条件を満たすか否かを、ロジカルカップリンググラフ116において表現する。次にロジカルカップリンググラフ生成部103は、プログラム要素の全ての順序対(E1,E2)に対して実施したと判断すると図22に示す処理を終了し、未処理の順序対が存在すると判断する場合はS1406に戻る(S1407)。
図23は、図21のS1308の詳細を示すフローチャートである。ロジカルカップリンググラフ生成部103は、ロジカルカップリンググラフ116における全ての頂点Nに対してS1507~S1505の処理を実行する(S1501)。ロジカルカップリンググラフ生成部103は、全てのプログラム要素Eに対してS1508の処理を実行する。ロジカルカップリンググラフ生成部103は、頂点Nに対応するプログラム要素Eのソフトウェアメトリクス値を、頂点Nのプログラム要素情報117に追加する(S1508)。すなわち、図14のソフトウェアメトリクス情報115における当該プログラム要素Eの各ソフトウェアメトリクス値1902を、プログラム要素情報117のパラメータテーブル802に追加する。ロジカルカップリンググラフ生成部103は、全てのプログラム要素Eに対してS1508の処理を実施したと判断する場合はS1502に進み、実施していないプログラム要素が存在すると判断する場合はS1508に戻る(S1509)。
ロジカルカップリンググラフ生成部103は全てのグラフパターンマッチロジック110に対してS1503の処理を実施する(S1502)。ただしS1503では処理対象のグラフパターンマッチロジック110を符号「L」で表す。ロジカルカップリンググラフ生成部103は符号Lで表す処理対象のグラフパターンマッチロジック110を用いて、処理対象の頂点Nに対応するグラフパラメータ値を取得する(S1503)。ロジカルカップリンググラフ生成部103は全てのグラフパターンマッチロジック110に対してS1503の処理を実施したと判断する場合はS1505に進み、実施していないグラフパターンマッチロジック110が存在すると判断する場合はS1503に戻る(S1509)。ロジカルカップリンググラフ生成部103は処理対象の頂点Nのグラフパラメータ値を頂点Nのプログラム要素情報117に追加する(S1505)。ロジカルカップリンググラフ生成部103は、全ての頂点Nに対してS1507~S1505の処理を実施したと判断する場合は図23に示す処理を終了し、実施していない頂点Nが存在すると判断する場合はS1507に戻る(S1506)。
(アンチパターン検出部104の動作)
図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の実施の形態によれば、次の作用効果が得られる。
(1)ソースコード解析装置10は、ソースコード108を解析してソースコード108に含まれるプログラム要素同士の関連性を分析しプログラム関連性指標情報120を生成するプログラム関連性分析部119と、プログラム要素変更履歴106を用いて、同時変更されやすいプログラム要素の対を示す情報であるロジカルカップリンググラフ116に表される情報を生成するロジカルカップリング分析部101と、少なくともロジカルカップリング情報に基づいて、評価値であるプログラム要素情報117をプログラム要素ごとに生成するロジカルカップリンググラフ生成部103と、ロジカルカップリング情報に含まれるプログラム要素のうち、プログラム要素情報およびプログラム関連性指標情報が所定の条件を満たすプログラム要素を示すアンチパターングラフ118を生成するアンチパターン検出部104と、アンチパターングラフ118を出力する出力装置15とを備える。
ソースコード解析装置10を使用するユーザはプログラム関連性指標情報120を判定したアンチパターングラフ118が得られるので、アンチパターンが示す問題特徴をプログラム要素が備えているかどうかをより高い精度で判定できる。具体的には、アンチパターングラフ118において、問題特徴を有するプログラム要素は強調表示され、何らかのプログラム関連属性を有する場合には破線で示されるので、両方の特徴を併せ持つプログラム要素に注目すればよいことが容易に判別できる。以下、アンチパターンであるShotgun surgeryを例に説明する。
Shotgun surgeryは、当該プログラム要素を拡張または変更すると多くの他のプログラム要素も同時に拡張または変更される、という問題特徴を持つプログラム要素をリファクタリングするためのパターンである。Shotgun surgeryが示す問題特徴はプログラム要素そのものの特徴ではなく、プログラム要素の変更に関する特徴であるため、ソフトウェアメトリクスを用いて当該問題特徴を持つプログラム要素を特定することは困難である。
Shotgun surgeryの間接的な要因としては、たとえばプログラム要素間の類似関係がある。類似関係とはたとえばプログラムコードの重複である。プログラムコードが重複する場合、同様の変更を重複したプログラムコードそれぞれに加えることがあるため、Shotgun surgeryとなる可能性がある。ただし、プログラムコードの重複は、定型処理や、意図的な派生機能の作成により存在しうるため、そもそも変更が加わらない場合や、異なる変更が行われていく場合も多く、その存在が必ずしもShotgun surgeryを引き起こすわけではない。
Shotgun surgeryの異なる間接的な要因としては、たとえばプログラム要素間の参照関係がある。参照関係とはたとえば複数の異なるプログラム要素から同一のデータを読み書きしている場合である。この場合、データの書き込み側のプログラム要素に変更が加わったとき、当該データを読み込む他の異なるプログラム要素もまた変更が必要となることがある。ただし、同一のデータを複数のプログラム要素から読み書きすることは一般的なプログラム構造であり、この関係が必ずしもShotgun surgeryを引き起こすわけではない。
以上のように、アンチパターンが示す問題特徴をプログラム要素が備えているか否かを判定するためには、プログラム関連性指標情報120およびアンチパターングラフ118を考慮することが望ましく、ソースコード解析装置10はこれらの情報を提供できる。
(2)出力装置15は、プログラム関連性指標情報120をさらに出力する。そのためユーザは、プログラム関連性指標の詳しい情報を閲覧して詳細な判断をすることができる。
(3)アンチパターングラフ118は、同時変更されやすいプログラム要素の対、および所定の条件を満たすプログラム要素を視覚的に表示する情報である。アンチパターングラフ118は有向グラフなのでユーザは容易に情報の把握が可能であり、文字や表で情報が提示されるよりも効率的である。
(4)プログラム要素のそれぞれについて保守性を示す指標であるソフトウェアメトリクス情報115を生成するプログラム解析部102を備える。ロジカルカップリンググラフ生成部103は、ソフトウェアメトリクス情報115も考慮してプログラム要素が所定の条件を満たすか否かを判断する。そのためアンチパターングラフ118はソフトウェアメトリクス情報115も考慮して作成されるので、ユーザはこのアンチパターングラフ118およびプログラム関連性指標情報120を参照することでより適切に、アンチパターンが示す問題特徴をプログラム要素が備えているか否かを判定することができる。以下、アンチパターンであるThe Blobを例に説明する。
The Blobは、複数の機能が1箇所にまとめて実装されている、という問題特徴を持つプログラム要素をリファクタリングするためのパターンである。The Blobが示す問題特徴を持つプログラム要素は、大規模化または複雑化する傾向があるため、その特定には、プログラム要素の規模または複雑度というソフトウェアメトリクスが有効である。しかし、単一の機能が実装されたプログラム要素でも規模や複雑度が大きくなる場合はあるため、判定結果にはノイズが載りやすい。一方で、The Blobが示す問題特徴を持つプログラム要素は、当該プログラム要素が実装する複数の機能が拡張または変更されるたびに併せて拡張または変更される場合が多い。
以上のように、アンチパターンが示す問題特徴をプログラム要素が備えているか否かを判定するためには、ソフトウェアメトリクス情報115も考慮することが望ましく、ソースコード解析装置10はソフトウェアメトリクス情報115も考慮した情報を提供できる。
(変形例1)
上述した第1の実施の形態では、関連属性識別子は単一のプログラム関連性指標に基づき設定された。しかし関連属性識別子は複数のプログラム関連性指標に基づき設定されてもよい。
図25は、関連属性識別子が複数のプログラム関連性指標に基づき設定される例を示す図、換言するとプログラム関連性閾値121の異なる例を示す図である。図25(a)は既存の関連属性識別子を用いる例を示す図、図25(b)は既存の関連属性識別子を用いない例を示す図である。図25(a)に示すプログラム関連性閾値121Aは、第1の実施の形態において示したプログラム関連性閾値121とともに用いられ、プログラム関連性閾値121におけるプログラム関連性指標名3203、プログラム関連性閾値3204、およびプログラム関連性条件3205の代わりに論理式3303を備える。論理式3303は、プログラム関連性閾値121における関連属性識別子3202を用いた論理式である。たとえば図25(a)に示す例では、1つ目のレコード3301は、R1およびR2の両方が真の場合にR3の属性を有することが示されている。
図25(b)に示すプログラム関連性閾値121Bは、第1の実施の形態において示したプログラム関連性閾値121とともに用いられてもよいし、プログラム関連性閾値121と統合されてもよい。図25(b)に示す例は図25(a)に示す例と同じ条件を示している。図25(b)では関連属性識別子を用いずにプログラム関連性指標を用いている点が図25(a)と異なる。
(変形例2)
上述した第1の実施の形態では、ソフトウェアメトリクス情報115が算出され、算出されたソフトウェアメトリクス情報115がプログラム要素情報117やアンチパターングラフ118の作成に利用された。しかしソースコード解析装置10は、ソフトウェアメトリクス情報115を算出しなくてもよい。
図26は、ソフトウェアメトリクス情報115を算出しない場合のソースコード解析装置10の機能構成図である。図26に示す機能構成図では図2に比べて、プログラム解析部102、ソフトウェアメトリクス閾値111、ソフトウェアメトリクス取得ロジック109、およびソフトウェアメトリクス情報115が削除されている。またプログラム要素情報117やパラメータ論理式113からもソフトウェアメトリクスに関する情報が削除される。
(変形例3)
上述した第1の実施の形態では、アンチパターン検出部104は図8に示すアンチパターングラフ118を出力した。しかしアンチパターン検出部104は、アンチパターングラフ118に代えて、アンチパターングラフ118に表現されている情報を文字や表として出力してもよい。プログラム要素の数が膨大な場合など、出力装置15にアンチパターングラフ118の全体を視認可能な大きさで表示することが困難な場合に有効である。
(変形例4)
上述した第1の実施の形態では、ソースコード解析装置10はアンチパターングラフ118およびプログラム関連性指標情報120を出力装置15から出力した。しかしソースコード解析装置10はプログラム関連性指標情報120を出力しなくてもよい。アンチパターングラフ118には、プログラム関連性指標情報120に基づいて設定されたプログラム関連属性の情報が有向辺の線種として含まれているからである。
(変形例5)
上述した第1の実施の形態では、ソースコード解析装置10はプログラム要素変更履歴106を読み込んだ。しかしソースコード解析装置10は複数のソースコード108を読み込んでプログラム要素変更履歴106を作成してもよい。すなわちプログラム要素変更履歴106があらかじめ作成されていなくてもよい。
―第2の実施の形態―
図27~図28を参照して、ソースコード解析装置の第2の実施の形態を説明する。以下の説明では、第1の実施の形態と同じ構成要素には同じ符号を付して相違点を主に説明する。特に説明しない点については、第1の実施の形態と同じである。本実施の形態では、主に、各種パラメータの設定をユーザインタフェース上でインタラクティブに行う点で、第1の実施の形態と異なる。本実施の形態では、ソフトウェアメトリクス閾値111、グラフパラメータ閾値112、パラメータ論理式113、バスケット解析閾値107、およびプログラム関連性閾値121の入力と、これら入力された値の変化に伴うアンチパターングラフ118の出力を、ユーザインタフェース上でインタラクティブに行う例を説明する。
図27は、出力装置15に表示される入力ユーザインタフェース2700の一例を示す図である。入力ユーザインタフェース2700は、ソフトウェアメトリクス閾値入力部2701、グラフパラメータ閾値入力部2702、パラメータ論理式入力部2703、バスケット解析閾値入力部2716、およびプログラム関連性閾値入力部2721を備える。
ソフトウェアメトリクス閾値入力部2701は、1以上のソフトウェアメトリクス閾値要素入力部2704から構成される。ソフトウェアメトリクス閾値要素入力部2704は、ソフトウェアメトリクス識別子2101が表示されるソフトウェアメトリクス識別子表示部2705、ソフトウェアメトリクス名2102が表示されるソフトウェアメトリクス名表示部2706、ソフトウェアメトリクス閾値2103を入力するためのソフトウェアメトリクス閾値入力部2707、ソフトウェアメトリクス判定条件2104を入力するためのソフトウェアメトリクス判定条件入力部2708、およびソフトウェアメトリクス閾値2103を視覚的に入力できるソフトウェアメトリクス閾値入力スライダー2709から構成される。
グラフパラメータ閾値入力部2702は、1以上のグラフパラメータ閾値要素入力部2710から構成される。グラフパラメータ閾値要素入力部2710は、グラフパラメータ識別子901が表示されるグラフパラメータ識別子表示部2711、グラフパラメータ名902が表示されるグラフパラメータ名表示部2712、グラフパラメータ閾値903を入力するためのグラフパラメータ閾値入力部2713、グラフパラメータ判定条件904を入力するためのグラフパラメータ判定条件入力部2714、およびグラフパラメータ閾値903を視覚的に入力できるグラフパラメータ閾値入力スライダー2715から構成される。
バスケット解析閾値入力部2716は、1以上のバスケット解析ルール評価値入力部2717から構成される。バスケット解析ルール評価値入力部2717は、バスケット解析のルール評価値名401が表示されるバスケット解析ルール評価値名表示部2718、バスケット解析の閾値402を入力するためのバスケット解析閾値入力部2719、バスケット解析の閾値402を視覚的に入力できるバスケット解析閾値入力スライダー2720から構成される。
プログラム関連性閾値入力部2721は、1以上のプログラム関連性閾値要素入力部2722および1以上のプログラム関連性論理式要素入力部2728から構成される。プログラム関連性閾値要素入力部2722は、プログラム関連属性識別子3202が表示されるプログラム関連属性識別子表示部2723、プログラム関連性指標名3203が表示されるプログラム関連性指標名表示部2724、プログラム関連性指標閾値3204を入力するためのプログラム関連性指標閾値入力部2725、プログラム関連性指標判定条件3205を入力するためのプログラム関連性指標判定条件入力部2726、プログラム関連性指標閾値3204を視覚的に入力できるプログラム関連性指標閾値入力スライダー2727から構成される。
プログラム関連性論理式要素入力部2728は、プログラム関連属性識別子3302が表示されるプログラム関連属性識別子表示部2729、プログラム関連属性論理式3303を入力するためのプログラム関連属性論理式入力部2730から構成される。
ユーザは、ソフトウェアメトリクス閾値入力部2707、ソフトウェアメトリクス判定条件入力部2708、ソフトウェアメトリクス閾値入力スライダー2709、グラフパラメータ閾値入力部2713、グラフパラメータ判定条件入力部2714、グラフパラメータ閾値入力スライダー2715、パラメータ論理式入力部2703、バスケット解析閾値入力部2719、バスケット解析閾値入力スライダー2720、プログラム関連性指標閾値入力部2725、プログラム関連性指標判定条件入力部2726、プログラム関連性指標閾値入力スライダー2727、およびプログラム関連属性論理式入力部2730を用いてソフトウェアメトリクス閾値、グラフパラメータ閾値、パラメータ論理式、プログラム関連性指標閾値、およびプログラム関連属性論理式を入力する。そしてユーザは出力されるアンチパターングラフ118を確認することで、ソフトウェアメトリクス値およびプログラム関連性のインタラクティブな入力が可能になる。
図28は、入出力ユーザインタフェース3900の一例を示す図である。入出力ユーザインタフェース3900は、入力ユーザインタフェース2700と詳細情報表示部3901とから構成される。図27の例と同様に、入力ユーザインタフェース2700は、ソフトウェアメトリクス閾値入力部2701、グラフパラメータ閾値入力部2702、パラメータ論理式入力部2703、バスケット解析閾値入力部2716、およびプログラム関連性閾値入力部2721から構成される。詳細情報表示部3901は、アンチパターングラフ118と詳細情報表示部3901から構成される。アンチパターングラフ118は、ソフトウェアメトリクス閾値111、グラフパラメータ閾値112、パラメータ論理式113、バスケット解析閾値107、およびプログラム関連性閾値121の入力値に伴い変化する。詳細情報表示部3901には、変更依存関係ルール114、ソフトウェアメトリクス情報115、およびプログラム関連性指標情報120のいずれかが表示される。この3つのいずれが表示されるかは、表示選択部3902による選択に基づいて決定される。
ただし詳細情報表示部3901は、ユーザによる入力ユーザインタフェース2700への入力により変化したアンチパターングラフ118に含まれるプログラム要素を含むレコードのみを出力しても良い。また詳細情報表示部3901には、プログラム要素情報117やプログラム関連情報122が表示されてもよい。
上述した第2の実施の形態によれば、次の作用効果が得られる。
(1)アンチパターン検出部104は、プログラム要素情報117に記載される値とソフトウェアメトリクス2701およびグラフパラメータ2702において入力される第1閾値との関係、およびプログラム関連性指標情報120とプログラム関連性指標2721において入力される第2閾値との関係を評価する。ソースコード解析装置10は、第1閾値および第2閾値が入力される入力ユーザインタフェース2700を備える。そのためユーザは、入力ユーザインタフェース2700から閾値を入力して、その結果であるアンチパターングラフ118をインタラクティブに取得することができる。
(第2の実施の形態の変形例)
入力ユーザインタフェース2700は、ソフトウェアメトリクス閾値入力部2701、グラフパラメータ閾値入力部2702、パラメータ論理式入力部2703、バスケット解析閾値入力部2716、およびプログラム関連性閾値入力部2721の少なくとも1つを備える構成でもよい。
―第3の実施の形態―
図29~図31を参照して、ソースコード解析装置の第3の実施の形態を説明する。以下の説明では、第1の実施の形態と同じ構成要素には同じ符号を付して相違点を主に説明する。特に説明しない点については、第1の実施の形態と同じである。本実施の形態では、主に、バスケット解析閾値を自動的に決定する点で、第1の実施の形態と異なる。
(機能構成)
図29は第3の実施の形態におけるソースコード解析装置10の機能構成図である。ソースコード解析装置10の機能構成は、第1の実施の形態における機能に加えて、バスケット解析閾値導出部123を備える。バスケット解析閾値導出部123は、プロセッサ11が、主記憶装置12や補助記憶装置13に格納されているプログラムを読み出して実行することにより実現される。ただしバスケット解析閾値導出部123は、ソースコード解析装置10が備えるハードウェア、たとえばASICなどによって実現されてもよい。バスケット解析閾値導出部123は、バスケット解析閾値107を設定する。バスケット解析閾値導出部123によるバスケット解析閾値107の設定方法に特に制限はなく、たとえば従前の閾値を所定の割合だけ増減させてもよいし所定の値だけ増減させてもよい。また閾値は、支持度、確信度、およびリフト値を連動して変更してもよいし、1つずつ変更してもよい。
本実施の形態では補助記憶装置13にはバスケット解析期待値124がさらに記憶される。バスケット解析閾値導出部123は算出したバスケット解析閾値107に基づきロジカルカップリング分析部101が算出した変更依存関係ルール114がバスケット解析期待値124を満たすか否かを判断し、満たしていないと判断する場合はバスケット解析閾値107を再度算出する。バスケット解析閾値導出部123によるバスケット解析閾値107の算出は、変更依存関係ルール114がバスケット解析期待値124を満たすまで繰り返される。
(バスケット解析期待値124)
図30は、バスケット解析期待値124の一例を示す図である。バスケット解析期待値124には、有益なアンチパターングラフ118を得るために適当と想定される変更依存関係ルール114の生成条件が記録される。バスケット解析期待値124は1以上のレコードから構成され、各レコードは、ルール数など変更依存関係ルールの項目4102と、当該項目に対応する期待値4103と、当該項目値が期待値4103と比べてどのような値をとる場合に満たすかを判断するための条件4104とで構成される。ここで、変更依存関係ルールの条件4104には、変更依存関係ルールの項目4102と変更依存関係ルールの期待値4103を比較するための関係演算子を記述してもよい。なお、変更依存関係ルールの項目4102を変更依存関係ルールの期待値4103と変更依存関係ルールの条件4104とを用いて評価した結果を、変更依存関係ルールに対する判定結果という。
(バスケット解析閾値導出部123の動作)
図31は、バスケット解析閾値導出部123の動作を表すフローチャートである。バスケット解析閾値導出部123はまず、プログラム要素変更履歴106を読み込む(S4201)。バスケット解析閾値導出部123はバスケット解析閾値107を設定する(S4203)。バスケット解析閾値導出部123は、ロジカルカップリング分析部101により変更依存関係ルール114が作成されるのを待機する(S4204)。バスケット解析閾値導出部123は、作成された変更依存関係ルール114がバスケット解析期待値124の条件を満たすか否かを判断する(S4205)。バスケット解析閾値導出部123は条件を満たすと判断する場合は図31に示す処理を終了し、条件を満たさないと判断する場合はS4203に戻る。
(バスケット解析閾値導出部123の動作例)
バスケット解析閾値導出部123は、バスケット解析閾値107の設定にあたり、支持度403または確信度404またはリフト値405のうち少なくとも一つの値について増加もしくは減少させる。バスケット解析閾値107の設定にあたり、たとえば、ロジカルカップリング分析部101が一度も実行されていないときに、プログラム要素変更履歴106のレコード数に基づき、レコード数が3000未満であれば、支持度403の閾値402を、プログラム要素変更履歴106に含まれるプログラム要素数をレコード数で除算した値に3を乗算した値とし、レコード数が3000以上であれば、支持度403の閾値402を、プログラム要素変更履歴106に含まれるプログラム要素数をレコード数で除算した値に3を乗算した値とする方法としても良い。
またバスケット解析閾値導出部123は、バスケット解析閾値107の設定にあたり、変更依存関係ルール114に含まれるルール数が、バスケット解析期待値124により示されるルール数の下限値を下回る場合には、当該変更依存関係ルール114を得るために用いた支持度403の閾値402から、プログラム要素変更履歴106に含まれるプログラム要素数をレコード数で除算した値に2を乗算した値を減算した値を、新たな支持度403の閾値402としてもよい。またバスケット解析閾値導出部123は、変更依存関係ルール114に含まれるルール数が、バスケット解析期待値124により示されるルール数の上限値を上回る場合には、当該変更依存関係ルール114を得るために用いた支持度403の閾値402に、プログラム要素変更履歴106に含まれるプログラム要素数をレコード数で除算した値に2を乗算した値を加算した値を、新たな支持度403の閾値402としても良い。
さらにバスケット解析閾値導出部123は、ロジカルカップリング分析を際限なく繰り返すことを避けるために、変更依存関係ルール114がバスケット解析期待値124を満たさない場合も、バスケット解析閾値107の支持度403または確信度404またはリフト値405に上限もしくは下限を設ける、もしくは、ロジカルカップリング分析の実行回数に上限を設けるなどの方法で、ロジカルカップリング分析部101およびバスケット解析閾値導出部123の処理を打ち切り、ロジカルカップリンググラフ生成部103の処理に移っても良い。
上述した第3の実施の形態によれば、次の作用効果が得られる。
(1)ロジカルカップリング分析部101は、プログラム要素の対ごとに同時変更のされやすさを示す指標であるグラフパラメータを算出し、グラフパラメータとバスケット解析閾値107との関係によりロジカルカップリング情報、すなわち変更依存関係ルール114を生成する。ソースコード解析装置10は、ロジカルカップリング情報が所定の条件を満たすようにバスケット解析閾値107を設定するバスケット解析閾値導出部123を備える。そのためユーザはバスケット解析閾値107を自ら設定する必要がなく、ソースコード解析装置10を簡便に使用できる。
ソースコード解析装置10が不図示の入出力インタフェースを備え、必要なときに入出力インタフェースと主記憶装置12や補助記憶装置13が利用可能な媒体を介して、他の装置からプログラムが読み込まれてもよい。ここで媒体とは、たとえば入出力インタフェースに着脱可能な記憶媒体、または通信媒体、すなわち有線、無線、光などのネットワーク、または当該ネットワークを伝搬する搬送波やディジタル信号、を指す。また、プログラムにより実現される機能の一部または全部がハードウエア回路やFPGAにより実現されてもよい。
上述した各実施の形態および変形例は、それぞれ組み合わせてもよい。上記では、種々の実施の形態および変形例を説明したが、本発明はこれらの内容に限定されるものではない。本発明の技術的思想の範囲内で考えられるその他の態様も本発明の範囲内に含まれる。
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. ソースコードを解析して前記ソースコードに含まれるプログラム要素同士の関連性を分析しプログラム関連性指標情報を生成するプログラム関連性分析部と、
    前記ソースコードの変更履歴を用いて、同時変更されやすい前記プログラム要素の組み合わせを示す情報であるロジカルカップリング情報を生成するロジカルカップリング分析部と、
    少なくとも前記ロジカルカップリング情報に基づいて、前記ソースコードの品質に関する評価値を含むプログラム要素情報を前記プログラム要素ごとに生成する評価部と、
    前記ロジカルカップリング情報に含まれる前記プログラム要素のうち、前記プログラム要素情報および前記プログラム関連性指標情報がそれぞれ所定の条件を満たす前記プログラム要素を示すアンチパターン情報を生成するアンチパターン検出部と、
    前記アンチパターン情報を出力する出力部とを備えるソースコード解析装置。
  2. 請求項1に記載のソースコード解析装置において、
    前記出力部は前記プログラム関連性指標情報をさらに出力するソースコード解析装置。
  3. 請求項1に記載のソースコード解析装置において、
    前記アンチパターン情報は、前記同時変更されやすい前記プログラム要素の組み合わせ、および前記プログラム要素情報および前記プログラム関連性指標情報がそれぞれ前記所定の条件を満たす前記プログラム要素を視覚的に表示するための情報であるソースコード解析装置。
  4. 請求項1に記載のソースコード解析装置において、
    前記プログラム要素のそれぞれについて保守性を示す指標を含むソフトウェアメトリクス情報を生成するプログラム解析部をさらに備え、
    前記評価部は、前記ソフトウェアメトリクス情報も考慮して前記プログラム要素が前記所定の条件を満たすか否かを判断するソースコード解析装置。
  5. 請求項1に記載のソースコード解析装置において、
    前記アンチパターン検出部は、前記プログラム要素情報と第1閾値との関係、および前記プログラム関連性指標情報と第2閾値との関係を評価し、
    前記第1閾値および前記第2閾値を入力するインタフェースをさらに備えるソースコード解析装置。
  6. 請求項1に記載のソースコード解析装置において、
    前記ロジカルカップリング分析部が所定の生成条件に応じた前記ロジカルカップリング情報を生成するためのバスケット解析閾値を設定するバスケット解析閾値導出部をさらに備え、
    前記ロジカルカップリング分析部は、前記プログラム要素の組み合わせごとに同時変更のされやすさを示す指標であるルール評価値を算出し、前記ルール評価値と前記バスケット解析閾値との関係により前記ロジカルカップリング情報を生成するソースコード解析装置。
  7. コンピュータにより、ソースコードを解析して前記ソースコードに含まれるプログラム要素同士の関連性を分析しプログラム関連性指標情報を生成することと、
    コンピュータにより、前記ソースコードの変更履歴を用いて、同時変更されやすい前記プログラム要素の組み合わせを示す情報であるロジカルカップリング情報を生成することと、
    コンピュータにより、少なくとも前記ロジカルカップリング情報に基づいて、前記ソースコードの品質に関する評価値を含むプログラム要素情報を前記プログラム要素ごとに生成することと、
    コンピュータにより、前記ロジカルカップリング情報に含まれる前記プログラム要素のうち、前記プログラム要素情報および前記プログラム関連性指標情報がそれぞれ所定の条件を満たす前記プログラム要素を示すアンチパターン情報を生成することと、
    前記アンチパターン情報をコンピュータから出力することとを含むソースコード解析方法。
  8. 請求項7に記載のソースコード解析方法において、
    さらに前記プログラム関連性指標情報をコンピュータから出力することを含むソースコード解析方法。
  9. 請求項7に記載のソースコード解析方法において、
    前記アンチパターン情報は、前記同時変更されやすい前記プログラム要素の組み合わせ、および前記プログラム要素情報および前記プログラム関連性指標情報がそれぞれ前記所定の条件を満たす前記プログラム要素を視覚的に表示するための情報であるソースコード解析方法。
  10. 請求項7に記載のソースコード解析方法において、
    コンピュータにより、前記プログラム要素のそれぞれについて保守性を示す指標を含むソフトウェアメトリクス情報を生成することをさらに含み、
    前記アンチパターン情報の生成において、前記ソフトウェアメトリクス情報も考慮して前記プログラム要素が前記所定の条件を満たすか否かを判断するソースコード解析方法。
  11. 請求項7に記載のソースコード解析方法において、
    前記アンチパターン情報の生成において、前記プログラム要素情報と第1閾値との関係、および前記プログラム関連性指標情報と第2閾値との関係を評価し、
    前記第1閾値および前記第2閾値はインタフェースから入力されることとを含むソースコード解析方法。
  12. 請求項7に記載のソースコード解析方法において、
    所定の生成条件に応じた前記ロジカルカップリング情報を生成するためのバスケット解析閾値を設定することと、
    前記プログラム要素の組み合わせごとに同時変更のされやすさを示す指標であるルール評価値を算出することとをさらに含み、
    前記ロジカルカップリング情報は、前記ルール評価値と前記バスケット解析閾値との関係により生成されるソースコード解析方法。
  13. コンピュータに、
    ソースコードを解析して前記ソースコードに含まれるプログラム要素同士の関連性を分析しプログラム関連性指標情報を生成することと、
    前記ソースコードの変更履歴を用いて、同時変更されやすい前記プログラム要素の組み合わせを示す情報であるロジカルカップリング情報を生成することと、
    少なくとも前記ロジカルカップリング情報に基づいて、前記ソースコードの品質に関する評価値を含むプログラム要素情報を前記プログラム要素ごとに生成することと、
    前記ロジカルカップリング情報に含まれる前記プログラム要素のうち、前記プログラム要素情報および前記プログラム関連性指標情報がそれぞれ所定の条件を満たす前記プログラム要素を示すアンチパターン情報を生成することと、
    前記アンチパターン情報を出力することとを実行させるためのソースコード解析プログラム。
JP2017206106A 2017-10-25 2017-10-25 ソースコード解析装置、ソースコード解析方法、ソースコード解析プログラム Active JP6996936B2 (ja)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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 江苏工程职业技术学院 基于四目标优化的故障更改代码预测方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
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