JP2011170697A - ソフトウェア構造分析装置 - Google Patents

ソフトウェア構造分析装置 Download PDF

Info

Publication number
JP2011170697A
JP2011170697A JP2010035057A JP2010035057A JP2011170697A JP 2011170697 A JP2011170697 A JP 2011170697A JP 2010035057 A JP2010035057 A JP 2010035057A JP 2010035057 A JP2010035057 A JP 2010035057A JP 2011170697 A JP2011170697 A JP 2011170697A
Authority
JP
Japan
Prior art keywords
dependency
information
component
software
relationship
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.)
Withdrawn
Application number
JP2010035057A
Other languages
English (en)
Inventor
Kengo Miyoshi
健吾 三好
Masamichi Nakagawa
雅通 中川
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.)
Panasonic Corp
Original Assignee
Panasonic 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 Panasonic Corp filed Critical Panasonic Corp
Priority to JP2010035057A priority Critical patent/JP2011170697A/ja
Publication of JP2011170697A publication Critical patent/JP2011170697A/ja
Withdrawn legal-status Critical Current

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

【課題】構造が複雑化したソースコードには本来あるべきソフトウェア構造が含まれないため、ソースコードから問題のある依存関係を明示的に全てリストアップするのは困難である。
【解決手段】ソフトウェア構造分析装置は、ソフトウェア構成要素の構成要素情報を取得する構成要素情報取得部101と、ソフトウェア構成要素の間の依存関係情報を取得する依存関係情報取得部102と、ソフトウェアの論理的構成要素の位置関係を保持する配置情報を取得する配置情報取得部103と、論理的構成要素とソフトウェア構成要素の対応関係である対応関係情報を取得する対応関係情報取得部104と、構成要素情報と依存関係情報と配置情報と対応関係情報から問題のある依存関係を特定する依存関係検査部105と、依存関係検査部105が特定した、問題のある依存関係の検査結果を出力する結果出力部106とを備える。
【選択図】図1

Description

