(57)【要約】【課題】ソフトウェアの不具合を高精度に検出できるソフトウェア開発支援装置、ソフトウェア開発支援方法及びソフトウェア開発支援プログラムを提供することを課題とする。【解決手段】ソフトウェアを検証するソフトウェア開発支援装置であって、ソフトウェアの任意の関数の演算処理で更新される変数の演算タイミング（優先順位、更新タイミング、更新周期等）とその任意の関数の演算処理で参照される各変数の演算タイミングとを比較し、演算タイミングに不整合があるか否かを判断し、演算タイミングに不整合がある場合にユーザに通知する。【選択図】図５
2013254371.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアを検証するソフトウェア開発支援装置であって、
前記ソフトウェアの任意の関数の演算処理で更新される変数の演算タイミングと前記任意の関数の演算処理で参照される各変数の演算タイミングとを比較して、演算タイミングに不整合があるか否かを判断することによって、前記ソフトウェアを評価する評価手段と、
前記評価手段での評価結果で演算タイミングに不整合がある場合に通知する通知手段と、
を備えることを特徴とするソフトウェア開発支援装置。
【請求項２】
前記評価手段は、一つの変数が異なる複数の演算タイミングで更新される場合、前記一つの変数に対して異なる複数の演算タイミングを設定して、前記設定した異なる複数の演算タイミングをそれぞれ用いて比較して、異なる複数の演算タイミングについての各組み合わせで演算タイミングに不整合があるか否かをそれぞれ判断することによって、前記ソフトウェアを評価し、
前記通知手段は、前記評価手段での評価結果でいずれかの組み合わせで演算タイミングに不整合がある場合に不整合がある組み合わせを通知することを特徴とする請求項１に記載のソフトウェア開発支援装置。
【請求項３】
前記評価手段は、演算タイミングに不整合があるか否かを評価する評価関数のパラメータとして前記参照される各変数に対する評価結果を含めることにより、前記ソフトウェアにおける変数の依存関係に従って各変数の評価結果を着目する変数まで伝搬させて、評価結果を伝搬させた評価関数により着目する変数の評価結果を算出することによって、前記ソフトウェアを評価することを特徴とする請求項１又は請求項２に記載のソフトウェア開発支援装置。
【請求項４】
前記演算タイミングは、優先順位、更新タイミング、更新周期のうちの少なくとも１つであることを特徴とする請求項１〜請求項３のいずれか１項に記載のソフトウェア開発支援装置。
【請求項５】
ソフトウェアを検証するソフトウェア開発支援方法であって、
前記ソフトウェアの任意の関数の演算処理で更新される変数の演算タイミングと前記任意の関数の演算処理で参照される各変数の演算タイミングとを比較して、演算タイミングに不整合があるか否かを判断することによって、前記ソフトウェアを評価する評価ステップと、
前記評価ステップでの評価結果で演算タイミングに不整合がある場合に通知する通知ステップと、
を含むことを特徴とするソフトウェア開発支援方法。
【請求項６】
前記評価ステップは、一つの変数が異なる複数の演算タイミングで更新される場合、前記一つの変数に対して異なる複数の演算タイミングを設定して、前記設定した異なる複数の演算タイミングをそれぞれ用いて比較して、異なる複数の演算タイミングについての各組み合わせで演算タイミングに不整合があるか否かをそれぞれ判断することによって、前記ソフトウェアを評価し、
前記通知ステップは、前記評価ステップでの評価結果でいずれかの組み合わせで演算タイミングに不整合がある場合に不整合がある組み合わせを通知することを特徴とする請求項５に記載のソフトウェア開発支援方法。
【請求項７】
前記評価ステップは、演算タイミングに不整合があるか否かを評価する評価関数のパラメータとして前記参照される各変数に対する評価結果を含めることにより、前記ソフトウェアにおける変数の依存関係に従って各変数の評価結果を着目する変数まで伝搬させて、評価結果を伝搬させた評価関数により着目する変数の評価結果を算出することによって、前記ソフトウェアを評価することを特徴とする請求項５又は請求項６に記載のソフトウェア開発支援方法。
【請求項８】
前記演算タイミングは、優先順位、更新タイミング、更新周期のうちの少なくとも１つであることを特徴とする請求項５〜請求項７のいずれか１項に記載のソフトウェア開発支援方法。
【請求項９】
ソフトウェアを検証するためのソフトウェア開発支援プログラムであって、
コンピュータに、
前記ソフトウェアの任意の関数の演算処理で更新される変数の演算タイミングと前記任意の関数の演算処理で参照される各変数の演算タイミングとを比較して、演算タイミングに不整合があるか否かを判断することによって、前記ソフトウェアを評価する評価機能と、
前記評価機能での評価結果で演算タイミングに不整合がある場合に通知する通知機能と、
を実現させることを特徴とするソフトウェア開発支援プログラム。
【請求項１０】
前記評価機能は、一つの変数が異なる複数の演算タイミングで更新される場合、前記一つの変数に対して異なる複数の演算タイミングを設定して、前記設定した異なる複数の演算タイミングをそれぞれ用いて比較して、異なる複数の演算タイミングについての各組み合わせで演算タイミングに不整合があるか否かをそれぞれ判断することによって、前記ソフトウェアを評価し、
前記通知機能は、前記評価機能での評価結果でいずれかの組み合わせで演算タイミングに不整合がある場合に不整合がある組み合わせを通知することを特徴とする請求項９に記載のソフトウェア開発支援プログラム。
【請求項１１】
前記評価機能は、演算タイミングに不整合があるか否かを評価する評価関数のパラメータとして前記参照される各変数に対する評価結果を含めることにより、前記ソフトウェアにおける変数の依存関係に従って各変数の評価結果を着目する変数まで伝搬させて、評価結果を伝搬させた評価関数により着目する変数の評価結果を算出することによって、前記ソフトウェアを評価することを特徴とする請求項９又は請求項１０に記載のソフトウェア開発支援プログラム。
【請求項１２】
前記演算タイミングは、優先順位、更新タイミング、更新周期のうちの少なくとも１つであることを特徴とする請求項９〜請求項１１のいずれか１項に記載のソフトウェア開発支援プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアを検証するソフトウェア開発支援装置、ソフトウェア開発支援方法及びソフトウェア開発支援プログラムに関する。
【背景技術】
【０００２】
ソフトウェアを開発する場合、そのソフトウェアを検証し、不具合を検出する必要がある。例えば、特許文献１には、一つの信号が複数の制御演算装置に入力され、この制御演算装置の出力信号がさらに別の制御演算装置に入力されることを検出することにより、同一の信号が異なる経路で伝達され、一つの制御で用いられることによる制御干渉の恐れを検出することが開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００９−１６３３３３号公報
【特許文献２】特開２００８−９０６９６号公報
【特許文献３】特開２０１１−２４８５９０号公報
【特許文献４】特開２００２−３１２１９５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかし、上記の不具合の検出方法の場合、異なる入力信号を用いた制御演算において、入力信号の演算周期や演算優先順位等の矛盾によるソフトウェアの不具合を検出できない。例えば、車両制御等の組み込み制御の場合、複数の異なるタイミングや複数の優先順位が指定され、そのタイミングや優先順位により演算が行われている。このとき、制御演算では、様々なタイミングの信号を用いて演算が行われている。制御演算では、微分（差分）等の制御周期が重要となるものがあり、入力信号と制御演算のタイミングや入力信号間のタイミングの相違が問題になるが、入力経路が複数の経路を通るという判断基準では判断できない。
【０００５】
そこで、本発明は、ソフトウェアの不具合を高精度に検出できるソフトウェア開発支援装置、ソフトウェア開発支援方法及びソフトウェア開発支援プログラムを提供することを課題とする。
【課題を解決するための手段】
【０００６】
本発明に係るソフトウェア開発支援装置は、ソフトウェアを検証するソフトウェア開発支援装置であって、ソフトウェアの任意の関数の演算処理で更新される変数の演算タイミングと任意の関数の演算処理で参照される各変数の演算タイミングとを比較して、演算タイミングに不整合があるか否かを判断することによって、ソフトウェアを評価する評価手段と、評価手段での評価結果で演算タイミングに不整合がある場合に通知する通知手段とを備えることを特徴とする。
【０００７】
ソフトウェアのある関数の演算処理では、所定の演算タイミングで変数が更新される。その関数の演算処理で参照される各変数も、所定の演算タイミングで更新されている。この各変数の演算タイミングが相違すると、ソフトウェアの不具合になる可能性がある。そこで、このソフトウェア開発支援装置の評価手段では、ソフトウェアを評価するために、任意の関数の演算処理で更新される変数の演算タイミングとその関数の演算処理で参照される各変数の演算タイミングとを比較し、演算タイミングに不整合（矛盾）があるか否かを判断する。そして、ソフトウェア開発支援装置の通知手段では、評価手段の評価結果で演算タイミングに不整合がある場合にその不整合の個所を通知する。ソフトウェアの開発者が、この通知によってソフトウェアの開発の段階で不具合の要因を特定でき、不具合の要因を低減することができる。このように、ソフトウェア開発支援装置は、関数の演算処理で更新される変数と参照される各変数の演算タイミングによってソフトウェアを評価することにより、ソフトウェアの不具合を高精度に検出できる。
【０００８】
本発明の上記ソフトウェア開発支援装置では、評価手段は、一つの変数が異なる複数の演算タイミングで更新される場合、一つの変数に対して異なる複数の演算タイミングを設定して、設定した異なる複数の演算タイミングをそれぞれ用いて比較して、異なる複数の演算タイミングについての各組み合わせで演算タイミングに不整合があるか否かをそれぞれ判断することによって、ソフトウェアを評価し、通知手段は、評価手段での評価結果でいずれかの組み合わせで演算タイミングに不整合がある場合に不整合がある組み合わせを通知すると好適である。
【０００９】
変数の中には、異なる複数のタスク等により異なる複数の演算タイミングで更新されるものがある。そこで、このソフトウェア開発支援装置の評価手段では、一つの変数が異なる複数の演算タイミングで更新される場合、その変数に対して異なる複数の演算タイミングを設定する。そして、評価手段では、その変数を用いて評価を行う場合に設定した異なる複数の演算タイミングをそれぞれ用いて比較し、異なる演算タイミングの各組み合わせについて演算タイミングに不整合があるか否かをそれぞれ判断する。そして、ソフトウェア開発支援装置の通知手段では、評価手段での評価結果でいずれかの組み合わせで演算タイミングに不整合がある場合にその組み合わせを通知する。このように、ソフトウェア開発支援装置は、一つの変数が異なる複数の演算タイミングで更新される場合には各演算タイミングについてそれぞれ評価することにより、一つの変数が複数の異なる演算タイミングで更新される場合でも演算タイミングの不整合を検出でき、ソフトウェアの不具合をより高精度に検出できる。
【００１０】
本発明の上記ソフトウェア開発支援装置では、評価手段は、演算タイミングに不整合があるか否かを評価する評価関数のパラメータとして参照される各変数に対する評価結果を含めることにより、ソフトウェアにおける変数の依存関係に従って各変数の評価結果を着目する変数まで伝搬させて、評価結果を伝搬させた評価関数により着目する変数の評価結果を算出することによって、ソフトウェアを評価すると好適である。
【００１１】
このソフトウェア開発支援装置の評価手段では、評価関数を用いて評価結果を算出しており、評価関数のパラメータとして各変数の演算タイミングを用いる。さらに、評価手段では、参照される変数に対して評価結果がある場合、評価関数のパラメータとして参照される各変数に対する評価結果を含めることにより、ソフトウェアにおける変数の依存関係に従って各変数の評価結果を着目する変数まで伝搬させる。そして、評価手段では、着目する変数まで評価結果を伝搬させた評価関数により、着目する変数の評価結果を算出する。このように、ソフトウェア開発支援装置は、変数の依存関係に従って各変数に対する評価結果を伝搬させて評価することにより、着目する変数から深い部分にある演算タイミングの不整合まで検出でき、ソフトウェアの不具合をより高精度に検出できる。
【００１２】
本発明の上記ソフトウェア開発支援装置では、演算タイミングは、優先順位、更新タイミング、更新周期のうちの少なくとも１つである。
【００１３】
本発明に係るソフトウェア開発支援方法は、ソフトウェアを検証するソフトウェア開発支援方法であって、ソフトウェアの任意の関数の演算処理で更新される変数の演算タイミングと任意の関数の演算処理で参照される各変数の演算タイミングとを比較して、演算タイミングに不整合があるか否かを判断することによって、ソフトウェアを評価する評価ステップと、評価ステップでの評価結果で演算タイミングに不整合がある場合に通知する通知ステップとを含むことを特徴とする。
【００１４】
本発明の上記ソフトウェア開発支援方法では、評価ステップは、一つの変数が異なる複数の演算タイミングで更新される場合、一つの変数に対して異なる複数の演算タイミングを設定して、設定した異なる複数の演算タイミングをそれぞれ用いて比較して、異なる複数の演算タイミングについての各組み合わせで演算タイミングに不整合があるか否かをそれぞれ判断することによって、ソフトウェアを評価し、通知ステップは、評価ステップでの評価結果でいずれかの組み合わせで演算タイミングに不整合がある場合に不整合がある組み合わせを通知すると好適である。また、本発明の上記ソフトウェア開発支援方法では、評価ステップは、演算タイミングに不整合があるか否かを評価する評価関数のパラメータとして参照される各変数に対する評価結果を含めることにより、ソフトウェアにおける変数の依存関係に従って各変数の評価結果を着目する変数まで伝搬させて、評価結果を伝搬させた評価関数により着目する変数の評価結果を算出することによって、ソフトウェアを評価すると好適である。また、本発明の上記ソフトウェア開発支援方法では、演算タイミングは、優先順位、更新タイミング、更新周期のうちの少なくとも１つである。
【００１５】
このソフトウェア開発支援方法によれば、各ステップの処理を行うことにより、上記ソフトウェア開発支援装置の作用及び効果を奏する。
【００１６】
本発明に係るソフトウェア開発支援プログラムは、ソフトウェアを検証するためのソフトウェア開発支援プログラムであって、コンピュータに、ソフトウェアの任意の関数の演算処理で更新される変数の演算タイミングと任意の関数の演算処理で参照される各変数の演算タイミングとを比較して、演算タイミングに不整合があるか否かを判断することによって、ソフトウェアを評価する評価機能と、評価機能での評価結果で演算タイミングに不整合がある場合に通知する通知機能とを実現させることを特徴とする。
【００１７】
本発明の上記ソフトウェア開発支援プログラムでは、評価機能は、一つの変数が異なる複数の演算タイミングで更新される場合、一つの変数に対して異なる複数の演算タイミングを設定して、設定した異なる複数の演算タイミングをそれぞれ用いて比較して、異なる複数の演算タイミングについての各組み合わせで演算タイミングに不整合があるか否かをそれぞれ判断することによって、ソフトウェアを評価し、通知機能は、評価機能での評価結果でいずれかの組み合わせで演算タイミングに不整合がある場合に不整合がある組み合わせを通知すると好適である。また、本発明の上記ソフトウェア開発支援プログラムでは、評価機能は、演算タイミングに不整合があるか否かを評価する評価関数のパラメータとして参照される各変数に対する評価結果を含めることにより、ソフトウェアにおける変数の依存関係に従って各変数の評価結果を着目する変数まで伝搬させて、評価結果を伝搬させた評価関数により着目する変数の評価結果を算出することによって、ソフトウェアを評価すると好適である。また、本発明の上記ソフトウェア開発支援プログラムでは、演算タイミングは、優先順位、更新タイミング、更新周期のうちの少なくとも１つである。
【００１８】
この各ソフトウェア開発支援プログラムによれば、このプログラムをソフトウェア開発支援のコンピュータに実行させることによって、上記ソフトウェア開発支援装置の作用及び効果を奏する。
【発明の効果】
【００１９】
本発明によれば、関数の演算処理で更新される変数と参照される各変数の演算タイミングによってソフトウェアを評価することにより、ソフトウェアの不具合を高精度に検出できる。
【図面の簡単な説明】
【００２０】
【図１】本実施の形態に係るソフトウェア開発支援装置の構成図である。
【図２】ターゲットのソフトウェアにおいて各変数の演算タイミングの例であり、（ａ）が各変数の優先順位を示す例であり、（ｂ）が各変数の周期を示す例である。
【図３】ターゲットのソフトウェアにおいて演算タイミングの相違により発生する不具合の例であり、（ａ）が優先順位が相違する場合の例であり、（ｂ）が優先順位が相違する場合の例であり、（ｃ）が周期が相違する場合の例である。
【図４】ターゲットのソフトウェアにおいて周期の相違により発生する不具合の例であり、（ａ）が更新側の周期が早い場合に発生する不具合の例であり、（ｂ）が参照側の周期が早い場合に発生する不具合の例である。
【図５】第１の実施の形態に係るソフトウェア開発支援装置における処理の流れを示すフローチャートである。
【図６】ターゲットのソフトウェアにおいて割り込み禁止がある場合の各変数の優先順位の例であり、（ａ）が変数の参照側に割り込み禁止がある例であり、（ｂ）が変数の更新側に割り込み禁止がある例である。
【図７】ターゲットのソフトウェアにおいて参照側の優先順位が高い場合の処理の流れの例であり、（ａ）が排他処理がない場合の例であり、（ｂ）が更新処理で割り込み禁止のマスクがある場合の例である。
【図８】ターゲットのソフトウェアにおいて更新側の優先順位が高い場合の処理の流れの例であり、（ａ）が排他処理がない場合の例であり、（ｂ）が参照処理で割り込み禁止のマスクがある場合の例である。
【図９】第２の実施の形態に係るソフトウェア開発支援装置における処理の流れを示すフローチャートである。
【図１０】ターゲットのソフトウェアにおいて参照側の変数が２種類の優先順位で更新される場合の例であり、（ａ）が参照側の変数が２種類の優先順位で更新される場合の説明図であり、（ｂ）が各変数の優先順位を示す例である。
【図１１】第３の実施の形態に係るソフトウェア開発支援装置における処理の流れを示すフローチャートである。
【図１２】第４の実施の形態に係るソフトウェア開発支援装置において評価関数で評価結果を伝搬させる場合の例である。
【図１３】第４の実施の形態に係るソフトウェア開発支援装置における処理の流れを示すフローチャートである。
【図１４】第５の実施の形態に係るソフトウェア開発支援装置において評価にユーザによる確認を反映させる場合の例である。
【図１５】第５の実施の形態に係るソフトウェア開発支援装置における処理の流れを示すフローチャートである。
【図１６】ターゲットのソフトウェアにおいて２種類の優先順位で更新される場合の例である。
【図１７】ターゲットのソフトウェアにおいて参照側の変数が２種類の優先順位で更新される場合の処理の流れの例であり、（ａ）が排他処理がない例であり、（ｂ）が低い優先順位側で割り込み禁止のマスクがある場合の例である。
【図１８】第６の実施の形態に係るソフトウェア開発支援装置における処理の流れを示すフローチャートである。
【図１９】ターゲットのソフトウェアにおいてソースコード上で異なる変数とされているが関連した変化を示す変数の例であり、（ａ）が２つの手段で更新される同一のメモリの場合であり、（ｂ）が異なるＣＰＵ間で転送される場合である。
【図２０】第７の実施の形態に係るソフトウェア開発支援装置における処理の流れを示すフローチャートである。
【発明を実施するための形態】
【００２１】
以下、図面を参照して、本発明に係るソフトウェア開発支援装置、ソフトウェア開発支援方法及びソフトウェア開発支援プログラムの実施の形態を説明する。なお、各図において同一又は相当する要素については同一の符号を付し、重複する説明を省略する。
【００２２】
本実施の形態では、本発明を、車両制御の組み込み制御等のソフトウェア（プログラム）を開発する際に利用されるソフトウェア開発支援装置に適用する。本実施の形態に係るソフトウェア開発支援装置は、ターゲットのソフトウェアを検証し、ターゲットのソフトウェアに不具合の可能性がある場合にユーザ（開発者）に警告を行う。本実施の形態には、７つの実施形態があり、第１の実施の形態が基本となる形態であり、各実施の形態に機能を順次追加していく。なお、ソフトウェアは、コンピュータを構成する電子回路や周辺機器等の物理的実体であるハードウェアに対して物理的実体を持たないコンピュータを動作させるためのものであり、例えば、プログラムである。プログラムは、コンピュータを動作させる手順や命令等を記述したものである。本実施の形態では、ターゲットのソフトウェアをユーザによって指定された開発中のプログラムとする。
【００２３】
なお、本実施の形態に係るソフトウェア開発支援装置は、例えば、パソコン等のコンピュータにおいてソフトウェア開発支援用のアプリケーションソフトを実行することによって構成される。このコンピュータの内部あるいは外部に記憶装置が設けられ、この記憶装置に各種データや開発中のプログラム等が記憶され、各種データや開発中のプログラム等が記憶装置から読み出され、ソフトウェア開発支援装置で生成されたもの等が記憶装置に格納される。また、このコンピュータにはディスプレイやプリンタ等の出力手段が接続され、ＧＵＩやログ等によりユーザに出力する。また、このコンピュータにはキーボードやマウス等の入力手段が接続され、ユーザが入力する場合にはこの入力手段が利用される。本実施の形態では、ソフトウェア開発支援装置での各処理が特許請求の範囲に記載する評価手段に相当し、ソフトウェア開発支援装置での出力処理及び出力手段が特許請求の範囲に記載する通知手段に相当する。
【００２４】
図１〜図５を参照して、第１の実施の形態に係るソフトウェア開発支援装置１について説明する。図１は、ソフトウェア開発支援装置の構成図である。図２は、ターゲットのソフトウェアにおいて各変数の演算タイミングの例である。図３は、ターゲットのソフトウェアにおいて演算タイミングの相違により発生する不具合の例である。図４は、ターゲットのソフトウェアにおいて周期の相違により発生する不具合の例である。図５は、第１の実施の形態に係るソフトウェア開発支援装置における処理の流れを示すフローチャートである。
【００２５】
ソフトウェア開発支援装置１は、ユーザによって解析対象のターゲットのソフトウェア（開発中のプログラム）とそのソフトウェア内の変数（データ）が指定されると、その変数の演算タイミングとその変数を算出するために参照する各変数の演算タイミングから演算タイミングに不整合があるか否かを判断し、演算タイミングに不整合がある場合には警告を行う。
【００２６】
まず、ソフトウェア開発支援装置１では、解析対象のソフトウェアにおける変数の依存関係、データフロー、関数のコールツリーを作成する。ここでは、ソフトウェアを解析し、関数間の呼び出しや変数間の代入関係からデータフローや関数のコールツリーを作成する。
【００２７】
次に、ソフトウェア開発支援装置１では、ソフトウェアのコーディングルール、コメント規則、ターゲットのシステムの仕様のデータベース等に基づいて、変数の更新個所毎に、変数の参照と更新毎に、演算処理の演算タイミングとして優先順位、更新タイミング、更新周期等の分類を行い、分類した結果をフラグ（あるいは、ラベル）で設定する。この分類方法としては、例えば、更新個所を含む関数、実行スレッド、実行ＣＰＵ等の演算タイミングの情報によって分類を行う方法、更新個所を含むサブルーチン（関数等）を呼び出している呼び出し元の演算タイミングの情報によって分類を行う方法がある。分類には、関数、タスク、スレッドの実行優先順位、時間同期／外部同期信号、実行ＣＰＵ、実行周期等により行う。なお、コーディングは、プログラミング言語を使ってソフトウェアの設計図であたるソースコードを作成することである。ソースコードは、人がプログラミング言語を用いて記述したプログラムである。コーディングルールは、プログラミング言語の文法とは異なり、ソフトウェアの様々な書き方が可能な場合にどういった書き方にするかをコーディング上のルールとして決めたものであり、例えば、変数や関数等の命名規則、利用してはいけない機能等の禁止事項、インデントやスペース、括弧等の書き方がある。コメント規則は、ソースコード中に挿入される注釈のためのコメントの規則である。ターゲットシステムの仕様のデータベースには、システムのＣＰＵ構成、ＲＡＭ／ＲＯＭ構成、入出力信号、割り込み設定等が格納され、ソフトウェアへの要求仕様として参照する。スレッド／タスクとは、並列処理に対応したＯＳ[Operating System]上の実行単位であり、それぞれの実行単位毎に、優先順位がつけられ、優先順位に従い、ターゲットコンピュータ上で切り替えて、実行される。実行優先順位は、タスク／スレッド、あるいは、割り込み処理を一つのコンピュータ上で実行する時、どの処理を実行するかを定義したものであり、優先順位の低い処理中に、優先順位の高い処理の実行要求が発生した場合には、低い処理を中断し、高い処理の実行を行う。時間同期とは、ソフトウェア内部、または、ＣＰＵ内部で生成される時間をもとに、ソフトウェアを実行する基準タイミングを作成して、これに基づき、ソフトウェアの実行を管理する方法を表す。外部同期とは、ＣＰＵ外部、または、ＥＣＵ外部からの入力信号を基準として、ソフトウェアを実行する基準タイミングを生成して、これに基づき、ソフトウェアの実行を管理する方法を表す。実行ＣＰＵは、ソフトウェアをまさに実行しているＣＰＵ[Central Processing Unit]を表すものとする。実行周期は、時間同期等のように、定期的に動作するタスク／スレッド／割り込み処理等のソフトウェアが動作する周期を表すものとする。
【００２８】
図２には、各変数の演算タイミングの分類の例を示しており、ノードとリンクからなるデータフローで表している。この例の場合、Ａ〜Ｃは、ノード（特定の変数の計算処理）であり、変数を示す。あ〜えは、端のノードである。関数ｃの演算処理で更新される変数Ｃが基準の変数であり、この関数ｃの演算処理では変数Ａと変数Ｂを参照する。参照される変数Ａは関数ａの演算処理で更新され、変数Ｂは関数ｂの演算処理で更新される。なお、リンクは、ノードとノードとを繋ぎ、変数の依存関係を示す。
【００２９】
図２（ａ）に示す例は、優先順位（高い優先順位を「Ｈ」で示し、低い優先順位を「Ｌ」で示す）の例である。参照の変数Ａの場合、関数ａには優先順位の属性が無いので、関数ａの呼び出し元の関数ａ０＿１０ｍｓｌの優先順位（Ｌ）により、「Ｌ」と分類される。参照の変数Ｂの場合、関数ｂの優先順位（Ｈ）により、「Ｈ」と分類される。更新の変数Ｃは、関数ｃの優先順位（Ｈ）により、「Ｈ」と分類される。また、図２（ｂ）に示す例は、更新周期の例である。参照の変数Ａの場合、関数ａが更新周期（１００ｍｓ）により、「Ｔａ＝１００ｍｓ」と分類される。参照の変数Ｂの場合、関数ｂの更新周期（５０ｍｓ）により、「Ｔｂ＝５０ｍｓ」と分類される。更新の変数Ｃは、関数ｃの更新周期（５０ｍｓ）により、「Ｔｃ＝５０ｍｓ」と分類される。
【００３０】
次に、ソフトウェア開発支援装置１では、分類結果に基づいて、変数の更新個所毎に参照される各変数の分類と更新される変数の分類から、その分類に違いあるか否かを判断する。そして、ソフトウェア開発支援装置１では、分類の違いによる変数更新の不整合の可能性のある場所（更新個所）を検出し、開発者に注意を促すためにその場所を警告で表示し、不具合の可能性のある個所を可視化する。この分類の相違を検出する方法としては、優先順位等の判断対象により評価関数を定義し、評価関数の算出結果によって警告表示の内容や有無を判定する。例えば、分類結果のフラグ（ラベル）を優先順位の場合にはＰｘや周期の場合にはＴｘとし、対象関数ｃで更新される変数をＣとし、その演算処理で参照される変数をＡ、Ｂとし、開発者に可視化（警告、案内等）する内容をＷとした場合、優先順位の場合の評価関数をｆ（Ｐｃ，Ｐａ，Ｐｂ）とし、周期の場合の評価関数をｇ（Ｔｃ，Ｔａ，Ｔｂ）とする。この場合、警告をＷＰ＝ｆ（Ｐｃ，Ｐａ，Ｐｂ）、ＷＴ＝ｇ（Ｔｃ，Ｔａ，Ｔｂ）として、表示し、注意喚起の可視化を行う。
【００３１】
例えば、図２（ｂ）に示す例の場合、更新の変数ＣのフラグＴｃと、参照の変数ＡのフラグＴａ及び変数ＢのフラグＴｂを引数として、評価関数をｇ（Ｔｃ，Ｔａ，Ｔｂ）と定義する。そして、この評価関数ｇ（Ｔｃ，Ｔａ，Ｔｂ）により、例えば、周期が異なるものや周期が遅いものを警告する。
【００３２】
図３を参照して、演算タイミングの相違により発生する不具合の例を示す。図３（ａ）の例の場合、優先順位によって分類され、参照の変数Ａが「Ｌ」と分類され、参照の変数Ｂが「Ｌ」と分類され、更新の変数Ｃが「Ｈ」と分類されるので、優先順位が相違し、警告を行う。この場合、変数Ａの更新途中で関数ｃの演算処理で変数Ａを参照する恐れがある。図３（ｂ）の例の場合、優先順位によって分類され、参照の変数Ａが「Ｈ」と分類され、参照の変数Ｂが「Ｌ」と分類され、更新の変数Ｃが「Ｌ」と分類されるので、優先順位が相違し、警告を行う。この場合、関数ｃの演算処理で変数Ａの参照途中に変数Ａが更新される恐れがある。図３（ｃ）の例の場合、更新周期によって分類され、参照の変数Ａが「１０ｍｓ」と分類され、参照の変数Ｂが「１００ｍｓ」と分類され、更新の変数Ｃが「１００ｍｓ」と分類されるので、周期が相違し、警告を行う。この場合、変数Ａの更新データを関数ｃの演算処理で取り損ねる恐れがある。
【００３３】
図４を参照して、周期の相違により発生する不具合の例を示す。図４（ａ）の例の場合、処理Ａで更新される変数Ｒｘを参照して処理Ｃで変数Ｃを算出する場合であり、処理Ａの周期が処理Ｃの周期より早いので、ポーリングによるデータの受信処理で、処理Ｃでは、処理Ａで更新される変数Ｒｘの受信データの一部をロストする。図４（ｂ）の例の場合、処理Ａで更新される変数Ａを参照して処理Ｃで変数Ｃを算出する場合であり、センサ値の差分処理（例えば、Ｃ＝（Ａｎ−Ａｎ−１）／Ｔ）で、処理Ｃで未更新の変数Ａを使って差分処理する。この場合、例えば、未更新の変数Ａを使うので、正しい結果を得られなかったり、余分な処理が入って、全体の結果が異常になったりする。
【００３４】
上記のソフトウェアの開発支援を実現するソフトウェア開発支援装置１での具体的な処理を図５のフローチャートに沿って説明する。ソフトウェア開発支援装置１では、記憶装置に格納されている開発対象のプロジェクトの事前データ（コーディングルール、設計仕様、要求仕様等）を本装置に読み込む（Ｓ１０）。事前データとしては、例えば、図１に示すように、システム仕様（呼び出し周期、割り込みレベル、優先度、電源属性、物理条件、外部モデル、その他ハードウェア仕様等）、設計ルール（命名規則、コメント規則、フォルダ属性、マクロ条件等）、実装属性（実装ＣＰＵ、実装タスク、デュアルポートメモリ、不揮発メモリ、ＤＭＡ領域等）がある。ここで、呼び出し周期とは、周期的にソフトウェアを実行する場合の実行間隔、または、実行周期を表す。割り込みレベルは、実行中のプログラムを中断して別のプログラムを実行する優先順位、または、その際のＣＰＵ内外の信号の優先順位を表す。優先度は、それぞれ実行されるプログラム単位（タスク、スレッド等）を、ＣＰＵにより実行する際の優先順位付けを表す。メモリとは、ターゲットコンピュータ上で入力値、計算値、出力値やプログラムを記憶するための装置である。デュアルポートメモリ（ＤＰＲＡＭ、他）は、マルチポートメモリの一種であり、２つのＣＰＵ等からアクセスを行うことができるようにしたメモリである。ＤＭＡ[Direct Memory Access]領域は、ＣＰＵを介さずに、入力値による更新、出力値の更新、または、複数のメモリ領域（同一ＣＰＵ、別ＣＰＵ）の間で同期を行う対象のメモリ領域である。電源属性は、ターゲットシステムを動作させる電源（エンジンＯＮ、アクセサリ用電源、バックアップ電源等）の状態を表し、この属性に対応させて、プログラムやメモリの状態等を表す。物理条件は、ターゲットシステムが動作する外部環境や入出力信号の物理値や信号変化の条件を表す。外部モデルは、入出力信号に応じて変化するターゲットシステムが接続されている環境を記述したものを表す。さらに、以上に含まれないターゲットシステムの仕様についても必要に応じて、記述され、ここではハードウェア仕様と呼ぶこととする。また、ターゲットシステムのプログラムの作成において、規範とされる設計ルールの情報として、命名規則とは、変数、関数、ファイル名の名前をつける際のルールを表す。コメント規則とは、注釈を記述する際の書き方、フォーマット等を表す。フォルダ属性とは、ファイルを格納するフォルダ構成の決め方や名前の付け方と、格納されているプログラムの使われ方や分類等との紐付けを表す。実装属性とは、作成されたソフトウェアをターゲットシステム上にどのように動作させるか、どのようにターゲットシステム上のＣＰＵ、あるいは、ＯＳ上にどのように割り振るか、メモリ空間上に割り振るかを表し、どのＣＰＵで実行させるか（実装ＣＰＵ）、どのタスクやスレッドで割り振るか（実装タスク、実装スレッド）、実行させるメモリ空間のハードウェアの仕様の中でも特殊な振る舞いをするメモリとの紐付け（デュアルポートメモリへの対応、不揮発性のメモリへの対応、ＤＭＡ転送される領域への対応）等がある。
【００３５】
次に、ソフトウェア開発支援装置１では、ユーザによって解析対象の開発中のプログラムが指定されると、記憶装置に格納されているその解析対象のプログラムを本装置に読み込む（Ｓ１１）。また、ソフトウェア開発支援装置１では、ユーザによって関係性を把握したい変数と、解析を開始したいプログラム上の場所が指定される（Ｓ１２）。また、ソフトウェア開発支援装置１では、ユーザによって判定条件（評価式（評価関数）、警告条件等）が指定される（Ｓ１３）。
【００３６】
次に、ソフトウェア開発支援装置１では、解析対象のプログラムのサブルーチン（Ｃ言語の関数）の関数の呼び出しリスト（コールリスト）を作成する（Ｓ１４）。コールリスト（コールツリー）は、図１に示すように、呼び出し元の関数、呼び出し先の関数、及び、これら各関数の情報からなる。なお、各関数の情報としては、例えば、図１に示すように、関数名、戻り値や引数の型、各関数のプログラムが記述されているファイル名／ファイル内の行番号と桁位置等、プログラムが実行されるＥＣＵ、ＣＰＵ／コア、割り振られるスレッドやタスク等、実行周期／実行の優先度（優先順位）、関数内で更新される変数名、参照される変数名、割り込み禁止処理や許可処理の有無と処理の実施箇所／範囲、そして、これらに含まれない様々な付加情報がある。ここで、関数とは、引数と呼ばれるパラメータを受け取り（存在しないものもある）、定められた処理を実行し、戻り値（存在しないものもある）を返すプログラムの実行単位を表す。型は、引数、戻り値、作業用の変数等の種類やサイズを示すものである。ＥＣＵ[Electronic Control Unit]とは、ターゲットプログラムを実行する電子制御コンピュータを示す。コア（プロセッサコア）とは、ターゲットプログラムを実行する一つのプログラム実行装置を示し、ＣＰＵとは、ターゲットプログラムを実行する電子部品であり、１つ以上のプロセッサコアを装備している。
【００３７】
次に、ソフトウェア開発支援装置１では、Ｓ１２で指定されたプログラム上の場所から、Ｓ１２で指定された変数を基準として代入関係や参照関係をたどり、変数の依存関係のリストを作成する（Ｓ１５）。また、グローバル変数をたどり、グローバル変数の依存関係のリストを作成する。なお、各変数の情報としては、例えば、図１に示すように、変数名、変数の別名、定義、参照、更新、警告情報、付加情報等がある。定義は、型、ファイル名、行番号や桁位置等、ＥＣＵ、ＣＰＵ、コアやスレッド等、更新周期／優先度（優先順位）、有効範囲やライフタイム等である。参照は、ファイル名、行番号や桁位置等、ＥＣＵ、ＣＰＵ、コアやスレッド等、更新周期／優先度（優先順位）、参照関数、警告情報、付加情報等の情報がある。更新は、ファイル名、行番号や桁位置等、ＥＣＵ、ＣＰＵ、コアやスレッド等、更新周期／優先度（優先順位）、更新関数、警告情報、付加情報等の情報がある。
【００３８】
次に、ソフトウェア開発支援装置１では、Ｓ１２で指定されたプログラム上の場所から、Ｓ１２で指定された変数を基準として、Ｓ１４で作成したコールリストから関連する部分を抽出する（プログラムスライシング）（Ｓ１６）。
【００３９】
次に、ソフトウェア開発支援装置１では、Ｓ１０で入力した事前データとＳＳ１４で作成したコールリストから各関数の優先順位、基準タイミング、呼び出し周期等を判定して分類し、分類した優先順位、タイミング、周期等を関数毎のフラグとして設定する（Ｓ１７）。
【００４０】
次に、ソフトウェア開発支援装置１では、各関数内の変数の変更個所それぞれについて、Ｓ１７で設定した各関数のフラグに基準として、優先順位、タイミング、周期等を判定して分類する（Ｓ１８）。そして、ソフトウェア開発支援装置１では、分類した優先順位、タイミング、周期等を変数更新毎のフラグ（属性）として設定する（Ｓ１９）。
【００４１】
次に、ソフトウェア開発支援装置１では、各変数の更新毎に更新個所のフラグと参照している変数のフラグを用いて、Ｓ１３で指定された評価関数で評価する（Ｓ２０）。この評価では、更新側のフラグと参照側のフラグを比較し、フラグに相違があるか否かを判断する。ソフトウェア開発支援装置１では、関連する変数の更新個所全てについてＳ２０の評価を行ったか否かを判定する（Ｓ２１）。Ｓ２１にて全てについてＳ２０の評価を行っていないと判定した場合、ソフトウェア開発支援装置１では、次の関連する変数の更新個所についてＳ２０の評価を行う。
【００４２】
Ｓ２１にて全てについてＳ２０の評価を行ったと判定した場合、ソフトウェア開発支援装置１では、Ｓ２０、Ｓ２１での評価結果（特に、警告）を表示し、演算タイミングの不整合等を開発者に伝える（Ｓ２２）。この際、開発者が評価結果（警告）を見て問題ないと判断し、その個所を指定等した場合、ソフトウェア開発支援装置１では、その指定した個所を反映し、評価結果等を補正して表示する（Ｓ２３）。そして、ソフトウェア開発支援装置１では、開発者が指定した評価結果や警告を記憶装置に保存する（Ｓ２４）。さらに、ソフトウェア開発支援装置１では、全て終了したか否かを判断し、終了していないと判断した場合にはＳ２２に戻り、終了したと判断した場合には終了する（Ｓ２５）。
【００４３】
このソフトウェア開発支援装置１によれば、各関数の演算タイミングから関数内の変数の更新個所の演算タイミングを分類し、更新される変数の演算タイミングと参照される変数の演算タイミングを用いて評価を行うことにより、演算タイミングの不整合等を検出でき、ソフトウェアの不具合を高精度に検出できる。不具合個所を表示することにより、ソフトウェアの注意点を可視化でき、開発者に警告を行うことができる。その結果、開発者は、開発の早い段階で不具合を把握して、不具合要因を低減することができる。
【００４４】
図１及び図６〜図９を参照して、第２の実施の形態に係るソフトウェア開発支援装置２について説明する。図１は、ソフトウェア開発支援装置の構成図である。図６は、ターゲットのソフトウェアにおいて割り込み禁止がある場合の各変数の優先順位の例である。図７は、ターゲットのソフトウェアにおいて参照側の優先順位が高い場合の処理の流れの例である。図８は、ターゲットのソフトウェアにおいて更新側の優先順位が高い場合の処理の流れの例である。図９は、第２の実施の形態に係るソフトウェア開発支援装置における処理の流れを示すフローチャートである。
【００４５】
ソフトウェア開発支援装置２は、第１の実施の形態に係るソフトウェア開発支援装置１の機能に加えて、変数の更新側や参照側にて割り込み禁止／優先順位の変更／タスクスイッチ等の処理を行っている場合に優先順位の相違があることに起因する警告を抑制する機能を有している。ソフトウェア開発支援装置２では、変数の更新処理毎に、割り込み禁止等を考慮して分類し、その分類に従って分類情報（フラグ）を持たせる。そして、ソフトウェア開発支援装置２では、評価の際、分類情報の割り込み禁止等とその個所が入力処理／出力処理かを考慮して、評価関数で評価を行う。
【００４６】
なお、第１の実施の形態で説明したように、ソフトウェア開発支援装置１では、組み込みソフトウェア等で発生する優先順位の相違による不整合の発生個所について警告を行うことができる。ところが、組み込みソフトウェア等では、割り込み禁止命令や優先順位の変更等により、不用意な他の処理の介入を防止している場合がある。ソフトウェア開発支援装置２では、このような個所についての警報の出力を抑制し、開発者の確認個数を削減し、問題のある個所についてのみ確認を行えるようにする。
【００４７】
図６には、割り込み禁止がある場合の各変数の優先順位の例を、データフローで表している。図６（ａ）に示す例は、参照側において、関数ａは低い優先順位「Ｌ」であるが、関数ａでは割り込み禁止命令（ＤＩ[Disable Interrupt]）があり、変数Ａが更新されるまで割り込み禁止のマスク処理が行われる。したがって、変数Ａの場合、関数ａの優先順位（Ｌ）と割り込み禁止マスク処理により、「Ｌ」ではなく「Ｌ−ｍ」と分類される。この場合、参照の変数Ａの分類が「Ｌ−ｍ」であり、参照の変数Ｂの分類が「Ｈ」であり、更新の変数Ｃの分類が「Ｈ」であるので、変数Ａの「Ｌ−ｍ」が「Ｈ」に相当するものとし、優先順位に不整合がないと判断され、警告は行われない。
【００４８】
図６（ｂ）に示す例は、更新側において、関数ｃは低い優先順位「Ｌ」であるが、関数ｃでは割り込み禁止命令（ＤＩ）があり、変数Ｃが更新されるまで割り込み禁止のマスク処理が行われる。したがって、変数Ｃの場合、関数ｃの優先順位（Ｌ）と割り込み禁止マスク処理により、「Ｌ」でなく「Ｌ−ｍ」と分類される。この場合、参照の変数Ａの分類が「Ｈ」と分類され、参照の変数Ｂの分類が「Ｈ」であり、更新の変数Ｃの分類が「Ｌ−ｍ」であるので、変数Ｃの「Ｌ−ｍ」が「Ｈ」に相当するものとし、優先順位に不整合がないと判断され、警告が行われない。
【００４９】
図７には、参照側の優先順位が高い場合の処理の流れの例を示している。この例の場合、上側の処理Ｂと処理Ｃが優先順位が高い処理であり、下側の処理Ａが優先順位の低い処理である。Ｖａ，Ｖｂ，Ｖｃが各処理で更新される値であり、ｆａ，ｆｂが各処理で更新されるフラグであり、それぞれ、［Ｖａ，ｆａ］のようにセットで取り扱う変数である。
【００５０】
図７（ａ）に示す例は、排他処理がない場合の例である。この例の場合、処理Ａの途中で、優先順位の高い処理Ｂが行われ、処理Ｂで値Ｖｂとフラグｆｂが更新される。処理Ｂが終了すると、処理Ａが再開され、処理Ａで値Ｖａだけが更新されたところで、優先順位の高い処理Ｃが行われ、値Ｖｃが更新される。この際、処理Ｃでは、処理Ｂの値Ｖｂとフラグｆｂ及び処理Ａの値Ｖａとフラグｆａを参照して処理を行うが、処理Ｂのデータについては値Ｖｂとフラグｆｂをセットで更新されたデータを取得できるが、処理Ａのデータについては値Ｖａだけしか更新されたデータを取得できない。
【００５１】
図７（ｂ）示す例は、処理Ａで割り込み禁止のマスク処理が行われる場合の例である。この例の場合、処理Ａが再開されると、処理Ａで値Ｖａとフラグｆａが更新されるまでマスク処理され、値Ｖａとフラグｆａが共に更新された後に、優先順位の高い処理Ｃが行われる。この際、処理Ｃでは、処理Ｂのデータについては値Ｖｂとフラグｆｂをセットで更新されたデータを取得でき、処理Ａのデータについても値Ｖａとフラグｆａをセットで更新されたデータを取得できる。この例の場合、処理Ａの優先順位が「Ｌ」であるが、「Ｌ−ｍ」と分類され、「Ｌ−ｍ」が「Ｈ」に相当するものとし、優先順位に不整合がないと判断される。
【００５２】
図８には、更新側の優先順位が低い場合の処理の流れの例を示している。この例の場合、上側の処理Ａが優先順位が高い処理であり、下側の処理Ｂと処理Ｃが優先順位の低い処理である。
【００５３】
図８（ａ）に示す例は、排他処理がない場合の例である。この例の場合、優先順位の高い処理Ａが行われ、処理Ａで値Ｖａとフラグｆａが更新される。処理Ａが終了すると、処理Ｂが行われ、処理Ｂで値Ｖｂとフラグｆｂが更新される。次に、処理Ｃが行われ、処理Ｃの途中で、優先順位の高い処理Ａが行われ、処理Ａで値Ｖａとフラグｆａが更新される。処理Ａが終了すると、処理Ｃが再開され、値Ｖｃが更新される。この際、処理Ｃでは、処理Ｂの値Ｖｂとフラグｆｂ及び処理Ａの値Ｖａとフラグｆａを参照して処理を行うが、処理Ｂのデータについては処理Ａが開始する前に値Ｖｂとフラグｆｂをセットで更新されたデータを取得できるが、処理Ａのデータについてはセットで取得途中でフラグｆａが更新されてしまう。
【００５４】
図８（ｂ）示す例は、処理Ｃで割り込み禁止のマスク処理が行われる場合の例である。この例の場合、処理Ｃが開始されると、処理Ｂの値Ｖｂとフラグｆｂをセットで取得するとともに処理Ａの値Ｖａとフラグｆａをセットで取得するまでマスク処理され、セットで取得した後に、優先順位の高い処理Ａが行われる。この例の場合、処理Ｃの優先順位が「Ｌ」であるが、「Ｌ−ｍ」と分類され、「Ｌ−ｍ」が「Ｈ」に相当するものとし、優先順位に不整合がないと判断される。
【００５５】
上記のソフトウェアの開発支援を実現するソフトウェア開発支援装置２での具体的な処理を図９のフローチャートに沿って説明する。ソフトウェア開発支援装置２では、Ｓ３０〜Ｓ３９については、第１の実施の形態に係るソフトウェア開発支援装置１でのＳ１０〜Ｓ１９と同じ処理を行う。
【００５６】
次に、ソフトウェア開発支援装置２では、各関数について割り込み禁止や優先順位の変更が行われる範囲を割り込み禁止やタスク優先順位の変更等を行う命令を抽出することによって特定し、その範囲の変数を更新個所への分類に追加する（Ｓ４０）。さらに、ソフトウェア開発支援装置２では、変数の更新個所の位置からその個所が計算処理の中で出力処理なのか入力処理なのかを判定する（Ｓ４１）。
【００５７】
そして、ソフトウェア開発支援装置２では、各変数について更新毎に更新個所のフラグと参照している変数のフラグを用いて、Ｓ３３で指定した評価関数で評価する（Ｓ４２）。この際、Ｓ４０で特定した割り込み禁止やタスク優先順位の変更の範囲及びＳ４１で判定した入力処理／出力処理の判定結果を考慮して、評価を行う。この評価では、割り込み禁止等も含めて、警告が不要な否かを評価する。ソフトウェア開発支援装置２では、関連する変数の更新個所全てについてＳ４２の評価を行ったか否かを判定する（Ｓ４３）。Ｓ４３にて全てについてＳ４２の評価を行っていないと判定した場合、ソフトウェア開発支援装置２では、次の関連する変数の更新個所についてＳ４２の評価を行う。
【００５８】
Ｓ４３にて全てについてＳ４２の評価を行ったと判定した場合、ソフトウェア開発支援装置２では、Ｓ４４〜Ｓ４７については、第１の実施の形態に係るソフトウェア開発支援装置１でのＳ２２〜Ｓ２５と同じ処理を行う。
【００５９】
このソフトウェア開発支援装置２は、第１の実施の形態に係るソフトウェア開発支援装置１と同様の効果を有する上に、以下の効果も有している。ソフトウェア開発支援装置２によれば、割り込み禁止や優先順位の変更等も考慮して評価を行うことにより、ソフトウェアにおいて割り込み禁止や優先順位の変更等によって不用意な他の処理の介入を防止している場合にはそのような個所を優先順位の不整合として検出せず、警報の出力を抑制できる。その結果、開発者の確認工数を削減でき、開発者が問題のある個所についてのみ確認を行える。
【００６０】
図１及び図１０〜図１１を参照して、第３の実施の形態に係るソフトウェア開発支援装置３について説明する。図１は、ソフトウェア開発支援装置の構成図である。図１０は、ターゲットのソフトウェアにおいて参照側の変数が２種類の優先順位で更新される場合の例である。図１１は、第３の実施の形態に係るソフトウェア開発支援装置における処理の流れを示すフローチャートである。
【００６１】
ソフトウェア開発支援装置３は、第２の実施の形態に係るソフトウェア開発支援装置２の機能に加えて、変数における複数の更新属性に対応する機能（変数更新分類を変数単位から更新処理毎へ変更する機能）を有している。つまり、ソフトウェア開発支援装置３では、変数の更新処理毎に、各参照（リンク）毎に更新タスク等の優先順位について属性付けを行い（分類）、更新処理の分類の種類の数だけ、分類情報（フラグ）を持たせる。そして、ソフトウェア開発支援装置３では、評価の際に、更新される変数の分類情報と参照される各変数の各分類情報（２種類以上の場合がある）を用いて、評価関数で評価を行う。さらに、ソフトウェア開発支援装置３では、いずれかの分類情報の組み合わせで優先順位に不整合がある場合、いずれの組み合わせで問題があるかを示して警告を行う。なお、ここでは、演算タイミングとして優先順位を例に挙げて説明するが、周期等の他の演算タイミングについても適用できる。
【００６２】
図１０には、参照側の変数Ａが２種類の優先順位で更新される場合の例を示している。図１０（ａ）に示すように、１つの変数Ａを、優先順位の異なる２つのタスクで更新している。高い優先順位のタスクでは、「お」と「か」を参照して、変数Ａ（Ａ２）を更新する。一方、低い優先順位のタスクでは、「あ」と「い」を参照して、変数Ａ（Ａ１）を更新する。なお、参照側の変数Ｂについては、「う」と「え」を参照して、１つの高い優先順位のタスクで更新される。また、更新側の変数Ｃについては、変数Ａと変数Ｂを参照して、１つの高い優先順位のタスクで更新される。
【００６３】
この場合、図１０（ｂ）に示すように、変数Ａについては、２つの分類の種類（ＬとＨ）があるので、「Ｌ」と「Ｈ」の分類情報を持たせる。そして、変数Ａのノードと変数Ｃのノードとを繋ぐリンクのリンク元に、ＬとＨのフラグが設定される。ちなみに、変数Ａのノードと変数Ｃのノードとを繋ぐリンクのリンク先には、Ｈのフラグが設定される。また、変数Ｂのノードと変数Ｃのノードとを繋ぐリンクには、リンク元にＨのフラグが設定され、リンク先にＨのフラグが設定される。特に、データフローにおいて、Ａ２は変数Ａが高い優先順位の計算処理を示しており、Ａ１は変数Ａが低い優先順位の計算処理を示している。この場合、高い優先順位のＡ２の組み合わせの場合、評価関数ｆ２（Ｈ，Ｈ，Ｈ）となり、優先順位に不整合がない。一方、低い優先順位のＡ１の組み合わせの場合、評価関数ｆ１（Ｈ，Ｌ，Ｈ）となり、優先順位に不整合がある。
【００６４】
上記のソフトウェアの開発支援を実現するソフトウェア開発支援装置３での具体的な処理を図１１のフローチャートに沿って説明する。ソフトウェア開発支援装置３では、Ｓ５０〜Ｓ５８については、第２の実施の形態に係るソフトウェア開発支援装置２でのＳ３０〜Ｓ３８と同じ処理を行う。
【００６５】
次に、ソフトウェア開発支援装置３では、変数の更新／参照処理毎に、各変数に対して、処理を行っている各計算処理（各タスク等）において出力にあたるか否かを判定して分類し、フラグとして設定する（Ｓ５９）。次に、ソフトウェア開発支援装置３では、Ｓ６０、Ｓ６１については、第２の実施の形態に係るソフトウェア開発支援装置２でのＳ３９、Ｓ４０と同じ処理を行う。
【００６６】
次に、ソフトウェア開発支援装置３では、変数の更新／参照処理毎に、変数の位置からその個所が各計算処理の中で出力処理なのか入力処理なのかを判定する（Ｓ６２）。そして、ソフトウェア開発支援装置３では、各変数について更新毎に更新個所のフラグと参照している変数のフラグを用いて、Ｓ５３で指定した評価関数で評価する（Ｓ６３）。この際、第２の実施の形態での評価に加えて、Ｓ５９とＳ６２の結果を考慮して、１つの変数に複数の分類情報がある場合には各個別の更新／参照毎に評価を実施し、個別に評価した結果でいずれかの組み合わせで問題があれば警告対象と判断し、警告対象となった組み合わせを記憶する。ソフトウェア開発支援装置３では、関連する変数の更新個所全てについてＳ６３の評価を行ったか否かを判定する（Ｓ６４）。Ｓ６４にて全てについてＳ６３の評価を行っていないと判定した場合、ソフトウェア開発支援装置３では、次の関連する変数の更新個所についてＳ６３の評価を行う。
【００６７】
Ｓ６４にて全てについてＳ６３の評価を行ったと判定した場合、ソフトウェア開発支援装置３では、Ｓ６５〜Ｓ６８については、第２の実施の形態に係るソフトウェア開発支援装置２でのＳ４４〜Ｓ４７と同じ処理を行う。
【００６８】
このソフトウェア開発支援装置３は、第２の実施の形態に係るソフトウェア開発支援装置２と同様の効果を有する上に、以下の効果も有している。ソフトウェア開発支援装置３によれば、一つの変数が異なる複数の演算タイミングで更新される場合には各演算タイミングについてそれぞれ評価することにより、一つの変数が複数の異なる演算タイミングで更新される場合でも演算タイミングの不整合を検出でき、ソフトウェアの不具合をより高精度に検出できる。その結果、複数の異なる優先順位や周期等で更新される変数がある場合でも、異なる優先順位や周期等の各組み合わせについてソフトウェアの注意点を可視化でき、開発者にいずれの組み合わせに問題があるかの警告を行うことができる。
【００６９】
図１及び図１２〜図１３を参照して、第４の実施の形態に係るソフトウェア開発支援装置４について説明する。図１は、ソフトウェア開発支援装置の構成図である。図１２は、第４の実施の形態に係るソフトウェア開発支援装置において評価関数で評価結果を伝搬させる場合の例である。図１３は、第４の実施の形態に係るソフトウェア開発支援装置における処理の流れを示すフローチャートである。
【００７０】
ソフトウェア開発支援装置４は、第３の実施の形態に係るソフトウェア開発支援装置３の機能に加えて、警告のある評価結果を用いた演算結果に対して警告を行う機能を有している。ソフトウェア開発支援装置４では、警告するか否か（あるいは警告レベル）を評価する評価関数として、参照される変数の計算処理における評価結果をパラメータとして含める。そして、ソフトウェア開発支援装置４では、依存関係のある変数に対して次々に評価結果を伝搬させ、最終的に、着目したい変数の評価結果（警告メッセージ）を算出する。
【００７１】
図１２には評価結果を伝搬させる一例を示している。この例の場合、評価関数ｈ（ａ，ｂ）は、ａが警告（０の場合は警告なし、１の場合は警告あり）であり、ｂが計算タスク等の優先順位（Ｈ：高い優先順位、Ｌが低い優先順位、Ｎが未定義）である。評価関数ｆ（ｃ，ｄ，ｅ，・・・）は、ｃが自タスクの優先順位（１つ目の引数）、ｄ，ｅ，・・・が他タスクの優先順位（２つ目以降の引数）である。評価関数ｇ（ｗｄ１，ｗｄ２，・・・）は、総合評価（この例では、最大の警告を総合の警告とする）である。＜・・・＞は、複数の組み合わせである。Ａ〜Ｅは、ノード（特定の変数の計算処理）である。あ，い等は、端のノードであり、既に入力済みのデータ等を想定した端点として、優先順位や警告等が無しとする。Ａ１，Ａ２等は、特定の変数の計算が複数個所で行われていることを想定した１つ１つの計算処理である。ＳＡ，ＳＢ等は、ノードのステータス（警告、優先順位等）である。ＷＡ，ＷＢ等は、ノードの優先順位の相違等に対する警告である。Ｐあ，Ｐい等は、ノードのタスク等の優先順位である。なお、変数Ｃを着目したい変数とする。
【００７２】
例えば、ノードＤの場合を例に、評価関数、警告、ステータスを説明する。ノードＤの場合、「あ」と「い」を参照して高い優先順位で計算処理されるＤ１と、「う」と「え」を参照して低い優先順位で計算処理されるＤ２がある。ノードあのステータスは、Ｓあ＝（ｗあ、Ｐあ）＝（０，Ｎ）である。ノードいのステータスは、Ｓい＝（ｗい、Ｐい）＝（０，Ｎ）である。ノードうのステータスは、Ｓう＝（ｗう、Ｐう）＝（０，Ｎ）である。ノードえのステータスは、Ｓえ＝（ｗえ、Ｐえ）＝（０，Ｎ）である。
【００７３】
Ｄ１についての評価関数ｈは、ノードＤ１の優先順位ＰＤ１とノードあのステータスＳあとノードいのステータスＳいを用いて、式（１）となる。この式（１）の評価関数ｈに、ＰＤ１＝Ｈ、Ｓあ＝（０，Ｎ）とＳい＝（０，Ｎ）を代入すると、式（２）となる。式（１）の評価関数ｈを評価関数ｇで表すと、式（３）になる。この式（３）の評価関数ｇに、ＰＤ１＝Ｈ、Ｓあ＝（０，Ｎ）とＳい＝（０，Ｎ）を代入すると、式（４）となる。この式（４）における評価関数ｆ（Ｈ，Ｎ，Ｎ）の場合は警告なしなので、式（４）は式（５）となる。これを、式（６）に示すように、Ｄ１の警告ｗＤ１とする。
【数１】
2013254371.tif 000003
【００７４】
同様に、Ｄ２についての評価関数ｈは、ノードＤ２の優先順位ＰＤ２とノードうのステータスＳうとノードえのステータスＳえを用いて、式（７）となる。この式（７）の評価関数ｈに、ＰＤ２＝Ｌ、Ｓう＝（０，Ｎ）とＳえ＝（０，Ｎ）を代入すると、式（８）となる。式（７）の評価関数ｈを評価関数ｇで表すと、式（９）になる。この式（９）の評価関数ｇに、ＰＤ２＝Ｌ、Ｓう＝（０，Ｎ）とＳえ＝（０，Ｎ）を代入すると、式（１０）となる。この式（１０）における評価関数ｆ（Ｌ，Ｎ，Ｎ）の場合は警告なしなので、式（１０）は式（１１）となる。これを、式（１２）に示すように、Ｄ２の警告ｗＤ２とする。
【数２】
2013254371.tif 000004
【００７５】
そして、Ｄ１のステータスＳＤ１は、Ｄ１の警告ｗＤ１とＤ１の優先順位の「Ｈ」を用いて、ＳＤ１＝（ｗＤ１，Ｈ）となる。また、Ｄ２のステータスＳＤ２は、Ｄ２の警告ｗＤ２とＤ２の優先順位の「Ｌ」を用いて、ＳＤ２＝（ｗＤ２，Ｌ）となる。そして、ノードＤのステータスＳＤは、このＳＤ１とＳＤ２を組み合わせて、ＳＤ＝＜ＳＤ１，ＳＤ２＞＝＜（ｗＤ１，Ｈ），（ｗＤ２，Ｌ）＞となる。これは、ノードＥについても、同様に、ステータスＳＥ＝＜ＳＥ１，ＳＥ２＞＝＜（ｗＥ１，Ｈ），（ｗＥ２，Ｅ）＞を求めることができる。ノードＥの場合、２つの計算処理Ｅ１，Ｅ２があるが、両方とも高い優先順位での計算処理であるので、ステータスＳＥ＝（ｇ（ｗＥ１，ｗＥ２），（Ｈ，Ｈ））＝（ｗＥ，Ｈ）となる。
【００７６】
ノードＡの場合、変数Ｄと変数Ｅを参照して高い優先順位で計算処理されるＡ１と、「さ」と「し」を参照して低い優先順位で計算処理されるＡ２がある。Ａ１の場合、ノードＤが高い優先順位の計算処理のＤ１と低い優先順位の計算処理のＤ２があるので、Ａ１の警告ｗＡ１はこの２種類の優先順位のＤ１とＤ２を組み合わせて、式（１３）となる。この式（１３）を評価関数ｇで表すと、式（１４）となる。Ａ１のステータスＳＡ１は、この警告ｗＡ１と優先順位の「Ｈ」を用いて、式（１５）で表さる。この式（１５）は、式（１４）より、式（１６）となる。一方、Ａ２の場合、「さ」と「し」を参照して低い優先順位で計算処理されるので、上記のＤ２の場合と同様に、Ａ２の警告ｗＡ２を求めることができる。Ａ２のステータスＳＡ２は、この警告ｗＡ２と優先順位の「Ｌ」を用いて、ＳＡ２＝（ｗＡ２，Ｌ）＝（ｇ（ｗさ，ｗし）、Ｌ）となる。そして、ノードＡのステータスＳＡは、このＳＡ１とＳＡ２を組み合わせて、ＳＡ＝＜ＳＡ１，ＳＡ２＞＝＜（ｗＡ１，Ｈ），（ｗＡ２，Ｌ）＞となる。
【数３】
2013254371.tif 000005
【００７７】
ノードＢの場合、「た」と「ち」を参照して高い優先順位で計算処理されるＢ１があるので、上記のＤ１の場合と同様に、Ｂ１の警告ｗＢ１を求めることができる。Ｂ１のステータスＳＢ１は、この警告ｗＢ１と優先順位の「Ｈ」を用いて、ＳＢ１＝（ｗＢ１，Ｈ）＝（ｇ（ｗた，ｗち）、Ｌ）となる。
【００７８】
ノードＣの場合、変数Ａと変数Ｂを参照して高い優先順位で計算処理されるＣ１がある。Ｃ１の場合、ノードＡが高い優先順位の計算処理のＡ１と低い優先順位の計算処理のＡ２があるので、Ｃ１の警告ｗＡ１はこの２種類の優先順位のＡ１とＡ２の場合を組み合わせて、式（１７）となる。この式（１７）を評価関数ｇで表すと、式（１８）となる。ＣのステータスＳＣは、式（１９）に示すように、この警告ｗＣ１と優先順位の「Ｈ」を用いて、ＳＣ＝（ｗＣ１，Ｈ）となる。このように、着目したい変数Ｃの評価結果（ステータスＳＣ）まで、依存関係にある各変数の評価結果（警告）が伝搬される。
【数４】
2013254371.tif 000006
【００７９】
上記のソフトウェアの開発支援を実現するソフトウェア開発支援装置４での具体的な処理を図１３のフローチャートに沿って説明する。ソフトウェア開発支援装置４では、Ｓ７０〜Ｓ８２については、第３の実施の形態に係るソフトウェア開発支援装置３でのＳ５０〜Ｓ６２と同じ処理を行う。
【００８０】
次に、ソフトウェア開発支援装置４では、Ｓ７５で作成した変数の依存リストの末端の変数を検索し、末端の変数から評価を開始する（Ｓ８３）。ソフトウェア開発支援装置４では、ノード（変数）が末端か否かを判定する（Ｓ８４）。Ｓ８４にて末端のノードと判定した場合、ソフトウェア開発支援装置４では、リンク元のノードの評価結果として初期値（警告なし）として評価関数のパラメータをセットする（Ｓ８５）。Ｓ８４にて末端のノードでないと判定した場合、ソフトウェア開発支援装置４では、リンク元のノードの評価結果を評価関数のパラメータに組み入れる（Ｓ８６）。
【００８１】
次に、ソフトウェア開発支援装置４では、各変数について更新毎に更新個所のフラグと参照している変数のフラグを用いて、Ｓ７３で指定した評価関数で評価する（Ｓ８７）。この際、第３の実施の形態での評価に加えて、Ｓ８５，Ｓ８６で組み入れた参照元の変数の評価結果を参照して評価を実施する。ソフトウェア開発支援装置４では、関連する変数（ノード）の更新個所全てについて評価を行ったか否かを判定する（Ｓ８８）。Ｓ８８にて全てについてＳ８７の評価を行っていないと判定した場合、ソフトウェア開発支援装置４では、Ｓ８４に戻って、次の関連する変数（ノード）の更新個所についての評価を行う。
【００８２】
Ｓ８８にて全てについての評価を行ったと判定した場合、ソフトウェア開発支援装置４では、Ｓ８９〜Ｓ９２については、第３の実施の形態に係るソフトウェア開発支援装置３でのＳ６５〜Ｓ６８と同じ処理を行う。
【００８３】
このソフトウェア開発支援装置４は、第３の実施の形態に係るソフトウェア開発支援装置３と同様の効果を有する上に、以下の効果も有している。ソフトウェア開発支援装置４によれば、変数の依存関係に従って各変数に対する評価結果を伝搬させて評価することにより、着目する変数から深い部分にある演算タイミングの不整合まで検出でき、ソフトウェアの不具合をより高精度に検出できる。その結果、着目すべき変数よりも深い部分にある演算タイミングの不整合による警告を可視化でき、不整合による問題点の見落としを防止できる。
【００８４】
図１及び図１４〜図１５を参照して、第５の実施の形態に係るソフトウェア開発支援装置５について説明する。図１は、ソフトウェア開発支援装置の構成図である。図１４は、第５の実施の形態に係るソフトウェア開発支援装置において評価にユーザによる確認を反映させる場合の例である。図１５は、第５の実施の形態に係るソフトウェア開発支援装置における処理の流れを示すフローチャートである。
【００８５】
ソフトウェア開発支援装置５は、第４の実施の形態に係るソフトウェア開発支援装置４の機能に加えて、ユーザ（開発者）による警告に対する判定結果を用いて、再評価する機能を有している。ソフトウェア開発支援装置５では、第４の実施の形態に係るソフトウェア開発支援装置４で説明したように、参照される変数の計算処理における評価結果をパラメータとして含め、依存関係のある変数に対して次々に評価結果を伝搬させ、着目したい変数の評価結果を算出する。この時、ソフトウェア開発支援装置５では、各変数についての評価結果（特に、警告）に対してユーザによる確認を実施させ、ユーザによって確認した結果が問題なしと判定した計算処理がある場合には問題のない計算処理を用いている他の計算処理についても評価判定の再計算を行う。そして、ソフトウェア開発支援装置５では、その再計算した評価結果を再表示する。
【００８６】
図１４には、ユーザが確認して修正し、その修正を考慮した再評価した場合を示している。図１２ではノードあ，い等が未定義（Ｎ）であったが、この例では、ノードあが低い優先順位（Ｌ）であり、それ以外のノードい等が高い優先順位（Ｈ）である。また、図１２ではＤ２とＡ２の計算処理が低い優先順位（Ｌ）であったが、この例では、Ｄ２とＡ２の計算処理も高い優先順位（Ｈ）である。
【００８７】
この例の場合、Ｄ１についての評価関数ｈは、ＰＤ１＝Ｈ、Ｓあ＝（０，Ｌ）とＳい＝（０，Ｈ）を用いて、式（２０）となる。式（２０）の評価関数ｈを評価関数ｇで表すと、式（２１）になる。この式（２１）における評価関数ｆ（Ｈ，Ｌ，Ｈ）の場合は優先順位が不整合なので、警告ありとなり、式（２１）は式（２２）となる。これを、式（２３）に示すように、Ｄ１の警告ｗＤ１とし、警告ｗＤ１は警告あり（１）である。
【数５】
2013254371.tif 000007
【００８８】
同様に、Ｄ２についての評価関数ｈは、ＰＤ２＝Ｈ、Ｓう＝（０，Ｈ）とＳえ＝（０，Ｈ）を用いて、式（２４）となる。式（２４）の評価関数ｈを評価関数ｇで表すと、式（２５）になる。この式（２５）における評価関数ｆ（Ｈ，Ｈ，Ｈ）の場合は優先順位が整合なので、警告なしとなり、式（２５）は式（２６）となる。これを、式（２７）に示すように、Ｄ２の警告ｗＤ２とし、警告ｗＤ２は警告なし（０）である。
【数６】
2013254371.tif 000008
【００８９】
そして、Ｄ１のステータスＳＤ１は、Ｄ１の警告ｗＤ１とＤ１の優先順位の「Ｈ」を用いて、ＳＤ１＝（ｗＤ１、Ｈ）となる。また、Ｄ２のステータスＳＤ２は、Ｄ２の警告ｗＤ２とＤ２の優先順位の「Ｈ」を用いて、ＳＤ２＝（ｗＤ２、Ｈ）となる。そして、ノードＤのステータスＳＤは、このＳＤ１とＳＤ２を組み合わせて、ＳＤ＝＜ＳＤ１，ＳＤ２＞＝＜（ｗＤ１，Ｈ），（ｗＤ２，Ｈ）＞＝＜（１，Ｈ），（０，Ｈ）＞となる。
【００９０】
この例の場合、Ａ１の警告ｗＡ１はこの２種類の優先順位のＤ１とＤ２を組み合わせて、式（２８）となる。この式（２８）を評価関数ｇで表すと、式（２９）となる。このＡ１の警告ｗＡ１の中にＤ１の警告ｗＤ１＝１が伝搬され、警告ｗＡ１＝１（警告あり）となる。Ａ１のステータスＳＡ１は、この警告ｗＡ１と優先順位の「Ｈ」を用いて、式（３０）で表さる。この式（３０）は、式（２９）より、式（３１）となる。この式（３１）は式（３２）となるので、ステータスＳＡ１は式（３３）に示すようになる。このように、このＡ１のステータスＳＡ１の中にＤ１の警告ｗＤ１＝１が伝搬される。
【数７】
2013254371.tif 000009
【００９１】
ノードＡのステータスＳＡは、このＳＡ１とＳＡ２を組み合わせて、ＳＡ＝＜ＳＡ１，ＳＡ２＞＝＜（ｗＡ１，Ｈ），（ｗＡ２，Ｈ）＞となる。ここで、Ａ１の警告ｗＡ１＝１（警告あり）が伝搬されて、ＳＡ＝＜（１，Ｈ），（０，Ｈ）＞となる。
【００９２】
この例の場合、Ｃ１の警告ｗＡ１はこの２種類の優先順位のＡ１とＡ２を組み合わせて、式（３４）となる。この式（３４）を評価関数ｇで表すと、式（３５）となる。このＣ１の警告ｗＣ１の中にＡ１の警告ｗＡ１＝１が伝搬され、式（３６）に示すように、警告ｗＣ１＝１（警告あり）となる。ＣのステータスＳＣは、この警告ｗＣ１と優先順位の「Ｈ」を用いて、式（３７）で表さる。この式（３７）は、警告ｗＣ１＝１により、式（３８）に示すようになる。このように、このＣのステータスＳＣの中にＡ１の警告ｗＡ１＝１（Ｄ１の警告ｗＤ１＝１）が伝搬される。
【数８】
2013254371.tif 000010
【００９３】
ユーザに評価結果（各ステータスＳ）を表示し、ユーザが評価結果（特に、警告ｗ）を確認する。この例では、ユーザが、Ｄ１の警告ｗＤ１＝１にたいして「問題なし」と判断する。このユーザの判断に応じて、警告ｗＤ１＝１に修正し、再評価が行われる。その再評価によって、ＤのステータスＳＤ＝＜（０，Ｈ），（０，Ｈ）＞となる。この結果、警告なしとなる。さらに、Ａ１のステータスＳＡ１＝（ｇ（０，０，０，０，０），Ｈ）＝（０，Ｈ）となる。この結果、警告なしとなる。さらに、ＡのステータスＳＡ＝＜（０，Ｈ），（０，Ｈ）＞となる。この結果、警告なしとなる。さらに、ＣのステータスＳＣ＝（０，Ｈ）となる。この結果、警告なしとなる。このように、ユーザの確認結果を反映し、再評価する。
【００９４】
上記のソフトウェアの開発支援を実現するソフトウェア開発支援装置５での具体的な処理を図１５のフローチャートに沿って説明する。ソフトウェア開発支援装置５では、Ｓ１００〜Ｓ１１６については、第４の実施の形態に係るソフトウェア開発支援装置４でのＳ７０〜Ｓ８６と同じ処理を行う。
【００９５】
次に、ソフトウェア開発支援装置５では、各変数について更新毎に更新個所のフラグと参照している変数のフラグを用いて、Ｓ１０３で指定した評価関数で評価する（Ｓ１１７）。この際、第４の実施の形態での評価に加えて、ユーザが評価結果を確認した場合、Ｓ１２１で訂正した評価結果（フラグ）を参照し、その訂正した評価結果を考慮して再評価を行う。ソフトウェア開発支援装置５では、関連する変数（ノード）の更新個所全てについて評価を行ったか否かを判定する（Ｓ１１８）。Ｓ１１８にて全てについてＳ１１７の評価を行っていないと判定した場合、ソフトウェア開発支援装置５では、Ｓ１１４に戻って、次の関連する変数（ノード）の更新個所についての評価を行う。
【００９６】
Ｓ１１８にて全てについての評価を行ったと判定した場合、ソフトウェア開発支援装置５では、Ｓ１１９〜Ｓ１２０については、第４の実施の形態に係るソフトウェア開発支援装置４でのＳ８９〜Ｓ９０と同じ処理を行う。ソフトウェア開発支援装置５では、Ｓ１２０で評価結果を確認し、修正した場合、ユーザが確認・修正した結果を各変数の評価パラメータとしてフラグに保存する（Ｓ１２１）。ソフトウェア開発支援装置５では、全て終了したか否かを判断し、終了していないと判断した場合にはＳ１１３に戻り、終了したと判断した場合には終了する（Ｓ１２２）。この際、ユーザが確認・修正した結果に基づいて、各変数の評価結果に対してユーザの修正がある場合、Ｓ１１３に戻って、末端の変数あるいは確認・修正した変数から全体の再評価を行い、確認結果を全体へ反映する。
【００９７】
このソフトウェア開発支援装置５は、第４の実施の形態に係るソフトウェア開発支援装置４と同様の効果を有する上に、以下の効果も有している。ソフトウェア開発支援装置５によれば、ユーザが評価結果を確認し、評価結果を修正した場合にはその修正を考慮して変数の依存関係を追跡し、修正による影響を再評価することにより、不整合による問題点の確認工数を削減できる。
【００９８】
図１及び図１６〜図１８を参照して、第６の実施の形態に係るソフトウェア開発支援装置６について説明する。図１は、ソフトウェア開発支援装置の構成図である。図１６は、ターゲットのソフトウェアにおいて２種類の優先順位で更新される場合の例である。図１７は、ターゲットのソフトウェアにおいて参照側の変数が２種類の優先順位で更新される場合の処理の流れの例である。図１８は、第６の実施の形態に係るソフトウェア開発支援装置における処理の流れを示すフローチャートである。
【００９９】
ソフトウェア開発支援装置６は、第５の実施の形態に係るソフトウェア開発支援装置５の機能に加えて、各変数のフラグに基づいて、異なる種類の分類（特に、異なる種類の優先順位）のフラグが付けられているものを検出し、ユーザに警告する。例えば、異なる優先順位の複数の処理が並行して動作している状況において、メモリ内の変数の変更のように、メモリからデータを読み込み、データを改変し、再度同じ場所へデータを書き込む処理が行われる場合に、排他処理（割り込み禁止処理）を行わない時、低い優先順位の変数の更新処理の途中、すなわち、メモリから変数を読み込んだ後、更新してメモリへ書き込みを行う前に、高い優先順位の変数の更新処理が行われる可能性がある。このような場合、高い優先順位では元の変数の値に基づき変数の更新が行われるが、低い優先順位では、高い優先順位の変数の更新の終了後、元の変数の値を元にした計算結果を、高い優先順位での計算結果に対して上書きをしてしまう。
【０１００】
図１６に示す例の場合、変数Ａについては高い優先順位の計算処理のＡ２と低い優先順位の計算処理のＡ１があり、２種類の優先順位の計算処理で変数Ａが更新される。この場合、Ａ１の低い優先順位の計算処理中に、Ａ２の高い優先順位の計算処理で変数Ａを更新する可能性がある。この例の場合、ノードＡとノードＢを繋ぐリンクのリンク元に付けられているＬとＨのフラグを検出し、ユーザに対してその個所を警告する。
【０１０１】
図１７には、２種類の優先順位の計算処理がある場合の処理の流れの例を示している。この例の場合、上側の処理Ａ２が優先順位が高い処理であり、下側の処理Ａ１が優先順位の低い処理である。Ｖ０，Ｖ１，Ｖ２が更新される値である。
【０１０２】
図１７（ａ）に示す例は、排他処理がない場合の例である。この例の場合、低い優先順位の処理Ａ１の途中で、優先順位の高い処理Ａ２が行われる。この際、処理Ａ１では変数Ｖ０を更新しておらず、処理Ａ２で変数Ｖ０がＶ２に更新される。処理Ａ２が終了すると、処理Ａ１が再開される。この際、処理Ａ１で処理Ａ２で更新した変数Ｖ２がＶ１に更新される。このように、排他処理がないと、高い優先順位の処理Ａ２の計算結果が、低い優先順位の処理Ａ１の計算結果で上書きされる場合がある。そこで、このような個所を警告することにより、ユーザが図１７（ｂ）に示すような排他処理を入れることができる。
【０１０３】
図１７（ｂ）示す例は、処理Ａ１で割り込み禁止のマスク処理が行われる場合の例である。この例の場合、処理Ａ１では、変数Ｖ０をＶ１に更新するまで、マスク処理される。したがって、処理Ａ１で変数Ｖ１に更新すると、優先順位の高い処理Ａ２が行われる。そして、この処理Ａ２で、処理Ａ２で変数Ｖ１がＶ２’に更新される。このように、排他処理（マスク処理）があると、高い優先順位の処理Ａ２の計算結果が、低い優先順位の処理Ａ１の計算結果で上書きされない。
【０１０４】
上記のソフトウェアの開発支援を実現するソフトウェア開発支援装置６での具体的な処理を図１８のフローチャートに沿って説明する。ソフトウェア開発支援装置６では、Ｓ１３０〜Ｓ１４６については、第５の実施の形態に係るソフトウェア開発支援装置５でのＳ１００〜Ｓ１１６と同じ処理を行う。
【０１０５】
次に、ソフトウェア開発支援装置６では、Ｓ１３９、Ｓ１４１、Ｓ１４２の結果に基づいて、割り込み禁止等の結果を参照し、同一の変数に対して異なる優先順位付け等の干渉が発生していないかを算出する（Ｓ１４７）。次に、ソフトウェア開発支援装置６では、各変数について更新毎に更新個所のフラグと参照している変数のフラグを用いて、Ｓ１３３で指定した評価関数で評価する（Ｓ１４８）。この際、第５の実施の形態での評価に加えて、Ｓ１４７での結果に基づいて、更新変数自身に干渉する複数のフラグが発生していないかを参照して評価を行う。ソフトウェア開発支援装置６では、関連する変数（ノード）の更新個所全てについての評価を行ったか否かを判定する（Ｓ１４９）。Ｓ１４９にて全てについてＳ１４８の評価を行っていないと判定した場合、ソフトウェア開発支援装置６では、Ｓ１４４に戻って、次の関連する変数（ノード）の更新個所についての評価を行う。
【０１０６】
Ｓ１４９にて全てについての評価を行ったと判定した場合、ソフトウェア開発支援装置６では、Ｓ１５０〜Ｓ１５３については、第５の実施の形態に係るソフトウェア開発支援装置５でのＳ１１９〜Ｓ１２２と同じ処理を行う。
【０１０７】
このソフトウェア開発支援装置６は、第５の実施の形態に係るソフトウェア開発支援装置５と同様の効果を有する上に、以下の効果も有している。ソフトウェア開発支援装置６によれば、異なる種類の分類（特に、異なる種類の優先順位）のフラグ付けられている個所を検出し、その個所をユーザに警告することにより、排他処理等が必要な個所をユーザに対して警告できる。その結果、例えば、高い優先順位の計算処理での計算結果が、低い優先順位の計算処理で上書きされるようなことを防止できる。
【０１０８】
図１及び図１９〜図２０を参照して、第７の実施の形態に係るソフトウェア開発支援装置７について説明する。図１は、ソフトウェア開発支援装置の構成図である。図１９は、ターゲットのソフトウェアにおいてソースコード上で異なる変数とされているが関連した変化を示す変数の例である。図２０は、第７の実施の形態に係るソフトウェア開発支援装置における処理の流れを示すフローチャートである。
【０１０９】
ソフトウェア開発支援装置７は、第６の実施の形態に係るソフトウェア開発支援装置６の機能に加えて、ソースコード上は異なる変数としてかかれているが実際の動作では関連した変化を示す変数については事前知識として本装置に情報を与え、そのソースコード上では異なる変数に対して関連付けを行い、フラグを与える機能を有している。
【０１１０】
例えば、ＤＰＲＡＭにように、一方の変数名を更新した場合、殆ど遅滞なく他方の変数名が更新される。このような場合、ソフトウェア開発支援装置７では、別の変数名ではあるが、同一の変数として関連付けを行い、１つの変数として、異なるフラグ付けの依存関係が発生していないかを算出し、評価関数で評価を行い、不整合がある場合には開発者に警告を行う。図１９（ａ）に示す例の場合、「Ａ」と「Ａ’」とは２つの手段でそれぞれ更新されるが、同一のメモリである。このような場合、「Ａ」と「Ａ’」とを同一の変数としての関連付けを行って、評価を行う。
【０１１１】
また、ＤＭＡ転送される領域や異なるマイコン間で転送される領域では、プログラムの動作とは非同期に特定周期毎に転送されるので、プログラムのソースコードの見かけ上では独立している２つの変数であるが、この２つの変数には関連が発生する。このような場合、ソフトウェア開発支援装置７では、この２つの変数をプログラムのソースコード上のつながりの得られない非同期の更新として関連付けを行い、１つの変数として、異なるフラグ付けの依存関係が発生していないかを算出し、評価関数で評価を行い、不整合がある場合には開発者に警告を行う。図１９（ｂ）に示す例の場合、異なるＣＰＵ間で、ＣＰＵ−２の動作とは非同期に、ＣＰＵ−１で更新された「ａ」がＣＰＵ−２に転送されて、ＣＰＵ−２で「か」として参照される。この２つのＣＰＵ間の「ａ」と「か」とを関連付けを行って、評価を行う。
【０１１２】
上記のソフトウェアの開発支援を実現するソフトウェア開発支援装置７での具体的な処理を図２０のフローチャートに沿って説明する。ソフトウェア開発支援装置７では、ＤＰＲＡＭ等の変数で同時に更新される変数名を同一に扱い、ＤＭＡ転送領域や別のＣＰＵの共有メモリ等の関連付けを実施する。まず、ソフトウェア開発支援装置７では、開発対象のプロジェクトの事前データを読み込む（Ｓ１６０）。特に、開発解消のプログラムがそれぞれどのＣＰＵに実装されているか、ＤＰＲＡＭとして実装されている変数の情報、ＤＭＡ転送等が行われる変数の情報、ＣＰＵ間の共有メモリに置かれている情報等のプログラムのソースコード上からだけでは解析できない情報を、事前データとして読み込む。ここで、共有メモリは、異なるＣＰＵで利用することができるメモリである。
【０１１３】
次に、ソフトウェア開発支援装置７では、Ｓ１６１〜Ｓ１６４については、第６の実施の形態に係るソフトウェア開発支援装置６でのＳ１３１〜Ｓ１３４と同じ処理を行う。
【０１１４】
次に、ソフトウェア開発支援装置７では、Ｓ１６０で読み込んだ事前データに基づいて、プログラムのソースコード上（あるいは、ターゲットコンピュータでの実行コード上）では別の変数となるが、実際の動作としては同一の変数として扱うほうが適切な変数のリストを生成し、フラグとして設定する（Ｓ１６５）。ソフトウェア開発支援装置７では、Ｓ１６０で読み込んだ事前データに基づいて、プログラムのソースコード上では直接の参照・更新の関係が存在しないが、ある関連性をもって変化する変数のリストを生成し、フラグとして設定する（Ｓ１６６）。また、ソフトウェア開発支援装置７では、関連する変数間の関係性を示す疑似プログラムを生成し、解析対象のプログラムに加える。
【０１１５】
次に、ソフトウェア開発支援装置７では、Ｓ１６７〜Ｓ１７８については、第６の実施の形態に係るソフトウェア開発支援装置６でのＳ１３５〜Ｓ１４６と同じ処理を行う。
【０１１６】
次に、ソフトウェア開発支援装置７では、第６の実施の形態でのＳ１４７での処理に加えて、Ｓ１６５、Ｓ１６６の結果に基づいて同一の変数に対して異なる優先順位付けなどの干渉が発生していないかを算出する（Ｓ１７９）。次に、ソフトウェア開発支援装置７では、各変数について更新毎に更新個所のフラグと参照している変数のフラグを用いて、Ｓ１６３で指定した評価関数で評価する（Ｓ１８０）。この際、第６の実施の形態での評価に加えて、Ｓ１６５、Ｓ１６６での結果に基づいて、別のＣＰＵや別名のメモリ等でプログラムのソースコード上で異なる変数とされているものを関連付けて評価を行う。ソフトウェア開発支援装置７では、関連する変数（ノード）の更新個所全てについての評価を行ったか否かを判定する（Ｓ１８１）。Ｓ１８１にて全てについて評価を行っていないと判定した場合、ソフトウェア開発支援装置７では、Ｓ１７６に戻って、次の関連する変数（ノード）の更新個所についての評価を行う。
【０１１７】
Ｓ１８１にて全てについての評価を行ったと判定した場合、ソフトウェア開発支援装置７では、Ｓ１８２〜Ｓ１８５については、第６の実施の形態に係るソフトウェア開発支援装置６でのＳ１５０〜Ｓ１５３と同じ処理を行う。
【０１１８】
このソフトウェア開発支援装置７は、第６の実施の形態に係るソフトウェア開発支援装置６と同様の効果を有する上に、以下の効果も有している。ソフトウェア開発支援装置７によれば、プログラムのソースコード上は異なる変数とされているが実際の動作で関連した変化を示す変数については関連付けを行って評価を行うことにより、見かけ上では関連性のない変数間の矛盾した更新、直接の繋がりの見えないプログラム間の変数間の更新タイミングの矛盾、単体のＣＰＵの解析だけでは見えなかった関係等を可視化でき、そのような変数間の更新タイミングの問題等を可視化できる。
【０１１９】
以上、本発明に係る実施の形態について説明したが、本発明は上記実施の形態に限定されることなく様々な形態で実施される。
【０１２０】
例えば、本実施の形態ではソフトウェアの開発を支援するソフトウェア開発支援装置に適用したが、ＣＤ−ＲＯＭ等の記憶媒体に格納されるソフトウェア開発支援プログラムやインタネット等のネットワークを介して利用可能なソフトウェア開発支援プログラム等に適用し、このソフトウェア開発支援プログラムをコンピュータで実行することによってソフトウェアを開発支援検証する構成としてもよい。
【０１２１】
また、本実施の形態では各実施形態の番号が増える毎に１つずつ機能を追加してゆく構成としたが、追加する機能の組み合わせについては適宜変更してもよい。
【符号の説明】
【０１２２】
１，２，３，４，５，６，７…ソフトウェア開発支援装置。
【図１】
2013254371.tif 000011
【図２】
2013254371.tif 000012
【図３】
2013254371.tif 000013
【図５】
2013254371.tif 000014
【図６】
2013254371.tif 000015
【図９】
2013254371.tif 000016
【図１０】
2013254371.tif 000017
【図１１】
2013254371.tif 000018
【図１２】
2013254371.tif 000019
【図１３】
2013254371.tif 000020
【図１４】
2013254371.tif 000021
【図１５】
2013254371.tif 000022
【図１６】
2013254371.tif 000023
【図１８】
2013254371.tif 000024
【図１９】
2013254371.tif 000025
【図２０】
2013254371.tif 000026
【図４】
2013254371.tif 000027
【図７】
2013254371.tif 000028
【図８】
2013254371.tif 000029
【図１７】
2013254371.tif 000030