(57)【特許請求の範囲】
【請求項１】
実行プログラムを構成する部分プログラムを示す部分プログラムリストを取得するリスト取得部と、
前記リスト取得部によって取得された前記部分プログラムリストに示される前記部分プログラムのソースコードと、前記実行プログラムに追加する新たな部分プログラムのソースコードと、前記部分プログラムで使用される変数に関する変数情報と、前記新たな部分プログラムで使用される変数に関する変数情報とを取得するソースコード取得部と、
前記ソースコード取得部によって取得された前記部分プログラムの前記ソースコードと、前記部分プログラムの前記変数情報と、前記新たな部分プログラムの前記ソースコードと、前記新たな部分プログラムの前記変数情報とを用いて、前記新たな部分プログラムを含む新たな実行プログラムのソースコードを作成し、前記新たな実行プログラムの前記ソースコードに対してプログラム解析ツールを実行することによって、前記新たな実行プログラムに不具合が生じるか否かを判定するプログラム解析部とを備え、
前記部分プログラムの前記変数情報は、前記部分プログラムを構成するサブルーチンで使用される変数が、更新前の変数値を読み出すための更新前読み出し属性と、変数値を更新するための書き込み属性と、更新後の変数値を読み出すための更新後読み出し属性と、のいずれの属性を有する変数であるかを示し、
前記新たな部分プログラムの前記変数情報は、前記新たな部分プログラムを構成するサブルーチンで使用される変数が、前記更新前読み出し属性と、前記書き込み属性と、前記更新後読み出し属性と、のいずれの属性を有する変数であるかを示し、
前記プログラム解析部は、前記部分プログラムの前記変数情報と前記新たな部分プログラムの前記変数情報とに基づいて、前記部分プログラムの前記サブルーチンと前記新たな部分プログラムの前記サブルーチンとを呼び出す順序を決定し、
前記プログラム解析部は、決定した順序で前記部分プログラムの前記サブルーチンと前記新たな部分プログラムの前記サブルーチンとを呼び出すメインルーチンのソースコードを作成し、
前記プログラム解析部は、前記メインルーチンの前記ソースコードと、前記部分プログラムの前記ソースコードと、前記新たな部分プログラムの前記ソースコードとを用いて、前記新たな実行プログラムの前記ソースコードを作成する
ことを特徴とするプログラム解析装置。
【請求項２】
前記メインルーチンは、前記更新前読み出し属性を有する変数を使用するサブルーチン、前記書き込み属性を有する変数を使用するサブルーチン、前記更新後読み出し属性を有する変数を使用するサブルーチンの順序で、前記部分プログラムの前記サブルーチンと前記新たな部分プログラムの前記サブルーチンとを呼び出す
ことを特徴とする請求項１に記載のプログラム解析装置。
【請求項３】
前記プログラム解析部は、前記プログラム解析ツールを実行することによって、前記実行プログラムの前記ソースコードから前記更新前読み出し属性を有する変数を抽出し、
前記プログラム解析部は、抽出した前記変数が前記部分プログラムの前記変数情報と前記新たな部分プログラムの前記変数情報との少なくともいずれかに前記更新前読み出し属性を有する変数として示されていない場合、前記新たな実行プログラムに不具合が生じると判定する
ことを特徴とする請求項１または請求項２記載のプログラム解析装置。
【請求項４】
実行プログラムを構成する部分プログラムを示す部分プログラムリストを取得するリスト取得部と、
前記リスト取得部によって取得された前記部分プログラムリストに示される前記部分プログラムのソースコードと、前記実行プログラムに追加する新たな部分プログラムのソースコードと、前記部分プログラムで使用される変数に関する変数情報と、前記新たな部分プログラムで使用される変数に関する変数情報とを取得するソースコード取得部と、
前記ソースコード取得部によって取得された前記部分プログラムの前記ソースコードと、前記部分プログラムの前記変数情報と、前記新たな部分プログラムの前記ソースコードと、前記新たな部分プログラムの前記変数情報とを用いて、前記新たな部分プログラムを含む新たな実行プログラムのソースコードを作成し、前記新たな実行プログラムの前記ソースコードに対してプログラム解析ツールを実行することによって、前記新たな実行プログラムに不具合が生じるか否かを判定するプログラム解析部とを備え、
前記部分プログラムの前記変数情報は、前記部分プログラムを構成するサブルーチンで使用される変数毎に変数の属性を示し、
前記新たな部分プログラムの前記変数情報は、前記新たな部分プログラムを構成するサブルーチンで使用される変数毎に変数の属性を示し、
前記プログラム解析部は、前記部分プログラムの前記サブルーチンと前記新たな部分プログラムの前記サブルーチンとが第一の変数と第二の変数とを使用し、一方のサブルーチンで使用される前記第二の変数が前記一方のサブルーチンで使用される前記第一の変数の属性よりも低い呼び出し順序に対応付けられる属性を有し、他方のサブルーチンで使用される前記第二の変数が前記他方のサブルーチンで使用される前記第一の変数の属性よりも高い呼び出し順序に対応付けられる属性を有する場合、前記新たな実行プログラムの前記ソースコードの作成の有無に関わらず、前記新たな実行プログラムに不具合が生じると判定する
ことを特徴とするプログラム解析装置。
【請求項５】
前記プログラム解析部は、前記部分プログラムと前記新たな部分プログラムと同じ部分プログラムの組み合わせによって構成される過去の実行プログラムを判定済みである場合、前記過去のプログラムの判定結果に基づいて前記新たな実行プログラムを判定する
ことを特徴とする請求項１から請求項４のいずれかに記載のプログラム解析装置。
【請求項６】
前記プログラム解析部が前記新たな実行プログラムに不具合が生じないと判断した場合に、前記新たな実行プログラムを作成するプログラム作成部と、
前記実行プログラムを前記プログラム作成部によって作成された前記新たな実行プログラムに更新すると共に、前記部分プログラムリストに前記新たな部分プログラムのプログラム名を追加するプログラム更新部と
を備えることを特徴とする請求項１から請求項５のいずれかに記載のプログラム解析装置。
【請求項７】
リスト取得部とソースコード取得部とプログラム解析部とを備えるプログラム解析装置を用いるプログラム解析方法であって、
前記リスト取得部が、実行プログラムを構成する部分プログラムを示す部分プログラムリストを取得し、
前記ソースコード取得部が、前記リスト取得部によって取得された前記部分プログラムリストに示される前記部分プログラムのソースコードと、前記実行プログラムに追加する新たな部分プログラムのソースコードと、前記部分プログラムで使用される変数に関する変数情報と、前記新たな部分プログラムで使用される変数に関する変数情報とを取得し、
前記プログラム解析部が、前記ソースコード取得部によって取得された前記部分プログラムの前記ソースコードと、前記部分プログラムの前記変数情報と、前記新たな部分プログラムの前記ソースコードと、前記新たな部分プログラムの前記変数情報とを用いて、前記新たな部分プログラムを含む新たな実行プログラムのソースコードを作成し、前記新たな実行プログラムの前記ソースコードに対してプログラム解析ツールを実行することによって、前記新たな実行プログラムに不具合が生じるか否かを判定するプログラム解析方法であって、
前記部分プログラムの前記変数情報は、前記部分プログラムを構成するサブルーチンで使用される変数が、更新前の変数値を読み出すための更新前読み出し属性と、変数値を更新するための書き込み属性と、更新後の変数値を読み出すための更新後読み出し属性と、のいずれの属性を有する変数であるかを示し、
前記新たな部分プログラムの前記変数情報は、前記新たな部分プログラムを構成するサブルーチンで使用される変数が、前記更新前読み出し属性と、前記書き込み属性と、前記更新後読み出し属性と、のいずれの属性を有する変数であるかを示し、
前記プログラム解析部は、前記部分プログラムの前記変数情報と前記新たな部分プログラムの前記変数情報とに基づいて、前記部分プログラムの前記サブルーチンと前記新たな部分プログラムの前記サブルーチンとを呼び出す順序を決定し、
前記プログラム解析部は、決定した順序で前記部分プログラムの前記サブルーチンと前記新たな部分プログラムの前記サブルーチンとを呼び出すメインルーチンのソースコードを作成し、
前記プログラム解析部は、前記メインルーチンの前記ソースコードと、前記部分プログラムの前記ソースコードと、前記新たな部分プログラムの前記ソースコードとを用いて、前記新たな実行プログラムの前記ソースコードを作成する
ことを特徴とするプログラム解析方法。
【請求項８】
リスト取得部とソースコード取得部とプログラム解析部とを備えるプログラム解析装置を用いるプログラム解析方法であって、
前記リスト取得部が、実行プログラムを構成する部分プログラムを示す部分プログラムリストを取得し、
前記ソースコード取得部が、前記リスト取得部によって取得された前記部分プログラムリストに示される前記部分プログラムのソースコードと、前記実行プログラムに追加する新たな部分プログラムのソースコードと、前記部分プログラムで使用される変数に関する変数情報と、前記新たな部分プログラムで使用される変数に関する変数情報とを取得し、
前記プログラム解析部が、前記ソースコード取得部によって取得された前記部分プログラムの前記ソースコードと、前記部分プログラムの前記変数情報と、前記新たな部分プログラムの前記ソースコードと、前記新たな部分プログラムの前記変数情報とを用いて、前記新たな部分プログラムを含む新たな実行プログラムのソースコードを作成し、前記新たな実行プログラムの前記ソースコードに対してプログラム解析ツールを実行することによって、前記新たな実行プログラムに不具合が生じるか否かを判定するプログラム解析方法であって、
前記部分プログラムの前記変数情報は、前記部分プログラムを構成するサブルーチンで使用される変数毎に変数の属性を示し、
前記新たな部分プログラムの前記変数情報は、前記新たな部分プログラムを構成するサブルーチンで使用される変数毎に変数の属性を示し、
前記プログラム解析部は、前記部分プログラムの前記サブルーチンと前記新たな部分プログラムの前記サブルーチンとが第一の変数と第二の変数とを使用し、一方のサブルーチンで使用される前記第二の変数が前記一方のサブルーチンで使用される前記第一の変数の属性よりも低い呼び出し順序に対応付けられる属性を有し、他方のサブルーチンで使用される前記第二の変数が前記他方のサブルーチンで使用される前記第一の変数の属性よりも高い呼び出し順序に対応付けられる属性を有する場合、前記新たな実行プログラムの前記ソースコードの作成の有無に関わらず、前記新たな実行プログラムに不具合が生じると判定する
ことを特徴とするプログラム解析方法。
【請求項９】
請求項１から請求項６のいずれかに記載のプログラム解析装置としてコンピュータを機能させるためのプログラム解析プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム解析装置、プログラム解析方法およびプログラム解析プログラムに関するものである。
【背景技術】
【０００２】
開発されたプログラムの問題箇所を検出するために、プログラムのソースコードまたは実行形式のプログラムに対して解析ツールが実行される。
プログラムの設計者は、プログラムの不具合の有無を解析結果に基づいて判断し、判断結果をプログラムの設計にフィードバックする。【０００３】
しかし、プログラムを構成する全てのソースコードが揃っていなければ、十分なプログラム解析を行うことができない。
つまり、追加機能を提供するためのプログラムを既存のプログラムにアドオンする場合、アドオンするプログラムと既存のプログラムとの全ての組み合わせに対してプログラム解析を実施する必要がある。
そのため、アドオンするプログラムが増えると解析対象の組み合わせが膨大になり、プログラム解析に非常に多くの工数がかかってしまう。【０００４】
また、プログラムの解析ツールが出力する警告内容には、プログラムの不具合につながる内容の他に、設計者が意図した内容、つまり、プログラムの不具合につながらない内容が含まれる。しかし、プログラムの不具合につながる内容とプログラムの不具合につながらない内容とを自動的に切り分けることはできなかった。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平７−２１０４２４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明は、例えば、新たな部分プログラムを追加後の新たな実行プログラムに関するプログラム解析を容易に行うことができるようにすることを目的とする。
【課題を解決するための手段】
【０００７】
本発明のプログラム解析装置は、
実行する実行プログラムと、前記実行プログラムを構成する部分プログラムを示す部分プログラムリストと、を記憶するプログラム実行装置から、前記部分プログラムリストを取得するリスト取得部と、
前記リスト取得部によって取得された前記部分プログラムリストに示される前記部分プログラムのソースコードと、前記実行プログラムに追加する新たな部分プログラムのソースコードと、を取得するソースコード取得部と、
前記ソースコード取得部によって取得された前記部分プログラムの前記ソースコードと前記新たな部分プログラムの前記ソースコードとを用いて、前記新たな部分プログラムを含む新たな実行プログラムに不具合が生じるか否かを判定するプログラム解析部とを備える。
【発明の効果】
【０００８】
本発明によれば、部分プログラムのソースコードと新たな部分プログラムのソースコードとを取得することにより、新たな部分プログラムを追加後の新たな実行プログラムに関するプログラム解析を容易に行うことができる。
【図面の簡単な説明】
【０００９】
【図１】実施の形態１におけるプログラム管理システム１００の構成図である。
【図２】実施の形態１における外部端末２００の機能構成図である。
【図３】実施の形態１におけるプログラム管理方法の処理の流れを示すフローチャートである。
【図４】実施の形態１における外部端末２００のハードウェア構成の一例を示す図である。
【図５】実施の形態２におけるアプリケーションサーバ１１０の機能構成図である。
【図６】実施の形態２におけるプログラム管理方法の処理の流れを示すフローチャートである。
【図７】実施の形態３におけるプログラム管理システム１００の機能構成図である。
【図８】実施の形態３におけるプログラム管理方法の処理の流れを示すフローチャートである。
【図９】実施の形態４におけるアプリケーションファイル１１８の構成図である。
【図１０】実施の形態４における外部端末２００の機能構成図である。
【図１１】実施の形態４におけるプログラム管理方法の処理の流れを示すフローチャートである。
【図１２】実施の形態４におけるプログラム解析処理（Ｓ２００）のフローチャートである。
【図１３】実施の形態４におけるメインルーチン作成処理（Ｓ２１０）のフローチャートである。
【図１４】実施の形態４における第一の構造設計ファイル２９１の一例を示す図である。
【図１５】実施の形態４における第二の構造設計ファイル２９２の一例を示す図である。
【図１６】実施の形態４におけるアプリケーションのテスト方法を示す概要図である。
【図１７】実施の形態５におけるプログラム解析処理（Ｓ２００）のフローチャートである。
【図１８】実施の形態６における第一の構造設計ファイル２９１の一例を示す図である。
【図１９】実施の形態６における第二の構造設計ファイル２９２の一例を示す図である。
【図２０】実施の形態６における第三の構造設計ファイル２９３の一例を示す図である。
【図２１】実施の形態７におけるメインルーチン作成処理（Ｓ２１０）のフローチャートである。
【図２２】実施の形態７における第一の構造設計ファイル２９１の一例を示す図である。
【図２３】実施の形態７における第一の構造設計ファイル２９１の一例を示す図である。
【図２４】実施の形態７における第一の構造設計ファイル２９１の一例を示す図である。
【発明を実施するための形態】
【００１０】
実施の形態１．
新たな部分プログラムを追加後の新たな実行プログラムに関するプログラム解析を行う形態について説明する。
【００１１】
図１は、実施の形態１におけるプログラム管理システム１００の構成図である。
実施の形態１におけるプログラム管理システム１００の構成について、図１に基づいて説明する。
【００１２】
プログラム管理システム１００は、アプリケーションサーバ１１０と、車両１２０と、外部端末２００（プログラム解析装置の一例）とを備える。また、車両１２０は、車両１２０を制御する電子制御装置１２１（プログラム実行装置の一例）を備える。但し、電子制御装置１２１は、車両制御以外の情報処理を行う装置であっても構わない。
外部端末２００は、有線または無線で、アプリケーションサーバ１１０および車両１２０と通信する。
【００１３】
電子制御装置１２１は、アプリケーションリスト１２２（部分プログラムリストの一例）と実行プログラム１２３とを記憶する。
実行プログラム１２３は、例えば、車両１２０を制御するための実行形式のプログラムである。
アプリケーションリスト１２２は、実行プログラム１２３を構成するアプリケーションプログラム（部分プログラムの一例）の名称を示すデータである。
以下、実行プログラム１２３を構成するアプリケーションプログラムを「搭載アプリケーション」という。
【００１４】
電子制御装置１２１にアプリケーションプログラムを追加する場合、つまり、アプリケーションプログラムをアドオンまたはプラグインする場合、外部端末２００は次のように動作する。
以下、追加するアプリケーションプログラムを「追加アプリケーション」といい、アプリケーションプログラムを追加後の実行プログラム１２３を「新たな実行プログラム１２３」という。
（１）外部端末２００は、電子制御装置１２１からアプリケーションリスト１２２を取得する。
（２）外部端末２００は、アプリケーションリスト１２２に示されているアプリケーション名で識別される搭載アプリケーションのソースコード１１１をアプリケーションサーバ１１０から取得する。
また、外部端末２００は、追加アプリケーションのソースコード１１１をアプリケーションサーバ１１０から取得する。
（３）外部端末２００は、追加アプリケーションのソースコード１１１と搭載アプリケーションのソースコード１１１とを用いて、新たな実行プログラム１２３に関するプログラム解析を行う。プログラム解析では、新たな実行プログラム１２３に不具合が生じるか否かを判定する。
（４）新たな実行プログラム１２３に不具合が生じないと判定した場合、外部端末２００は、新たな実行プログラム１２３を作成し、電子制御装置１２１に記憶されている実行プログラム１２３を新たな実行プログラム１２３で更新する。また、外部端末２００は、追加アプリケーションのアプリケーション名をアプリケーションリスト１２２に追加する。
以上の動作により、アプリケーションプログラムを追加した際に新たな実行プログラム１２３に不具合が生じるか否か、を判定することができる。
【００１５】
図２は、実施の形態１における外部端末２００の機能構成図である。
実施の形態１における外部端末２００の機能構成について、図２に基づいて説明する。
【００１６】
外部端末２００は、追加アプリケーション受付部２１０と、アプリケーションリスト読み込み部２２０（リスト取得部の一例）と、アプリケーション収集部２３０（ソースコード取得部の一例）とを備える。
外部端末２００は、プログラム解析部２４０と、プログラム作成部２５０と、プログラム更新部２６０と、端末記憶部２９０とを備える。
【００１７】
追加アプリケーション受付部２１０は、電子制御装置１２１に対するアプリケーションプログラムの追加要求を受け付ける。
アプリケーションリスト読み込み部２２０は、電子制御装置１２１からアプリケーションリスト１２２を読み込む。
アプリケーション収集部２３０は、アプリケーションリスト１２２に示されているアプリケーション名で識別される搭載アプリケーションのソースコード１１１をアプリケーションサーバ１１０からダウンロードする。また、アプリケーション収集部２３０は、追加アプリケーションのソースコード１１１をアプリケーションサーバ１１０からダウンロードする。
プログラム解析部２４０は、追加アプリケーションのソースコード１１１と搭載アプリケーションのソースコード１１１とを用いて、新たな実行プログラム１２３に関するプログラム解析を行う。
プログラム作成部２５０は、新たな実行プログラム１２３に不具合が生じないと判定された場合に、新たな実行プログラム１２３を作成する。
プログラム更新部２６０は、電子制御装置１２１に記憶されている実行プログラム１２３を新たな実行プログラム１２３に更新する。また、プログラム更新部２６０は、追加アプリケーションのアプリケーション名をアプリケーションリスト１２２に追加する。
【００１８】
端末記憶部２９０は、外部端末２００で使用するデータを記憶する。
例えば、端末記憶部２９０は、アプリケーションリスト１２２、追加アプリケーションのソースコード１１１、搭載アプリケーションのソースコード１１１および新たな実行プログラム１２３などを記憶する。
【００１９】
図３は、実施の形態１におけるプログラム管理方法の処理の流れを示すフローチャートである。
実施の形態１におけるプログラム管理方法について、図３に基づいて説明する。
【００２０】
ここで、開発されたアプリケーションのソースコード１１１がアプリケーションサーバ１１０に予め記憶されているものとする。
ソースコード１１１がＣ言語で記述されている場合、ソースコード１１１が記述されたファイルの拡張子は“．ｃ”または“．ｈ”である。
【００２１】
Ｓ１１０において、ユーザは、電子制御装置１２１に対するアプリケーションの追加要求を外部端末２００に入力する。例えば、車両１２０のディーラー（ユーザの一例）がアプリケーションの追加要求を外部端末２００に入力する。
そして、外部端末２００の追加アプリケーション受付部２１０は、アプリケーションの追加要求を受け付ける。
なお、アプリケーションの追加要求には、電子制御装置１２１に追加したい追加アプリケーションのアプリケーション名（識別子の一例）が含まれる。
Ｓ１１０の後、処理はＳ１２０に進む。
【００２２】
Ｓ１２０において、アプリケーションリスト読み込み部２２０は、電子制御装置１２１と通信する。そして、アプリケーションリスト読み込み部２２０は、電子制御装置１２１からアプリケーションリスト１２２を読み込む。
Ｓ１２０の後、処理はＳ１３０に進む。
【００２３】
Ｓ１３０において、アプリケーション収集部２３０は、アプリケーションサーバ１１０と通信する。
そして、アプリケーション収集部２３０は、Ｓ１１０で入力された追加要求に含まれるアプリケーション名で識別される追加アプリケーションのソースコード１１１をアプリケーションサーバ１１０からダウンロードする。
また、アプリケーション収集部２３０は、Ｓ１２０で読み込まれたアプリケーションリスト１２２に示されるアプリケーション名で識別される搭載アプリケーションのソースコード１１１をアプリケーションサーバ１１０からダウンロードする。
Ｓ１３０の後、処理はＳ１４０に進む。
【００２４】
Ｓ１４０において、プログラム解析部２４０は、Ｓ１３０でダウンロードされた追加アプリケーションのソースコード１１１および搭載アプリケーションのソースコード１１１を用いて、新たな実行プログラム１２３に関するプログラム解析を行う。そして、プログラム解析部２４０は、新たな実行プログラム１２３に不具合が生じるか否かを示す解析結果を得る。
例えば、プログラム解析部２４０は、従来のプログラム解析ツールを実行することによって、静的または動的にプログラム解析を行う。
オーバーフロー、アンダーフロー、ゼロ除算またはアクセス例外の有無、モジュール（ルーチンともいう）の再帰呼び出しの有無、割り込みの制限の不整合などは、解析内容の一例である。
Ｓ１４０の後、処理はＳ１５０に進む。
【００２５】
Ｓ１５０において、Ｓ１４０の解析結果に従って処理が分岐する。
新たな実行プログラム１２３に不具合が生じるという解析結果が得られた場合（ＹＥＳ）、追加アプリケーション受付部２１０がアプリケーションを追加できない旨のエラーメッセージを表示し、プログラム管理方法の処理は終了する。
新たな実行プログラム１２３に不具合が生じないという解析結果が得られた場合（ＮＯ）、処理はＳ１６０に進む。
【００２６】
Ｓ１６０において、プログラム作成部２５０は、新たな実行プログラム１２３を作成する。
例えば、プログラム作成部２５０は、追加アプリケーションのソースコード１１１と搭載アプリケーションのソースコード１１１とをコンパイルする。そして、プログラム作成部２５０は、コンパイルによって作成された各オブジェクトファイルをリンクする。各オブジェクトファイルをリンクすることによって、新たな実行プログラム１２３が作成される。
Ｓ１６０の後、処理はＳ１７０に進む。
【００２７】
Ｓ１７０において、プログラム更新部２６０は電子制御装置１２１と通信する。
そして、プログラム更新部２６０は、電子制御装置１２１に記憶されている実行プログラム１２３を、Ｓ１６０で作成された新たな実行プログラム１２３に更新する。
また、プログラム更新部２６０は、追加アプリケーションのアプリケーション名を、電子制御装置１２１に記憶されているアプリケーションリスト１２２に追加する。
追加アプリケーション受付部２１０は、アプリケーションの追加が終了したことを示す終了メッセージを外部端末２００の表示部に表示する。
Ｓ１７０の後、プログラム管理方法の処理は終了する。
【００２８】
図４は、実施の形態１における外部端末２００のハードウェア構成の一例を示す図である。
実施の形態１における外部端末２００のハードウェア構成の一例について、図４に基づいて説明する。
【００２９】
外部端末２００は、演算装置９０１、補助記憶装置９０２、主記憶装置９０３、通信装置９０４および入出力装置９０５を備えるコンピュータである。
演算装置９０１、補助記憶装置９０２、主記憶装置９０３、通信装置９０４および入出力装置９０５はバス９０９に接続している。
【００３０】
演算装置９０１は、プログラムを実行するＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）である。
補助記憶装置９０２は、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、フラッシュメモリまたはハードディスク装置である。
主記憶装置９０３は、例えば、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。
通信装置９０４は、有線または無線でインターネット、ＬＡＮ（ローカルエリアネットワーク）、電話回線網またはその他のネットワークを介して通信を行う。
入出力装置９０５は、例えば、マウス、キーボード、ディスプレイ装置である。
【００３１】
プログラムは、通常は補助記憶装置９０２に記憶されており、主記憶装置９０３にロードされ、演算装置９０１に読み込まれ、演算装置９０１によって実行される。
例えば、オペレーティングシステム（ＯＳ）が補助記憶装置９０２に記憶される。また、「〜部」として説明している機能を実現するプログラム（プログラム解析プログラムの一例）が補助記憶装置９０２に記憶される。そして、ＯＳおよび「〜部」として説明している機能を実現するプログラムは主記憶装置９０３にロードされ、演算装置９０１によって実行される。
【００３２】
「〜の判断」、「〜の判定」、「〜の抽出」、「〜の検知」、「〜の設定」、「〜の登録」、「〜の選択」、「〜の生成」、「〜の入力」、「〜の出力」等の処理の結果を示す情報、データ、信号値または変数値が主記憶装置９０３または補助記憶装置９０２にファイルとして記憶される。また、外部端末２００が使用するその他のデータが主記憶装置９０３または補助記憶装置９０２に記憶される。
【００３３】
また、図４は実施の形態１における外部端末２００のハードウェア構成の一例を示すものであり、外部端末２００のハードウェア構成は図４に示す構成と異なる構成であってもよい。
なお、実施の形態１に係る方法（プログラム解析方法の一例）はフローチャート等を用いて説明している手順または一部異なる手順によって実現することができる。
【００３４】
実施の形態１により、搭載アプリケーションのソースコード１１１と追加アプリケーションのソースコード１１１とを収集することにより、新たな実行プログラム１２３に関するプログラム解析を容易に行うことができる。
また、新たな実行プログラム１２３の実装に必要なソースコードが揃った状態でプログラム解析を行うため、プログラム解析が１回で済む。つまり、プログラム解析の工数を削減することができる。
【００３５】
実施の形態２．
過去のプログラム解析の結果を利用する形態について説明する。
以下、実施の形態１と異なる事項について主に説明する。説明を省略する事項については実施の形態１と同様である。
【００３６】
図５は、実施の形態２におけるアプリケーションサーバ１１０の機能構成図である。
実施の形態２におけるアプリケーションサーバ１１０の機能構成について、図５に基づいて説明する。
【００３７】
アプリケーションサーバ１１０は、ソースコード要求受信部１１３、解析結果検索部１１４、ソースコード応答部１１５およびサーバ記憶部１１９を備える。
【００３８】
サーバ記憶部１１９は、アプリケーションサーバ１１０で使用するデータを記憶する。
例えば、サーバ記憶部１１９は、ソースコード１１１と解析結果テーブル１１２とを記憶する。
解析結果テーブル１１２は、プログラムの解析結果とプログラムを構成する複数のアプリケーションのそれぞれのアプリケーション名とを対応付けるテーブルである。
【００３９】
ソースコード要求受信部１１３と、解析結果検索部１１４と、ソースコード応答部１１５とのそれぞれの動作については、以降で説明する。
【００４０】
図６は、実施の形態２におけるプログラム管理方法の処理の流れを示すフローチャートである。
実施の形態２におけるプログラム管理方法について、図６に基づいて説明する。
【００４１】
外部端末２００は、実施の形態１（図３参照）で説明したＳ１３０の代わりに、Ｓ１３１およびＳ１３２を実行する。
【００４２】
Ｓ１３１において、外部端末２００のアプリケーション収集部２３０は、追加アプリケーションと搭載アプリケーションとのそれぞれのソースコード１１１を要求するためのソースコード要求をアプリケーションサーバ１１０に送信する。ソースコード要求は、新たな実行プログラム１２３を構成する追加アプリケーションと搭載アプリケーションとのそれぞれのアプリケーション名を含む。
アプリケーションサーバ１１０のソースコード要求受信部１１３は、外部端末２００からソースコード要求を受信する。
アプリケーションサーバ１１０の解析結果検索部１１４は、ソースコード要求から追加アプリケーションのアプリケーション名と搭載アプリケーションのアプリケーション名とを取得する。そして、解析結果検索部１１４は、追加アプリケーションのアプリケーション名と搭載アプリケーションのアプリケーション名とに対応付けられた解析結果が解析結果テーブル１１２に設定されているか否かを判定する。
該当する解析結果が解析結果テーブル１１２に設定されている場合、アプリケーションサーバ１１０のソースコード応答部１１５は、該当する解析結果と、追加アプリケーションのソースコード１１１と、搭載アプリケーションのソースコード１１１とを外部端末２００に送信する。そして、外部端末２００のアプリケーション収集部２３０は、アプリケーションサーバ１１０から送信された解析結果およびソースコード１１１を受信する。但し、不具合が生じることを解析結果が示す場合、ソースコード１１１の通信は行わなくてもよい。
該当する解析結果が解析結果テーブル１１２に設定されていない場合、アプリケーションサーバ１１０のソースコード応答部１１５は、追加アプリケーションのソースコード１１１と搭載アプリケーションのソースコード１１１とを外部端末２００に送信する。そして、外部端末２００のアプリケーション収集部２３０は、アプリケーションサーバ１１０から送信されたソースコード１１１を受信する。
Ｓ１３１の後、処理はＳ１３２に進む。
【００４３】
Ｓ１３２において、外部端末２００のプログラム解析部２４０は、Ｓ１３１で解析結果を取得できたか否かを判定する。
解析結果を取得できた場合（ＹＥＳ）、処理はＳ１５０に進む。
解析結果を取得できなかった場合（ＮＯ）、処理はＳ１４０に進む。
【００４４】
Ｓ１４０において、外部端末２００のプログラム解析部２４０は、Ｓ１３１で取得したソースコード１１１を用いてプログラム解析を行う（実施の形態１と同様）。
Ｓ１４０の後、処理はＳ１５０に進む。
【００４５】
Ｓ１５０において、Ｓ１４０で得られた解析結果またはＳ１３１で得られた解析結果に従って処理が分岐する。
その他の処理は、実施の形態１と同様である。
【００４６】
実施の形態２により、重複するプログラム解析を省略し、外部端末２００の負荷を軽減することができる。
なお、アプリケーションサーバ１１０の代わりに外部端末２００が解析結果テーブル１１２を記憶しても構わない。そして、該当する解析結果が解析結果テーブル１１２に設定されている場合、外部端末２００はプログラム解析（Ｓ１４０）を行わず、解析結果テーブル１１２に設定されている解析結果を利用する。
【００４７】
実施の形態３．
外部端末２００の代わりにアプリケーションサーバ１１０がプログラム解析およびプログラムの作成を行う形態について説明する。
以下、実施の形態１と異なる事項について主に説明する。説明を省略する事項については実施の形態１と同様である。
【００４８】
図７は、実施の形態３におけるプログラム管理システム１００の機能構成図である。
実施の形態３におけるプログラム管理システム１００の機能構成について、図７に基づいて説明する。
【００４９】
アプリケーションサーバ１１０（プログラム解析装置の一例）は、外部端末２００の代わりに、アプリケーション収集部２３０とプログラム解析部２４０とプログラム作成部２５０とを備える。
アプリケーションサーバ１１０は、新たな実行プログラム１２３を外部端末２００に提供するプログラム提供部１１６を備える。
アプリケーションサーバ１１０は、アプリケーションサーバ１１０で使用するデータ（例えば、ソースコード１１１）を記憶するサーバ記憶部１１９を備える。
【００５０】
外部端末２００は、新たな実行プログラム１２３をアプリケーションサーバ１１０から取得するプログラム取得部２７０を備える。
【００５１】
図８は、実施の形態３におけるプログラム管理方法の処理の流れを示すフローチャートである。
実施の形態３におけるプログラム管理方法について、図８に基づいて説明する。
【００５２】
外部端末２００は、実施の形態１（図３参照）で説明したＳ１３０からＳ１６０の代わりに、Ｓ１３３およびＳ１３４を実行する。
【００５３】
Ｓ１３３において、外部端末２００のプログラム取得部２７０は、新たな実行プログラム１２３を要求するためのプログラム要求をアプリケーションサーバ１１０に送信する。プログラム要求は、新たな実行プログラム１２３を構成する追加アプリケーションと搭載アプリケーションとのそれぞれのアプリケーション名を含む。
アプリケーションサーバ１１０のプログラム提供部１１６は、外部端末２００からプログラム要求を受信する。
アプリケーションサーバ１１０のアプリケーション収集部２３０は、プログラム要求に含まれる各アプリケーション名に基づいて、追加アプリケーションのソースコード１１１と搭載アプリケーションのソースコード１１１とをサーバ記憶部１１９から収集する。
アプリケーションサーバ１１０のプログラム解析部２４０は、収集されたソースコード１１１を用いて、新たな実行プログラム１２３に関するプログラム解析を行う（実施の形態１と同様）。
新たな実行プログラム１２３に不具合が生じないという解析結果が得られた場合、アプリケーションサーバ１１０のプログラム作成部２５０は新たな実行プログラム１２３を作成する（実施の形態１と同様）。そして、アプリケーションサーバ１１０のプログラム提供部１１６は新たな実行プログラム１２３を送信し、外部端末２００のプログラム取得部２７０は新たな実行プログラム１２３を受信する。
新たな実行プログラム１２３に不具合が生じるという解析結果が得られた場合、アプリケーションサーバ１１０のプログラム提供部１１６は新たな実行プログラム１２３を提供できない旨のエラーメッセージを送信し、外部端末２００のプログラム取得部２７０はエラーメッセージを受信する。
Ｓ１３３の後、処理はＳ１３４に進む。
【００５４】
Ｓ１３４において、Ｓ１３３の処理結果に従って処理が分岐する。
新たな実行プログラム１２３が取得できた場合（ＹＥＳ）、処理はＳ１７０に進む。
新たな実行プログラム１２３が取得できなかった場合、つまり、エラーメッセージを取得した場合（ＮＯ）、外部端末２００の追加アプリケーション受付部２１０がアプリケーションを追加できない旨のエラーメッセージを表示し、プログラム管理方法の処理は終了する。
その他の処理は、実施の形態１と同様である。
【００５５】
実施の形態３により、プログラム解析およびプログラム作成をアプリケーションサーバ１１０で実行し、外部端末２００の負荷を軽減することができる。
なお、プログラム解析とプログラム作成とのいずれか一方の処理をアプリケーションサーバ１１０で実行し、他方の処理を外部端末２００で実行しても構わない。
【００５６】
実施の形態４．
新たな実行プログラム１２３を構成する各アプリケーションの変数情報に基づいて、新たな実行プログラム１２３に関するプログラム解析を行う形態について説明する。
以下、実施の形態１と異なる事項について主に説明する。説明を省略する事項については実施の形態１と同様である。
【００５７】
図９は、実施の形態４におけるアプリケーションファイル１１８の構成図である。
実施の形態４におけるアプリケーションファイル１１８の構成について、図９に基づいて説明する。
【００５８】
アプリケーションサーバ１１０は、アプリケーション毎にアプリケーションファイル１１８を記憶する。
アプリケーションファイル１１８は、アプリケーションのソースコード１１１と、アプリケーションの構造設計情報１１７（変数情報の一例）とを含む。構造設計情報１１７はアプリケーションで使用される変数に関する情報である。
実施の形態４において、構造設計情報１１７は、アプリケーションのソースコード１１１に含まれるサブルーチン（関数ともいう）の名称と、サブルーチン内で使用される変数の名称と、変数が有する属性の値と、を対応付けて示す。
【００５９】
実施の形態４において、アプリケーションサーバ１１０は、アプリケーション（ａ）（ｂ）（ｃ）のそれぞれのアプリケーションファイル１１８を記憶するものとする。
アプリケーション（ａ）のソースコード１１１は変数Ｘを使用するサブルーチン（ａ）を含み、アプリケーション（ａ）の構造設計情報１１７はサブルーチン（ａ）で使用される変数Ｘの属性値として属性（３）を示す。
アプリケーション（ｂ）のソースコード１１１は変数Ｘを使用するサブルーチン（ｂ）を含み、アプリケーション（ｂ）の構造設計情報１１７はサブルーチン（ｂ）で使用される変数Ｘの属性値として属性（２）を示す。
アプリケーション（ｃ）のソースコード１１１は変数Ｘを使用するサブルーチン（ｃ）を含み、アプリケーション（ｃ）の構造設計情報１１７はサブルーチン（ｃ）で使用される変数Ｘの属性値として属性（１）を示す。
例えば、変数Ｘは、電子制御装置１２１の内部状態の変化または電子制御装置１２１に入力される入力信号の変化を確認するための状態変数（フラグともいう）である。
【００６０】
属性（１）は「一周期遅れ読み出し属性（更新前読み出し属性ともいう）」を意味し、属性（２）は「書き込み属性」を意味し、属性（３）は「通常周期読み出し属性（更新後読み出し属性ともいう）」を意味する。
一周期遅れ読み出し属性は、更新周期が経過する前の変数値が読み出されることを示す。言い換えると、一周期遅れ読み出し属性は、更新前の変数値を読み出すための属性である。
書き込み属性は、変数値が書き込まれることを示す。言い換えると、書き込み属性は、変数値を更新するための属性である。
通常周期読み出し属性は、更新周期が経過した後の変数値が読み出されることを示す。言い換えると、通常周期読み出し属性は、更新後の変数値を読み出すための属性である。
【００６１】
図１０は、実施の形態４における外部端末２００の機能構成図である。
実施の形態４における外部端末２００の機能構成について、図１０に基づいて説明する。
【００６２】
外部端末２００は、実施の形態１（図２参照）で説明したように、プログラム解析部２４０を備える。
プログラム解析部２４０は、メインルーチン作成部２４１と、プログラム組み立て部２４２と、プログラム解析実行部２４３とを備える。
メインルーチン作成部２４１は、新たな実行プログラム１２３のメインルーチンのソースコードを作成する。
プログラム組み立て部２４２は、メインルーチンのソースコードと追加アプリケーションのソースコード１１１と搭載アプリケーションのソースコード１１１とを用いて、新たな実行プログラム１２３のソースコードを作成する。
プログラム解析実行部２４３は、新たな実行プログラム１２３のソースコードに対してプログラム解析を実行する。
【００６３】
図１１は、実施の形態４におけるプログラム管理方法の処理の流れを示すフローチャートである。
実施の形態４におけるプログラム管理方法について、図１１に基づいて説明する。
【００６４】
外部端末２００は、実施の形態１（図３参照）で説明したＳ１３０およびＳ１４０の代わりに、Ｓ１３５およびＳ２００を実行する。
【００６５】
Ｓ１３５において、アプリケーション収集部２３０は、新たな実行プログラム１２３を構成する各アプリケーションのソースコード１１１の代わりに、各アプリケーションのアプリケーションファイル１１８（ソースコード１１１を含む）を収集する。
Ｓ１３５の後、処理はＳ２００に進む。
【００６６】
Ｓ２００において、プログラム解析部２４０は、各アプリケーションのソースコード１１１の代わりに各アプリケーションのアプリケーションファイル１１８を用いて、新たな実行プログラム１２３に関するプログラム解析を行う。
その他の処理は、実施の形態１と同様である。
【００６７】
図１２は、実施の形態４におけるプログラム解析処理（Ｓ２００）のフローチャートである。
実施の形態４におけるプログラム解析処理（Ｓ２００）について、図１２に基づいて説明する。
【００６８】
Ｓ２１０において、メインルーチン作成部２４１は、新たな実行プログラム１２３を構成する各アプリケーションのアプリケーションファイル１１８に基づいて、新たな実行プログラム１２３のメインルーチンのソースコードを作成する。
新たな実行プログラム１２３のメインルーチンは、各アプリケーションに含まれるサブルーチンを適切な順番で呼び出すための関数である。
メインルーチン作成処理（Ｓ２１０）の詳細については後述する。
Ｓ２１０の後、処理はＳ２２０に進む。
【００６９】
Ｓ２２０において、プログラム組み立て部２４２は、Ｓ２１０で作成されたメインルーチンのソースコードと各アプリケーションファイル１１８に含まれるソースコード１１１とを用いて、新たな実行プログラム１２３のソースコードを作成する。
例えば、新たな実行プログラム１２３のソースコードは、メインルーチンのソースコードと追加アプリケーションのソースコード１１１と搭載アプリケーションのソースコード１１１とを含む。
Ｓ２２０の後、処理はＳ２３０に進む。
【００７０】
Ｓ２３０において、プログラム解析実行部２４３は、Ｓ２２０で作成された新たな実行プログラム１２３のソースコードに対してプログラム解析を実行する。
例えば、プログラム解析実行部２４３は、新たな実行プログラム１２３のソースコードをプログラム解析ツールに入力し、プログラム解析ツールを実行する。
Ｓ２３０の後、プログラム解析処理（Ｓ２００）は終了する。
【００７１】
図１３は、実施の形態４におけるメインルーチン作成処理（Ｓ２１０）のフローチャートである。
実施の形態４におけるメインルーチン作成処理（Ｓ２１０）について、図１３に基づいて説明する。
【００７２】
Ｓ２１１において、メインルーチン作成部２４１は、新たな実行プログラム１２３を構成する各アプリケーションのアプリケーションファイル１１８から、未選択の変数を一つ選択する。
例えば、メインルーチン作成部２４１は、各アプリケーションファイル１１８に含まれる構造設計情報１１７から、未選択の変数を一つ選択する。
Ｓ２１１の後、処理はＳ２１２に進む。
【００７３】
Ｓ２１２において、メインルーチン作成部２４１は、各アプリケーションファイル１１８に含まれる構造設計情報１１７のうち、Ｓ２１１で選択した変数の属性値が設定されている構造設計情報１１７を選択する。
そして、メインルーチン作成部２４１は、Ｓ２１１で選択した変数の属性値を構造設計情報１１７から取得する。
例えば、アプリケーション（ａ）のサブルーチン（ａ）で使用される変数ＸがＳ２１１で選択された場合、メインルーチン作成部２４１は、アプリケーション（ａ）のアプリケーションファイル１１８に含まれる構造設計情報１１７を選択する。そして、メインルーチン作成部２４１は、サブルーチン（ａ）と変数Ｘとに対応付けられている属性値を構造設計情報１１７から取得する。
Ｓ２１２の後、処理はＳ２１３に進む。
【００７４】
Ｓ２１３において、メインルーチン作成部２４１は、サブルーチン名と変数名と属性値とを対応付けて第一の構造設計ファイル２９１に設定する。
例えば、Ｓ２１１でサブルーチン（ａ）の変数Ｘが選択され、Ｓ２１２で属性（３）が取得された場合、メインルーチン作成部２４１は、図１４の（１）に示すように、第一の構造設計ファイル２９１の設定を行う。
図１４は、実施の形態４における第一の構造設計ファイル２９１の一例を示す図である。
Ｓ２１３の後、処理はＳ２１４に進む。
【００７５】
Ｓ２１４において、メインルーチン作成部２４１は、Ｓ２１１で選択していない変数が有るか否かを判定する。
未選択の変数が有る場合（ＹＥＳ）、処理はＳ２１１に戻る。
未選択の変数が無い場合（ＮＯ）、処理はＳ２１５に進む。
【００７６】
Ｓ２１１からＳ２１４が繰り返されることにより、例えば、図１４の（２）に示す第一の構造設計ファイル２９１が作成される。
【００７７】
Ｓ２１５において、メインルーチン作成部２４１は、第一の構造設計ファイル２９１に基づいて第二の構造設計ファイル２９２を作成する。
第二の構造設計ファイル２９２は、変数毎に変数名と変数の属性値と変数が使用されるサブルーチンの名称とを対応付けるデータである。
例えば、メインルーチン作成部２４１は、図１４の（２）に示す第一の構造設計ファイル２９１に基づいて、図１５に示す第二の構造設計ファイル２９２を作成する。
図１５は、実施の形態４における第二の構造設計ファイル２９２の一例を示す図である。
Ｓ２１５の後、処理はＳ２１６に進む。
【００７８】
Ｓ２１６において、メインルーチン作成部２４１は、Ｓ２１５で作成した第二の構造設計ファイル２９２に基づいて、各サブルーチンを呼び出す順序を決定する。
例えば、メインルーチン作成部２４１は、属性（１）の変数が使用されるサブルーチン、属性（２）の変数が使用されるサブルーチン、属性（３）の変数が使用されるサブルーチンの順序で、サブルーチンの呼び出し順序を決定する。
例えば、メインルーチン作成部２４１は、図１５に示す第二の構造設計ファイル２９２に基づいて、サブルーチンの呼び出し順序「（ｃ）→（ｂ）→（ａ）」を決定する。
Ｓ２１６の後、処理はＳ２１７に進む。
【００７９】
Ｓ２１７において、メインルーチン作成部２４１は、Ｓ２１６で決定した呼び出し順序で各サブルーチンを呼び出すためのメインルーチンのソースコードを作成する。
例えば、メインルーチン作成部２４１は、サブルーチン（ａ）（ｂ）（ｃ）を（ｃ）（ｂ）（ａ）の順番で呼び出すためのメインルーチンのソースコードを作成する。
Ｓ２１７の後、メインルーチン作成処理（Ｓ２１０）は終了する。
【００８０】
図１６は、実施の形態４におけるアプリケーションのテスト方法を示す概要図である。
実施の形態４におけるアプリケーションのテスト方法の概要について、図１６に基づいて説明する。
まず、アプリケーションの仕様が決定され、アプリケーション仕様書１３１が作成される。
アプリケーション仕様書１３１には、アプリケーションに含まれるサブルーチンに関する情報として、サブルーチンで使用される変数の情報が含まれる。
次に、アプリケーションのソースコード１１１がアプリケーション仕様書１３１に基づいて作成される。
また、アプリケーションをテストするためのテスト仕様書１３２がアプリケーション仕様書１３１に基づいて作成される。テスト仕様書１３２が作成される際、アプリケーション仕様書１３１からサブルーチンの変数情報が抽出される。このときに抽出されるサブルーチンの変数情報は構造設計情報１１７として使用することができる。
次に、アプリケーションをテストするためのテスト用プログラム１３３がテスト仕様書１３２に基づいて作成される。
そして、テスト用プログラム１３３が実行されることによってアプリケーションのソースコード１１１（またはソースコード１１１をコンパイルして得られるオブジェクトコード）がテストされる。なお、テスト用プログラム１３３は開発用プラットフォーム１３４で実行される。
以上のように、アプリケーションがテストされる際にソースコード１１１および構造設計情報１１７が得られる。つまり、アプリケーションファイル１１８は、アプリケーションがテストされる際に得られるソースコード１１１および構造設計情報１１７を用いて作成することができる。
【００８１】
実施の形態４により、新たな実行プログラム１２３を構成する各アプリケーションの変数情報に基づいて新たな実行プログラム１２３のメインルーチンのソースコードを作成し、新たな実行プログラム１２３の全体のソースコードを作成することができる。そして、新たな実行プログラム１２３の全体のソースコードを用いて、新たな実行プログラム１２３に関するプログラム解析を行うことができる。
【００８２】
実施の形態５．
新たな実行プログラム１２３を構成する各アプリケーションの変数情報に基づいて、新たな実行プログラム１２３に関するプログラム解析を行う形態について説明する。
以下、実施の形態４と異なる事項について主に説明する。説明を省略する事項については実施の形態４と同様である。
【００８３】
図１７は、実施の形態５におけるプログラム解析処理（Ｓ２００）のフローチャートである。
実施の形態５におけるプログラム解析処理（Ｓ２００）について、図１７に基づいて説明する。
【００８４】
プログラム解析処理（Ｓ２００）は、実施の形態４（図１２参照）で説明したＳ２３０の具体的な処理としてＳ２３１からＳ２３５を含む。
【００８５】
Ｓ２３１において、プログラム解析実行部２４３は、新たな実行プログラム１２３のソースコードに対して解析ツールを実行する。
属性（１）（一周期遅れ読み出し属性）を有する変数が新たな実行プログラム１２３のソースコードに含まれる場合、解析ツールは属性（１）を有する変数を新たな実行プログラム１２３の不具合として検出（警告）する。
Ｓ２３１の後、処理はＳ２３２に進む。
【００８６】
Ｓ２３２において、プログラム解析実行部２４３は、解析ツールの実行結果に基づいて属性（１）を有する変数以外の不具合が検出されたか否かを判定する。
属性（１）を有する変数だけが不具合として検出された場合、処理はＳ２３３に進む。
属性（１）を有する変数以外の不具合が検出された場合、処理はＳ２３４に進む。
不具合が検出されなかった場合、処理はＳ２３５に進む。
【００８７】
Ｓ２３３において、プログラム解析実行部２４３は、不具合として検出された変数が、新たな実行プログラム１２３を構成する少なくともいずれかのアプリケーションの構造設計情報１１７に、属性（１）を有する変数として定義されているか否かを判定する。
不具合として検出された変数が属性（１）を有する変数として定義されている場合（ＹＥＳ）、処理はＳ２３５に進む。この場合、不具合として検出（警告）された変数は設計通りの変数であって不具合ではないと考えられる。
不具合として検出された変数が属性（１）を有する変数として定義されていない場合（ＮＯ）、処理はＳ２３４に進む。この場合、不具合として検出（警告）された変数は設計ミスの変数であって不具合であると考えられる。
【００８８】
Ｓ２３４において、プログラム解析実行部２４３は、新たな実行プログラム１２３に不具合が有ると判定する。
Ｓ２３４の後、プログラム解析処理（Ｓ２００）は終了する。
【００８９】
Ｓ２３５において、プログラム解析実行部２４３は、新たな実行プログラム１２３に不具合が無いと判定する。
Ｓ２３５の後、プログラム解析処理（Ｓ２００）は終了する。
【００９０】
実施の形態５により、解析ツールの解析結果と構造設計情報１１７とを組み合わせて新たな実行プログラム１２３の不具合の有無を判定することができる。
【００９１】
実施の形態６．
異なる属性を有する複数の変数が使用されるサブルーチンが有り、そのサブルーチンが新たな実行プログラム１２３に含まれる形態について説明する。
以下、実施の形態４、５と異なる事項について主に説明する。説明を省略する事項については実施の形態４、５と同様である。
【００９２】
外部端末２００は、実施の形態４（図１０参照）で説明したように、メインルーチン作成部２４１を備える。
メインルーチン作成部２４１は、実施の形態４（図１３参照）で説明したように、新たな実行プログラム１２３のメインルーチンのソースコードを作成する。
但し、メインルーチン作成部２４１は、メインルーチンで呼び出すサブルーチンの順序を以下のように決定する（Ｓ２１６）。
【００９３】
図１８は、実施の形態６における第一の構造設計ファイル２９１の一例を示す図である。
図１９は、実施の形態６における第二の構造設計ファイル２９２の一例を示す図である。
図２０は、実施の形態６における第三の構造設計ファイル２９３の一例を示す図である。
第三の構造設計ファイル２９３は、変数毎に変数名と１つまたは複数の属性値と変数が使用されるサブルーチンの名称とを対応付けるデータである。
【００９４】
Ｓ２１１からＳ２１４（図１３参照）で、図１８に示す第一の構造設計ファイル２９１が作成されたものとする。
Ｓ２１５において、メインルーチン作成部２４１は、図１８に示す第一の構造設計ファイル２９１に基づいて、図１９に示す第二の構造設計ファイル２９２を作成する。
図１９に示す第二の構造設計ファイル２９２は、変数Ｘおよび変数Ｙがサブルーチン（ｅ）で使用され、変数Ｘの属性（２）と変数Ｙの属性（３）とが異なることを示している。
【００９５】
Ｓ２１６（図１３参照）において、メインルーチン作成部２４１は、第二の構造設計ファイル２９２を参照し、属性が異なる複数の変数が使用されるサブルーチンが有るか否かを判定する。
図１９に示す第二の構造設計ファイル２９２において、サブルーチン（ｅ）は、属性が異なる複数の変数が使用されるサブルーチンに該当している。
該当するサブルーチンが無い場合、メインルーチン作成部２４１は、第二の構造設計ファイル２９２に基づいてサブルーチンの呼び出し順序を決定する（実施の形態４と同様）。
該当するサブルーチンが有る場合、メインルーチン作成部２４１は、第二の構造設計ファイル２９２に基づいて第三の構造設計ファイル２９３を作成する。そして、メインルーチン作成部２４１は、第三の構造設計ファイル２９３に基づいてサブルーチンの呼び出し順序を決定する。
【００９６】
例えば、メインルーチン作成部２４１は、図１９に示す第二の構造設計ファイル２９２に基づいて、図２０に示す第三の構造設計ファイル２９３を作成する。
つまり、メインルーチン作成部２４１は、サブルーチン（ｅ）を属性（２）と属性（３）との組み合わせ「属性（２）／（３）」に対応付けることによって、第三の構造設計ファイル２９３（図２０参照）を作成する。サブルーチン（ｅ）が属性（２）と属性（３）とのそれぞれに対応付けて第二の構造設計ファイル２９２（図１９参照）に設定されているためである。
そして、メインルーチン作成部２４１は、属性（１）に対応付けられたサブルーチン、属性（１）／（２）に対応付けられたサブルーチン、属性（２）に対応付けられたサブルーチン、属性（２）／（３）に対応付けられたサブルーチン、属性（３）に対応付けられたサブルーチンの順序で、サブルーチンの呼び出し順序を決定する。
つまり、メインルーチン作成部２４１は、サブルーチンの呼び出し順序「（ｃ）→（ｄ）→（ｂ）→（ｅ）→（ａ）」を決定する。但し、サブルーチン（ｃ）およびサブルーチン（ｄ）は共に属性（１）に対応付けられているため、サブルーチン（ｃ）（ｄ）の順番が入れ替わっても構わない。
【００９７】
実施の形態６により、サブルーチンが異なる属性を有する複数の変数を使用する場合であってもサブルーチンの呼び出し順序を決定することができる。
【００９８】
実施の形態７．
サブルーチンの呼び出しが論理的に成立しない形態について説明する。
以下、実施の形態４、５と異なる事項について主に説明する。説明を省略する事項については実施の形態４、５と同様である。
【００９９】
図２１は、実施の形態７におけるメインルーチン作成処理（Ｓ２１０）のフローチャートである。
実施の形態７におけるメインルーチン作成処理（Ｓ２１０）について、図２１に基づいて説明する。
【０１００】
メインルーチン作成処理（Ｓ２１０）は、実施の形態４（図１３）で説明した処理に加えて、Ｓ２１４−２を備える。
【０１０１】
Ｓ２１１からＳ２１４において、メインルーチン作成部２４１は、新たな実行プログラム１２３の第一の構造設計ファイル２９１を作成する。
Ｓ２１４の後、処理はＳ２１４−２に進む。
【０１０２】
Ｓ２１４−２において、メインルーチン作成部２４１は、第一の構造設計ファイル２９１に基づいて、呼び出し順序が矛盾するサブルーチンの組み合わせが有るか否かを判定する。
ここで、呼び出し順序が矛盾するサブルーチンの組み合わせは、以下のような２つのサブルーチンを含んだ組み合わせである。
２つのサブルーチンは、第一の変数と第二の変数とを使用する。
一方のサブルーチンで使用される第二の変数は、一方のサブルーチンで使用される第一の変数の属性よりも「低い」呼び出し順序に対応付けられる属性を有する。
他方のサブルーチンで使用される第二の変数は、他方のサブルーチンで使用される第一の変数の属性よりも「高い」呼び出し順序に対応付けられる属性を有する。
【０１０３】
呼び出し順序が矛盾するサブルーチンの組み合わせが有る場合、メインルーチン作成部２４１はメインルーチンを作成せず、メインルーチン作成処理（Ｓ２１０）は終了する。この場合、プログラム解析実行部２４３は、プログラム解析を行わず、新たな実行プログラム１２３に不具合が有ると判定する。
呼び出し順序が矛盾するサブルーチンの組み合わせが無い場合、処理はＳ２１５に進む。Ｓ２１５からＳ２１７は実施の形態４と同様である。
【０１０４】
図２２、図２３および図２４は、実施の形態７における第一の構造設計ファイル２９１の一例を示す図である。
図２２から図２４に示すような第一の構造設計ファイル２９１が作成された場合、メインルーチン作成部２４１は、呼び出し順序が矛盾するサブルーチンの組み合わせが有ると判定する。図２２から図２４の第一の構造設計ファイル２９１において、属性（１）に対応する呼び出し順序が１番であり、属性（２）に対応する呼び出し順序が２番であり、属性（３）に対応する呼び出し順序が３番である。
【０１０５】
図２２に示す第一の構造設計ファイル２９１において、サブルーチン（ｅ）は属性（２）の変数Ｙと属性（３）の変数Ｘとを使用する。つまり、変数Ｘは、変数Ｙの属性（２）よりも「低い」呼び出し順序に対応付けられる属性（３）を有する。
また、サブルーチン（ｆ）は属性（３）の変数Ｙと属性（２）の変数Ｘとを使用する。つまり、変数Ｘは、変数Ｙの属性（３）よりも「高い」呼び出し順序に対応付けられる属性（２）を有する。
したがって、サブルーチン（ｅ）およびサブルーチン（ｆ）は呼び出し順序が矛盾する。なお、サブルーチン（ｆ）で使用される変数Ｘの属性が属性（１）である場合も呼び出し順序は矛盾する。
図２３または図２４の第一の構造設計ファイル２９１についても同様である。
【０１０６】
実施の形態７において、メインルーチン作成部２４１は、第一の構造設計ファイル２９１に基づいて第二の構造設計ファイル２９２を作成し（Ｓ２１５）、第二の構造設計ファイル２９２に基づいて矛盾するサブルーチンの組み合わせの有無を判定しても構わない（Ｓ２１４−２）。
【０１０７】
実施の形態７により、呼び出し順序が矛盾するサブルーチンの組み合わせを検出することができる。
【０１０８】
各実施の形態は、プログラム管理システム１００および外部端末２００の形態の一例である。
つまり、プログラム管理システム１００および外部端末２００は、各実施の形態で説明した機能または構成の一部を備えなくても構わない。
また、プログラム管理システム１００および外部端末２００は、各実施の形態で説明していない機能または構成を備えても構わない。
さらに、各実施の形態は、矛盾が生じない範囲で一部または全てを組み合わせても構わない。
【符号の説明】
【０１０９】
１００  プログラム管理システム、１１０  アプリケーションサーバ、１１１  ソースコード、１１２  解析結果テーブル、１１３  ソースコード要求受信部、１１４  解析結果検索部、１１５  ソースコード応答部、１１６  プログラム提供部、１１７  構造設計情報、１１８  アプリケーションファイル、１１９  サーバ記憶部、１２０  車両、１２１  電子制御装置、１２２  アプリケーションリスト、１２３  実行プログラム、１３１  アプリケーション仕様書、１３２  テスト仕様書、１３３  テスト用プログラム、１３４  開発用プラットフォーム、２００  外部端末、２１０  追加アプリケーション受付部、２２０  アプリケーションリスト読み込み部、２３０  アプリケーション収集部、２４０  プログラム解析部、２４１  メインルーチン作成部、２４２  プログラム組み立て部、２４３  プログラム解析実行部、２５０  プログラム作成部、２６０  プログラム更新部、２７０  プログラム取得部、２９０  端末記憶部、２９１  第一の構造設計ファイル、２９２  第二の構造設計ファイル、２９３  第三の構造設計ファイル、９０１  演算装置、９０２  補助記憶装置、９０３  主記憶装置、９０４  通信装置、９０５  入出力装置、９０９  バス。
【図１】
0005976209.tif 000002
【図２】
0005976209.tif 000003
【図３】
0005976209.tif 000004
【図４】
0005976209.tif 000005
【図５】
0005976209.tif 000006
【図６】
0005976209.tif 000007
【図７】
0005976209.tif 000008
【図８】
0005976209.tif 000009
【図９】
0005976209.tif 000010
【図１０】
0005976209.tif 000011
【図１１】
0005976209.tif 000012
【図１２】
0005976209.tif 000013
【図１３】
0005976209.tif 000014
【図１４】
0005976209.tif 000015
【図１５】
0005976209.tif 000016
【図１６】
0005976209.tif 000017
【図１７】
0005976209.tif 000018
【図１８】
0005976209.tif 000019
【図１９】
0005976209.tif 000020
【図２０】
0005976209.tif 000021
【図２１】
0005976209.tif 000022
【図２２】
0005976209.tif 000023
【図２３】
0005976209.tif 000024
【図２４】
0005976209.tif 000025