(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024108626
(43)【公開日】2024-08-13
(54)【発明の名称】プログラム構造解析装置、プログラム構造解析方法、およびプログラム構造解析用コンピュータプログラム
(51)【国際特許分類】
G06F 8/75 20180101AFI20240805BHJP
【FI】
G06F8/75
【審査請求】未請求
【請求項の数】4
【出願形態】OL
(21)【出願番号】P 2023013080
(22)【出願日】2023-01-31
(71)【出願人】
【識別番号】000003207
【氏名又は名称】トヨタ自動車株式会社
(71)【出願人】
【識別番号】000004260
【氏名又は名称】株式会社デンソー
(74)【代理人】
【識別番号】100099759
【弁理士】
【氏名又は名称】青木 篤
(74)【代理人】
【識別番号】100123582
【弁理士】
【氏名又は名称】三橋 真二
(74)【代理人】
【識別番号】100092624
【弁理士】
【氏名又は名称】鶴田 準一
(74)【代理人】
【識別番号】100147555
【弁理士】
【氏名又は名称】伊藤 公一
(74)【代理人】
【識別番号】100123593
【弁理士】
【氏名又は名称】関根 宣夫
(74)【代理人】
【識別番号】100133835
【弁理士】
【氏名又は名称】河野 努
(74)【代理人】
【識別番号】100122116
【弁理士】
【氏名又は名称】井上 浩二
(72)【発明者】
【氏名】木戸 肩吾
(72)【発明者】
【氏名】ニューイェン トゥー クィンフ ヌー
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376BB01
5B376BB09
5B376BB13
(57)【要約】
【課題】プログラムを構成する機能単位であるブロックのそれぞれにおける入力-出力間の依存関係を解析することができるプログラム構造解析装置を提供する。
【解決手段】コンピュータに所定の処理を実行させるためのプログラムの構造を解析するプログラム構造解析装置は、対象ブロックに設定された出力ポートから特定された基準ポートに対応づけられた起点ピンについて、起点ピンに対応する動作における入力元を特定し、対象ブロックにより実行可能な動作に対応する出力ピンが入力元として特定されなくなるまで、特定された入力元を起点ピンとして入力元の特定を繰り返し、対象ブロックにより実行可能な動作に対応する出力ピンでない入力元からの入力を受け付ける入力ピンに対応する入力ポートを依存ポートとして特定し、対象ブロックに設定された出力ポートのそれぞれについて、当該出力ポートが依存する依存ポートを表す依存関係データを出力する。
【選択図】
図7
【特許請求の範囲】
【請求項1】
コンピュータに所定の処理を実行させるためのプログラムを構成する複数のブロックのうちの対象ブロックと、前記対象ブロックにおいて実行可能な1以上の動作のそれぞれとの第1の対応関係を記憶し、前記対象ブロックと、前記対象ブロックの外部のデータ提供部から前記対象ブロックがデータを受け付けるためのメモリ空間に対応する1以上の入力ポートのそれぞれ、および、前記対象ブロックの外部のデータ受領部にデータを渡すためのメモリ空間に対応する1以上の出力ポートのそれぞれとの第2の対応関係を記憶し、前記1以上の動作のそれぞれについて、当該動作に用いるデータを前記データ提供部または前記1以上の動作のうちのいずれかの動作である入力元から受け付けるためのメモリ空間に対応する入力ピンおよび当該入力元、および、当該動作により生成されるデータを前記データ受領部または前記1以上の動作のうちのいずれかの動作である出力先に渡すためのメモリ空間に対応する出力ピンおよび当該出力先との第3の対応関係を記憶し、さらに、前記1以上の動作のそれぞれに対応する前記入力ピンのうち前記1以上の入力ポートのいずれかに割り当てられる入力ピンと当該入力ピンが割り当てられる入力ポートとの対応関係、および、前記1以上の動作のそれぞれに対応する前記出力ピンのうち前記1以上の出力ポートのいずれかに割り当てられる出力ピンと当該出力ピンが割り当てられる出力ポートとの対応関係を含む第4の対応関係とを記憶する記憶部から、前記第2の対応関係、前記第3の対応関係および前記第4の対応関係を参照して、前記対象ブロックに対応する前記1以上の出力ポートのうちの基準ポートに割り当てられた1以上の前記出力ピンのうちの起点ピンについて、前記起点ピンに対応する動作における前記入力元を特定し、前記第1の対応関係および前記第3の対応関係を参照して、前記1以上の動作のいずれかに対応する出力ピンが前記入力元として特定されなくなるまで、前記特定された入力元を前記起点ピンとして前記入力元の特定を繰り返し、前記第4の対応関係を参照して、前記1以上の入力ポートのうち、前記1以上の動作のいずれかに対応する出力ピンでない前記入力元からの入力を受け付ける入力ピンが割り当てられた入力ポートを前記基準ポートが依存する依存ポートとして特定する解析部と、
前記対象ブロックに設定された前記1以上の出力ポートのそれぞれについて、当該出力ポートが依存する前記依存ポートを表す依存関係データを出力する出力部と、
を備えるプログラム構造解析装置。
【請求項2】
前記出力部は、前記複数のポートのそれぞれがノードとして表され、前記複数のポートのうち一の出力ポートと前記一の出力ポートが依存する依存ポートとの依存関係が前記一の出力ポートに対応する前記ノードと前記依存ポートに対応する前記ノードとを接続するエッジにより表された依存関係チャートを、前記依存関係データとして出力する請求項1に記載のプログラム構造解析装置。
【請求項3】
コンピュータに所定の処理を実行させるためのプログラムの構造を解析するプログラム構造解析装置が、
前記プログラムを構成する複数のブロックのうちの対象ブロックと、前記対象ブロックにおいて実行可能な1以上の動作のそれぞれとの第1の対応関係を記憶し、前記対象ブロックと、前記対象ブロックの外部のデータ提供部から前記対象ブロックがデータを受け付けるためのメモリ空間に対応する1以上の入力ポートのそれぞれ、および、前記対象ブロックの外部のデータ受領部にデータを渡すためのメモリ空間に対応する1以上の出力ポートのそれぞれとの第2の対応関係を記憶し、前記1以上の動作のそれぞれについて、当該動作に用いるデータを前記データ提供部または前記1以上の動作のうちのいずれかの動作である入力元から受け付けるためのメモリ空間に対応する入力ピンおよび当該入力元、および、当該動作により生成されるデータを前記データ受領部または前記1以上の動作のうちのいずれかの動作である出力先に渡すためのメモリ空間に対応する出力ピンおよび当該出力先との第3の対応関係を記憶し、さらに、前記1以上の動作のそれぞれに対応する前記入力ピンのうち前記1以上の入力ポートのいずれかに割り当てられる入力ピンと当該入力ピンが割り当てられる入力ポートとの対応関係、および、前記1以上の動作のそれぞれに対応する前記出力ピンのうち前記1以上の出力ポートのいずれかに割り当てられる出力ピンと当該出力ピンが割り当てられる出力ポートとの対応関係を含む第4の対応関係を記憶する記憶部から、前記第2の対応関係、前記第3の対応関係および前記第4の対応関係を参照して、前記対象ブロックに対応する前記1以上の出力ポートのうちの基準ポートに割り当てられた1以上の前記出力ピンのうちの起点ピンについて、前記起点ピンに対応する動作における前記入力元を特定し、
前記第1の対応関係および前記第3の対応関係を参照して、前記1以上の動作のいずれかに対応する出力ピンが前記入力元として特定されなくなるまで、前記特定された入力元を前記起点ピンとして前記入力元の特定を繰り返し、
前記第4の対応関係を参照して、前記1以上の入力ポートのうち、前記1以上の動作のいずれかに対応する出力ピンでない前記入力元からの入力を受け付ける入力ピンが割り当てられた入力ポートを前記基準ポートが依存する依存ポートとして特定し、
前記対象ブロックに設定された前記1以上の出力ポートのそれぞれについて、当該出力ポートが依存する前記依存ポートを表す依存関係データを出力する、
ことを含むプログラム構造解析方法。
【請求項4】
コンピュータに所定の処理を実行させるためのプログラムを構成する複数のブロックのうちの対象ブロックと、前記対象ブロックにおいて実行可能な1以上の動作のそれぞれとの第1の対応関係を記憶し、前記対象ブロックと、前記対象ブロックの外部のデータ提供部から前記対象ブロックがデータを受け付けるためのメモリ空間に対応する1以上の入力ポートのそれぞれ、および、前記対象ブロックの外部のデータ受領部にデータを渡すためのメモリ空間に対応する1以上の出力ポートのそれぞれとの第2の対応関係を記憶し、前記1以上の動作のそれぞれについて、当該動作に用いるデータを前記データ提供部または前記1以上の動作のうちのいずれかの動作である入力元から受け付けるためのメモリ空間に対応する入力ピンおよび当該入力元、および、当該動作により生成されるデータを前記データ受領部または前記1以上の動作のうちのいずれかの動作である出力先に渡すためのメモリ空間に対応する出力ピンおよび当該出力先との第3の対応関係を記憶し、さらに、前記1以上の動作のそれぞれに対応する前記入力ピンのうち前記1以上の入力ポートのいずれかに割り当てられる入力ピンと当該入力ピンが割り当てられる入力ポートとの対応関係、および、前記1以上の動作のそれぞれに対応する前記出力ピンのうち前記1以上の出力ポートのいずれかに割り当てられる出力ピンと当該出力ピンが割り当てされる出力ポートとの対応関係を含む第4の対応関係とを記憶する記憶部から、前記第2の対応関係、前記第3の対応関係および前記第4の対応関係を参照して、前記対象ブロックに対応する前記1以上の出力ポートのうちの基準ポートに割り当てられた1以上の前記出力ピンのうちの起点ピンについて、前記起点ピンに対応する動作における前記入力元を特定することと、
前記第1の対応関係および前記第3の対応関係を参照して、前記1以上の動作のいずれかに対応する出力ピンが前記入力元として特定されなくなるまで、前記特定された入力元を前記起点ピンとして前記入力元の特定を繰り返すことと、
前記第4の対応関係を参照して、前記1以上の入力ポートのうち、前記1以上の動作のいずれかに対応する出力ピンでない前記入力元からの入力を受け付ける入力ピンが割り当てられた入力ポートを前記基準ポートが依存する依存ポートとして特定することと、
前記対象ブロックに設定された前記1以上の出力ポートのそれぞれについて、当該出力ポートが依存する前記依存ポートを表す依存関係データを出力することと、
をコンピュータに実行させる、プログラム構造解析用コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、コンピュータに所定の処理を実行させるためのプログラムの構造を解析するプログラム構造解析装置に関する。
【背景技術】
【0002】
プログラムを構成する機能単位であるブロックが階層化される、複数のブロックが並列に実行されるなどの複雑な構造を有するプログラムでは、あるブロックの変更は、その出力を入力として用いることで当該ブロックに依存する他のブロックに影響を与える。プログラムの構造を解析しブロック間の依存関係を把握することで、プログラムの開発・変更を効率的に行うことができる。
【0003】
特許文献1には、オブジェクトのフィールドから変更されたフィールドへ向かうエッジを形成した有向グラフを生成するプログラム解析装置が記載されている。特許文献1に記載のプログラム解析装置は、解析対象プログラムを1ステップずつ実行した実行結果から、オブジェクトのフィールドの変更履歴とその変更の原因となったオブジェクトのフィールドの情報を取得してオブジェクト間の因果関係を抽出する。そして、特許文献1に記載のプログラム解析装置は、オブジェクト間の因果関係に基づいて、各オブジェクトの各フィールドをノードとし、変更の原因となったフィールドから変更されたフィールドへ向かうエッジを形成した有向グラフを生成する。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【発明が解決しようとする課題】
【0005】
入力-出力間の依存関係は、通常、ブロックの動作を様々な側面から規定する多数の要求仕様によって表される。一つの要求仕様はブロックが実行する動作の一部を規定するものであるため、プログラムの構造の解析において、各ブロックにおける入力-出力間の依存関係を統合して把握することは容易ではない。
【0006】
本開示は、プログラムを構成する機能単位であるブロックのそれぞれにおける入力-出力間の依存関係を解析することができるプログラム構造解析装置を提供することを目的とする。
【課題を解決するための手段】
【0007】
本開示の要旨は以下のとおりである。
【0008】
(1)コンピュータに所定の処理を実行させるためのプログラムを構成する複数のブロックのうちの対象ブロックと、前記対象ブロックにおいて実行可能な1以上の動作のそれぞれとの第1の対応関係を記憶し、前記対象ブロックと、前記対象ブロックの外部のデータ提供部から前記対象ブロックがデータを受け付けるためのメモリ空間に対応する1以上の入力ポートのそれぞれ、および、前記対象ブロックの外部のデータ受領部にデータを渡すためのメモリ空間に対応する1以上の出力ポートのそれぞれとの第2の対応関係を記憶し、前記1以上の動作のそれぞれについて、当該動作に用いるデータを前記データ提供部または前記1以上の動作のうちのいずれかの動作である入力元から受け付けるためのメモリ空間に対応する入力ピンおよび当該入力元、および、当該動作により生成されるデータを前記データ受領部または前記1以上の動作のうちのいずれかの動作である出力先に渡すためのメモリ空間に対応する出力ピンおよび当該出力先との第3の対応関係を記憶し、さらに、前記1以上の動作のそれぞれに対応する前記入力ピンのうち前記1以上の入力ポートのいずれかに割り当てられる入力ピンと当該入力ピンが割り当てられる入力ポートとの対応関係、および、前記1以上の動作のそれぞれに対応する前記出力ピンのうち前記1以上の出力ポートのいずれかに割り当てられる出力ピンと当該出力ピンが割り当てられる出力ポートとの対応関係を含む第4の対応関係とを記憶する記憶部から、前記第2の対応関係、前記第3の対応関係および前記第4の対応関係を参照して、前記対象ブロックに対応する前記1以上の出力ポートのうちの基準ポートに割り当てられた1以上の前記出力ピンのうちの起点ピンについて、前記起点ピンに対応する動作における前記入力元を特定し、前記第1の対応関係および前記第3の対応関係を参照して、前記1以上の動作のいずれかに対応する出力ピンが前記入力元として特定されなくなるまで、前記特定された入力元を前記起点ピンとして前記入力元の特定を繰り返し、前記第4の対応関係を参照して、前記1以上の入力ポートのうち、前記1以上の動作のいずれかに対応する出力ピンでない前記入力元からの入力を受け付ける入力ピンが割り当てられた入力ポートを前記基準ポートが依存する依存ポートとして特定する解析部と、
前記対象ブロックに設定された前記1以上の出力ポートのそれぞれについて、当該出力ポートが依存する前記依存ポートを表す依存関係データを出力する出力部と、
を備えるプログラム構造解析装置。
【0009】
(2)前記出力部は、前記複数のポートのそれぞれがノードとして表され、前記複数のポートのうち一の出力ポートと前記一の出力ポートが依存する依存ポートとの依存関係が前記一の出力ポートに対応する前記ノードと前記依存ポートに対応する前記ノードとを接続するエッジにより表された依存関係チャートを、前記依存関係データとして出力する上記(1)に記載のプログラム構造解析装置。
【0010】
(3)コンピュータに所定の処理を実行させるためのプログラムの構造を解析するプログラム構造解析装置が、
前記プログラムを構成する複数のブロックのうちの対象ブロックと、前記対象ブロックにおいて実行可能な1以上の動作のそれぞれとの第1の対応関係を記憶し、前記対象ブロックと、前記対象ブロックの外部のデータ提供部から前記対象ブロックがデータを受け付けるためのメモリ空間に対応する1以上の入力ポートのそれぞれ、および、前記対象ブロックの外部のデータ受領部にデータを渡すためのメモリ空間に対応する1以上の出力ポートのそれぞれとの第2の対応関係を記憶し、前記1以上の動作のそれぞれについて、当該動作に用いるデータを前記データ提供部または前記1以上の動作のうちのいずれかの動作である入力元から受け付けるためのメモリ空間に対応する入力ピンおよび当該入力元、および、当該動作により生成されるデータを前記データ受領部または前記1以上の動作のうちのいずれかの動作である出力先に渡すためのメモリ空間に対応する出力ピンおよび当該出力先との第3の対応関係を記憶し、さらに、前記1以上の動作のそれぞれに対応する前記入力ピンのうち前記1以上の入力ポートのいずれかに割り当てられる入力ピンと当該入力ピンが割り当てられる入力ポートとの対応関係、および、前記1以上の動作のそれぞれに対応する前記出力ピンのうち前記1以上の出力ポートのいずれかに割り当てられる出力ピンと当該出力ピンが割り当てられる出力ポートとの対応関係を含む第4の対応関係を記憶する記憶部から、前記第2の対応関係、前記第3の対応関係および前記第4の対応関係を参照して、前記対象ブロックに対応する前記1以上の出力ポートのうちの基準ポートに割り当てられた1以上の前記出力ピンのうちの起点ピンについて、前記起点ピンに対応する動作における前記入力元を特定し、
前記第1の対応関係および前記第3の対応関係を参照して、前記1以上の動作のいずれかに対応する出力ピンが前記入力元として特定されなくなるまで、前記特定された入力元を前記起点ピンとして前記入力元の特定を繰り返し、
前記第4の対応関係を参照して、前記1以上の入力ポートのうち、前記1以上の動作のいずれかに対応する出力ピンでない前記入力元からの入力を受け付ける入力ピンが割り当てられた入力ポートを前記基準ポートが依存する依存ポートとして特定し、
前記対象ブロックに設定された前記1以上の出力ポートのそれぞれについて、当該出力ポートが依存する前記依存ポートを表す依存関係データを出力する、
ことを含むプログラム構造解析方法。
【0011】
(4)コンピュータに所定の処理を実行させるためのプログラムを構成する複数のブロックのうちの対象ブロックと、前記対象ブロックにおいて実行可能な1以上の動作のそれぞれとの第1の対応関係を記憶し、前記対象ブロックと、前記対象ブロックの外部のデータ提供部から前記対象ブロックがデータを受け付けるためのメモリ空間に対応する1以上の入力ポートのそれぞれ、および、前記対象ブロックの外部のデータ受領部にデータを渡すためのメモリ空間に対応する1以上の出力ポートのそれぞれとの第2の対応関係を記憶し、前記1以上の動作のそれぞれについて、当該動作に用いるデータを前記データ提供部または前記1以上の動作のうちのいずれかの動作である入力元から受け付けるためのメモリ空間に対応する入力ピンおよび当該入力元、および、当該動作により生成されるデータを前記データ受領部または前記1以上の動作のうちのいずれかの動作である出力先に渡すためのメモリ空間に対応する出力ピンおよび当該出力先との第3の対応関係を記憶し、さらに、前記1以上の動作のそれぞれに対応する前記入力ピンのうち前記1以上の入力ポートのいずれかに割り当てられる入力ピンと当該入力ピンが割り当てられる入力ポートとの対応関係、および、前記1以上の動作のそれぞれに対応する前記出力ピンのうち前記1以上の出力ポートのいずれかに割り当てられる出力ピンと当該出力ピンが割り当てされる出力ポートとの対応関係を含む第4の対応関係とを記憶する記憶部から、前記第2の対応関係、前記第3の対応関係および前記第4の対応関係を参照して、前記対象ブロックに対応する前記1以上の出力ポートのうちの基準ポートに割り当てられた1以上の前記出力ピンのうちの起点ピンについて、前記起点ピンに対応する動作における前記入力元を特定することと、
前記第1の対応関係および前記第3の対応関係を参照して、前記1以上の動作のいずれかに対応する出力ピンが前記入力元として特定されなくなるまで、前記特定された入力元を前記起点ピンとして前記入力元の特定を繰り返すことと、
前記第4の対応関係を参照して、前記1以上の入力ポートのうち、前記1以上の動作のいずれかに対応する出力ピンでない前記入力元からの入力を受け付ける入力ピンが割り当てられた入力ポートを前記基準ポートが依存する依存ポートとして特定することと、
前記対象ブロックに設定された前記1以上の出力ポートのそれぞれについて、当該出力ポートが依存する前記依存ポートを表す依存関係データを出力することと、
をコンピュータに実行させる、プログラム構造解析用コンピュータプログラム。
【0012】
本開示にかかるプログラム解析装置によれば、プログラムを構成する機能単位であるブロックのそれぞれにおける入力-出力間の依存関係を解析することができる。
【図面の簡単な説明】
【0013】
【
図3】プログラム構造解析装置のハードウェア構成図である。
【
図4】(a)はブロックと動作との対応関係を表す図であり、(b)はブロックとポートとの対応関係を表す図であり、(c)は動作とピンおよび接続先との対応関係を表す図であり、(d)はピンとポートとの対応関係を表す図である。
【
図5】プログラム構造解析装置が有するプロセッサの機能ブロック図である。
【
図7】プログラム構造解析処理のフローチャートである。
【発明を実施するための形態】
【0014】
以下、図面を参照して、プログラム構造解析装置について詳細に説明する。プログラム構造解析装置は、コンピュータに所定の処理を実行させるためのプログラムの構造を解析する。
【0015】
プログラムは、それぞれ1以上の動作を実行可能な複数のブロックで構成される。複数のブロックのそれぞれは、当該ブロックの外部の入力元または出力先との間でデータの受け渡しを行うために、入力元または出力先ごとに設定される複数のポートを有する。実行形式のプログラムにおいて、ポートは、メモリ空間における所定範囲に相当する。各動作に用いるデータは、入力ピンを介して入力元から受け付けられる。各動作により生成されるデータは、出力ピンを介して出力先に出力される。実行形式のプログラムにおいて、ピンは、メモリ空間における所定範囲に相当する。ブロックの外部の入力元から入力を受け付ける入力ピン、および、ブロックの外部の出力先に出力する出力ピンには、ポートに相当するメモリ空間の所定範囲内の一部が割り当てられる。なお、本開示では、SysML v1.3の用語を用いてプログラムの構造を説明するが、本開示のプログラム構造解析装置は他のモデリング言語(例えばSysMLの他のバージョン、UML等)に従って構造を記述されたプログラムに対しても適用可能である。
【0016】
図1は、プログラムの内部ブロック図の例であり、プログラムの構成要素における接続関係を表す。
【0017】
図1に示すプログラムPG1は、本開示のプログラム構造解析装置の解析対象となるプログラムの一例であり、ブロックBL1とブロックBL2とから構成される。ブロックBL1は、入力ポートPT11を介して入力元DS1から入力を受け付け、動作AC11および動作AC12を実行し、出力ポートPT12を介してブロックBL2に実行結果を出力する。ブロックBL2は、入力ポートPT21を介してブロックBL1から、また、入力ポートPT22を介して入力元DS2から、入力を受け付ける。ブロックBL2は、動作AC21および動作AC22を実行し、出力ポートPT23を介して出力先DD1に、また、出力ポートPT24を介して出力先DD2に、実行結果を出力する。なお、本開示では、入力ポートと出力ポートとをあわせて「ポート」ともいう。
【0018】
入力ポートは、ポートに対応するブロックの外部のデータ提供部からデータを受け付ける。入力元DS1および入力元DS2は、データ提供部の一例である。出力ポートは、ポートに対応するブロックの外部のデータ受領部にデータを渡す。出力先DD1および出力先DD2は、データ受領部の一例である。
【0019】
プログラムPG1は、例えば車両の自動運転のために車両の周辺状況を表す周辺画像および車両の速度に基づいて車両の前後方向の加速度を算出する加速度算出プログラムである。このようなプログラムPG1において、ブロックBL1は、周辺画像から周辺物体の検出する処理ブロックに対応する。入力元DS1は例えば車両の周辺状況を表す周辺画像を生成する周辺カメラである。また、ブロックBL2は、車両の走行経路を作成する処理ブロックに対応する。入力元DS2は例えば車両の速度情報を出力する速度センサであり、出力先DD1は例えば先行車両の情報を表示するディスプレイであり、出力先DD2は例えば指定された加速度に従って車両の加速度を変更する走行機構である。
【0020】
図2は、プログラムPG1のアクティビティ図の例であり、プログラムPG1を構成する各ブロックで実行される動作におけるデータおよび制御の流れを表す。
【0021】
ブロックBL1は、動作AC11と動作AC12とを実行可能である。ブロックBL1は、動作AC11において、入力ピンPN111からデータを受け付けて出力ピンPN112からデータを出力する。また、ブロックBL1は、動作AC12において、入力ピンPN121からデータを受け付けて出力ピンPN122からデータを出力する。なお、本開示では、入力ピンと出力ピンとをあわせて「ピン」ともいう。
【0022】
上述した加速度算出プログラムであるプログラムPG1の例において、ブロックBL1は、入力ピンPN111を介して入力元DS1(周辺カメラ)から受け付けた周辺画像を処理する動作AC11を実行し、出力ピンPN112を介して実行結果を出力する。また、ブロックBL1は、入力ピンPN121を介して出力ピンPN112から受け付けた周辺画像の処理結果に基づいて先行車両の位置および速度を算出する動作AC12を実行し、出力ピンPN122を介して算出結果を出力する。
【0023】
ブロックBL2は、動作AC21と動作AC22とを実行可能である。ブロックBL2は、動作AC21において、入力ピンPN211からデータを受け付けて出力ピンPN212からデータを出力する。また、ブロックBL2は、動作AC22において、入力ピンPN221および入力ピンPN222からデータを受け付けて出力ピンPN223からデータを出力する。
【0024】
入力ピンは、データ提供部、または、当該入力ピンに対応するブロックにおける1以上の動作のうちのいずれかからデータを受け付ける。出力ピンは、データ受領部、または、当該出力ピンに対応するブロックにおける1以上の動作のうちのいずれかにデータを渡す。
【0025】
上述した加速度算出プログラムであるプログラムPG1の例において、ブロックBL2は、入力ピンPN211を介して出力ピンPN122から受け付けた先行車両の位置および速度に基づいて先行車両に関する表示情報を生成する動作AC21を実行する。そして、ブロックBL2は、出力ピンPN212を介して出力先DD1(ディスプレイ)に表示情報を出力する。また、ブロックBL2は、入力ピンPN221を介して出力ピンPN122から受け付けた先行車両の位置および速度と、入力ピンPN222を介して入力元DS2(速度センサ)から受け付けた速度情報とに基づいて、前後方向の目標加速度を算出する動作AC22を実行する。そして、ブロックBL2は、出力ピンPN223を介して出力先DD2(走行機構)に算出結果を出力する。
【0026】
プログラムPG1の開発にあたり、構成する各ブロックの動作は、そのブロックが実行可能な動作ごとに、要件により定義される。複雑なプログラムでは、各ブロックに数千から数万といった多数の要件が定義されるため、一つのアクティビティ図ですべての動作を表すことは現実的ではない。
【0027】
プログラムPG1の一部が変更される場合に、その変更により影響を受ける範囲を適切に把握するには、内部ブロック図に表された各ブロックにおける複数のポートの間の依存関係を知る必要がある。
図2の例では、ブロックBL1の変更により出力ポートPT12から出力される出力データの仕様が変更される場合、出力ポートPT12からデータを受け付ける入力ポートPT21を有するブロックBL2が影響を受けることは把握できる。しかし、このとき出力先DD2が影響を受けるか否かを判定するには、データを受け付ける入力ポートPT21と出力先DD2にデータを出力する出力ポートPT24との間の依存関係が明らかになっている必要がある。
【0028】
図3は、プログラム構造解析装置1のハードウェア模式図である。プログラム構造解析装置1は、通信インタフェース11と、メモリ12と、プロセッサ13とを備えるコンピュータである。
【0029】
通信インタフェース11は、通信部の一例であり、プログラム構造解析装置1を外部機器に対し通信可能に接続するための通信インタフェース回路を有する。通信インタフェース11は、受信したデータをプロセッサ13に供給する。また、通信インタフェース11は、プロセッサ13から供給されたデータを外部に出力する。通信インタフェース11は、例えばIEEE802.3に準拠した通信を行う。
【0030】
メモリ12は、記憶部の一例であり、揮発性の半導体メモリおよび不揮発性の半導体メモリを有する。メモリ12は、プロセッサ13による処理に用いられる各種データ、例えばプログラムを構成する各要素の対応関係を表すアロケーション情報等を保存する。また、メモリ12は、各種アプリケーションプログラム、例えばプログラム構造解析処理を実行するプログラム構造解析用コンピュータプログラム等を保存する。なお、プログラム構造解析装置1は、記憶部として、通信インタフェース11を介して通信可能に接続された記憶装置を有していてもよい。記憶装置は、通信インタフェースと、メモリと、通信インタフェースを介してプログラム構造解析装置1から受信した読み出し命令に応じてメモリから読み出したデータをプログラム構造解析装置1に送信する読み出し処理を実行するプロセッサとを有する。
【0031】
図4(a)-
図4(d)は、メモリ12に記憶される、プログラムPG1を構成する各要素の対応関係を表すアロケーション情報の例を説明する図である。
図4(a)は動作とブロックとの対応関係を表す図であり、
図4(b)はピンと動作および接続先との対応関係を表す図であり、
図4(c)はポートとブロックとの対応関係を表す図であり、
図4(d)はピンとポートとの対応関係を表す図である。
【0032】
図4(a)は、プログラムPG1を構成する複数のブロックのそれぞれにおける、当該ブロックにおいて実行される動作のそれぞれとのブロック-動作対応関係121を表す。ブロック-動作対応関係121は、第1の対応関係の一例である。ブロック-動作対応関係121は、例えば、動作AC11がブロックBL1により実行可能であることを表している。
【0033】
ブロック-動作対応関係121は、プログラムPG1を構成する各ブロックが実行可能な動作をそれぞれ定義する要件に応じて、プログラムPG1の設計者により設定される。ブロック-動作対応関係121は、
図2に示すアクティビティ図の作成に用いられる。
【0034】
図4(b)は、プログラムPG1を構成する複数のブロックのそれぞれにおける、当該ブロックに対応するポートおよび当該ポートが当該ブロックの入力用であるか出力用であるかの別とのブロック-ポート対応関係122を表す。ブロック-ポート対応関係122は、第2の対応関係の一例である。ブロック-ポート対応関係122は、例えば、ポートPT11がブロックBL1の入力に用いられる入力ポートであることを表している。
【0035】
ブロック-ポート対応関係122は、プログラムPG1を構成する各ブロックへのポートを作成する際に、プログラムPG1の設計者により設定される。
【0036】
図4(c)は、プログラムPG1を構成する複数のブロックがそれぞれ実行可能な1以上の動作のそれぞれにおける、当該動作に対応するピンおよび当該ピンが当該動作の入力用であるか出力用であるかの別との動作-ピン対応関係123を表す。動作-ピン対応関係は、第3の対応関係の一例である。動作-ピン対応関係123は、例えば、ポートPT11がブロックBL1の入力に用いられる入力ポートであることを表している。
【0037】
動作-ピン対応関係123は、プログラムPG1を構成する各ブロックが実行可能な動作をそれぞれ定義する要件に応じて、プログラムPG1の設計者により設定される。動作-ピン対応関係123は、
図2に示すアクティビティ図の作成に用いられる。
【0038】
図4(d)は、プログラムPG1を構成する複数のブロックがそれぞれ実行可能な1以上の動作のそれぞれに対応するピンのうち、いずれかのポートに割り当てられるピンと当該ピンが割り当てられるポートとのピン-ポート対応関係124を表す。ピン-ポート対応関係124においてピンが割り当てられるポートには、入力ポートと出力ポートとが含まれる。入力ポートに割り当てられるピンは入力ピンに該当し、出力ポートに割り当てられるピンは出力ピンに該当する。したがって、ピン-ポート対応関係124は、入力ピンと入力ポートとの対応関係および出力ピンと出力ポートとの対応関係を含む。ピン-ポート対応関係124は、第4の対応関係の一例である。ピン-ポート対応関係124は、例えば、ブロックBL1が実行可能な動作のうちの動作AC11に設定されたピンのうちピンPN111が、ブロックBL1が有するポートPT11に対応することを表している。
【0039】
ピン-ポート対応関係124は、プログラムPG1の開発段階において、プログラムPG1の開発者により設定される。なお、プログラムPG1の開発段階において、ポートおよびピンの名称を、これらを用いてやりとりされるデータの内容に応じた名称としておき、プログラム構造解析装置1は、名称に基づいてポートとピンとを対応づけてもよい。例えばブロックBL1が入力元DS1(周辺カメラ)から入力を受け付ける入力ポートPT11の名称が「ImageDataPort」であり、動作AC11が周辺画像を受け付ける入力ピンPN111の名称が「ImageData」であるとする。このようにポートおよびピンの名称を設定しておくことで、プログラム構造解析装置1は、それぞれの名称に含まれる文字列の一致度に基づいて入力ポートPT11と入力ピンPN111とを対応づけたピン-ポート対応関係124を作成し、メモリ12に記憶させることができる。
【0040】
メモリ12には、上記以外の対応関係が記憶されていてもよい。
【0041】
図3に戻り、プロセッサ13は、制御部の一例であり、1以上のプロセッサおよびその周辺回路を有する。プロセッサ13は、論理演算ユニット、数値演算ユニット、またはグラフィック処理ユニットといった他の演算回路をさらに有していてもよい。
【0042】
図5は、プログラム構造解析装置1が有するプロセッサ13の機能ブロック図である。
【0043】
プログラム構造解析装置1のプロセッサ13は、機能ブロックとして、解析部131と、出力部132とを有する。プロセッサ13が有するこれらの各部は、プロセッサ13上で実行されるプログラムによって実装される機能モジュールである。プロセッサ13の各部の機能を実現するコンピュータプログラムは、半導体メモリ、磁気記録媒体または光記録媒体といった、コンピュータ読取可能な可搬性の記録媒体に記録された形で提供されてもよい。あるいは、プロセッサ13が有するこれらの各部は、独立した集積回路、マイクロプロセッサ、またはファームウェアとしてプログラム構造解析装置1に実装されてもよい。
【0044】
解析部131は、メモリ12に記憶されたブロック-ポート対応関係122を参照して、プログラムPG1を構成する複数のブロックのうちの対象ブロックに設定された1以上の出力ポートから、一の出力ポートを基準ポートとして選択する。対象ブロックは、プログラム構造解析装置1の解析対象となるブロックである。対象ブロックは、プログラム構造解析装置1のユーザにより指定されてもよく、複数のブロックから所定の順序により(例えばブロックに付与された符号の昇順で)選択されてもよく、ランダムに選択されてもよい。解析部131は、対象ブロックに対応するポートのうちの出力用の出力ポートから基準ポートを選択する。対象ブロックに設定された出力ポートが複数の場合、解析部131は、対象ブロックに設定された複数の出力ポートから所定の順序により(例えば出力ポートに付与された符号の昇順で)選択する。また、解析部131は、対象ブロックに設定された複数の出力ポートからランダムに基準ポートを選択してもよい。
【0045】
解析部131は、メモリ12に記憶されたピン-ポート対応関係124を参照して、基準ポートに割り当てられたピンを選択する。解析部131は、メモリ12に記憶された動作-ピン対応関係123を参照して、選択されたピンのうち出力用の出力ピンをさらに選択する。解析部131は、選択された出力ピンから起点ピンを選択する。選択された出力ピンが複数の場合、解析部131は、選択された複数の出力ピンから所定の順序により(例えば出力ピンに付与された符号の昇順で)起点ピンを選択する。また、解析部131は、選択された複数の出力ピンからランダムに起点ピンを選択してもよい。
【0046】
解析部131は、メモリ12に記憶された動作-ピン対応関係123を参照して、起点ピンに対応する動作を特定する。解析部131は、動作-ピン対応関係123を参照して、起点ピンに対応づけられた動作に設定された入力ピンを特定する。そして、解析部131は、動作-ピン対応関係123を参照して、特定された入力ピンの接続先を、起点ピンに対応づけられた動作における入力元として特定する。
【0047】
解析部131は、対象ブロックにより実行可能な1以上の動作のいずれかに対応する出力ピンが入力元として特定されなくなるまで、特定された入力元を起点ピンとして入力元の特定を繰り返す。なお、起点ピンに対応づけられた動作に設定された入力ピンが複数ある場合、解析部131は、それぞれの入力ピンについて、入力先の特定を行う。解析部131は、メモリ12に記憶されたブロック-動作対応関係121を参照して、起点ピンに対応づけられた動作を実行するブロックを特定する。解析部131は、特定されたブロックが対象ブロックと同一であるか否かを判定することで、入力元が対象ブロックの外部にあるか否かを判定することができる。なお、入力元が対象ブロックの内部にある場合、当該入力元は対象ブロックが実行可能な動作の出力ピンとなる。
【0048】
解析部131は、メモリ12に記憶されピン-ポート対応関係124を参照して、対象ブロックにおける1以上の動作のいずれかに対応する出力ピンでない入力元からの入力を受け付ける入力ピンが割り当てられた入力ポートを特定する。解析部131は、特定された入力ポートを、基準ポートが依存する依存ポートとしてメモリ12に記憶する。
【0049】
解析部131は、対象ブロックに設定された1以上の出力ポートのうち、まだ基準ポートとして特定されていない一のポートを新たな基準ポートとして特定し、上述の処理を繰り返す。
【0050】
出力部132は、メモリ12に記憶された、対象ブロックに設定された1以上の出力ポートと依存ポートとの関係を参照して、1以上の出力ポートのそれぞれが依存する依存ポートを表す依存関係データを出力する。
【0051】
図6は、依存関係データの例を表す図である。
図6は、ブロックBR2を対象ブロックとしたときの、出力ポートPT23、PT24とそれぞれが依存する依存ポートとの依存関係を画像により表す依存関係チャートである。
【0052】
依存関係チャートは、例えば、複数のポートのそれぞれがノードとして表され、出力ポートと依存ポートとの依存関係が、出力ポートに対応するノードと依存ポートに対応するノードとを接続するエッジにより表される画像である。
【0053】
図6の例において、依存関係DR1は、出力ポートPT23が入力ポートPT21に依存することを表す。依存関係DR2は、出力ポートPT24が入力ポートPT21に依存することを表す。依存関係DR3は、出力ポートPT24が入力ポートPT22に依存することを表す。
【0054】
出力部132は、出力ポートと入力ポートとの依存関係を文字データにより表した依存関係リストを、依存関係データとして出力してもよい。
【0055】
図7は、プログラム構造解析処理のフローチャートである。プログラム構造解析装置1のプロセッサ13は、プログラムPG1を構成する複数のブロックのうち解析対象となる対象ブロックの指定を伴うユーザのプログラム解析指示に応じて、以下に記載するプログラム構造解析処理を実行する。
【0056】
まず、プログラム構造解析装置1のプロセッサ13の解析部131は、対象ブロックに設定された1以上の出力ポートから基準ポートを選択する(ステップS1)。また、解析部131は、基準ポートに対応づけられた1以上の出力ピンから起点ピンを選択する(ステップS2)。そして、解析部131は、起点ピンに対応づけられた動作における入力元を特定する(ステップS3)。
【0057】
解析部131は、起点ピンに対応づけられた動作における入力元が対象ブロックにおける1以上の動作のいずれかに対応する出力ピンであるか否かを判定する(ステップS4)。起点ピンに対応づけられた動作における入力元が対象ブロックにおける1以上の動作のいずれかに対応する出力ピンである場合(ステップS4:Y)、解析部131は当該入力元である出力ピンとして(ステップS5)、ステップS3以降の処理を繰り返す。
【0058】
起点ピンに対応づけられた動作における入力元が対象ブロックにおける1以上の動作のいずれかに対応する出力ピンでない場合(ステップS4:N)、解析部131は、当該入力元からの入力を受け付ける入力ピンに対応する入力ポートを依存ポートとして特定する(ステップS6)。
【0059】
解析部131は、ステップS6までの処理の実行にあたりステップS2で起点ピンとして特定された出力ピンが、基準ポートに対応する1以上の出力ピンの最後であるか否かを判定する(ステップS7)。最後でなかった場合(ステップS7:N)、解析部131の処理はステップS2に戻り、基準ポートに対応する1以上の出力ピンのうち過去のステップS2の処理においてまだ起点ピンとして選択されていない出力ピンから起点ピンを選択する。
【0060】
起点ピンとして特定された出力ピンが最後であった場合(ステップS7:Y)、解析部131は、ステップS7までの処理の実行にあたりステップS1で基準ポートとして選択された出力ポートが、対象ブロックに設定された1以上の出力ポートの最後であるか否かを判定する(ステップS8)。最後でなかった場合(ステップS8:N)、解析部131の処理はステップS1に戻り、対象ブロックに設定された1以上の出力ポートのうち過去のステップS1の処理においてまだ基準ポートとして選択されていない出力ポートから基準ポートを選択する。
【0061】
基準ポートとして選択された出力ポートが最後であった場合(ステップS8:Y)、出力部132は、対象ブロックに設定された1以上の出力ポートのそれぞれが依存する依存ポートを表す依存関係データを出力し(ステップS9)、プログラム構造解析処理を終了する。
【0062】
このようにプログラム構造解析処理を実行することにより、プログラム構造解析装置1は、プログラムを構成する機能単位であるブロックのそれぞれにおける入力-出力間の依存関係を解析することができる。
【0063】
当業者は、本開示の精神および範囲から外れることなく、種々の変更、置換および修正をこれに加えることが可能であることを理解されたい。
【符号の説明】
【0064】
1 プログラム構造解析装置
131 解析部
132 出力部