JP2009122754A - ソフトウェア開発支援装置 - Google Patents
ソフトウェア開発支援装置 Download PDFInfo
- Publication number
- JP2009122754A JP2009122754A JP2007293303A JP2007293303A JP2009122754A JP 2009122754 A JP2009122754 A JP 2009122754A JP 2007293303 A JP2007293303 A JP 2007293303A JP 2007293303 A JP2007293303 A JP 2007293303A JP 2009122754 A JP2009122754 A JP 2009122754A
- Authority
- JP
- Japan
- Prior art keywords
- function
- program code
- source program
- source
- 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.)
- Pending
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
【課題】各機能を担当する実行プログラムとソースプログラムコード間の関係を自動抽出し、ソースプログラムコード変更による他機能への影響範囲を漏れなく且つ見やすい形で開発者に提示することができるソフトウェア開発支援装置を得る。
【解決手段】ソフトウェア開発支援装置1は、開発される全機能についてのソースプログラムコードを保管するリポジトリデータベース5から、リポジトリインタフェース部6によりソースプログラムコードを取得し、ソース解析部7により、取得したソースプログラムコードを解析して解析結果データベース11〜16に保管し、影響範囲図作成部9により、解析結果を用いて、ソースプログラムコードを変更したときの他のソースプログラムコードへの影響範囲を図示するようにしたものである。
【選択図】図1
【解決手段】ソフトウェア開発支援装置1は、開発される全機能についてのソースプログラムコードを保管するリポジトリデータベース5から、リポジトリインタフェース部6によりソースプログラムコードを取得し、ソース解析部7により、取得したソースプログラムコードを解析して解析結果データベース11〜16に保管し、影響範囲図作成部9により、解析結果を用いて、ソースプログラムコードを変更したときの他のソースプログラムコードへの影響範囲を図示するようにしたものである。
【選択図】図1
Description
この発明は、ソフトウェア開発時に変更部位の既存のソースプログラムコードへの影響範囲を開発者に明示するようにしたソフトウェア開発支援装置に関するものである。
ソフトウェア開発では、近年ますます規模の増大がみられ、多人数での開発が必要となっている。このような環境下では、各開発者が担当する部位の相互依存関係を把握することが品質確保のために非常に重要である。
また、過去、既に開発済みのソースプログラムコードを流用し、効率よく開発を行うプロジェクトが増加してきている。この場合、流用するソースプログラムコードに対応した設計ドキュメントが整備されていれば、その内容理解や他機能との依存関係を容易に把握できるが、過去の度重なる改造等でドキュメントがメンテナンスされないままにソフトウェアが更新されていることが多く、結果としてドキュメントとソースプログラムコードの不一致を招き、高い品質を保ちながらソフトウェアの変更や追加開発を実現することを困難にしている場合がある。
また、過去、既に開発済みのソースプログラムコードを流用し、効率よく開発を行うプロジェクトが増加してきている。この場合、流用するソースプログラムコードに対応した設計ドキュメントが整備されていれば、その内容理解や他機能との依存関係を容易に把握できるが、過去の度重なる改造等でドキュメントがメンテナンスされないままにソフトウェアが更新されていることが多く、結果としてドキュメントとソースプログラムコードの不一致を招き、高い品質を保ちながらソフトウェアの変更や追加開発を実現することを困難にしている場合がある。
このような環境下において、開発を支援する従来技術として、特許文献1では、ソースプログラムコードと仕様書類とを関係付けたデータベースを構築することで管理し、要求仕様書を変更する場合には変更すべきソースプログラムコードを自動的に抽出し、開発者に提示することを可能としている。
また、特許文献2では、ソフトウェアで使用されている関数、変数を自動抽出してプログラムモデルを作成し、関数や変数を修正する場合には、当該関数や変数が使用されているソースプログラムコードを開発者に提示することを可能としている。
さらに、特許文献3では、関数、変数を使用している箇所の抽出だけでなく、ミドルウェア関数を使用した分散環境下での依存関係の追跡方法を開示している。
また、特許文献2では、ソフトウェアで使用されている関数、変数を自動抽出してプログラムモデルを作成し、関数や変数を修正する場合には、当該関数や変数が使用されているソースプログラムコードを開発者に提示することを可能としている。
さらに、特許文献3では、関数、変数を使用している箇所の抽出だけでなく、ミドルウェア関数を使用した分散環境下での依存関係の追跡方法を開示している。
特許文献1の従来技術については、機能とソースプログラムコードとの関係を対応づけるために、仕様書とソフトウェアとの関連付け情報を人手により構築する必要があり、多大な労力を要するという欠点があった。
特に、最近のソフトウェア開発では、過去のソフトウェア資産をブラックボックスのまま再利用しようとする場合が多く、本方式をそのまま適用する場合にはコストがかかるという問題がある。
特に、最近のソフトウェア開発では、過去のソフトウェア資産をブラックボックスのまま再利用しようとする場合が多く、本方式をそのまま適用する場合にはコストがかかるという問題がある。
特許文献2の従来技術では、情報構築に必要な手続きは自動化されているものの、ソフトウェアの依存関係として抽出できるのは、関数や変数を直接使用している箇所だけであり、当該関数を使用する関数をさらに使用している関数まで追いかけ、影響範囲として提示する具体的な手段の開示は、行われていない。
これを補う他の技術として、ある関数を間接的に利用する関数までの関数コール数を求めて、これを数値化して影響度を把握する技術が存在するが、この方法では、開発者にとって把握が容易という点に対して、情報がマクロ化されてしまい、実際に影響するところを把握し漏らすという欠点があった。
これを補う他の技術として、ある関数を間接的に利用する関数までの関数コール数を求めて、これを数値化して影響度を把握する技術が存在するが、この方法では、開発者にとって把握が容易という点に対して、情報がマクロ化されてしまい、実際に影響するところを把握し漏らすという欠点があった。
また、最近の大規模ソフトウェアでは、ミドルウェア関数により、あるプログラムが他の実行プログラムに通知する手段が多用される傾向にあり、単に関数の依存関係だけを抽出してもソフトウェア同士の正確な依存関係が見出せないという問題がある。
特許文献3の従来技術では、ミドルウェア関数を使用する環境下での依存関係チェックに関する技術が公開されているが、尾となる言語環境で定義された関数や引数を直接使用する箇所のチェックにとどまっており、上述のような実行モジュール単位での依存関係の抽出には至っていない。
また、大量に存在する関数同士の関係が抽出されてしまう大規模ソフトウェアの開発では、上記いずれの技術においても抽出される情報が多すぎて、肝心な実行プログラム間の係わり合いを把握しそこなうという欠点があった。
特許文献3の従来技術では、ミドルウェア関数を使用する環境下での依存関係チェックに関する技術が公開されているが、尾となる言語環境で定義された関数や引数を直接使用する箇所のチェックにとどまっており、上述のような実行モジュール単位での依存関係の抽出には至っていない。
また、大量に存在する関数同士の関係が抽出されてしまう大規模ソフトウェアの開発では、上記いずれの技術においても抽出される情報が多すぎて、肝心な実行プログラム間の係わり合いを把握しそこなうという欠点があった。
この発明は、上述のような課題を解決するためになされたものであり、各機能を担当する実行プログラムとソースプログラムコード間の関係を自動抽出し、ソースプログラムコード変更による他機能への影響範囲を漏れなく且つ見やすい形で開発者に提示することができるソフトウェア開発支援装置を得ることを目的にしている。
この発明に係わるソフトウェア開発支援装置においては、開発される全機能についてのソースプログラムコードを保管するリポジトリデータベースから、ソースプログラムコードを取得するリポジトリインタフェース部、及びこのリポジトリインタフェース部によって取得されたソースプログラムコードを解析するソース解析部を備え、
ソース解析部は、機能に対応する実行プログラムとソースプログラムコードとの対応関係を抽出する実行ソース対応抽出手段と、ソースプログラムコードで定義されている関数を抽出し、この抽出された関数間の呼び出し関係を抽出する関数関係抽出手段と、関数間の呼び出し関係を用いて、実行プログラム間の依存関係を抽出する実行プログラム関係抽出手段とを有するものである。
ソース解析部は、機能に対応する実行プログラムとソースプログラムコードとの対応関係を抽出する実行ソース対応抽出手段と、ソースプログラムコードで定義されている関数を抽出し、この抽出された関数間の呼び出し関係を抽出する関数関係抽出手段と、関数間の呼び出し関係を用いて、実行プログラム間の依存関係を抽出する実行プログラム関係抽出手段とを有するものである。
この発明は、以上説明したように、開発される全機能についてのソースプログラムコードを保管するリポジトリデータベースから、ソースプログラムコードを取得するリポジトリインタフェース部、及びこのリポジトリインタフェース部によって取得されたソースプログラムコードを解析するソース解析部を備え、
ソース解析部は、機能に対応する実行プログラムとソースプログラムコードとの対応関係を抽出する実行ソース対応抽出手段と、ソースプログラムコードで定義されている関数を抽出し、この抽出された関数間の呼び出し関係を抽出する関数関係抽出手段と、関数間の呼び出し関係を用いて、実行プログラム間の依存関係を抽出する実行プログラム関係抽出手段とを有するので、人手による労力をかけなくとも既存のソフトウェアリポジトリから機能とソースプログラムコードの関係を自動で抽出・解析することができ、また、直接関数をコールする箇所だけでなく実行プログラム間の依存関係も探索し抽出することができる。
ソース解析部は、機能に対応する実行プログラムとソースプログラムコードとの対応関係を抽出する実行ソース対応抽出手段と、ソースプログラムコードで定義されている関数を抽出し、この抽出された関数間の呼び出し関係を抽出する関数関係抽出手段と、関数間の呼び出し関係を用いて、実行プログラム間の依存関係を抽出する実行プログラム関係抽出手段とを有するので、人手による労力をかけなくとも既存のソフトウェアリポジトリから機能とソースプログラムコードの関係を自動で抽出・解析することができ、また、直接関数をコールする箇所だけでなく実行プログラム間の依存関係も探索し抽出することができる。
実施の形態1.
この発明は、特に監視制御システム等の大規模システムが、機能毎に分割された膨大な数の実行プログラムによって構成されることから、機能とソースプログラムコードとの関係を把握するために、各機能を担当する実行プログラムとソースプログラムコードとの対応付けを解明すれば、開発者にとって非常に有益な情報が得られることに着目した。
これにより、各機能を担当する実行プログラムとソースプログラムコード間の関係を自動抽出し、また、関数の抽出結果とも組み合わせてソースプログラムコードを解析することで、ミドルウェア等による実行プログラム間の依存関係も抽出し、ソースプログラムコード変更による他機能への影響範囲を漏れなく且つ見やすい形で開発者に提示するようにしたものである。
この発明は、特に監視制御システム等の大規模システムが、機能毎に分割された膨大な数の実行プログラムによって構成されることから、機能とソースプログラムコードとの関係を把握するために、各機能を担当する実行プログラムとソースプログラムコードとの対応付けを解明すれば、開発者にとって非常に有益な情報が得られることに着目した。
これにより、各機能を担当する実行プログラムとソースプログラムコード間の関係を自動抽出し、また、関数の抽出結果とも組み合わせてソースプログラムコードを解析することで、ミドルウェア等による実行プログラム間の依存関係も抽出し、ソースプログラムコード変更による他機能への影響範囲を漏れなく且つ見やすい形で開発者に提示するようにしたものである。
図1は、この発明の実施の形態1によるソフトウェア開発支援装置を示す構成図である。
図1において、ソフトウェア開発支援装置1は、ソフトウェアの開発を行う開発者によって使用される情報処理用の端末装置2と、開発対象の全ソフトウェアに関するソースプログラムコードを保管するリポジトリデータベース5を持つソフトウェアリポジトリ装置4とに、ネットワーク3を介して接続されている。
ソフトウェア開発支援装置1は、ソフトウェアリポジトリ装置4と通信を行い、同装置で保持するリポジトリデータベース5からソースプログラムコードを取得するためのリポジトリインタフェース部6と、このリポジトリインタフェース部6により取得したソースプログラムコードを解析し、結果をデータベースインタフェース部10を介して、各種解析結果データベース11〜16に登録するソース解析部7と、解析結果データベース11〜16の情報を用いて、端末装置2に情報提供するためのソースプログラムコード影響範囲図を作成する影響範囲図作成部9と、影響範囲図作成部9の作成要求を端末装置2から受け付けて、結果を端末装置2に返信する端末インタフェース部8とにより構成される。
図1において、ソフトウェア開発支援装置1は、ソフトウェアの開発を行う開発者によって使用される情報処理用の端末装置2と、開発対象の全ソフトウェアに関するソースプログラムコードを保管するリポジトリデータベース5を持つソフトウェアリポジトリ装置4とに、ネットワーク3を介して接続されている。
ソフトウェア開発支援装置1は、ソフトウェアリポジトリ装置4と通信を行い、同装置で保持するリポジトリデータベース5からソースプログラムコードを取得するためのリポジトリインタフェース部6と、このリポジトリインタフェース部6により取得したソースプログラムコードを解析し、結果をデータベースインタフェース部10を介して、各種解析結果データベース11〜16に登録するソース解析部7と、解析結果データベース11〜16の情報を用いて、端末装置2に情報提供するためのソースプログラムコード影響範囲図を作成する影響範囲図作成部9と、影響範囲図作成部9の作成要求を端末装置2から受け付けて、結果を端末装置2に返信する端末インタフェース部8とにより構成される。
解析結果データベース11〜16には、ソース解析部7によってリポジトリデータベース5にある全プログラムソースコードを解析した結果が保管されている。
ソースデータベース部11は、リポジトリデータベース5にある全ソースプログラムコードに対して管理のための一意なIDとバージョン情報を付加して保管している。モジュール構成ソースデータベース部12は、各実行プログラムがどのソースプログラムコードから生成されているかの情報と各実行プログラムが実現する機能名を管理している。関数定義一覧データベース部13は、全ソースプログラムコードにて定義される関数を一意なIDを付加して保管している。関数使用箇所一覧データベース部14は、全ソースプログラムコードにて使用される関数の使用箇所と与えられる引数を保管している。関数関係データベース部15は、関数間の呼び出し関係を管理している。プログラム関係データベース部16は、実行プログラム間の呼び出し関係を管理している。
ソースデータベース部11は、リポジトリデータベース5にある全ソースプログラムコードに対して管理のための一意なIDとバージョン情報を付加して保管している。モジュール構成ソースデータベース部12は、各実行プログラムがどのソースプログラムコードから生成されているかの情報と各実行プログラムが実現する機能名を管理している。関数定義一覧データベース部13は、全ソースプログラムコードにて定義される関数を一意なIDを付加して保管している。関数使用箇所一覧データベース部14は、全ソースプログラムコードにて使用される関数の使用箇所と与えられる引数を保管している。関数関係データベース部15は、関数間の呼び出し関係を管理している。プログラム関係データベース部16は、実行プログラム間の呼び出し関係を管理している。
図2は、この発明の実施の形態1によるソフトウェア開発支援装置の処理手順を示すフローチャートである。
図3は、この発明の実施の形態1によるソフトウェア開発支援装置の解析対象のディレクトリ構成とプロセス定義を示す図である。
図3のディレクトリ構成が、そのままリポジトリデータベース5に登録されている。ただし、図で斜体文字になった部分、つまり、Objectディレクトリ下にあるFunctionA1.o等のコンパイル実行後に生成されるオブジェクトやProgram1等の実行プログラムは、各開発者が開発時に生成するものであるため、リポジトリデータベース5には登録されない。
ここで、Program1というディレクトリには、FunctionA1.cというソースプログラムコードがあり、同ディレクトリ内のMakefileには、FunctionA1.cを元にして、直下のObjectというディレクトリ下に実行プログラムProgram1を生成するというルールが記載されている。
また、その他ディレクトリについても、Library1がFunctionB.cから生成されること、Program2がFunctionC1.cから生成されること、Program3がFunctionD1.c、FunctionD2.cから生成されることが、Makefileに記載されている。
同じく図3には、コンパイルされた実行プログラムが実行される計算機やプライオリティ等の挙動をミドルウェア機能により管理するために用意される定義ファイル情報を示しており、このようなミドルウェア動作に必要な定義ファイルもリポジトリデータベース5にソースプログラムコードと同様に保管される。
図3は、この発明の実施の形態1によるソフトウェア開発支援装置の解析対象のディレクトリ構成とプロセス定義を示す図である。
図3のディレクトリ構成が、そのままリポジトリデータベース5に登録されている。ただし、図で斜体文字になった部分、つまり、Objectディレクトリ下にあるFunctionA1.o等のコンパイル実行後に生成されるオブジェクトやProgram1等の実行プログラムは、各開発者が開発時に生成するものであるため、リポジトリデータベース5には登録されない。
ここで、Program1というディレクトリには、FunctionA1.cというソースプログラムコードがあり、同ディレクトリ内のMakefileには、FunctionA1.cを元にして、直下のObjectというディレクトリ下に実行プログラムProgram1を生成するというルールが記載されている。
また、その他ディレクトリについても、Library1がFunctionB.cから生成されること、Program2がFunctionC1.cから生成されること、Program3がFunctionD1.c、FunctionD2.cから生成されることが、Makefileに記載されている。
同じく図3には、コンパイルされた実行プログラムが実行される計算機やプライオリティ等の挙動をミドルウェア機能により管理するために用意される定義ファイル情報を示しており、このようなミドルウェア動作に必要な定義ファイルもリポジトリデータベース5にソースプログラムコードと同様に保管される。
図4は、この発明の実施の形態1によるソフトウェア開発支援装置の解析対象のソースプログラムコードを示す図である。
図4において、このソースプログラムコードでは、複数のファイルに、関数FunctionA1、FunctionB1、FunctionB2、FunctionC1、FunctionD1、FunctionD2が定義されている。
FunctionA1は、関数FunctionB1を呼び出しており、FunctionB1は、ミドルウェアの提供するプログラム起動関数(process_execute)により“Program2”を起動し、イベント通知関数(send_event)により”Program3“に番号9999の事象を通知している。FunctionD1では、イベント番号9999が通知された場合には、FunctionD2を呼び出すことが定義されている。
図4において、このソースプログラムコードでは、複数のファイルに、関数FunctionA1、FunctionB1、FunctionB2、FunctionC1、FunctionD1、FunctionD2が定義されている。
FunctionA1は、関数FunctionB1を呼び出しており、FunctionB1は、ミドルウェアの提供するプログラム起動関数(process_execute)により“Program2”を起動し、イベント通知関数(send_event)により”Program3“に番号9999の事象を通知している。FunctionD1では、イベント番号9999が通知された場合には、FunctionD2を呼び出すことが定義されている。
図5は、この発明の実施の形態1によるソフトウェア開発支援装置のソースデータベースを示す図である。
図5において、登録されたソースプログラムコードのファイル(図中、構成ソースファイル)が、一意となるソースIDとバージョン情報と共に登録され、ソースIDを用いてソースプログラムコードを特定することができる。
図5において、登録されたソースプログラムコードのファイル(図中、構成ソースファイル)が、一意となるソースIDとバージョン情報と共に登録され、ソースIDを用いてソースプログラムコードを特定することができる。
図6は、この発明の実施の形態1によるソフトウェア開発支援装置のモジュール構成ソースデータベースを示す図である。
図6において、各実行プログラムがどのソースプログラムコード(構成ソースファイル)から生成されるかが登録されている。すなわち、実行プログラム名称と、機能と、構成ソースファイルが対応付けられている。
図6において、各実行プログラムがどのソースプログラムコード(構成ソースファイル)から生成されるかが登録されている。すなわち、実行プログラム名称と、機能と、構成ソースファイルが対応付けられている。
図7は、この発明の実施の形態1によるソフトウェア開発支援装置の関数定義一覧データベースを示す図である。
図7において、関数定義一覧データベース13には、ソースプログラムコードで定義されている全関数が、一意となる関数IDが付記されて登録されている。すなわち、関数ICと、関数名と、ソースファイル名と、関数定義開始行と最終行とが対応付けられている。
図7において、関数定義一覧データベース13には、ソースプログラムコードで定義されている全関数が、一意となる関数IDが付記されて登録されている。すなわち、関数ICと、関数名と、ソースファイル名と、関数定義開始行と最終行とが対応付けられている。
図8は、この発明の実施の形態1によるソフトウェア開発支援装置の関数使用箇所一覧データベースを示す図である。
図8において、関数使用箇所一覧データベース14には、ソースプログラムコードで使用される各関数が、どのソースファイルのどの行で使用され、どのような引数がセットされているかという情報が登録されている。
図8において、関数使用箇所一覧データベース14には、ソースプログラムコードで使用される各関数が、どのソースファイルのどの行で使用され、どのような引数がセットされているかという情報が登録されている。
図9は、この発明の実施の形態1によるソフトウェア開発支援装置の関数関係データベースを示す図である。
図9においては、図7で登録された関数が相互にどのような呼び出し関係になっているかが登録されている。通知種別は、通知手段の詳細を示しており、ある関数が直接ある関数を呼び出す場合は“関数呼び出し”として登録され、ある関数が他の実行プログラムをミドルウェア関数やOSのシステムコール使用によるプログラム起動により呼び出す場合は“プログラム起動”、ある関数が他の実行プログラムにイベント通知により呼び出す場合は“イベント通知”として登録される。
図9においては、図7で登録された関数が相互にどのような呼び出し関係になっているかが登録されている。通知種別は、通知手段の詳細を示しており、ある関数が直接ある関数を呼び出す場合は“関数呼び出し”として登録され、ある関数が他の実行プログラムをミドルウェア関数やOSのシステムコール使用によるプログラム起動により呼び出す場合は“プログラム起動”、ある関数が他の実行プログラムにイベント通知により呼び出す場合は“イベント通知”として登録される。
図10は、この発明の実施の形態1によるソフトウェア開発支援装置のプログラム関係データベースを示す図である。
図10において、プログラム関係データベース16には、実行プログラム間の呼び出し関係が登録されている。通知種別は、図9におけるものと同様である。
図10において、プログラム関係データベース16には、実行プログラム間の呼び出し関係が登録されている。通知種別は、図9におけるものと同様である。
図11は、この発明の実施の形態1によるソフトウェア開発支援装置の関数間相互関係図を示す図である。
図11の図では、関数相互の関係を、開発者は容易に把握することができる。関数の関係は、(1)実行プログラム名の囲み、(2)ソースファイル名の囲み、(3)関数名の囲みの3階層で区別して依存関係を表記しており、関係の把握を容易としている。
図11の図では、関数相互の関係を、開発者は容易に把握することができる。関数の関係は、(1)実行プログラム名の囲み、(2)ソースファイル名の囲み、(3)関数名の囲みの3階層で区別して依存関係を表記しており、関係の把握を容易としている。
図12は、この発明の実施の形態1によるソフトウェア開発支援装置の影響箇所を表示した関数間相互関係図を示す図である。
図12においては、FunctionC1を直接呼び出している関数だけでなく、間接的に呼び出している関数を含め、影響を受けるすべての関数を色替え表示している。
図12においては、FunctionC1を直接呼び出している関数だけでなく、間接的に呼び出している関数を含め、影響を受けるすべての関数を色替え表示している。
図13は、この発明の実施の形態1によるソフトウェア開発支援装置の影響箇所を表示した実行プログラム間相互関係図を示す図である。
図13においては、図12の表示を関数単位でなく機能(実行プログラム)単位で表示したものであり、大規模プログラムや複雑なプログラムの場合でも、容易に機能間の影響範囲を特定することが可能である。
図13においては、図12の表示を関数単位でなく機能(実行プログラム)単位で表示したものであり、大規模プログラムや複雑なプログラムの場合でも、容易に機能間の影響範囲を特定することが可能である。
次に、ソフトウェア開発支援装置の動作について説明する。
図2のソフトウェア開発支援装置1の処理手順を示すフローチャートに沿って説明する。
ソフトウェア開発支援装置1では、まず、ソースプログラムコードの解析が指示されると、図4に示すソースプログラムコードに関する情報を、リポジトリデータベース5から読み取り(ステップS11)、ソースプログラムコードのプリプロセッシングを実行する(ステップS12)。
このプリプロセッシングでは、関数あるいは関数の引数がマクロにより記述される場合があると、ステップS15以降の解析処理を困難とするため、これを解決するために実施するものである。この処理が完了すると、図5に示すソースデータベースのように、全ソースプログラムコードファイルの名称がバージョンと共に、ソースデータベース11に一意なIDを付加して登録される(ステップS13)。
図2のソフトウェア開発支援装置1の処理手順を示すフローチャートに沿って説明する。
ソフトウェア開発支援装置1では、まず、ソースプログラムコードの解析が指示されると、図4に示すソースプログラムコードに関する情報を、リポジトリデータベース5から読み取り(ステップS11)、ソースプログラムコードのプリプロセッシングを実行する(ステップS12)。
このプリプロセッシングでは、関数あるいは関数の引数がマクロにより記述される場合があると、ステップS15以降の解析処理を困難とするため、これを解決するために実施するものである。この処理が完了すると、図5に示すソースデータベースのように、全ソースプログラムコードファイルの名称がバージョンと共に、ソースデータベース11に一意なIDを付加して登録される(ステップS13)。
次に、リポジトリデータベース5に登録された図3に示すような各ディレクトリ上にあるMakefileを読み取り、各ソースプログラムコードと実行プログラムの対応を抽出し、図6に示すモジュール構成ソースデータベース12を作成する。実行プログラムに対応した機能名は、図3に示すように、プロセスを制御する役割を担うミドルウェアのプロセス定義情報から自動抽出する(ステップS14、実行ソース対応抽出手段)。
さらに、図4のように、ソースプログラムコードで定義されている関数を抽出することで、図7に示す関数定義一覧データベース13を作成する(ステップS15)。
この関数定義一覧データベース13には、各関数の実体が定義されているソースファイル名と行番号を保管する。ここで行番号とは、関数の定義開始行から最後の行のことであり、図4のソースプログラムコードでは、FunctionA1はFunctionA1.cの1行目〜3行目までに定義されているので、開始行が1、最終行が3と登録される。
この関数定義一覧データベース13には、各関数の実体が定義されているソースファイル名と行番号を保管する。ここで行番号とは、関数の定義開始行から最後の行のことであり、図4のソースプログラムコードでは、FunctionA1はFunctionA1.cの1行目〜3行目までに定義されているので、開始行が1、最終行が3と登録される。
次に、図4に示すソースプログラムコードから、どの関数がどのソースファイルのどの行で定使用されているかを抽出し、図8に示す関数使用箇所一覧データベース14に各関数にセットされる引数に関する情報と合わせて登録する(ステップS16)。
次に、関数の呼び出し関係を管理する関数関係データベースの登録を行う(ステップS17、関数関係抽出手段)。ここでは、関数定義一覧データベース13と関数使用箇所一覧データベース14の情報を使用する。
たとえば、図8に示す関数使用箇所一覧データベース14において、FunctionB2は、ソースファイルS2の2行目で使用されることを示しているが、図7に示す関数定義一覧データベース13を参照すると、S2の2行目は、IDがF2のFunctionB1であることが分かる。さらに、FuncitonB2そのものは、関数定義一覧データベース13を参照すると、IDがF3であることが分かるので、結果、F2からF3を関数呼び出ししていると解析され、図9に示す関数関係データベース15に、呼び出し元IDがF2、呼び出し先IDがF3、通知種別が“関数呼び出し”として登録される。
たとえば、図8に示す関数使用箇所一覧データベース14において、FunctionB2は、ソースファイルS2の2行目で使用されることを示しているが、図7に示す関数定義一覧データベース13を参照すると、S2の2行目は、IDがF2のFunctionB1であることが分かる。さらに、FuncitonB2そのものは、関数定義一覧データベース13を参照すると、IDがF3であることが分かるので、結果、F2からF3を関数呼び出ししていると解析され、図9に示す関数関係データベース15に、呼び出し元IDがF2、呼び出し先IDがF3、通知種別が“関数呼び出し”として登録される。
また、ミドルウェア関数により、実行プロセスから他実行プロセスに通知するような関係も、あわせて関数関係データベース15に抽出を行う(ステップS18)。ミドルウェア関数の使用は、事前にソース解析部7に登録されており、例えば図4のprocess_executeという関数が指定した実行プログラムに起動を行う関数である場合、ソース解析部7は、引数で与えられる”Program2“が呼び出し先の実行プログラム名であることを解釈できる。
ここで、ソース解析部7は、”Program2“に対応するソースプログラムコードS3をモジュール構成ソースデータベース12から抽出し、さらに、関数定義一覧データベース13からソースプログラムコードS3にて定義される関数を抽出し、その中から起動時に実行される受信関数F4を抽出する。
また、process_executeを呼び出しているソースプログラムコードS2の2行目は、図7に示す関数定義一覧データベース13からIDがF2の関数Function2であることが分かるため、これで、F4とF2の関係がプログラム起動として抽出され、図9の関数関係データベース15に通知種別が”プログラム起動“として登録される。
ここで、ソース解析部7は、”Program2“に対応するソースプログラムコードS3をモジュール構成ソースデータベース12から抽出し、さらに、関数定義一覧データベース13からソースプログラムコードS3にて定義される関数を抽出し、その中から起動時に実行される受信関数F4を抽出する。
また、process_executeを呼び出しているソースプログラムコードS2の2行目は、図7に示す関数定義一覧データベース13からIDがF2の関数Function2であることが分かるため、これで、F4とF2の関係がプログラム起動として抽出され、図9の関数関係データベース15に通知種別が”プログラム起動“として登録される。
その他の代表的なミドルウェア関数の例として、実行プロセスから他実行プロセスにイベント通知を行う場合の動作を示す。
図4に示すFunctionB1では、send_eventというイベント通知を行う関数を用いて、実行プログラム”Program3“に対して、イベント番号9999の通知を行っている。一方、FunctionD1では、register_eventというイベント登録関数により、イベント番号9999を受信対象として登録すると共に、イベント番号9999が通知された場合には、FunctionD2の呼び出しを行う処理を行う。
この場合、ソース解析部7は、関数使用箇所一覧データベース14に登録されたsend_event関数の引数1の”Program3”が通知先の実行プログラム名であることを解釈し、”Program3“に対応するソースプログラムコードS4、S5をモジュール構成ソースデータベース12から抽出する。
さらに、関数使用箇所一覧データベース14から、ソースプログラムコードS4、S5にて使用されるregister_event関数で、かつ引数1が9999となっている関数を抽出する。
こうして抽出されたregister_eventが呼び出す関数の引数2が”FunctionD2“であることが、関数使用箇所一覧データベース14から抽出でき、”FunctionD2”の関数IDがF6であることが、同じく関数定義一覧データベース13から抽出できることから、結果として、F2がF6に対してイベント通知を行っていることが解釈され、図9の関数関係データベース15にF2とF6への関係が通知種別”イベント通知“として登録される。
図4に示すFunctionB1では、send_eventというイベント通知を行う関数を用いて、実行プログラム”Program3“に対して、イベント番号9999の通知を行っている。一方、FunctionD1では、register_eventというイベント登録関数により、イベント番号9999を受信対象として登録すると共に、イベント番号9999が通知された場合には、FunctionD2の呼び出しを行う処理を行う。
この場合、ソース解析部7は、関数使用箇所一覧データベース14に登録されたsend_event関数の引数1の”Program3”が通知先の実行プログラム名であることを解釈し、”Program3“に対応するソースプログラムコードS4、S5をモジュール構成ソースデータベース12から抽出する。
さらに、関数使用箇所一覧データベース14から、ソースプログラムコードS4、S5にて使用されるregister_event関数で、かつ引数1が9999となっている関数を抽出する。
こうして抽出されたregister_eventが呼び出す関数の引数2が”FunctionD2“であることが、関数使用箇所一覧データベース14から抽出でき、”FunctionD2”の関数IDがF6であることが、同じく関数定義一覧データベース13から抽出できることから、結果として、F2がF6に対してイベント通知を行っていることが解釈され、図9の関数関係データベース15にF2とF6への関係が通知種別”イベント通知“として登録される。
以上のように、関数関係データベース15の生成が完了すると、次に、図10のプログラム関係データベース16の生成を行う(ステップS19、実行プログラム関係抽出手段)。
プログラム関係データベース16は、関数関係データベース15のうち通知種別がプログラム起動またはイベント通知となっているものを抽出し、実行プログラム同士の関係を明らかにしたものである。
図9の関数関係データベースでは、F2とF4の関係が、プログラム起動の関係にあることが抽出されているので、図6のモジュール構成ソースデータベース12と図7の関数定義一覧データベース13の情報を用いて、F2が対応する実行プログラム名称がProgram1であり、F4に対応する実行プログラムがProgram2であることが抽出できる。
これにより、図10に示すプログラム関係データベース16のとおり、Program1とProgram2の関係、Program2とProgram3の関係が抽出され、データベースとして登録される。
プログラム関係データベース16は、関数関係データベース15のうち通知種別がプログラム起動またはイベント通知となっているものを抽出し、実行プログラム同士の関係を明らかにしたものである。
図9の関数関係データベースでは、F2とF4の関係が、プログラム起動の関係にあることが抽出されているので、図6のモジュール構成ソースデータベース12と図7の関数定義一覧データベース13の情報を用いて、F2が対応する実行プログラム名称がProgram1であり、F4に対応する実行プログラムがProgram2であることが抽出できる。
これにより、図10に示すプログラム関係データベース16のとおり、Program1とProgram2の関係、Program2とProgram3の関係が抽出され、データベースとして登録される。
以上が、ソース解析部7による、データベース11〜16の生成の動作であるが、次に開発者がこの装置に対して解析結果表示要求を行う場合の動作を説明する。
端末装置2から開発者が、影響度チェックを実施したいソース名称や関数名を指定すると、要求された名称を端末インタフェース部8が受付け、影響範囲図作成部9に通知される。影響範囲図作成部9では、要求されたソース名称や関数名を基点にして、前述の方法により生成された関数関係データベース15とプログラム関係データベース16の情報を用いることで、図11に示すような相互関係図を作成し、端末装置2に描画データとして返信・表示する。
端末装置2から開発者が、影響度チェックを実施したいソース名称や関数名を指定すると、要求された名称を端末インタフェース部8が受付け、影響範囲図作成部9に通知される。影響範囲図作成部9では、要求されたソース名称や関数名を基点にして、前述の方法により生成された関数関係データベース15とプログラム関係データベース16の情報を用いることで、図11に示すような相互関係図を作成し、端末装置2に描画データとして返信・表示する。
図12は、開発者から関数名がFunctionC1の影響範囲チェックを指定された場合に生成する図を示している。図12では、指定された関数を呼び出している関数を順に探索することで、すべての経路上に存在する関数を色替えにより明示している。
例えば、開発者がFunctionC1を変更しようとする際、FunctionC1に影響する箇所を提示することができるため、影響する範囲を洩れなく確認することができる。
例えば、開発者がFunctionC1を変更しようとする際、FunctionC1に影響する箇所を提示することができるため、影響する範囲を洩れなく確認することができる。
図11や図12では、関数の関係を、(1)実行プログラムの囲み、(2)ソースファイル名の囲み、(3)関数名の囲みの3階層で区別して依存関係をわかりやすく表記しているが、大規模なプログラムになると膨大な情報が抽出されるため、図13のように実行プログラムや実行プログラムが実現する機能の関係のみに着目した図示も行うことができる。
これにより、開発者は大規模なソフトウェアであっても、難なく依存関係を把握することが可能となる。
これにより、開発者は大規模なソフトウェアであっても、難なく依存関係を把握することが可能となる。
このように、この発明のソフトウェア開発支援装置によれば、機能とソースプログラムコード間の関係を自動抽出し、また、関数の抽出結果とも組み合わせてソースプログラムコードを解析することで、従来方式では関係を追いかけることができなかったミドルウェア等による実行プログラム間の依存関係も抽出し、変更ソースプログラムコードによる影響範囲を漏れなく、且つ見やすい形で開発者に提示することができる。
したがって、人手による労力をかけずとも既存のソフトウェアリポジトリから機能(実行プログラム)とソースプログラムコードの関係を自動で抽出・解析することができ、また、直接関数をコールする箇所だけでなく実行プログラム間の依存関係も探索し、抽出することができ、さらに、関数だけの関係だけでは膨大な情報が表示されてしまう点を、ポイントを絞り込むことができるため、開発者に効率よく情報提示を行うことができるという効果がある。
したがって、人手による労力をかけずとも既存のソフトウェアリポジトリから機能(実行プログラム)とソースプログラムコードの関係を自動で抽出・解析することができ、また、直接関数をコールする箇所だけでなく実行プログラム間の依存関係も探索し、抽出することができ、さらに、関数だけの関係だけでは膨大な情報が表示されてしまう点を、ポイントを絞り込むことができるため、開発者に効率よく情報提示を行うことができるという効果がある。
上記説明では、この発明の用途として開発者が端末装置2から指定したある関数の影響範囲のチェックに活用する場合を例に説明したが、その他の用途として、ソースデータベース11で管理しているバージョン情報を用いて、バージョンの差分があった箇所と影響範囲を自動で抽出するという用途にも利用できる。
また、上記説明では、実行プログラムとソースプログラムコードとの関係を、Makefileの記述から抽出し、モジュール構成ソースデータベース14を自動生成する方法を記載したが、一般のバージョン管理システムを用いれば、ソースプログラムコードに関する情報をキーワードとして実行プログラムに自動で埋め込んでおくことができるので、実行プログラムからident等のコマンドを用いて構成されるプログラムソースコードを特定してモジュール構成ソースデータベース14を自動生成する方法も利用可能である。
また、上記説明では、実行プログラムとソースプログラムコードとの関係を、Makefileの記述から抽出し、モジュール構成ソースデータベース14を自動生成する方法を記載したが、一般のバージョン管理システムを用いれば、ソースプログラムコードに関する情報をキーワードとして実行プログラムに自動で埋め込んでおくことができるので、実行プログラムからident等のコマンドを用いて構成されるプログラムソースコードを特定してモジュール構成ソースデータベース14を自動生成する方法も利用可能である。
1 ソフトウェア開発支援装置、2 端末装置、3 ネットワーク、
4 ソフトウェアリポジトリ装置、5 リポジトリデータベース、
6 リポジトリインタフェース部、7 ソース解析部、8 端末インタフェース部、
9 影響範囲図作成部、10 データベースインタフェース部、
11 ソースデータベース、12 モジュール構成ソースデータベース、
13 関数定義一覧データベース、15 関数使用箇所一覧データベース、
15 関数関係データベース、16 プログラム関係データベース。
4 ソフトウェアリポジトリ装置、5 リポジトリデータベース、
6 リポジトリインタフェース部、7 ソース解析部、8 端末インタフェース部、
9 影響範囲図作成部、10 データベースインタフェース部、
11 ソースデータベース、12 モジュール構成ソースデータベース、
13 関数定義一覧データベース、15 関数使用箇所一覧データベース、
15 関数関係データベース、16 プログラム関係データベース。
Claims (5)
- 開発される全機能についてのソースプログラムコードを保管するリポジトリデータベースから、上記ソースプログラムコードを取得するリポジトリインタフェース部、及びこのリポジトリインタフェース部によって取得された上記ソースプログラムコードを解析するソース解析部を備え、
上記ソース解析部は、上記機能に対応する実行プログラムとソースプログラムコードとの対応関係を抽出する実行ソース対応抽出手段と、上記ソースプログラムコードで定義されている関数を抽出し、この抽出された関数間の呼び出し関係を抽出する関数関係抽出手段と、上記関数間の呼び出し関係を用いて、上記実行プログラム間の依存関係を抽出する実行プログラム関係抽出手段とを有することを特徴とするソフトウェア開発支援装置。 - 上記ソース解析部による解析結果を用いて、上記ソースプログラムコードを変更したときの他のソースプログラムコードへの影響範囲を図示する影響範囲図作成部を備えたことを特徴とする請求項1記載のソフトウェア開発支援装置。
- 上記影響範囲図作成部は、上記関数関係抽出手段によって抽出された関数間の呼び出し関係及び上記実行プログラム関係抽出手段によって抽出された実行プログラム間の依存関係に基づき、上記ソースプログラムコードが変更されたときの他のソースプログラムコードへの影響範囲を図示することを特徴とする請求項2記載のソフトウェア開発支援装置。
- 上記影響範囲図作成部は、上記ソースプログラムコードが変更されたときの影響範囲を、実行プログラム名の囲み、ソースプログラムコード名の囲み、関数名の囲みの3階層で図示することを特徴とする請求項2または請求項3記載のソフトウェア開発支援装置。
- 上記影響範囲図作成部は、上記ソースプログラムコードが変更されたときの影響範囲を、実行プログラムの単位で図示することを特徴とする請求項2または請求項3記載のソフトウェア開発支援装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007293303A JP2009122754A (ja) | 2007-11-12 | 2007-11-12 | ソフトウェア開発支援装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007293303A JP2009122754A (ja) | 2007-11-12 | 2007-11-12 | ソフトウェア開発支援装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2009122754A true JP2009122754A (ja) | 2009-06-04 |
Family
ID=40814872
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007293303A Pending JP2009122754A (ja) | 2007-11-12 | 2007-11-12 | ソフトウェア開発支援装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2009122754A (ja) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011243014A (ja) * | 2010-05-19 | 2011-12-01 | Systems Co Ltd | 情報処理装置、情報処理方法、およびプログラム |
JP2012247881A (ja) * | 2011-05-26 | 2012-12-13 | Hitachi Ltd | 影響分析方法および影響分析プログラム |
WO2018150505A1 (ja) * | 2017-02-16 | 2018-08-23 | 三菱電機株式会社 | 規模算出装置及び規模算出プログラム |
WO2018158893A1 (ja) * | 2017-03-01 | 2018-09-07 | 三菱電機株式会社 | ソースコード解析装置、ソースコード解析方法及びソースコード解析プログラム |
CN110781086A (zh) * | 2019-10-23 | 2020-02-11 | 南京大学 | 一种基于程序依赖关系和符号分析的跨项目缺陷影响分析方法 |
-
2007
- 2007-11-12 JP JP2007293303A patent/JP2009122754A/ja active Pending
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011243014A (ja) * | 2010-05-19 | 2011-12-01 | Systems Co Ltd | 情報処理装置、情報処理方法、およびプログラム |
JP2012247881A (ja) * | 2011-05-26 | 2012-12-13 | Hitachi Ltd | 影響分析方法および影響分析プログラム |
WO2018150505A1 (ja) * | 2017-02-16 | 2018-08-23 | 三菱電機株式会社 | 規模算出装置及び規模算出プログラム |
GB2573417A (en) * | 2017-02-16 | 2019-11-06 | Mitsubishi Electric Corp | Scale calculation device and scale calculation program |
GB2573417B (en) * | 2017-02-16 | 2021-11-24 | Mitsubishi Electric Corp | Scale calculation apparatus and scale calculation program |
WO2018158893A1 (ja) * | 2017-03-01 | 2018-09-07 | 三菱電機株式会社 | ソースコード解析装置、ソースコード解析方法及びソースコード解析プログラム |
CN110781086A (zh) * | 2019-10-23 | 2020-02-11 | 南京大学 | 一种基于程序依赖关系和符号分析的跨项目缺陷影响分析方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108363587B (zh) | 应用程序运行监控方法、装置、计算机设备和存储介质 | |
Raibulet et al. | Model-driven reverse engineering approaches: A systematic literature review | |
Zhou et al. | API deprecation: a retrospective analysis and detection method for code examples on the web | |
Xu et al. | Why reinventing the wheels? an empirical study on library reuse and re-implementation | |
KR100661393B1 (ko) | 웹 프로그래밍 환경을 응용한 웹사이트 관리 시스템 및방법 | |
JP5911594B2 (ja) | アプリケーションのローカリゼイションにおける翻訳支援の提供 | |
US9229738B2 (en) | Software development tool for providing user context information to improve message quality at development time | |
US20170177311A1 (en) | Service extraction and application composition | |
CN102236549A (zh) | 跨动态边界的运行时分析的可视化 | |
JP2005196291A (ja) | ユーザインタフェースアプリケーション開発プログラム、および開発装置 | |
JP2011128777A (ja) | 操作監視装置 | |
JP2009122754A (ja) | ソフトウェア開発支援装置 | |
CN112799718A (zh) | 一种枚举文档的生成方法、装置、电子设备及存储介质 | |
Chowdhury | Mastering Visual Studio 2017 | |
Gómez et al. | An approach to the co-creation of models and metamodels in Enterprise Architecture Projects. | |
US20200097260A1 (en) | Software application developer tools platform | |
Mészáros et al. | Delivering comprehension features into source code editors through LSP | |
JP4846029B2 (ja) | 動作検証装置、動作検証方法および動作検証プログラム | |
Kano | Kachako: A Hybrid-Cloud Unstructured Information Platform for Full Automation of Service Composition, Scalable Deployment and Evaluation: Natural Language Processing as an Example | |
CN115794214A (zh) | 应用模块元数据管理方法、设备、存储介质及装置 | |
Maras et al. | Towards specifying pragmatic software reuse | |
Dong et al. | Design pattern evolutions in QVT | |
JP2013037580A (ja) | 情報処理装置 | |
JP2007115155A (ja) | プログラム構造管理装置及びプログラム構造管理プログラム | |
Zhou et al. | DockerKG: A knowledge graph of docker artifacts |