本発明は、ソフトウェア開発において、ソフトウェア構造の分析を支援するソフトウェア構造分析装置に関するものである。
現在の組込みソフトウェア開発では、過去の成果物に対して追加・変更を行う差分開発が主流となっている。差分開発では、ソースコードの大部分が過去の成果物となるので、新規開発量を抑えることができ、開発の効率化が期待できる。しかし差分開発が繰り返された場合、ファイルや関数、変数などのソフトウェアの構成要素とそれらの関係であるソフトウェア構造の複雑化が引き起こされる。ソフトウェア構造の複雑化は、「ソフトウェアの全体構造が把握できない」「追加・変更によって多くの箇所が影響を受ける」「変更によってどの部分が影響を受けるのか特定できない」などの問題を引き起こし、開発の効率化を妨げる原因となる。複雑化したソフトウェア構造の現状を明らかにして、ソフトウェア構造の問題箇所を特定することができれば、その箇所を改善することで、機能の追加・変更が容易なソフトウェア構造にリファクタリングすることができる。
ソフトウェア構造の例としては、例えば図2の模式図に示すファイル間の依存関係がある。図2に含まれる図のうち、図201などの矩形はファイルを意味し、矢印202などの矢印はファイル間の依存関係を意味する。依存関係の例としては、例えば関数の呼び出し関係、関数による変数からの値の読み取り関係、関数による変数への値の書き込み関係、ファイルのインクルード関係などがある。
ソフトウェア構造の問題箇所を特定するための従来技術としては、例えば特許文献1に示される情報提供装置があった。
特許文献1に記載の技術は、プログラムに含まれる参照元の関数、参照先の関数のそれぞれが属するモジュールの関係が、記憶されているモデル情報に適合するか否かを検査し、適合しない場合は関連する関数を特定することにより、ユーザが作成したプログラムがソフトウェアのアーキテクチャに合っているか否かを判断し、どの関数を修正すればよいかを特定する情報を提供するものである。
特開2008-102831号公報
T.J.PARR and R.W.QUONG, "ANTLR: A Predicated-LL(k) Parser Generator", Software-Practice & Experience, vol. 25, Issue 7, pp.789-810, 1995.
差分開発が繰り返された結果、ファイルや関数、変数などのソフトウェアの構成要素とそれらの関係であるソフトウェア構造の複雑化が引き起こされる。その複雑化したソフトウェア構造を明らかにして問題箇所を特定するためには、現状の複雑化したソフトウェア構造と、当初の設計者が意図したソフトウェア構造との違いを明らかにする必要がある。しかしながら現状の複雑化したソフトウェア構造を示す文書、図面などが実際の開発では作成されていないのが普通であり、差分開発で修正されたソースコードにしか残っていない。したがって現状の複雑化したソフトウェア構造は、ソースコードから読み取る必要がある。
特許文献1に記載の従来技術では、設計者が意図したソフトウェア構造であるソフトウェアのアーキテクチャにおいて許可されない依存関係を特定するために、許可される依存関係のリストを予め作成する必要がある。しかしながら、実際のソフト開発においてソフトウェアのアーキテクチャは、依存関係一つ一つのリストを作成できるほど明文化されていない。そのため、許可される依存関係全てをリストアップすることは困難である。
通常、当初の設計者が意図したソフトウェア構造は詳細に明文化されていないことが多い。例えば全体の構造の概略をブロックの配置よって表現したソフトウェア構造図などあるだけで、現状のソースコードと直接対応づけられるような詳細な構造を記述したものがないことが通常の開発においては多い。すなわち、構造が複雑化したソースコードには、本来あるべきソフトウェア構造の情報が含まれないため、ソースコードから問題のある依存関係を明示的に全てリストアップするのは困難である。
したがって、現状の複雑化したソフトウェア構造の問題箇所を特定するためには、ソフトウェア構造図などの概略で書かれた情報を用いて、設計者が意図したソフトウェア構造と、現状の複雑化したソースコードの違いを明らかにする必要がある。
本願に開示の発明は、前記従来技術の課題を解決するため、ソフトウェアのアーキテクチャが表現されている構成要素の配置の情報を用いて、ソースコードが持つ依存関係のうち、配置の情報が表す依存関係と違いのある依存関係を問題のある依存関係として特定するソフトウェア構造分析装置を提供する。
上記従来の課題を解決するため、本願に開示するソフトウェア構造分析装置は、ソフトウェア構成要素の情報である構成要素情報を取得する構成要素情報取得部と、前記ソフトウェア構成要素の間の依存関係である依存関係情報を取得する依存関係情報取得部と、前記ソフトウェア構成要素を1つまたは複数まとめた論理的構成要素の位置関係を示す配置情報を取得する配置情報取得部と、前記配置情報に含まれる前記論理的構成要素と前記ソフトウェア構成要素の対応関係である対応関係情報を取得する対応関係情報取得部と、前記構成要素情報と前記依存関係情報と前記配置情報と前記対応関係情報から問題のある依存関係を特定する依存関係検査部と、前記依存関係検査部が特定した、問題のある依存関係の検査結果を出力する結果出力部とを備えることを特徴とする。
以上の特徴により、本発明は、全体の構造の概略を記述したソフトウェア構造図の配置情報を用いることにより、構造が複雑化したソースコードから、当初の設計者の意図と反したソフトウェア構造の問題のある依存関係を特定することができる。
本発明であるソフトウェア構造分析装置の構造を表す概略図である。 ファイル間の依存関係を表した、ソフトウェアの構造の模式図である。 本発明であるソフトウェア構造分析装置による、問題のある依存関係を特定する処理の流れを示す図である。 構成要素情報取得部が取得する、構成要素情報の一例を示す図である。 図4に示す構成要素情報で与えられる構成要素の包含関係を表した模式図である。 依存関係情報取得部が取得する、依存関係情報の一例を示す図である。 ソフトウェアの構造を表すソフトウェア構造図の一例を示す図である。 配置情報取得部が取得する、配置情報の一例を示す図である。 対応関係取得部が取得または作成する、対応関係情報の一例を示す図である。 対応関係情報を作成するための装置利用者の操作例を表す模式図である。 対応関係情報取得部が、構成要素とその構成要素が包含する構成要素が異なるブロックに対応付けられていないかを検査する処理の流れを示す図である。 対応関係情報取得部が、全てのブロックについて対応関係情報を指定し終えたかをチェックする処理の流れを示す図である。 本発明で提案する装置が、依存関係情報と配置情報を対応付け、ブロック間依存関係情報を作成する処理の流れを示す図である。 取得した構成要素のIDから対応するブロックを特定する処理の流れを示す図である。 図13乃至図14の処理によって作成される、ブロック間依存関係情報の一例を示す図である。 依存関係検査部が、依存関係方向情報を判断する処理の流れを示す図である。 依存関係検査部が、各ブロック間依存関係情報レコードの上下方向の情報を判定する処理の流れを示す図である。 依存関係検査部が、各ブロック間依存関係情報レコードの左右方向の情報を判定する処理の流れを示す図である。 依存関係検査部が作成する、依存関係の方向の情報を追加した、ブロック間依存関係情報の一例を示す図である。 依存関係検査部が、依存関係方向情報と逆向きの依存関係を、問題のある依存関係として特定する処理の流れを示す図である。 依存関係方向情報に対して逆向きの依存関係の一例を説明するための説明図である。 図19に示すブロック間依存関係情報に、依存関係方向に対して逆向きの依存関係かどうかの検査結果を追加した、検査結果付きブロック間依存関係情報の一例を示す図である。 図22に示す検査結果を基に結果出力部が出力する、問題のある依存関係の検査結果の一例を示す図である。 全てのブロックの大きさが等しい構造図における、範囲許容値S0と、依存元のブロックの中心と依存先のブロックの中心の、依存関係方向情報とは逆の方向の距離Sの関係を示す模式図である。 依存関係検査部が、依存関係方向情報と逆向きの依存関係のうち、依存関係方向情報と同じ方向の距離Sが範囲許容値S0以上である依存関係を、問題のある依存関係として特定する処理の流れを示す図である。 距離許容値L0の初期値を配置情報の入力となる構造図の横幅の2/3とした場合の、L0と依存元のブロックと依存先のブロックの中心間の距離Lの関係を示す模式図である。 依存関係検査部による、離れた論理的構成要素間の依存関係を特定する処理の流れを示す図である。 離れた論理的構成要素間の依存関係の一例を説明するための説明図である。 図19に示すブロック間依存関係情報に、離れた論理的構成要素間の依存関係かどうかの検査結果を追加した、検査結果付きブロック間依存関係情報の一例を示す図である。 図29に示す検査結果を基に結果出力部が出力する、問題のある依存関係の検査結果の一例を示す図である。 依存関係検査部による、依存関係方向情報に対して逆向きの依存関係と離れた論理的構成要素間の依存関係を特定する処理の流れを示す図である。 図19に示すブロック間依存関係情報に、依存関係方向情報に対して逆向きの依存関係または離れた論理的構成要素間の依存関係かどうかの検査結果を追加した、検査結果付きブロック間依存関係情報の一例を示す図である。 図32に示す検査結果を基に結果出力部が出力する、問題のある依存関係の検査結果の一例を示す図である。 結果出力部が出力した問題のある依存関係の検査結果に対して、装置利用者が配置情報を変更する操作を表した模式図である。 変更された配置情報の一例を示す図である。 変更された配置情報から検査対象のブロック間依存関係を特定する処理の流れを示す図である。 変更された配置情報に対して問題のある依存関係を検査した結果の一例を示す図である。 結果出力部が出力する、配置情報の変更後の問題のある依存関係の検査結果の一例を示す図である。
以下本発明の実施の形態について、図面を参照しながら説明する。
(実施の形態1)
[ソフトウェア構造分析装置の構成例]
まず、本発明の第一の実施の形態におけるソフトウェア構造分析装置の構成を説明する。図1は、本発明の第一の実施の形態におけるソフトウェア構造分析装置の構成例を示すブロック図である。図1に示すように、本発明であるソフトウェア構造分析装置は、ソフトウェアの構成要素情報を取得する構成要素情報取得部101と、ソフトウェア構成要素の間の依存関係情報を取得する依存関係情報取得部102と、ソフトウェア構成要素を1つまたは複数まとめた論理的構成要素の位置関係を示す配置情報を取得する配置情報取得部103と、前記配置情報が保持する論理的構成要素と前記構成要素情報が保持するソフトウェア構成要素を対応付けた情報である対応関係情報を取得する対応関係情報取得部104と、前記構成要素情報と前記依存関係情報と前記配置情報と前記対応関係情報から問題のある依存関係を特定する依存関係検査部105と、前記依存関係検査部105から取得した問題のある依存関係の検査結果を出力する結果出力部106から構成される。
構成要素情報取得部101は、ソフトウェア構成要素の情報である構成要素情報を取得して、ソフトウェア構造分析装置のメモリに記録する等して、使用可能な状態にする。ソフトウェア構成要素は、分析対象となるソフトウェアに含まれるコンピュータへの命令や扱うデータを定義する情報(プログラムに関する情報)を、開発上意味のある要素に分類したものである。構成要素情報は、ソフトウェア構成要素が互いに識別可能な形式で記録されたデータとすることができる。ソフトウェア構成要素の分類方法や、構成要素情報のデータ形式は、特に限定されない。ソフトウェア構成要素の決め方として、例えば、ソフトウェア構成要素群が階層構造を有するように各ソフトウェア構成要素を決めることができる。すなわち、少なくとも1つのソフトウェア構成要素が、他の1つまたは複数のソフトウェア構成要素を包含していてもよい。具体的には、分析対象となるソフトウェアのソースコードのファイル、またはソフトウェアの実行ファイルを生成する過程に生成される中間ファイルのそれぞれを、ソフトウェアの構成要素とすることができる。さらに、ファイルを格納するディレクトリ、ファイルに含まれるデータで定義される、関数、変数、マクロ、クラス、型あるいはそれらの名前などをソフトウェア構成要素とすることができる。構成要素情報は、例えば、分析対象のソフトウェアのソースコードや中間ファイルから、既存の構文解析技術を用いて、生成することができる。構成要素情報取得部101は、例えば、生成された構成要素情報を、記録媒体から読み込みこんでもよいし、ソースファイルや中間ファイルから構成要素情報を生成してもよい。
依存関係情報取得部102は、構成要素情報取得部101が取得した構成要素情報で示されるソフトフェア構成要素間の依存関係を示す依存関係情報を取得し、ソフトウェア構造分析装置で使用可能な状態にする。例えば、2つのソフトウェア構成要素のうち、一方のソフトウェア構成要素により実現される処理またはデータの変化によって、他方のソフトウェア構成要素による処理またはデータが影響を受ける場合に、それら2つのソフトウェア構成要素は依存関係を有するものとすることができる。依存関係の例としては、例えば、関数の呼び出し関係、関数(またはメソッド)による変数(またはメンバ)からの値の読み取り関係、関数による変数への値の書き込み関係、ファイルのインクルード関係等が挙げられる。依存関係は、例えば、依存先および依存元を特定するデータで表される。依存関係を示すデータは、例えば、ソフトウェアのソースコード、またはソフトウェアの実行ファイル等を作成する過程で作成される中間ファイルから生成することができる。
配置情報取得部103は、論理的構成要素の位置関係を示す配置情報を取得し、ソフトウェア構造分析装置で使用可能な状態にする。論理的構成要素は、構成要素情報で示されるソフトウェア構成要素を、1つまたは複数まとめたものである。例えば、ソフトウェアの制御によりコンピュータが実現する機能を分類したブロック(例えば、モジュール)を論理的構成要素とすることができる。配置情報は、論理的構成要素間の関係を、幾何学的な位置関係により表したデータとすることができる。配置情報は、例えば、ソフトウェア開発者が設計したソフトウェア構造を示すデータから得ることができる。
具体的には、配置情報取得部103は、論理的構成要素を表すブロックを配置したソフトウェア構造図を配置情報として取得してもよい。あるいは、配置情報取得部103は、論理的構成要素の位置関係を表す表、または表を作成可能な形式の情報を配置情報として取得してもよい。これらの例のように、ソフトウェアのアーキテクチャを表現するデータを、論理的構成要素の配置の情報とすることができる。
対応関係情報取得部104は、配置情報が示す論理的構成要素と、構成要素情報が示すソフトウェア構成要素とを対応付けるデータである対応関係情報を取得する。上述のとおり、論理的構成要素には、1つまたは複数のソフトウェア構成要素が含まれる。論理的構成要素にどのソフトウェア構成要素が含まれるかは、例えば、装置利用者の入力に基づいて決定することもできるし、さらに、ソフトウェアの構成要素情報や、依存関係情報等に基づいて自動的に算出することもできる。例えば、構成要素情報にソフトウェア構成要素のディレクトリ構成またはファイル構成が含まれる場合、ディレクトリ構成またはファイル構成と、配置情報を用いて、ソフトウェア構成要素と論理的構成要素の対応関係を決定することができる。
また、少なくとも1つソフトウェア構成要素が、下位の他のソフトウェア構成要素を包含するような包含関係を有する場合、構成要素情報は、包含関係を示す情報を含んでもよい。この場合、対応関係情報取得部104は、装置利用者の入力または予め記録された対応関係を示すデータにより、あるソフトウェア構成要素と論理的構成要素との対応関係が決定すると、このソフトウェア構成要素に包含される他のソフトウェア構成要素も自動的に当該論理的構成要素に対応付けてもよい。これにより、構成要素情報の包含関係に基づいて、論理的構成要素に対応するソフトウェア構成要素を自動的に検索し、決定することができる。あるいは、対応関係情報取得部104は、ある1つの論理的構成要素に対応するソフトウェア構成要素に包含される他のソフトウェア構成要素が、当該論理的構成要素とは別の論理的構成要素に対応付けられていないか判定することもできる。これにより、ソフトウェア構成要素と、それに包含されるソフトウェア構成要素は、同じ論理的構成要素に対応するように調整することができる。
依存関係検査部105は、上記の構成要素情報、依存関係情報、配置情報および対応関係情報を用いて問題のある依存関係を特定する。例えば、前記依存関係検査部105は、前記依存関係情報で示されるソフトウェア構成要素の間の依存関係と、対応関係情報で示される論理的構成要素とソフトウェア構成要素の対応関係から、論理的構成要素間の依存関係を算出してもよい。算出された当該論理的構成要素間の依存関係と、配置情報で示される論理的構成要素の位置関係とに基づいて問題のある依存関係を特定することができる。
例えば、依存関係検査部105は、ソースコードを基にして得られる構成要素間の依存関係を、対応関係情報を用いて、論理的構成要素間の依存関係に対応付けることができる。論理的構成要素間の依存関係のうち、配置情報で示される論理的構成要素の位置関係と異なる依存関係を、問題ある依存関係として特定することができる。これにより、ソースコードが持つ依存関係のうち、配置情報が表す依存関係と違いのある依存関係を問題のある依存関係として特定することができる。
本実施形態では、一例として、各論理的構成要素の位置を、座標データを用いて表される場合について説明する。依存関係検査部105は、各論理的構成要素の座標データを基に、論理的構成要素間の依存関係の方向を算出し、算出した方向に基づいて依存関係の問題の有無を判定する。なお、各論理的構成要素間の依存関係は、ソフトウェア構成要素間の依存関係および、ソフトウェア構成要素と論理的構成要素との対応関係に基づいて決定することができる。なお、本実施形態では、依存関係の方向に基づいて問題の有無を判定しているが、判定方法はこれに限られない。例えば、依存関係を有する論理的構成要素間の距離、または、距離と方向に基づいて問題の有無を判定することができる。
結果出力部106は、依存関係検査部105が特定した問題のある依存関係の検査結果を出力する。例えば、ソフトウェア構造分析装置に接続された表示装置に、論理的構成要素の位置関係および依存関係を示した図を表示し、さらに、問題のある依存関係を視認可能な状態で表示することができる。
ソフトウェア構造分析装置は、CPUおよびメモリを含むコンピュータにより実現することができる。構成要素情報取得部101、依存関係情報取得部102、配置情報取得部103、対応関係情報取得部104、依存関係検査部105および結果出力部106の各部の機能は、コンピュータのCPUが所定のプログラムに従って動作することにより実現することができる。また、これら各部の機能をコンピュータで実現するためのプログラムまたはそれを記録した記録媒体も本発明の一実施態様である。
[ソフトウェア構造分析装置の動作例]
以下に図3の処理のステップに従って、図1の各構成要素の処理を説明する。
[構成要素情報取得(ステップ301)]
まず、構成要素情報取得部101は、図4に示すようなソフトウェア構成要素の情報である構成要素情報を取得する(ステップ301)。ソフトウェア構成要素は、ソフトウェアのソースコード、ソースファイル、ソースディレクトリ、またはソフトウェアの実行ファイルを作成する過程で作成される中間ファイルから得ることができ、例えばディレクトリ、ファイル、関数、変数、マクロ、クラス、型、およびそれらの名前などである。ソフトウェア構成要素情報は、非特許文献1に記載する構文解析技術等を使って、自動的に取得することができる。
構成要素情報は、各ソフトウェア構成要素一つ一つの情報である構成要素情報レコード401によって構成される。各構成要素情報レコードは、構成要素情報取得部が各ソフトウェア構成要素に割り当てたID情報402、ソフトウェア構成要素の名前情報403、ソフトウェア構成要素の種類の情報404、そのソフトウェア構成要素の親となるソフトウェア構成要素の情報405を持つ。情報405が、ソフトウェア構成要素間の包含関係を示すデータの一例である。
本実施形態において、ソフトウェア構成要素の親とは、構成要素情報レコードに対応するソフトウェア構成要素を包含するソフトウェア構成要素を意味する。例えば、構成要素情報レコードに対応するソフトウェア構成要素がクラスに含まれない関数や外部変数の場合は、その親はファイルとなる。また、構成要素情報レコードに対応するソフトウェア構成要素がクラスのメンバ変数やメンバ関数ならば、その親はそれらのメンバを持つクラスが該当する。また、構成要素情報レコードに対応するソフトウェア構成要素がファイルまたはディレクトリで、それらを包含するディレクトリが構成要素情報に含まれる場合、そのディレクトリが親となる。構成要素情報レコードに対応するファイルまたはディレクトリを包含するディレクトリが、構成要素情報に含まれない場合は、構成要素情報レコードに対応するファイルまたはディレクトリの親は存在しないものと判断する。親となるソフトウェア構成要素が存在しない場合は、それを意味する情報として「−」を与える。
図4の405に記述されるソフトウェア構成要素の包含関係は、図5に示すような、ツリー構造で表すこともできる。図5に示す図のうち、501と同じ形を持つ図はディレクトリを、502と同じ形を持つ図はファイルを、503と同じ形を持つ図は関数、変数、マクロ、型などの、ソースファイルに定義される関数または変数を意味する。線504はソフトウェア構成要素間の包含関係を意味しており、線の左端に接続するソフトウェア構成要素が、線の右端に接続するソフトウェア構成要素を包含することを意味する。
前記構成要素情報および前記包含関係は、静的解析ツール等の既存のツールを使って、ソフトウェアのソースコード、ソースファイル、ソースディレクトリ、またはソフトウェアの実行ファイルを作成する過程で作成される中間ファイルから、自動的に取得することができる。
[依存関係情報取得(ステップ302)]
次に、依存関係情報取得部102が、図6に示すようなソフトウェア構成要素間の依存関係である依存関係情報を入力として取得する(ステップ302)。依存関係情報は、各依存関係ひとつひとつの情報である依存関係情報レコード601によって構成される。各依存関係情報レコードは、各依存関係に割り当てられたID情報602、依存元のソフトウェア構成要素のID情報603、依存先のソフトウェア構成要素のID情報604、依存関係の種類の情報605を持つ。
依存関係情報は、非特許文献1に記載する技術を使って、例えば、ソフトウェアのソースコード、ソースファイル、ソースディレクトリ、またはソフトウェアの実行ファイルを作成する過程で作成される中間ファイルから得られる。
[配置情報取得(ステップ303)]
次に、配置情報取得部103は、論理的構成要素を保持する配置情報を取得する(ステップ303)。配置情報は、例えば、ソフトウェアの構造を表すソフトウェア構造図として、論理的構成要素は、例えば、ソフトウェア構造図上のブロック形の図として与えられる。
配置情報の例としては、例えば図7に示すソフトウェア構造図がある。図7は、アプリケーションAPPL、ミドルウェアMW、二つのドライバDRV1、DRV2、ライブラリLIBの五つのブロックから構成されるソフトウェアの構造を表した図である。図7のソフトウェア構造図の各ブロックは論理的構成要素を表し、ブロック701がアプリケーションAPPLを、ブロック702がミドルウェアMWを、ブロック703がドライバDRV1を、ブロック704がドライバDRV2を、ブロック705がライブラリLIB表す。
配置情報は、その配置情報から得られるソフトウェア構造図の大きさ、ソフトウェア構造図において論理的構成要素を表す各ブロック大きさ、図面における論理的構成要素を表す図の位置関係で構成される。論理的構成要素の位置関係としては、例えば、各論理的構成要素を表す図の中心座標がある。また、論理的構成要素は、ソフトウェア構成要素の一つ、または複数をまとめたものである。
配置情報取得部103が取得する配置情報は、例えば図8(A)(B)に示す情報を持つ。図8(A)は配置情報の大きさを示し、図8(B)は、各論理的構成要素を表すブロックの大きさと、配置情報内の中心座標である。図8(A)に示す配置情報の大きさの情報は、図の高さの値801と横幅の値802からなる。図8(B)に示すブロック配置情報は、各ブロックのブロック配置情報である配置情報レコード803によって構成される。各配置情報レコード803は、各ブロックに割り当てられたID情報804、各ブロックの名前情報805、各ブロックの大きさの情報806、各ブロックの中心の座標情報807を持つ。各ブロックの大きさの情報806は、ブロックの高さの値808と横幅の値809を持つ。ブロックの中心の座標情報807は、中心のx座標の値810とy座標の値811を持つ。
なお、配置情報は、図7に示すようなソフトウェア構造図の電子データや、XMIなどのソフトウェア構造図を作成可能なテキストから自動的に取得される。また、装置利用者は、紙面上などに表示されたソフトウェア構造図を基に、GUI上でソフトウェア構造図にブロックを追加する配置情報を入力することもできる。
また、装置利用者は、配置情報取得部103を通して、配置情報の中に含まれていない新たな論理的構成要素を、配置情報に追加することができる。
[対応関係情報取得(ステップ304)]
次に、対応関係情報取得部104は、前記論理的構成要素と前記ソフトウェア構成要素との対応関係を表す対応関係情報を取得する(ステップ304)。対応関係情報は、例えば図9に示す構造で与えられる。図9は、図4、図8に示す事例における対応関係情報の例である。対応関係情報は、各ブロックに関する対応関係の情報である対応関係情報レコード901によって構成される。対応関係情報レコード901は、ブロックのID(804)の番号902と、そのブロックに対応する構成要素のID(402)のリスト903と、ブロックに対応する構成要素に包含される構成要素のID(402)のリスト904から構成される。
また、対応関係情報取得部104は、構成要素情報取得部102が取得した構成要素情報と、配置情報取得部103が取得した配置情報に対して、例えば図10に示すように、マウス等のポインティングデバイスを使って、対応関係情報取得部が提示する構成要素の包含関係のツリー構造から構成要素を一つ選択して、対応関係情報取得部が提示する構造図上の対応するブロックにドラッグするなどの形で、対応関係情報を作成することができる。一般的に、ファイルやディレクトリは、複数の構成要素を意味のあるまとまりとするために使用される。そのため、ある構成要素をブロックに対応付けた場合、その構成要素に包含される構成要素も同じ構成要素に対応付けられるべきである。このことから、対応関係情報取得部は、ある構成要素がいずれかのブロックに対応付けられた場合、その構成要素に包含される構成要素は、ブロックに割り当てられた構成要素に包含される構成要素として、対応関係情報に自動的に登録される。
包含される構成要素が既にあるブロックに対応付けられている時に、親となる構成要素に自身と異なるブロックが対応付けられた場合、包含される構成要素は全て親の構成要素のブロックに対応付けられる。また、この方法を効率的に適用するために、対応関係情報取得部104は、初期状態で親となる構成要素を持たない構成要素の一覧を表示することができる。
ここで、対応関係情報を作成する装置利用者の操作手順の例を説明する。まず装置利用者は、いずれかのブロックに対応するソフトウェア構成要素が表示されているかどうかを確認する。もし表示されていれば、マウス等のポインティングデバイス等を使ってそのソフトウェア構成要素を選択して構造図上の対応するブロックにドラッグし、対応関係を指定する。次に、ブロックに対応するソフトウェア構成要素が表示されていない場合、装置利用者は、現在表示されているソフトウェア構成要素に、包含されているソフトウェア構成要素を表示したい構成要素があるかを判断する。次に、装置利用者は、包含されているソフトウェア構成要素を表示したい構成要素が存在する場合、そのソフトウェア構成要素を選択し、選択したソフトウェア構成要素に包含される構成要素の一覧を表示する。その後、新たに表示されたソフトウェア構成要素について、対応関係を指定していないブロックとの対応関係を検討する。対応するソフトウェア構成要素が表示されておらず、表示されているソフトウェア構成要素の中に、包含されている構成要素を表示したい構成要素が表示されていない場合は、現在表示中のソフトウェア構成要素を包含する親の構成要素と、そのソフトウェア構成要素と同じ親に包含されるソフトウェア構成要素の一覧を表示する。その後、新たに表示されたソフトウェア構成要素について、ブロックとの対応関係、または包含されているソフトウェア構成要素を表示したいソフトウェア構成要素があるかどうかを検討する。以上の操作を、全てのブロックに対応関係を指定し終えるまで繰り返す。
なお、ブロックとの対応関係を指定できる構成要素はディレクトリに限らず、ファイル、関数、変数などについても対応関係を指定できる。また、一つのブロックに対して、複数の構成要素を対応づけることができる。本実施形態では、一つの構成要素に対して複数のブロックを対応付けることはできないものとする。
以上のように、構成要素とブロックの対応関係情報を、ディレクトリ、ファイルの情報から検査、自動検査することにより、利用者は、全ての構成要素とブロックの対応関係を入力せずに、ディレクトリのトップから数階層のディレクトリを指定するだけで、全ての対応づけを設定することが可能となる。
なお、対応関係情報取得部104は、対応関係の指定において、以下のように装置利用者の補助を行うことも可能である。
対応関係情報取得部は、図11に示す流れのように、装置利用者によってあるブロックに対応付けられた構成要素と包含関係がある構成要素が、異なるブロックに対応付けられていないかどうかを自動的にチェックすることができる。まず、装置利用者が対応関係を指定したブロックBと構成要素Eを特定する(ステップ1101)。次に、構成要素Eを包含する構成要素が存在するかどうかを確認する(ステップ1102)。構成要素Eを包含する構成要素が存在する場合は、その構成要素をE'とする(ステップ1103)。次に、構成要素E'がいずれかのブロックに対応付けられているかどうかを確認する(ステップ1104)。もし構成要素E'がどのブロックにも対応付けられていない場合は、いずれかのブロックに対応する構成要素に包含される構成要素に構成要素E'が含まれるかどうかを確認する(ステップ1105)。構成要素E'がいずれかのブロックに対応付けられているか、いずれかのブロックに対応する構成要素に包含される構成要素に含まれている場合は、そのブロックをB'とする(ステップ1106)。次に、ブロックBとブロックB'と比較する(ステップ1107)。ブロックBとブロックB'が異なった場合は、包含関係がある構成要素が異なるブロックに対応付けられていることになるので、装置利用者にエラーを通知し、処理を終了する(ステップ1109)。ブロックBとブロックB'が一致する場合は、ブロックB'をBに、E'をEに置き換えて、親の構成要素について、ステップ1301から検査を行う(ステップ1110)。構成要素E'がどの構成要素にも包含されていない場合は、問題なしと判断し、処理を終了する(ステップ1108)。この検査は、装置利用者が対応関係を指定する度に実行することができる。また、全ての対応関係を指定し終えた後、全てのブロックに対して検査を行うこともできる。また、装置利用者の任意のタイミングで検査を行うこともできる。
また、対応関係情報取得部は、図12に示す流れのように、全てのブロックに対応関係情報を指定し終えたかどうかを自動的にチェックすることができる。まず装置は、未検査のブロックを選択する(ステップ1201)。次に、選択したブロックについて、対応する構成要素が割り当てられているかどうか検査する(ステップ1202)。ブロックに構成要素が対応付けられていた場合は、全てのブロックを検査済みか確認する。未検査のブロックが残っていれば、ステップ1201に戻り、未検査のブロックの検査を行う(ステップ1203)。ブロックに構成要素が対応付けられていない場合は、装置利用者にエラーを通知して、処理を終了する(ステップ1204)。全てのブロックについて検査が完了していれば、処理を終了する(ステップ1205)。
[依存関係と論理的構成要素を関連付け(ステップ305)]
次に、依存関係検査部105は、取得した依存関係情報と配置情報と、作成した対応関係情報から、問題のある依存関係を特定するために、依存関係情報の各依存関係と配置情報に含まれる各論理的構成要素との関連付けを行う(ステップ305)。本実施形態におけるソフトウェア構造分析装置が、依存関係情報と配置情報を対応付け、ブロック間依存関係情報を作成する処理の流れを図13に示す。まず、依存関係情報の各依存関係情報レコードのうち、未処理のレコードを選択する(ステップ1301)。次に、選択中の依存関係情報レコードから、依存元の構成要素のIDを取得する(ステップ1302)。次に、取得した依存元の構成要素のIDから、依存元の構成要素に対応するブロックを特定する(ステップ1303)。次に、選択中の依存関係情報レコードから、依存先の構成要素のIDを取得する(ステップ1304)。次に、取得した依存先の構成要素のIDから、依存先の構成要素に対応するブロックを特定する(ステップ1305)。次に、ステップ1303で特定した依存元のブロックとステップ1305で特定した依存先のブロックが異なるブロックかどうか、判定する(ステップ1306)。依存元のブロックと依存先のブロックが異なるならば、ステップ1303で特定した依存元のブロックから、ステップ1305で特定した依存先のブロックに対して、ブロック間依存関係を作成する(ステップ1307)。以上の処理を、全ての依存関係情報レコードを処理するまで繰り返す。
ここで、ステップ1303およびステップ1305において、取得した構成要素のIDから対応するブロックを特定する処理の流れを図14に示す。まず、取得した構成要素のIDに関して、取得した構成要素に対応するブロックかどうかを確認していない対応関係情報レコードを一つ選択する(ステップ1401)。次に、取得した構成要素のIDが、選択した対応関係情報レコードの、対応する構成要素のIDの中に含まれているかどうかを確認する(ステップ1402)。含まれていない場合は、取得した構成要素のIDが、選択した対応関係情報レコードの、対応する構成要素に包含される構成要素のIDの中に含まれるかどうかを確認する(ステップ1403)。そこにも含まれていない場合は、他の未確認の対応関係情報レコードについて同様の処理を行う。全ての対応関係情報レコードを確認しても対応するブロックが見つからない場合は、配置情報に新たなブロックを追加し(ステップ1405)、装置利用者に、追加したブロックへの対応関係を指定させる(ステップ1406)。その後、新たに指定された対応関係情報を基に、追加されたブロックが取得した構成要素に対応するブロックかどうかを確認する。ステップ1402またはステップ1403において、取得した構成要素のIDが含まれていた場合は、選択した対応関係情報レコードに対応するブロックのIDを取得し、ブロックを特定する(ステップ1407)。
図4乃至図8に示す事例に対して図13乃至図14に示す流れの処理を行うことで、図15に示すブロック間依存関係情報が作成される。ブロック間依存関係情報は、各依存関係のブロックとの対応関係であるブロック間依存関係レコード1501から構成される。ブロック間依存関係レコード1501は、ブロック間依存関係レコードのIDの情報1502と、依存関係のIDの情報1503、依存関係の依存元となるブロックのIDの情報1504、依存関係の依存先となるブロックのIDの情報1505から構成される。
[依存関係方向情報作成]
次に、依存関係検査部105は、作成したブロック間依存関係情報から、ソフトウェアのアーキテクチャが想定している依存関係の方向、つまり取得した配置情報において問題のない依存関係の方向である依存関係方向情報を作成する。作成される依存関係方向情報は、「上から下」、「下から上」、「右から左」、「左から右」のいずれかになる。依存関係の方向は、例えば、配置情報で示されるブロック間の位置関係において、依存関係を有するブロック間を結ぶ線の方向によって決定される。ブロック間の依存関係も、位置関係と同様に、幾何学的に表すことができる。
ここで、依存関係方向情報を作成する処理の例を、図16乃至図18を用いて説明する。依存関係方向情報を作成する処理の流れを、図16に示す。まず依存関係検査部105は、各ブロック間依存関係情報の上下方向を判定する(ステップ1601)。次に、各ブロック間依存関係情報の上下方向の判定結果から、下向きのブロック間依存関係情報が、ブロック間依存関係方向情報全体の2/3以上かどうかを判定する(ステップ1602)。もし2/3以上であれば、依存関係方向情報を「上から下」と判断し(ステップ1603)、処理を終了する。2/3未満であれば、上向きのブロック間依存関係情報が、ブロック間依存関係情報全体の2/3以上かどうかを判定する(ステップ1604)。もし2/3以上であれば、依存関係方向情報を「下から上」と判断し(ステップ1605)、処理を終了する。2/3未満であれば、各ブロック間依存関係情報の左右方向を判定する(ステップ1606)。次に、右向きのブロック間依存関係情報が、ブロック間依存関係情報全体の1/2以上かどうかを判定する(ステップ1607)。もし1/2以上であれば、依存関係方向情報を「左から右」と判定し(ステップ1608)、処理を終了する。1/2未満であれば、依存関係方向情報を「右から左」と判定し(ステップ1608)、処理を終了する。
ステップ1601で行う、各ブロック間依存関係情報の上下方向を判定する処理の流れを、図17に示す。各ブロック間依存関係情報の上下方向の判定では、まず、未判定のブロック間依存関係情報レコードBRを選択する(ステップ1701)。次に、BRの依存元のブロックBsrcのIDであるIDsrcと、依存先のブロックBtgtのIDであるIDtgtを取得する(ステップ1702)。次に、IDsrcとIDtgtが異なるかどうかを判定する(ステップ1703)。異なる場合は、BsrcのIDと配置情報から、Bsrcの中心座標(Xsrc, Ysrc)を取得する(ステップ1704)。そして、BtgtのIDと配置情報から、Btgtの中心座標(Xtgt, Ytgt)を取得する(ステップ1705)。そして、YsrcがYtgtより大きいかどうかを判定する(ステップ1706)。大きい場合は、BRは下向きのブロック間依存関係情報と判断する(ステップ1707)。そうでない場合は、BRは上向きのブロック間依存関係情報と判断する(ステップ1708)。IDsrcとIDtgtが一致する場合は、BRは上下方向無しと判断する(ステップ1709)。その後、判断結果をBRに追加する(ステップ1710)。その後、全てのブロック間依存関係情報レコードを判定済みであれば、処理を終了する(ステップ1711)。未判定のブロック間依存関係情報レコードが残っている場合は、ステップ1701から処理を行う。
次に、ステップ1606で行う、各ブロック間依存関係情報の左右方向を判定する処理の流れを、図18に示す。各ブロック間依存関係情報の上下方向の判定では、まず、未判定のブロック間依存関係情報レコードBRを選択する(ステップ1801)。次に、BRの依存元のブロックBsrcのIDであるIDsrcと、依存先のブロックBtgtのIDであるIDtgtを取得する(ステップ1802)。次に、IDsrcとIDtgtが異なるかどうかを判定する(ステップ1803)。異なる場合は、BsrcのIDと配置情報から、Bsrcの中心座標(Xsrc, Ysrc)を取得する(ステップ1804)。そして、BtgtのIDと配置情報から、Btgtの中心座標(Xtgt, Ytgt)を取得する(ステップ1805)。そして、XsrcがXtgtより大きいかどうかを判定する(ステップ1806)。大きい場合は、BRは右向きのブロック間依存関係情報と判断する(ステップ1807)。そうでない場合は、BRは左向きのブロック間依存関係情報と判断する(ステップ1808)。IDsrcとIDtgtが一致する場合は、BRは左右方向無しと判断する(ステップ1709)。その後、判断結果をBRに追加する(ステップ1710)。ステップ1601で既に上下方向が追加されている場合は、左右方向を上書きする。その後、全てのブロック間依存関係情報レコードを判定済みであれば、処理を終了する(ステップ1811)。未判定のブロック間依存関係情報レコードが残っている場合は、ステップ1801から処理を行う。
図4乃至図8に示す例について、依存関係方向情報を判定した結果のブロック間依存関係情報を、図19に示す。依存関係方向情報の判定後、ブロック間依存関係情報レコード1901には、「上」「下」「−」のいずれかの値を持つ方向の情報1902が追加される。「上」は上向きの依存関係であることを、「下」は下向きの依存関係であることを、「−」は上下の方向情報がないことを意味する。この時、依存関係方向が「下」であるブロック間依存関係情報レコードは、全体の2/3以上であるので、この例における依存関係方向情報は「上から下」と判断される。
[問題ある依存関係を特定(ステップ306)]
次に、依存関係検査部105は、依存関係方向情報とブロック間依存関係情報を作成後、問題のある依存関係を特定する(ステップ306)。依存関係方向情報は、ソフトウェアのアーキテクチャが想定している依存関係の方向である。全ての依存関係の方向を、例えば画面に対して下向きというように、依存関係方向情報と同じ方向に揃えておけば、依存関係方向情報の依存元側の構成要素を置き換える必要が出た場合に、依存関係方向情報の依存先側の構成要素が影響を受ける可能性は低くなり、ソフトウェアの再利用性は向上する。しかし、依存関係方向情報と逆の方向の依存関係が存在する場合、逆向きに依存される構成要素を別の構成要素に置き換える場合、逆向きの依存関係の依存元の構成要素にも変更が必要となるため、ソフトウェアの再利用性は低くなる。そのため、依存関係方向情報と逆向きの依存関係は問題であると考えられる。
また実際のソフトウェア構造図では、上位にアプリ、中間に共通ライブラリ、ミドルウェア、仮想にハードに近いデバイスドライバなどを配置することが普通である。その場合、上位のアプリ層から、ミドル、共通ライブラリを呼び出す下向きの矢印は問題ないが、逆にミドルからアプリを呼び出す上向きの矢印では、複数のアプリで共通であるべきミドルが特定のアプリに依存するという複雑な構造になっていることになる。
依存関係検査部105は、図20に示す流れに従って、問題のある依存関係を特定する。まず、未検査のブロック間依存関係情報レコードBRを選択する(ステップ2001)。次に、BRの方向の情報を取得する(ステップ2002)。次に、取得した方向の情報が、依存関係方向情報に対して逆向きかどうかを判定する(ステップ2003)。もし逆向きであれば、BRを問題のある依存関係と判断する(ステップ2004)。逆向きでなければ、BRは問題のない依存関係と判断する(ステップ2005)。その後、BRに検査結果を追加する(ステップ2006)。そして、全てのブロック間依存関係情報レコードが検査済みかどうかを確認し(ステップ2007)、検査済みであれば処理を終了する。未検査のブロック間依存関係情報レコードが残っていれば、その未検査のブロック間依存関係情報レコードに対して、ステップ2001から処理を行う。
ここで、図21を用いて、依存関係方向情報が「上から下」である時の、図4乃至図8に示す例において問題のある依存関係の特定方法を説明する。この例において、ブロック間依存関係情報のうち、IDがBR9のブロック間依存関係は、依存元のブロックがB5、依存先のブロックがB4であるので、依存線2101に示すように、下のブロックから上のブロックへの依存関係である。依存関係方向情報は「上から下」であるので、このブロック間依存関係に対応する依存関係は、依存関係方向情報とは逆向きの依存関係である。そのため、ブロック間依存関係BR9に対応する依存関係は、問題のある依存関係と判断される。また、IDがBR11のブロック間依存関係は、依存元のブロックがB2、依存先のブロックがB1であるので、依存線2102に示すように、下のブロックから上のブロックへの依存関係である。依存関係方向情報は「上から下」であるので、このブロック間依存関係に対応する依存関係は、依存関係方向情報とは逆向きの依存関係である。そのため、ブロック間依存関係BR11に対応する依存関係は、問題のある依存関係である。
以上の処理の結果、依存関係検査部105は、図22に示す、検査結果付きブロック間依存関係情報を出力する。検査結果付きブロック間依存関係情報レコード2201は、図19に示すブロック間依存関係情報レコードが持つ情報に加え、検査結果2202を持つ。検査結果2202はOKまたはNGの値を持ち、OKであれば問題のない依存関係であることを意味し、NGであれば問題のある依存関係であることを意味する。本実施例では、IDがBR9のブロック間依存関係レコードの検査結果2203とIDがBR11のブロック間依存関係レコードの検査結果2204の値がNGとなる。そのため本実施例では、ブロック間依存関係レコードBR9に対応する依存関係R9と、ブロック間依存関係レコードBR11に対応する依存関係R11が、問題のある依存関係と判断される。
[問題ある依存関係を出力(ステップ307)]
最後に、検査結果出力部106は、検査結果付きブロック間依存関係情報を取得し、装置利用者に対して問題のある依存関係を出力する(ステップ307)。例えば図4乃至図8に示す例では、依存関係R9、依存関係R11が問題であると判断された。この結果を図23のようにソフトウェア構造図として出力する場合、問題のない依存関係は、依存元のブロックから依存先のブロックへの矢印線として表される。一方、問題のある依存関係は、依存元のブロックから依存先のブロックへの、強調された矢印線として表される。本実施例では、R9の依存関係に対応する依存線2301および依存関係R11に対応する依存線2302が、強調して表示される。
以上の結果により、本発明に係るソフトウェア構造分析装置は、ソフトウェアの再利用性を低下させる依存関係方向情報と逆向きの依存関係を、問題のある依存関係として特定し、装置利用者に提示する。
なお問題のある依存関係を出力する方法は、矢印の強調だけでなく、依存関係のリスト表示などもできる。さらにユーザに提示するだけでなく、別の処理への前処理として問題のある依存関係のリストを他の処理プログラムの入力として出力することもできる。
以上のとおり、本実施形態においては、論理的構成要素間の関係を幾何学的な位置関係で表したデータを、前記配置情報として用いるため、ソフトウェア開発において生成されたソフトウェア構成要素の依存関係と対応関係情報を基に、論理的構成要素の幾何学的な位置関係を計算することができる。その結果、問題のある依存関係を特定することができる。また、論理的構成要素の幾何学的な位置関係により特定された問題のある依存箇所を示す情報を、装置利用者に提供することができる。
また、依存関係検査部105は、論理的構成要素間の依存関係の方向を計算し、この方向を用いて問題の有無を判定するため、ソフトウェア構成要素間の機能的な繋がりを装置利用者に理解しやすい情報を用いて解析することができる。さらに、論理的構成要素間での問題のない依存方向を計算して、これと各依存関係を比較することで、問題の有無を判定することにより、効率よく処理を実行することが可能になる。
なお、依存関係の問題の有無を判定するための情報は、上記例のように、依存関係の方向に限られない。例えば、後述する実施形態のように、依存関係の距離を用いて判定することもできる。また、上記例では、論理的構成要素間の幾何学的な位置関係を2次元平面で表しているが、3次元空間において、上記論理的構成要素間の幾何学的な位置関係および依存関係の方向または距離が表されてもよい。
(実施の形態2)
次に、本発明の第二の実施の形態について説明する。本実施例では、距離の情報を用いて、逆向きの依存関係のうち、配置上の問題により逆向きになっている依存関係を除外し、問題のある依存関係である可能性がより高い依存関係を特定する。
本実施例において、依存関係検査部105は、取得した配置情報とブロック間依存関係情報から、範囲許容値S0を作成する。図24は、範囲許容値S0を説明するための模式図である。範囲許容値S0は、依存元のブロックの中心と依存先のブロックの中心の、依存関係方向情報とは逆の方向の距離をSとした時、逆向きの依存関係が許されるSの最大値である。範囲許容値S0をどの方向で求めるかは、依存関係方向情報によって決まる。例えば、図24に示す例のように、依存関係方向情報が「上から下」ならば、Sは、依存先のブロック2401の中心のy座標の値から依存元のブロック2402の中心のy座標の値を引いた値の絶対値になる。
装置利用者から範囲許容値S0が入力されない場合、依存関係検査部105は、範囲許容値S0の初期値を自動的に計算することができる。範囲許容値S0の目的がブロックの重なり等の配置上の問題により発生する逆向きの依存関係を許可することであることから、範囲許容値S0の初期値としては、例えば、配置情報において論理的構成要素を表すブロックの高さの平均値が考えられる。
以上のように、範囲許容値を用いることで、他のブロックと重なってしまうため配置できない等のやむを得ない理由により依存関係の方向が逆向きになってしまう依存関係の存在を許可し、配置上の問題に関係なく発生している依存関係方向情報と逆向きの依存関係のみを、問題のある依存関係として特定できるようになる。
依存関係検査部105は、図25に示す処理の流れに従って、ソフトウェアの再利用性を低下させる、依存関係方向情報と逆向きの依存関係を特定する。まず依存関係検査部105は、ブロック間依存関係情報から、未検査のブロック間依存関係レコードBRを選択する(ステップ2501)。次に、BRの方向の情報を取得する(ステップ2502)。次に、取得した方向の情報が、依存関係方向情報に対して逆向きかどうかを判定する(ステップ2503)。依存関係が逆向きの場合、依存元のブロックと依存先のブロックの中心の、依存関係方向情報とは逆の方向の距離Sを求め(ステップ2504)、Sと範囲許容値S0を比較する(ステップ2505)。S>S0ならば、依存関係は逆向きであり、範囲許容値S0を超えているため、BRを問題のある依存関係と判断する(ステップ2506)。依存関係が逆向きでない場合、または、SがS0より小さい場合、依存関係検査部105は、BRを問題のない依存関係と判断する(ステップ2507)。次に依存関係検査部105は、BRのブロック間依存関係レコードに、検査結果を追記する(ステップ2508)。BRに検査結果を追加後、全てのブロック間依存関係情報レコードが検査済みかどうかを判定する(ステップ2509)。全てのブロック間依存関係レコードが検査済みであれば、この処理を終了する。未検査のブロック間依存関係レコードが残っていれば、未検査のブロック間依存関係レコードについて、ステップ2501から処理を行う。
ここで、図21を用いて、依存関係方向情報が「上から下」、範囲許容値S0が6.0である時の、図4乃至図8に示す例において問題のある依存関係の特定方法を説明する。この例において、ブロック間依存関係情報のうち、IDがBR9のブロック間依存関係は、依存元のブロックがB5、依存先のブロックがB4であるので、依存線2101に示すように、下のブロックから上のブロックへの依存関係である。依存関係方向情報は「上から下」であるので、このブロック間依存関係に対応する依存関係は、依存関係方向情報とは逆向きの依存関係である。このブロック間依存関係における、依存元のブロックの中心と依存先のブロックの中心の依存関係方向情報と同じ方向の距離Sは、
S=18.0−5.0=13.0 > S0
で、S0より大きい。そのため、ブロック間依存関係BR9に対応する依存関係は、問題のある依存関係である。また、IDがBR11のブロック間依存関係は、依存元のブロックがB2、依存先のブロックがB1であるので、依存線2102に示すように、下のブロックから上のブロックへの依存関係である。依存関係方向情報は「上から下」であるので、このブロック間依存関係に対応する依存関係は、依存関係方向情報とは逆向きの依存関係である。このブロック間依存関係における、依存元のブロックの中心と依存先のブロックの中心の依存関係方向情報と同じ方向の距離Sは、
S=49.0−33.0=16.0 > S0
で、S0より大きい。そのため、ブロック間依存関係BR11に対応する依存関係は、問題のある依存関係である。以上の処理の結果、依存関係検査部105は、実施の形態1と同じ、図22に示す検査結果付きブロック間依存関係情報を出力し、検査結果出力部106は、実施の形態1と同じく、図23に示すソフトウェア構造図などの形で、検査結果を出力する。
以上の結果により、本発明に係るソフトウェア構造分析装置は、ソフトウェアの再利用性を低下させる依存関係方向情報と逆向きの依存関係のうち、配置上の問題により逆向きになってしまう依存関係を除いた、問題のある可能性が高い依存関係を特定し、装置利用者に提示する。
なお問題のある依存関係を出力する方法は、矢印の強調だけでなく、依存関係のリスト表示するなどもできる。さらにユーザに提示するだけでなく、別の処理への前処理として問題のある依存関係のリストを他の処理プログラムの入力として出力することもできる。
(実施の形態3)
次に、本発明の第三の実施の形態について説明する。本実施例では、依存関係がないと予想される構成要素の間に存在する依存関係を問題のある依存関係として特定する。
ソフトウェアの開発者がソフトウェア構造図を用いてソフトウェアの設計をする場合、関連する論理的構成要素同士を近くに配置して、ソフトウェア構造図上に意味的なまとまりを作成する。これにより、ソフトウェア構造図上では、関連のある論理的構成要素同士は近くに配置され、関連のない論理的構成要素は離れて配置される。そのため、ソフトウェア構造図上で離れて配置された論理的構成要素間に依存関係が存在する場合、その依存関係は、開発者が意図していない依存関係である可能性がある。本発明に係るソフトウェア構造分析装置は、そのような依存関係を問題のある依存関係として特定する。
依存関係検査部105は、取得した配置情報とブロック間依存関係情報から、距離許容値L0を作成する。図26は、距離許容値L0を説明するための模式図である。距離許容値L0は、依存関係が許される、前記配置情報における前記論理的構成要素の間の距離の上限を意味する。装置利用者から距離許容値L0が入力されない場合、配置情報取得部は、距離許容値L0の初期値を自動的に計算する。距離許容値L0は、離れて配置されており依存関係がないと予測される論理的構成要素間の依存関係を特定するためのものである。そのため、例えば配置情報として入力されたソフトウェア構造図の横幅を3等分した時、右端の区画に属するブロックと左端の区画に属するブロックの間には、本来依存関係はないと予測できる。このことから、距離許容値L0の初期値としては、例えば、配置情報取得部に最初に与えられたソフトウェア構造図の横幅の2/3の長さをL0とする。
以上のように、距離許容値を用いることで、第一の実施の形態や第二の実施の形態で述べた、単に方向だけで判断する場合と比べて、構成要素の大きさの違いや、図を描くときの手作業などのよるずれに影響されずに本質的な構造に起因する問題のある依存関係を抽出することが可能となる。
図4乃至図8に示す例において、図9に示す対応関係情報および図19に示すブロック間依存関係情報が得られた場合に、離れて配置された論理的構成要素間の依存関係を特定する処理の流れを、図27を用いて説明する。まず依存関係検査部105は、ブロック間依存関係情報から、未検査のブロック間依存関係レコードBRを選択する(ステップ2701)。次に依存関係検査部105は、BRの依存元のブロックBsrcのIDを取得する(ステップ2702)。次に依存関係検査部105は、取得したBsrcのIDと配置情報から、Bsrcの中心座標(Xsrc,Ysrc)を取得する(ステップ2703)。次に依存関係検査部105は、BRの依存先のブロックBtgtのIDを取得する(ステップ2704)。次に依存関係検査部105は、Btgtの中心座標(Xtgt,Ytgt)を取得する(ステップ2705)。次に依存関係検査部105は、Bsrcの中心とBtgtの中心の距離Lを計算する(ステップ2706)。Lは、以下の式(1)で計算することができる。
Figure 2011170697
次に依存関係検査部105は、Lと距離許容値L0を比較する(ステップ2707)。L>L0の場合は、BRを問題のある依存関係と判断する(ステップ2708)。LがL0以下の場合は、BRは問題のない依存関係と判断する(ステップ2709)。次に依存関係検査部105は、BRのブロック間依存関係レコードに、検査結果を追記する(ステップ2710)。BRに検査結果を追加後、全てのブロック間依存関係情報レコードが検査済みかどうかを判定する(ステップ2711)。全てのブロック間依存関係レコードが検査済みであれば、この処理を修了する。未検査のブロック間依存関係レコードが残っていれば、未検査のブロック間依存関係レコードについて、ステップ2701から処理を行う。
ここで、図28を用いて、距離許容値L0が26.7である時の、図4乃至図8に示す例において問題のある依存関係の特定方法を説明する。この例において、ブロック間依存関係情報のうち、IDがBR4のブロック間依存関係は、依存元のブロックがB2、依存先のブロックがB5である。線分2801に示す、これらのブロックの中心間の距離L1は、
Figure 2011170697
となり、距離許容値L0より大きい。そのため、BR4に対応する依存関係は問題があると判断される。また、IDがBR12のブロック間依存関係は、依存元のブロックがB1、依存先のブロックがB3である。線分2802に示す、これらのブロックの中心間の距離L2は、
Figure 2011170697
となり、距離許容値L0より大きい。そのため、BR12に対応する依存関係は問題があると判断される。以上の処理の結果、依存関係検査部105は、図29に示す、検査結果付きブロック間依存関係情報を出力する。本実施例では、IDがBR4のブロック間依存関係レコードの検査結果2901とIDがBR12のブロック間依存関係レコードの検査結果2902の値がNGとなる。そのため本実施例では、ブロック間依存関係レコードBR4に対応する依存関係R4と、ブロック間依存関係レコードBR12に対応する依存関係R12が、問題のある依存関係と判断される。
最後に、検査結果出力部106は、検査結果付きブロック間依存関係情報を取得し、装置利用者に対して問題のある依存関係を出力する。本実施例では、IDがR4、R12の依存関係が問題であると判断された。この結果をソフトウェア構造図として出力する場合、図30のように、R4の依存関係に対応する依存線3001および依存関係R12に対応する依存線3002が、強調して表示される。
以上の結果により、本発明に係るソフトウェア構造分析装置は、ソフトウェアの開発者が意図していない可能性のある離れた論理的構成要素間の依存関係を、問題のある依存関係として特定し、装置利用者に提示する。
(実施の形態4)
本発明の第四の実施の形態について説明する。本発明に係るソフトウェア構造分析装置は、第二の実施の形態で述べた依存関係の特定方法と第三の実施の形態で述べた依存関係の特定方法を組み合わせて、再利用性を低下させる依存関係方向情報に対して逆向きの依存関係と、本来ならば依存関係がないと予想される、離れた論理的構成要素間の依存関係の両方を問題のある依存関係として特定することができる。
再利用性を低下させる依存関係方向情報に対して逆向きの依存関係と、開発者が意図していない可能性がある離れた論理的構成要素間の依存関係の両方を問題のある依存関係として特定する処理の流れを、図31を用いて説明する。
まず、依存関係検査部105は、ブロック間依存関係情報から、未検査のブロック間依存関係レコードBRを選択する(ステップ3101)。次に、BRのブロック間依存関係情報レコードから、方向の情報を取得する(ステップ3102)。次に、取得した方向の情報と依存関係方向情報を比較し、ブロック間依存関係の方向の情報が依存関係方向情報と逆向きかどうかを判定する(ステップ3103)。逆向きの場合は、依存関係方向情報と同じ方向のブロック間の距離Sを求める(ステップ3104)。その後、Sが範囲許容値S0より大きいかどうかを判定する(ステップ3105)。大きい場合は、BRを問題のある依存関係と判断する(ステップ3106)。依存関係の方向が逆向きでない場合、または、SがS0以下の場合は、中心間の距離Lを使って、BRが問題のある依存関係でないかどうかを判断する。そのためにまず、BRの依存元のブロックBsrcのIDを取得する(ステップ3107)。次に、取得したBsrcのIDおよび配置情報から、Bsrcの中心座標(Xsrc, Ysrc)を取得する(ステップ3108)。次に、BRの依存先のブロックBtgtのIDを取得する(ステップ3109)。次に、取得したBtgtのIDおよび配置情報から、Btgtの中心座標(Xtgt, Ytgt)を取得する(ステップ3110)。次に、(Xsrc, Ysrc)と(Xtgt, Ytgt)の値から、依存元のブロックと依存先のブロックの中心間の距離Lを計算する(ステップ3111)。Lは、以下の式(1)で計算することができる。
Figure 2011170697
その後、Lが距離許容値L0より大きいかどうかを判定する(ステップ3112)。LがL0よりも大きい場合は、BRを問題のある依存関係と判断する(ステップ3106)。LがL0以下の場合は、BRを問題のない依存関係と判断する(ステップ3113)。BRが問題のある依存関係かどうかの検査後、検査結果をブロック間依存関係情報に追加する(ステップ3114)。その後、全てのブロック間依存関係情報レコードが検査済みかどうかを確認する(ステップ3115)。確認は、全てのブロック間依存関係情報レコードに、問題のある依存関係かどうかの検査結果が追加されているかどうかで判断することができる。全てのブロック間依存関係情報レコードが検査済みであれば、処理を終了する。未検査のブロック間依存関係情報レコードが残っている場合は、ステップ3101に戻って処理を行う。
以上の処理の結果、依存関係検査部105は、図32に示す、検査結果付きブロック間依存関係情報を出力する。本実施例では、IDがBR4のブロック間依存関係レコードの検査結果3201と、IDがBR9のブロック間依存関係レコードの検査結果3202と、IDがBR11のブロック間依存関係レコードの検査結果3203と、IDがBR12のブロック間依存関係レコードの検査結果3204の値がNGとなる。そのため本実施例では、ブロック間依存関係レコードBR4に対応する依存関係R4と、ブロック間依存関係レコードBR9に対応する依存関係R9と、ブロック間依存関係レコードBR11に対応する依存関係R11と、ブロック間依存関係レコードBR12に対応する依存関係R12が、問題のある依存関係と判断される。
最後に、検査結果出力部106は、検査結果付きブロック間依存関係情報を取得し、装置利用者に対して問題のある依存関係を出力する。図32に示す例では、IDがR4、R9、R11、R12の依存関係が問題であると判断されている。この結果を図33のようにソフトウェア構造図として出力する場合、R4の依存関係に対応する依存線3301、R9の依存関係に対応する依存線3302、依存関係R11に対応する依存線3303、および依存関係R12に対応する依存線3304が、強調して表示される。
以上の結果により、本発明に係るソフトウェア構造分析装置は、ソフトウェアの再利用性を低下させる依存関係方向情報と逆向きの依存関係と、ソフトウェアの開発者が意図していない可能性のある離れた論理的構成要素間の依存関係を、問題のある依存関係として特定し、装置利用者に提示する。
(実施の形態5)
次に、本発明の第五の実施の形態について説明する。本実施例では、第四の実施の形態で特定した問題のある依存関係の、出力結果の配置情報を画面上で変更することで、問題のある依存関係の検査を再度実施する。第四の実施の形態で配置情報取得部103が取得した配置情報がソフトウェアの設計段階で作成された配置情報である時、開発を進める中で変更が生じ、設計時の配置情報と開発者が考える実装の配置情報の間に違いが生まれる場合がある。そのような場合に、与えられた配置情報を、開発者が考える配置情報に変更することで、開発者が考える配置情報において問題のある依存関係を特定できるようになる。
図33に示す出力結果において、配置情報を変更する装置利用者の操作の例を、図34に示す。例えば開発者が、ブロックLIBは、ブロックDRV1およびブロックDRV2よりも上位の、ブロックMWと同じ位置に位置すると考えた場合、出力結果において、ブロックLIBを、3401の位置から3402の位置に移動させる(図34参照)。出力結果上のブロックの移動は、例えばマウス等のポインティングデバイスを使って、出力結果上のブロックをドラッグアンドドロップすることで行われる。出力結果上のブロックの移動による配置情報の変更は、配置情報取得部103が取得する。
出力結果上のブロックの移動による配置情報の変更を配置情報取得部103が取得した後、配置情報取得部は、最初に与えられた配置情報を変更する。図34に示すブロックの移動によって変更された配置情報の例を、図35に示す。ソフトウェア構造図の大きさには変化は発生していないため、図35(A)に示すソフトウェア構造図の値には変化は生じない。一方、論理的構成要素を表すブロックの大きさと配置情報内の中心座標については、図34に示すブロックの移動によって、図35(B)に示すように、移動されたブロックに対応する配置情報レコード3501のブロックの中心部の座標が変更される。また、配置情報の変更が生じた場合、配置情報取得部103は、図35(B)に示すように、各配置情報レコードに更新の有無を意味する変更フラグ3502を付与することもできる。変更フラグは0または1の値を取り、0であれば変更が発生していないことを、1であれば変更が発生したことを意味する。図34に示すブロックの移動では、移動されたブロックに対応する配置情報レコード3501の変更フラグの値3503を1とし、他の変更フラグの値を0とする。
配置情報の変更後、依存関係検査部105は、変更フラグが1である配置情報レコードに対応するブロックについて、そのブロックを依存元または依存先とするブロック間依存関係に対応する依存関係が問題のある依存関係かどうかを検査する。その処理の流れを、図36に示す。依存関係検査部105は、まず配置情報が変更されたブロックを依存元または依存先とするブロック間依存関係を格納するための空の集合Sbrを用意する(ステップ3601)。次に、図35(B)に示す形式を持つ配置情報において、変更フラグの値が1である配置情報レコードのうち、未処理の配置情報レコードを選択する(ステップ3602)。次に、選択した配置情報レコードに対応するブロックを依存元とするブロック間依存関係を、集合Sbrに要素として追加する(ステップ3603)。次に、選択した配置情報レコードに対応するブロックを依存先とするブロック間依存関係を、集合Sbrに要素として追加する(ステップ3604)。次に、変更フラグの値が1の配置情報レコード全てについて、その配置情報レコードに対応するブロックを依存元または依存先とするブロック間依存関係レコードを集合Sbrに格納したかどうかを確認する(ステップ3605)。変更フラグの値が1で、対応するブロックを依存元または依存先とするブロック間依存関係全てを集合Sbrに格納していない配置情報レコードが存在する場合は、その配置情報レコードについて、ステップ3602から処理を行う。変更フラグの値が1の配置情報レコード全てについて、その配置情報レコードに対応するブロックを依存元または依存先とするブロック間依存関係レコードを集合Sbrに格納済みであるならば、集合Sbrに格納されているブロック間依存関係に対応する依存関係が問題のある依存関係かどうかを検査する(ステップ3606)。ステップ3606の処理は、図31に示す処理の流れに従って行われる。
図35に示す例の場合、図36に示す処理において、移動されたブロックB5を依存元または依存先とするブロック間依存関係であるBR4、BR8、BR9が集合Sbrに格納され、問題のある依存関係かどうかが検査される。なお、範囲許容値S0は6.0、距離許容値L0は26.7であるとする。この時、BR4は、依存元のブロックがB2、依存先のブロックがB5のブロック間依存関係である。依存関係方向情報は「上から下」で、移動後の配置情報においてブロックの中心部のy座標の値が同じであることから、BR4は依存関係方向情報と逆の依存関係ではない。また、中心間の距離Lは、
Figure 2011170697
となることから、ブロックの中心間の距離は距離許容値L0より小さいので、ブロック間依存関係BR4に対応する依存関係は問題のない依存関係と判断される。また、BR8は、依存元のブロックがB3、依存先のブロックがB5のブロック間依存関係である。依存関係方向情報が「上から下」であるので、ブロックB3の中心部のy座標Yb3の値とブロックB5の中心部のy座標Yb5の値を比べると、
Yb3=18.0, Yb=33.0
であり、Yb3<Yb5であるので、ブロック間依存関係BR8は依存関係方向情報とは逆向きの、下から上への依存関係である。また、依存元のブロックの中心と依存先のブロックの中心の依存関係方向情報と逆の方向の距離Sは、
S=33.0−18.0=15.0 > S0
となり、S0より大きい。そのため、ブロック間依存関係BR8に対応する依存関係は問題のある依存関係と判定される。また、BR9は、依存元のブロックがB5、依存先のブロックがB4のブロック間依存関係である。依存関係方向情報が「上から下」であるので、ブロックB5の中心部のy座標Yb5の値とブロックB4の中心部のy座標Yb4の値を比べると、
Yb5=33.0, Yb4=18.0
であり、Yb5>Yb4であるので、ブロック間依存関係BR9は依存関係方向情報と同じ方向の依存関係である。また、ブロックB5とブロックB4の中心間の距離Lは、
Figure 2011170697
となり、距離許容値L0より小さい。このことから、ブロック間依存関係BR9に対応する依存関係は、問題のない依存関係である。
依存関係検査部105が出力するこの検査の結果を、図37に示す。この検査の結果、ブロック間依存関係BR4の結果3701はNGからOKに、ブロック間依存関係BR8の結果3702はOKからNGに、ブロック間依存関係BR9の結果3703はNGからOKに更新される。
この結果を用いて結果出力部106が出力するソフトウェア構造図を図38に示す。図33に示す、配置情報変更前のソフトウェア構造図と比べて、図38では、依存関係R4に対応する依存線3801が通常の依存線に、依存関係R8に対応する依存線3802は強調された依存線に、依存関係R9に対応する依存線3803は通常の依存線に表示が変更される。
以上の結果により、本実施形態に係るソフトウェア構造分析装置は、設計時に開発者が考えたソフトウェア構造が開発中に変更された場合でも、装置利用者がソフトウェア構造の変更結果を装置に与えることで、変更後のソフトウェア構造から、アーキテクチャにおいて問題のある依存関係を特定し、装置利用者に提示することができる。これにより、装置利用者は、例えば、与えられた配置情報から、アーキテクチャにおいて問題があると判断された依存関係が、実際には問題がない場合には、その依存関係は問題がないと判定されるよう与えられた配置情報を変更することで、現在の実装におけるアーキテクチャを明らかにすることができる。
またユーザが変更した配置情報は、現行のソースコードが持っている、隠れたソフトウェア構造を表しており、本ソフトウェア構造分析装置を使うことにより、対話的に変更されたソフトウェア構造をソースコードと対比しながら作り上げることができる。
本発明のソフトウェア構造分析装置は、差分開発が繰り返されるなどの原因によってソフトウェア構造が複雑化したソフトウェアを分析し、問題のある依存関係を特定する場合に有用である。
101 構成要素情報取得部
102 依存関係情報取得部
103 配置情報取得部
104 対応関係情報取得部
105 依存関係検査部
106 結果出力部
201 ファイルを表す図形
202 依存関係を表す矢印
401 構成要素情報レコード
402 構成要素のIDの情報
403 構成要素の名前の情報
404 構成要素の種類の情報
405 構成要素の親の情報
501 ディレクトリを意味する図形
502 ファイルを意味する図形
503 関数、変数を意味する図形
504 包含関係を意味する関係線
601 依存関係情報レコード
602 依存関係のIDの情報
603 依存関係の依存元の構成要素のIDの情報
604 依存関係の依存先の構成要素のIDの情報
605 依存関係の種類の情報
701 論理的構成要素APPLを表すブロック
702 論理的構成要素MWを表すブロック
703 論理的構成要素DRV1を表すブロック
704 論理的構成要素DRV2を表すブロック
705 論理的構成要素LIBを表すブロック
801 配置情報として与えられるソフトウェア構造図の高さの情報
802 配置情報として与えられるソフトウェア構造図の横幅の情報
803 配置情報レコード
804 配置情報として与えられるブロックのIDの情報
805 配置情報として与えられるブロックのブロック名の情報
806 配置情報として与えられるブロックの大きさの情報
807 配置情報として与えられるブロックの中心部の座標の情報
808 配置情報として与えられるブロックの高さの情報
809 配置情報として与えられるブロックの横幅の情報
810 配置情報として与えられるブロックの中心部のx座標の情報
811 配置情報として与えられるブロックの中心部のy座標の情報
901 対応関係情報レコード
902 対応関係情報のブロックのIDの情報
903 ブロックに対応する構成要素のIDの情報
904 ブロックに対応する構成要素に包含される構成要素のIDの情報
1501 ブロック間依存関係情報レコード
1502 ブロック間依存関係のIDの情報
1503 ブロック間依存関係に対応する依存関係のIDの情報
1504 ブロック間依存関係の依存元のブロックのIDの情報
1505 ブロック間依存関係の依存先のブロックのIDの情報
1901 方向情報が追加されたブロック間依存関係情報レコードの一例
1902 追加された、依存関係の方向の情報
2101、2102 依存関係方向情報と逆向きの依存関係
2201 検査結果付きブロック間依存関係情報レコード
2202 依存関係の検査結果
2203、2204 依存関係方向情報に対して逆向きの依存関係と判定された依存関係の検査結果
2301、2302 結果出力部に出力された、依存関係方向情報に対して逆向きの依存関係を意味する依存線
2401、2402 ブロックの中心
2403 範囲許容値S0の大きさの例
2404 ブロックの中心間の、依存関係方向情報と逆の方向の距離
2801、2802 離れた論理的構成要素間の依存関係
2901、2901 離れた論理的構成要素間の依存関係と判定された依存関係の検査結果
3001、3002 結果出力部に出力された、離れた論理的構成要素間の依存関係を意味する依存線
3201、3204 離れた論理的構成要素間の依存関係と判定された依存関係の検査結果
3202、3203 依存関係方向情報に対して逆向きの依存関係と判定された依存関係の検査結果
3302、3303 結果出力部に出力された、依存関係方向情報に対して逆向きの依存関係を意味する依存線
3301、3304 結果出力部に出力された、離れた論理的構成要素間の依存関係を意味する依存線
3401 ブロックLIBの移動前の位置
3402 ブロックLIBの移動後の位置
3501 配置情報が変更された配置情報レコード
3502 配置情報の変更フラグの情報
3503 配置情報が変更されたことを意味するフラグの値
3701、3702、3703 配置情報の変更によって更新された、依存関係の検査結果
3801、3802、3803 依存関係検査部の検査結果が更新された依存関係に対応する依存線

