JP5826099B2 - ソフトウェア評価支援装置及びプログラム - Google Patents

ソフトウェア評価支援装置及びプログラム Download PDF

Info

Publication number
JP5826099B2
JP5826099B2 JP2012085840A JP2012085840A JP5826099B2 JP 5826099 B2 JP5826099 B2 JP 5826099B2 JP 2012085840 A JP2012085840 A JP 2012085840A JP 2012085840 A JP2012085840 A JP 2012085840A JP 5826099 B2 JP5826099 B2 JP 5826099B2
Authority
JP
Japan
Prior art keywords
dependency
pattern
source code
pattern information
name
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
JP2012085840A
Other languages
English (en)
Other versions
JP2013218381A (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.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
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 Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to JP2012085840A priority Critical patent/JP5826099B2/ja
Publication of JP2013218381A publication Critical patent/JP2013218381A/ja
Application granted granted Critical
Publication of JP5826099B2 publication Critical patent/JP5826099B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Description

本発明は、ソフトウェアの品質評価を支援する技術に関する。
ソフトウェアの品質評価に関するツールとして、例えば、DSM(Dependency Structure Matrix)と呼ばれるアーキテクチャ分析手法を採用したLattix(米国Lattix社)が知られている。この“Lattix”では、ソースコードを解析して、当該ソフトウェアの構成要素(モジュール等)間の依存関係を抽出し、抽出した依存関係を直感的に判り易くするため表形式(マトリクス)で定量的に表して可視化する。これにより、当該ソフトウェアにおける構成要素の依存関係の把握が容易となり、結果として、開発効率及び品質の向上が図れる。
ところで、ソフトウェアの品質評価として、いわゆる「アンチパターン」と呼ばれる、デザインパターンとは真逆となるパターン(保守性を悪化させる等、不適切なソフトウェア構造をパターン化したもの)を漏れなく検出することも重要な作業の一つである。
しかしながら、従来のアンチパターン検出作業においては、ソースコードから上記のように抽出した構成要素間の依存関係を人手でたどっていく必要があった。そのため、ソフトウェアの規模が大きい場合には多大な労力を要していた。
上記の問題に関連して、例えば、特許文献1に記載の発明では、ソフトウェアのソースコードに付与された所定のアノテーションを解析して、ソフトウェアを構成する構成要素と構成要素同士の関連を示す関連要素を抽出する。そして、抽出した構成要素又は関連要素と、予め定義しておいた、ソフトウェアの構造として回避されるべき不適切な構造を表す不良パターン情報とを照合することで、不良パターンに該当する構成要素又は関連要素を検出する。
特開2007−265089号公報
特許文献1に記載の発明では、ソースコードから上記の構成要素と関連要素とを抽出するために、予め当該ソースコードに所定のアノテーションを付加しておく必要があり、ソフトウェアの規模が大きくなると、その手間も当然のことながら大きくなってしまうという問題が生じる。
本発明は、上記課題を解決するためになされたものであり、アノテーション等が付加されていないソースコードであっても、アンチパターンを自動検出できるソフトウェア評価支援装置及びプログラムを提供することを目的とする。
上記目的を達成するため、本発明に係るソフトウェア評価支援装置は、
評価対象となるソフトウェア構成要素について、仮称と、種別と、抽出条件と、が対応付けられて設定された第1パターン情報データと、アンチパターンを構成する依存元及び依存先のソフトウェア構成要素について、それぞれの仮称と、両者間の依存関係における条件と、が対応付けられて設定された第2パターン情報データと、を記憶するパターン情報記憶手段と、
評価対象となるソースコードに含まれるソフトウェア構成要素について、名称と、種別と、包含される他のソフトウェア構成要素の数についての情報と、が対応付けられて設定された構成要素データと、前記ソースコードに含まれる依存元及び依存先のソフトウェア構成要素について、それぞれの名称と、両者間の依存関係における依存種別毎の依存頻度と、が対応付けられて設定された依存関係データと、を記憶するメモリと、
前記第1パターン情報データと、前記第2パターン情報データと、前記構成要素データと、前記依存関係データと、に基づいて、前記ソースコードに含まれているアンチパターンを構成する依存元及び依存先のそれぞれのソフトウェア構成要素の名称を抽出するパターン抽出手段と、を備える。
本発明によれば、アノテーション等が付加されていないソースコードであっても、ソースコード中のアンチパターンを自動検出できるため、ソフトウェアの品質評価作業の効率向上が図れる。
本発明の実施形態に係るソフトウェア評価支援装置の構成を示すブロック図である。 本実施形態のソフトウェア評価支援装置が備える制御部の構成を示すブロック図である。 本実施形態において、評価対象となるソースコードの一例を示す図である。 本実施形態の構成要素リストの一例を示す図である。 本実施形態の依存関係リストの一例を示す図である。 本実施形態の第1パターン情報リストの一例を示す図である。 本実施形態の第1パターン情報リストの「抽出条件」について説明するための図である。 本実施形態の第2パターン情報リストの一例を示す図である。 本実施形態の第2パターン情報リストの「依存関係条件」について説明するための図である。 本実施形態のソフトウェア評価支援処理の手順を示すフローチャートである。 本実施形態のパターン抽出処理の手順を示すフローチャート(その1)である。 本実施形態のパターン抽出処理の手順を示すフローチャート(その2)である。 本実施形態のパターン抽出処理の手順を示すフローチャート(その3)である。 本実施形態のパターン一致リストの一例を示す図である。
以下、本発明の実施形態について図面を参照して詳細に説明する。
図1は、本発明の実施形態に係るソフトウェア評価支援装置1の全体構成を示す図である。このソフトウェア評価支援装置1は、所定のプログラミング言語で作成されたソフトウェアにおいて、その品質の評価を支援する装置である。
このソフトウェア評価支援装置1のハードウェア構成は、一般的なパーソナルコンピュータと同等である。即ち、ソフトウェア評価支援装置1は、何れも図示しないが、CPU(Central Processing Unit),ROM(Read Only Memory),RAM(Random Access Memory)等から構成される制御装置、読み書き可能な不揮発性の半導体メモリやハードディスクドライブ等から構成される外部記憶装置、キーボード,マウス,キーパッド,タッチパッドやタッチパネル等から構成される入力装置、CRTや液晶モニタ等から構成される表示装置等を備える。
ソフトウェア評価支援装置1は、機能的には、図1に示すように、入力部10と、表示部11と、ソースコード記憶部12と、パターン情報記憶部13と、制御部14と、を備える。
入力部10は、ユーザからの入力操作を受け付け、受け付けた入力操作に係る信号を制御部14に送出する。
表示部11は、制御部14の制御の下、ユーザ操作用の画面の表示を行う。
ソースコード記憶部12は、評価対象となるソフトウェアに対応したソースコードを記憶する。ソースコードは、所定のプログラミング言語に従って記述されたプログラムコードであり、本実施形態では、C++(シープラスプラス)言語の仕様に従って記述されている。
パターン情報記憶部13は、制御部14によって実行される後述のパターン抽出処理の際に、制御部14によって参照されるパターン情報リストを記憶する。
制御部14は、入力部10、表示部11、ソースコード記憶部12及びパターン情報記憶部13を制御し、それに付随して、これらとの間でデータの授受を行う。制御部14は、機能的には、図2に示すように、依存関係抽出部141と、パターン抽出部142と、を備える。これらの各機能部は、CPU等が、ROM又は外部記憶装置に記憶されている、所定のプログラムを実行することで実現する。このプログラム(ソフトウェア評価支援プログラム)は、ソフトウェア評価支援装置1にて、ユーザに対してソフトウェアの評価を支援するための一連の処理を行うためのアプリケーションソフトウェアである。
依存関係抽出部141は、従来の手法により、ソースコード記憶部12に記憶されているソースコード121から、ソフトウェアの構成要素(以下、単に「構成要素」と称する。)と、構成要素間の依存関係を抽出し、抽出したそれぞれに基づいて、構成要素リスト15及び依存関係リスト16を生成する。ソースコード121の一例を図3に示す。ここで、従来の手法には、例えば、DSMを取り入れたソフトウェアの品質評価ツールである、米国Lattix社の“Lattix”により実現される技術等が該当する。
依存関係抽出部141は、生成した構成要素リスト15及び依存関係リスト16をRAM又は外部記憶装置に保存する。
構成要素リスト15は、ソースコード121に含まれる構成要素についての情報がリストアップされたデータである。より詳細には、構成要素リスト15は、図4に示すように、「要素名」と、「要素種別」と、「包含要素数」と、から構成されるレコードが複数設定されたデータテーブルである。「要素名」には、C++、Java(登録商標)等のプログラミング言語で作成されたソフトウェアを構成する要素であって、当該ソースコード121において記述された名称(例えば、クラス名、変数名、関数名、マクロ名等)が設定される。
「要素種別」には、当該構成要素の種別(例えば、クラス、変数、関数、マクロ等)を示す情報が設定される。「包含要素数」には、当該構成要素に包含される他の構成要素の数が、要素種別毎に設定される。図4の例では、先頭(番号1)のレコードにおいて、クラスである“Class1”には、構成要素として関数のみが含まれ、その数が1であることが示されており、番号2のレコードにおいて、クラスである“Class2”には、変数のみが含まれ、その数が2であることが示されており、番号3のレコードにおいて、クラスである“Class3”には、変数のみが含まれ、その数が1であることが示されている。
依存関係リスト16は、ソースコード121に含まれる構成要素間の依存関係についての情報がリストアップされたデータである。より詳細には、依存関係リスト16は、図5に示すように、「依存元要素名」と、「依存先要素名」と、「依存度数」と、から構成されるレコードが複数設定されたデータテーブルである。ここで、依存関係とは、ある構成要素が他の構成要素を含む場合や他の構成要素を引用するといったように、ある構成要素が他のソフトウェア構成要素に依存する関係をいう。依存関係には、例えば、インクルード、クラス参照、クラス継承、関数の呼出し、関数のオーバーライド、宣言、変数参照、変数書き込み、マクロの使用などがある。
「依存元要素名」には、依存元(即ち、依存する側)の構成要素のソースコード121上の名称が設定される。「依存先要素名」には、依存先(即ち、依存される側)の構成要素のソースコード121上の名称が設定される。「依存度数」には、当該依存元の構成要素と依存先の構成要素との間の依存関係において、依存の種別(依存種別)毎の依存の頻度(回数)が設定される。
図5の例では、先頭(番号1)のレコードにおいて、構成要素“Class1”から構成要素“Class2”への依存関係で、インクルード、クラス参照、クラス継承、関数の呼出し、関数のオーバーライド、宣言、変数書き込み及びマクロの使用のそれぞれの回数が0であり、変数参照の回数が1であることが示されており、同様に、番号2のレコードにおいても、構成要素“Class1”から構成要素“Class3”への依存関係で、インクルード、クラス参照、クラス継承、関数の呼出し、関数のオーバーライド、宣言、変数書き込み及びマクロの使用のそれぞれの回数が0であり、変数参照の回数が1であることが示されている。また、番号3のレコードにおいては、構成要素“Class2”から構成要素“Class3”への依存関係で、インクルード、クラス継承、関数の呼出し、関数のオーバーライド、宣言、変数参照、変数書き込み及びマクロの使用のそれぞれの回数が0であり、クラス参照の回数が1であることが示されている。
続いて、パターン情報記憶部13に記憶されているパターン情報リストについて説明する。パターン情報リストには、図2に示すように、第1パターン情報リスト131と、第2パターン情報リスト132とが含まれる。第1パターン情報リスト131は、予めユーザにより設定された、ユーザが評価対象として抽出を所望する構成要素についての情報がリストアップされたデータである。より詳細には、第1パターン情報リスト131は、図6に示すように、「仮要素名」と、「実要素名」と、「要素種別」と、「抽出条件」と、から構成されるレコードが複数設定されたデータテーブルである。
「仮要素名」には、抽出を所望する構成要素の仮称が設定される。仮称の決め方は任意であり、本実施形態では、A、B、C、…、といったようにアルファベットが順番に割り振られるものとする。「実要素名」は、当初、即ち、ユーザによる当該第1パターン情報リスト131の作成時点では未設定状態であり、後に、パターン抽出部142により、後述するパターン抽出処理にて、ソースコード121上の名称が格納される。
「要素種別」には、ユーザが抽出を所望する構成要素の種別(例えば、クラス、変数、関数、マクロ等)を示す情報が設定される。「抽出条件」には、抽出するための条件を示す情報が設定される。例えば、「抽出条件」には、上記条件が記述されたファイル(リスト)名がテキスト形式で設定される。「抽出条件」に設定される条件の一例を図7に示す。図7(a)は、条件1に対応する内容を示し、図7(b)は、条件2に対応する内容を示している。
例えば、図6の先頭(番号1)のレコードでは、要素種別がクラスであり、包含する変数の数が0である構成要素に対して、仮要素名“A”が付されるということが示されている。また、番号2のレコードでは、要素種別がクラスであり、包含する関数の数が0である構成要素に対して、仮要素名“B”が付されるということが示されている。
第2パターン情報リスト132は、予めユーザにより設定された、検出すべきアンチパターンについての情報がリストアップされたデータである。より詳細には、第2パターン情報リスト132は、図8に示すように、「仮依存元要素名」と、「実依存元要素名」と、「仮依存先要素名」と、「実依存先要素名」と、「依存関係条件」と、「チェック欄」と、から構成されるレコードが複数設定されたデータテーブルである。
「仮依存元要素名」には、アンチパターンを構成する依存元の構成要素の仮称が設定される。ここで、「仮依存元要素名」に設定される仮称と、第1パターン情報リスト131における「仮要素名」に設定される仮称とは、共通化されており、仮称が同一の場合は、同一の構成要素を示すこととなる。
「実依存元要素名」は、ユーザによる当該第2パターン情報リスト132の作成時点では未設定状態であり、後に、パターン抽出部142により、後述するパターン抽出処理にて、対応する依存元の構成要素として、ソースコード121上の名称が格納される。「仮依存先要素名」には、アンチパターンを構成する依存先の構成要素の仮称が設定される。ここで、上記の「仮依存元要素名」の場合と同様、「仮依存先要素名」に設定される仮称と、第1パターン情報リスト131における「仮要素名」に設定される仮称とは、共通化されており、仮称が同一の場合は、同一の構成要素を示すこととなる。
「実依存先要素名」は、ユーザによる当該第2パターン情報リスト132の作成時点では未設定状態であり、後に、パターン抽出部142により、後述するパターン抽出処理にて、依存先の構成要素として、ソースコード121上の名称が格納される。
「依存関係条件」には、当該アンチパターンを構成する依存元の構成要素と依存先の構成要素との間の依存関係における条件を示す情報が設定される。例えば、「依存関係条件」には、上記条件が記述されたファイル(リスト)名がテキスト形式で設定される。「依存関係条件」に設定される条件の内容の一例を図9に示す。図9(a)は、条件3に対応する内容を示し、図9(b)は、条件4に対応する内容を示している。
例えば、図8の先頭(番号1)のレコードでは、仮称“A”の依存元の構成要素と、仮称“B”の依存先の構成要素との間において、依存種別が変数参照であり、その依存度数が1以上であるという条件を満たす場合に、仮称“A”の構成要素が仮称“B”の構成要素に依存するソフトウェア構造が、アンチパターンであることが示されている。
また、番号2のレコードでは、仮称“A”の依存元の構成要素と、仮称“C”の依存先の構成要素との間において、依存種別が変数参照であり、その依存度数が1以上であるという条件を満たす場合に、仮称“A”の構成要素が仮称“C”の構成要素に依存するソフトウェア構造が、アンチパターンであることが示されている。また、番号3のレコードでは、仮称“B”の依存元の構成要素と、仮称“C”の依存先の構成要素との間において、依存種別を問わず、依存度数が1以上である、換言すると、何れかの依存種別において、依存度数が1以上である、という条件を満たす場合に、仮称“B”の構成要素が仮称“C”の構成要素に依存するソフトウェア構造が、アンチパターンであることが示されている。
「チェック欄」は、ユーザによる当該第2パターン情報リスト132の作成時点では、チェック無し(0が設定)状態となっており、後に、パターン抽出部142により、後述するパターン抽出処理にて、必要に応じて、チェックが入れられる(1が設定される。)。
パターン抽出部142は、依存関係抽出部141により生成された構成要素リスト15及び依存関係リスト16と、パターン情報記憶部13に予め記憶されている第1パターン情報リスト131及び第2パターン情報リスト132と、に基づいて、パターン一致リスト17を生成し、出力する。パターン一致リスト17は、第2パターン情報リスト132にリストアップされている、ユーザが予め設定したアンチパターンの中から、当該ソフトウェア(ソースコード121)に実際に含まれているアンチパターンをリストアップした結果を示すデータである。パターン一致リスト17の詳細については後述する。
続いて、上記のように構成されるソフトウェア評価支援装置1において実行されるソフトウェア評価支援処理について説明する。このソフトウェア評価支援処理は、ユーザにより、入力部10を介して、ROM又は外部記憶装置に記憶されている、上述のソフトウェア評価支援プログラムを起動させるための所定操作が行われることで開始される。
図10は、ソフトウェア評価支援処理の手順を示すフローチャートである。先ず、依存関係抽出部141は、ソースコード記憶部12からソースコード121を読み出し(ステップS101)、読み出したソースコード121から、従来の手法により、ソフトウェアの構成要素と、構成要素間の依存関係を抽出し、抽出したそれぞれに基づいて、構成要素リスト15及び依存関係リスト16を生成する(ステップS102)。生成された構成要素リスト15及び依存関係リスト16はRAM等に保存される。
パターン抽出部142は、依存関係抽出部141により生成された構成要素リスト15及び依存関係リスト16と、パターン情報記憶部13に予め記憶されている第1パターン情報リスト131及び第2パターン情報リスト132と、に基づいて、パターン抽出処理を実行する(ステップS103)。
以下、図11〜図13のフローチャートを参照して、パターン抽出処理の詳細を説明する。先ず、パターン抽出部142は、カウンタiに0を設定し、変数Niに第1パターン情報リスト131のレコード数を設定する(図11のステップS201)。そして、パターン抽出部142は、カウンタiをインクリメントした後、カウンタiの値が変数Niの値以下であるか否かを判定する(ステップS202)。その結果、カウンタiの値が変数Niの値を超えている場合(ステップS202;NO)、パターン抽出部142は、図13のステップS223の処理を実行する。
一方、カウンタiの値が変数Niの値以下である場合(ステップS202;YES)、パターン抽出部142は、パターン情報記憶部13に記憶されている第1パターン情報リスト131を読み出し、その先頭からカウンタiの値番目のレコードを選択する(ステップS203)。また、パターン抽出部142は、カウンタjに0を設定し、変数Njに構成要素リスト15のレコード数を設定する(ステップS204)。
そして、パターン抽出部142は、カウンタjをインクリメントした後、カウンタjの値が変数Njの値以下であるか否かを判定する(ステップS205)。その結果、カウンタjの値が変数Njの値を超えている場合(ステップS205;NO)、パターン抽出部142は、ステップS202の処理を再度実行する。
一方、カウンタjの値が変数Njの値以下である場合(ステップS205;YES)、パターン抽出部142は、構成要素リスト15の先頭からカウンタjの値番目のレコードを選択する(ステップS206)。パターン抽出部142は、第1パターン情報リスト131の選択したレコードにおける要素種別と、構成要素リスト15の選択したレコードにおける要素種別とが一致し、且つ、第1パターン情報リスト131の選択したレコードにおける抽出条件が成立しているか否かを判定する(ステップS207)。
その結果、ステップS207の判定がNOの場合、パターン抽出部142は、ステップS205の処理を再度実行する。一方、ステップS207の判定がYESの場合、パターン抽出部142は、構成要素リスト15の選択したレコードにおける要素名を、第1パターン情報リスト131の選択したレコードにおける実要素名に格納する(ステップS208)。
次に、パターン抽出部142は、パターン情報記憶部13から第2パターン情報リスト132を読み出し、読み出した第2パターン情報リスト132において、第1パターン情報リスト131の選択したレコードにおける仮要素名と一致する仮依存元要素名を有するレコードがあるか否かを判定する(ステップS209)。その結果、ステップS209の判定がNOの場合、パターン抽出部142は、図12のステップS211の処理を実行する。
一方、ステップS209の判定がYESの場合、パターン抽出部142は、第2パターン情報リスト132の該当する全てのレコードについて、実依存元要素名に、構成要素リスト15の選択したレコードにおける要素名を格納する(ステップS210)。
図12のステップS211では、パターン抽出部142は、第2パターン情報リスト132において、第1パターン情報リスト131の選択したレコードにおける仮要素名と一致する仮依存先要素名を有するレコードがあるか否かを判定する。その結果、ステップS211の判定がNOの場合、パターン抽出部142は、ステップS213の処理を実行する。
一方、ステップS211の判定がYESの場合、パターン抽出部142は、第2パターン情報リスト132の該当する全てのレコードについて、実依存先要素名に、構成要素リスト15の選択したレコードにおける要素名を格納する(ステップS212)。
続くステップS213では、パターン抽出部142は、カウンタkに0を設定し、変数Nkに依存関係リスト16のレコード数を設定する。そして、パターン抽出部142は、カウンタkをインクリメントした後、カウンタkの値が変数Nkの値以下であるか否かを判定する(ステップS214)。その結果、カウンタkの値が変数Nkの値を超えている場合(ステップS214;NO)、パターン抽出部142は、図11のステップS205の処理を再度実行する。
一方、カウンタkの値が変数Nkの値以下である場合(ステップS214;YES)、パターン抽出部142は、依存関係リスト16の先頭からカウンタkの値番目のレコードを選択する(ステップS215)。パターン抽出部142は、依存関係リスト16において、構成要素リスト15の選択したレコードにおける要素名と一致する依存元要素名又は依存先要素名を有するレコードがあるか否かを判定する(ステップS216)。その結果、ステップS216の判定がNOの場合、パターン抽出部142は、ステップS214の処理を再度実行する。
一方、ステップS216の判定がYESの場合、パターン抽出部142は、カウンタlに0を設定し、変数Nlに第2パターン情報リスト132のレコード数を設定する(ステップS217)。そして、パターン抽出部142は、カウンタlをインクリメントした後、カウンタlの値が変数Nlの値以下であるか否かを判定する(ステップS218)。その結果、カウンタlの値が変数Nlの値を超えている場合(ステップS218;NO)、パターン抽出部142は、ステップS214の処理を再度実行する。
一方、カウンタlの値が変数Nlの値以下である場合(ステップS218;YES)、パターン抽出部142は、第2パターン情報リスト132の先頭からカウンタlの値番目のレコードを選択する(ステップS219)。
続く図13のステップS220では、パターン抽出部142は、第2パターン情報リスト132の選択したレコードにおける実依存元要素名及び実依存先要素名と、依存関係リスト16の選択したレコードにおける依存元要素名及び依存先要素名とがそれぞれ一致し、且つ、第2パターン情報リスト132の選択したレコードにおける依存関係条件が、依存関係リスト16の選択したレコードにおける依存度数の内容に適合しているか否かを判定する。その結果、ステップS220の判定がNOの場合、パターン抽出部142は、図12のステップS218の処理を再度実行する。
一方、ステップS220の判定がYESの場合、パターン抽出部142は、第2パターン情報リスト132の選択したレコードにおけるチェック欄に1を格納する(ステップS221)。パターン抽出部142は、第2パターン情報リスト132の全レコードのチェック欄に1が格納されているか否かを判定する(ステップS222)。全レコードのチェック欄に1が格納されている場合(ステップS222;YES)、パターン抽出部142は、ステップS223の処理を実行する。一方、何れかのレコードのチェック欄に1が格納されていない場合(ステップS222;NO)、パターン抽出部142は、図12のステップS218の処理を再度実行する。
ステップS223では、パターン抽出部142は、第2パターン情報リスト132から、パターン一致リスト17を生成する(ステップS223)。具体的には、パターン抽出部142は、第2パターン情報リスト132から、チェック欄に1が設定されているレコードを全て抽出する。そして、パターン抽出部142は、抽出した各レコードから、「仮依存元要素名」、「仮依存先要素名」及び「チェック欄」の各項目を削除する。これにより、図14に示すようなパターン一致リスト17が生成される。生成されたパターン一致リスト17は、ROM又は外部記憶装置に保存され、ユーザによる入力部10を介した所定操作により、その内容が表示部11にて所定態様で表示される。
なお、第2パターン情報リスト132の何れのレコードにおいてもチェック欄に1が設定されていない場合、パターン抽出部142は、アンチパターンが検出されなかった旨を所定態様でユーザに報知する。この場合、例えば、パターン抽出部142は、“アンチパターンは検出されませんでした”等のメッセージを表示部11に表示させる。
以上説明したように、本発明の本実施形態に係るソフトウェア評価支援装置1によれば、依存関係抽出部141は、ソースコード記憶部12に記憶されているソースコード121から、ソフトウェアの構成要素と、構成要素間の依存関係を抽出し、抽出したそれぞれに基づいて、構成要素リスト15及び依存関係リスト16を生成する。そして、パターン抽出部142は、構成要素リスト15及び依存関係リスト16と、ユーザが評価対象として抽出を所望する構成要素についての情報がリストアップされた第1パターン情報リスト131と、検出すべきアンチパターンについての情報がリストアップされた第2パターン情報リスト132と、に基づいて、ソースコード121に実際に含まれているアンチパターンを検出し、その結果として、パターン一致リスト17を生成する。このように、アノテーション等が付加されていないソースコードであっても、ソースコード121に内在するアンチパターンを自動検出できるため、ソフトウェアの品質評価作業の効率向上が図れる。
なお、本発明は、上記実施形態に限定されず、本発明の要旨を逸脱しない範囲での種々の変更は勿論可能である。
例えば、上記実施形態では、ソフトウェア評価支援装置1の制御部14は、依存関係抽出部141を備え、ソースコード記憶部12に記憶されているソースコード121から、構成要素リスト15及び依存関係リスト16を生成していたが、かかる構成に限定されることはない。本発明には、依存関係抽出部141を備えない構成のソフトウェア評価支援装置も含まれる。その場合のソフトウェア評価支援装置は、他の装置で生成された構成要素リスト15及び依存関係リスト16を用いてパターン一致リスト17を生成する。
また、上記実施形態のソフトウェア評価支援装置1が実行したプログラムを、既存のパーソナルコンピュータ(PC)等に適用することで、当該PCを本発明に係るソフトウェア評価支援装置として機能させることも可能である。
このようなプログラムの配布方法は任意であり、例えば、CD−ROM(Compact Disk Read-Only Memory)、DVD(Digital Versatile Disk)、MO(Magneto Optical Disk)、メモリカードなどのコンピュータ読み取り可能な記録媒体に格納して配布してもよいし、インターネットなどの通信ネットワークを介して配布してもよい。
本発明は、本発明の広義の精神と範囲を逸脱することなく、様々な実施の形態及び変形が可能とされるものである。また、上述した実施の形態は、本発明を説明するためのものであり、本発明の範囲を限定するものではない。つまり、本発明の範囲は、実施の形態ではなく、特許請求の範囲によって示される。そして、特許請求の範囲内及びそれと同等の発明の意義の範囲内で施される様々な変形が、本発明の範囲内とみなされる。
1 ソフトウェア評価支援装置
10 入力部
11 表示部
12 ソースコード記憶部
13 パターン情報記憶部
14 制御部
15 構成要素リスト
16 依存関係リスト
17 パターン一致リスト
121 ソースコード
131 第1パターン情報リスト
132 第2パターン情報リスト
141 依存関係抽出部
142 パターン抽出部

Claims (3)

  1. 評価対象となるソフトウェア構成要素について、仮称と、種別と、抽出条件と、が対応付けられて設定された第1パターン情報データと、アンチパターンを構成する依存元及び依存先のソフトウェア構成要素について、それぞれの仮称と、両者間の依存関係における条件と、が対応付けられて設定された第2パターン情報データと、を記憶するパターン情報記憶手段と、
    評価対象となるソースコードに含まれるソフトウェア構成要素について、名称と、種別と、包含される他のソフトウェア構成要素の数についての情報と、が対応付けられて設定された構成要素データと、前記ソースコードに含まれる依存元及び依存先のソフトウェア構成要素について、それぞれの名称と、両者間の依存関係における依存種別毎の依存頻度と、が対応付けられて設定された依存関係データと、を記憶するメモリと、
    前記第1パターン情報データと、前記第2パターン情報データと、前記構成要素データと、前記依存関係データと、に基づいて、前記ソースコードに含まれているアンチパターンを構成する依存元及び依存先のそれぞれのソフトウェア構成要素の名称を抽出するパターン抽出手段と、を備える、ソフトウェア評価支援装置。
  2. 評価対象となるソフトウェアに対応したソースコードを記憶するソースコード記憶部と、
    前記ソースコードから、前記構成要素データと、前記依存関係データと、を生成し、前記メモリに保存する依存関係抽出手段と、をさらに備える、請求項1に記載のソフトウェア評価支援装置。
  3. コンピュータを、
    パターン情報記憶手段にそれぞれ記憶されている、評価対象となるソフトウェア構成要素について、仮称と、種別と、抽出条件と、が対応付けられて設定された第1パターン情報データ及びアンチパターンを構成する依存元及び依存先のソフトウェア構成要素について、それぞれの仮称と、両者間の依存関係における条件と、が対応付けられて設定された第2パターン情報データと、所定のメモリにそれぞれ記憶されている、評価対象となるソースコードに含まれるソフトウェア構成要素について、名称と、種別と、包含される他のソフトウェア構成要素の数についての情報と、が対応付けられて設定された構成要素データ及び前記ソースコードに含まれる依存元及び依存先のソフトウェア構成要素について、それぞれの名称と、両者間の依存関係における依存種別毎の依存頻度と、が対応付けられて設定された依存関係データと、に基づいて、前記ソースコードに含まれているアンチパターンを構成する依存元及び依存先のそれぞれのソフトウェア構成要素の名称を抽出するパターン抽出手段として機能させる、プログラム。
JP2012085840A 2012-04-04 2012-04-04 ソフトウェア評価支援装置及びプログラム Active JP5826099B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2012085840A JP5826099B2 (ja) 2012-04-04 2012-04-04 ソフトウェア評価支援装置及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012085840A JP5826099B2 (ja) 2012-04-04 2012-04-04 ソフトウェア評価支援装置及びプログラム

Publications (2)

Publication Number Publication Date
JP2013218381A JP2013218381A (ja) 2013-10-24
JP5826099B2 true JP5826099B2 (ja) 2015-12-02

Family

ID=49590438

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012085840A Active JP5826099B2 (ja) 2012-04-04 2012-04-04 ソフトウェア評価支援装置及びプログラム

Country Status (1)

Country Link
JP (1) JP5826099B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6869055B2 (ja) * 2017-03-03 2021-05-12 三菱電機株式会社 評価支援装置、および評価支援プログラム
JP6996936B2 (ja) * 2017-10-25 2022-01-17 株式会社日立製作所 ソースコード解析装置、ソースコード解析方法、ソースコード解析プログラム
JP6971835B2 (ja) * 2017-12-26 2021-11-24 三菱電機株式会社 要素類似判定装置、要素類似判定方法及び要素類似判定プログラム

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007265089A (ja) * 2006-03-29 2007-10-11 Fujitsu Ltd ソフトウェア保守支援プログラム,処理方法および装置
US20100042974A1 (en) * 2008-08-12 2010-02-18 International Business Machines Corporation Build optimization with applied static analysis

Also Published As

Publication number Publication date
JP2013218381A (ja) 2013-10-24

Similar Documents

Publication Publication Date Title
Jamei et al. The simcyp population based simulator: architecture, implementation, and quality assurance
Sochat et al. Enhancing reproducibility in scientific computing: Metrics and registry for Singularity containers
Jeanquartier et al. Integrated web visualizations for protein-protein interaction databases
JP2019036331A (ja) ダイアログカスタマイズのためのシステムおよび方法
JP6542612B2 (ja) テストシナリオ生成支援装置およびテストシナリオ生成支援方法
Howick Using system dynamics to analyse disruption and delay in complex projects for litigation: can the modelling purposes be met?
CN111290785B (zh) 评估深度学习框架系统兼容性的方法、装置、电子设备以及存储介质
Hernandez-Ferrer et al. Comprehensive study of the exposome and omic data using rexposome Bioconductor Packages
EP2951748A1 (en) Systems and methods for determining compatibility between software licenses
Dobler et al. Non-strange weird resampling for complex survival data
Beneš et al. AEON. py: Python library for attractor analysis in asynchronous Boolean networks
CN114610286A (zh) 开发文档的生成方法、装置、计算机设备及存储介质
JP5826099B2 (ja) ソフトウェア評価支援装置及びプログラム
Kouzari et al. Enterprise information management systems development two cases of mining for process conformance
Yasnoff et al. Decision support and expert systems in public health
US8819620B1 (en) Case management software development
JP2019219848A (ja) ソースコード解析方法およびソースコード解析装置
Sass et al. RAMONA: a Web application for gene set analysis on multilevel omics data
Mazandu et al. IHP-PING—generating integrated human protein–protein interaction networks on-the-fly
Dorff et al. BDVal: reproducible large-scale predictive model development and validation in high-throughput datasets
US20150170067A1 (en) Determining analysis recommendations based on data analysis context
JP2019125042A (ja) テスト実行順序生成装置、テスト実行順序生成方法及び記憶媒体
JP6422346B2 (ja) プログラム生成装置、及び、プログラム生成方法
Kouzari et al. Process mining for process conformance checking in an oss project: An empirical research
JP6320269B2 (ja) ソフトウェア試験支援装置およびソフトウェア試験支援プログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140924

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150619

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150623

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150821

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: 20150915

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20151013

R150 Certificate of patent or registration of utility model

Ref document number: 5826099

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250