Claims (14)

  1. ソフトウェア構成要素の情報である構成要素情報を取得する構成要素情報取得部と、
    前記ソフトウェア構成要素の間の依存関係である依存関係情報を取得する依存関係情報取得部と、
    前記ソフトウェア構成要素を1つまたは複数まとめた論理的構成要素の位置関係を示す配置情報を取得する配置情報取得部と、
    前記配置情報に含まれる前記論理的構成要素と前記ソフトウェア構成要素の対応関係である対応関係情報を取得する対応関係情報取得部と、
    前記構成要素情報と前記依存関係情報と前記配置情報と前記対応関係情報から問題のある依存関係を特定する依存関係検査部と、
    前記依存関係検査部が特定した問題のある依存関係の検査結果を出力する結果出力部と
    を備えるソフトウェア構造分析装置。
  2. 請求項1に記載のソフトウェア構造分析装置において、
    前記構成要素情報に含まれる前記ソフトウェア構成要素のディレクトリ構成またはファイル構成、および前記論理的構成要素を含む前記配置情報を用いて、前記ソフトウェア構成要素と前記論理的構成要素の対応関係を表す対応関係情報を作成する、ソフトウェア構造分析装置。
  3. 請求項2に記載のソフトウェア構造分析装置において、
    前記ソフトウェア構成要素と前記論理的構成要素の対応関係を表す対応関係情報を作成する時に、いずれかの論理的構成要素に対応付けられたソフトウェア構成要素に包含されるソフトウェア構成要素が、別の論理的構成要素に対応付けられていないかどうかを判定する、ソフトウェア構造分析装置。
  4. 請求項2に記載のソフトウェア構造分析装置において、
    前記ソフトウェア構成要素と前記論理的構成要素の対応関係を表す対応関係情報を作成する時に、全ての論理的構成要素に対してソフトウェア構成要素を対応付けられているかどうかを判定する、ソフトウェア構造分析装置。
  5. 請求項1〜4のいずれか1項に記載のソフトウェア構造分析装置において、
    前記配置情報取得部が、前記論理的構成要素間の関係を幾何学的な位置関係で表したデータを、前記配置情報として取得する、ソフトウェア構造分析装置。
  6. 請求項1〜5のいずれか1項に記載のソフトウェア構造分析装置において、
    前記依存関係検査部は、前記依存関係情報で示される前記ソフトウェア構成要素の間の依存関係と、前記対応関係情報で示される前記論理的構成要素と前記ソフトウェア構成要素の対応関係から、前記論理的構成要素間の依存関係を算出し、当該論理的構成要素間の依存関係と、前記配置情報で示される前記論理的構成要素の位置関係とに基づいて問題のある依存関係を特定する、請求項1に記載のソフトウェア構造分析装置。
  7. 請求項6に記載のソフトウェア構造分析装置において、
    前記依存関係検査部が、前記論理的構成要素間の依存関係および前記配置情報で示される前記論理的構成要素の位置関係から、前記論理的構成要素間の各依存関係の方向を計算し、当該各依存関係の方向を基に問題のある依存関係を特定する、ソフトウェア構造分析装置。
  8. 請求項7に記載のソフトウェア構造分析装置において、
    前記依存関係検査部が、前記依存関係情報の方向から、前記配置情報が意味するソフトウェアの構造において問題のない依存関係情報の方向である依存関係方向情報を判断し、当該依存関係が示す方向情報と、前記論理的構成要素間の各依存関係とを比較することにより、問題のある依存関係を特定する、ソフトウェア構造分析装置。
  9. 請求項8に記載のソフトウェア構造分析装置において、
    前記依存関係検査部が、前記論理的構成要素間の各依存関係のうち、前記依存関係方向情報の示す方向に対して逆向きの依存関係を、問題のある依存関係と判定する、ソフトウェア構造分析装置。
  10. 請求項1〜9のいずれか1項に記載のソフトウェア構造分析装置において、
    前記依存関係検査部が、前記配置情報から、依存元の論理的構成要素と依存先の論理的構成要素の距離を計算し、当該距離を用いて、問題のある依存関係を特定する、ソフトウェア構造分析装置。
  11. 請求項7に記載のソフトウェア構造分析装置において、
    前記依存関係検査部が、前記依存関係方向情報の示す方向に対して逆向きである前記論理的構成要素間の依存関係のうち、前記配置情報における依存元の論理的構成要素と依存先の論理的構成要素の間の距離が、あらかじめ保持しているまたは外部から与えられる閾値を越える依存関係を、問題のある依存関係と判定する、ソフトウェア構造分析装置。
  12. 請求項1〜11のいずれか1項に記載のソフトウェア構造分析装置において、
    前記配置情報は、更新可能であり、
    前記配置情報が更新された場合に、前記問題のある依存関係の特定および出力を実行することを特徴とするソフトウェア構造分析装置。
  13. ソフトウェア構成要素の情報である構成要素情報を取得する構成要素情報取得処理と、
    前記ソフトウェア構成要素の間の依存関係である依存関係情報を取得する依存関係情報取得処理と、
    前記ソフトウェア構成要素を1つまたは複数まとめた論理的構成要素の位置関係を示す配置情報を取得する配置情報取得処理と、
    前記配置情報に含まれる前記論理的構成要素と前記ソフトウェア構成要素の対応関係である対応関係情報を取得する対応関係情報取得処理と、
    前記構成要素情報と前記依存関係情報と前記配置情報と前記対応関係情報から問題のある依存関係を特定する依存関係検査処理と、
    前記依存関係検査処理が特定した問題のある依存関係の検査結果を出力する結果出力処理と
    をコンピュータに実行させるソフトウェア構造分析プログラム。
  14. コンピュータが実行するソフトウェア構造分析方法であって、
    ソフトウェア構成要素の情報である構成要素情報を取得する構成要素情報取得工程と、
    前記ソフトウェア構成要素の間の依存関係である依存関係情報を取得する依存関係情報取得工程と、
    前記ソフトウェア構成要素を1つまたは複数まとめた論理的構成要素の位置関係を示す配置情報を取得する配置情報取得工程と、
    前記配置情報に含まれる前記論理的構成要素と前記ソフトウェア構成要素の対応関係である対応関係情報を取得する対応関係情報取得工程と、
    前記構成要素情報と前記依存関係情報と前記配置情報と前記対応関係情報から問題のある依存関係を特定する依存関係検査工程と、
    前記依存関係検査工程で特定された問題のある依存関係の検査結果を出力する結果出力工程と
    を含むソフトウェア構造分析方法。
JP2010035057A 2010-02-19 2010-02-19 ソフトウェア構造分析装置 Withdrawn JP2011170697A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010035057A JP2011170697A (ja) 2010-02-19 2010-02-19 ソフトウェア構造分析装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010035057A JP2011170697A (ja) 2010-02-19 2010-02-19 ソフトウェア構造分析装置

Publications (1)

Publication Number Publication Date
JP2011170697A true JP2011170697A (ja) 2011-09-01

Family

ID=44684742

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010035057A Withdrawn JP2011170697A (ja) 2010-02-19 2010-02-19 ソフトウェア構造分析装置

Country Status (1)

Country Link
JP (1) JP2011170697A (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016133879A (ja) * 2015-01-16 2016-07-25 横河電機株式会社 エンジニアリング支援装置、方法、及びプログラム
KR101706098B1 (ko) * 2015-09-25 2017-02-23 (주)씽크포비엘 소프트웨어 분석 방법 및 장치
WO2017052318A1 (ko) * 2015-09-25 2017-03-30 (주)씽크포비엘 소프트웨어 분석 방법 및 장치
KR101734418B1 (ko) * 2015-10-30 2017-05-25 (주)씽크포비엘 소프트웨어 위험분석 방법 및 장치
US11379224B2 (en) 2017-02-16 2022-07-05 Mitsubishi Electric Corporation Scale calculation apparatus and computer readable medium

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016133879A (ja) * 2015-01-16 2016-07-25 横河電機株式会社 エンジニアリング支援装置、方法、及びプログラム
KR101706098B1 (ko) * 2015-09-25 2017-02-23 (주)씽크포비엘 소프트웨어 분석 방법 및 장치
WO2017052318A1 (ko) * 2015-09-25 2017-03-30 (주)씽크포비엘 소프트웨어 분석 방법 및 장치
KR101734418B1 (ko) * 2015-10-30 2017-05-25 (주)씽크포비엘 소프트웨어 위험분석 방법 및 장치
US11379224B2 (en) 2017-02-16 2022-07-05 Mitsubishi Electric Corporation Scale calculation apparatus and computer readable medium

Similar Documents

Publication Publication Date Title
US8726226B2 (en) Integrated work lists for engineering project change management
US10324828B2 (en) Generating annotated screenshots based on automated tests
US10452366B2 (en) Method and tool for engineering software architectures with its various software artifacts of complex cyber-physical systems of different technical domains
FI118064B (fi) Äärellisen tilakonemallin luominen
US9081595B1 (en) Displaying violated coding rules in source code
US8719745B2 (en) Method and system for automatically establishing hierarchical parameterized cell (PCELL) debugging environment
US20140214396A1 (en) Specification properties creation for a visual model of a system
CN102667867A (zh) 改进的计算机实施的几何特征检测方法
US7730466B2 (en) System and method for manipulating source code in a text editor
JP2011170697A (ja) ソフトウェア構造分析装置
US20090217259A1 (en) Building Operating System Images Based on Applications
JP5814603B2 (ja) テスト仕様作成支援装置、方法及びプログラム
US10042638B2 (en) Evaluating documentation coverage
US10884711B2 (en) Code management system and code management method using a visual programming tool
US20070225953A1 (en) Management system and management method of CAD data
JP2009545824A (ja) プラズマ処理システムコンポーネント解析ソフトウェアおよびそのプラズマ処理システムコンポーネント解析ソフトウェアを製作するための方法およびシステム
JP2009099111A (ja) 規則検査プログラム、規則検査方法および規則検査装置
JP2006209179A (ja) モデル差分検出ツール
US20100169053A1 (en) Method for creating weldment inspection documents
JP5041986B2 (ja) コンポーネント分割支援装置、及びその方法とプログラム
JPWO2015145556A1 (ja) ソフトウェア仕様間依存関係検証装置、及びソフトウェア仕様間依存関係検証方法
JP2004310317A (ja) 業務支援装置
JP5595224B2 (ja) ラダープログラム比較方法
CN112597057B (zh) 一种蓝图数据的差异化处理方法和装置
Vesikkala Visual regression testing for web applications

Legal Events

Date Code Title Description
A300 Withdrawal of application because of no request for examination

Free format text: JAPANESE INTERMEDIATE CODE: A300

Effective date: 20130507