(57)【要約】  【課題】  プログラムコード実行中の任意のタイミングで別プログラムコードが実行する状態に切り替わる要因を持つソフトウェアにおいて、確実な排他制御が行われていることを保証する検証方法を実現する。  【解決手段】  実行中のプログラムコードのすべてのタイミングで実行権が切り替わる要因を発生させるテストプログラムを生成するテストプログラム生成ステップ１０６と、前記テストプログラムを実行するテストプログラム実行ステップ１０７と、前記テストプログラム実行ステップの出力と正当な出力データである検証用データとを照合するテストプログラム実行結果照合ステップ１０８とを有することで、前記要因が全タイミングで発生するテストプログラムを生成し、実行し、評価する、という一連の検証手順を自動的に行うことができる。【選択図】  図１
2005309800.tif 000002
【特許請求の範囲】
【請求項１】
プログラムコード実行中に別プログラムコードに実行権の切り替わる要因が任意のタイミングで発生するソフトウェアを検証する方法であって、
検証対象プログラムコード、前記検証対象プログラムコードの実行中のすべてのタイミングで前記要因を発生させる要因発生プログラムコード、および前記要因の発生により実行権を得る割込プログラムコードからなるテストプログラムを生成するテストプログラム生成ステップと、
前記テストプログラム生成ステップで生成した前記テストプログラムを実行し、前記テストプログラムの実行結果を出力するテストプログラム実行ステップと、
前記テストプログラム実行ステップの出力と検証用データとを照合する実行結果照合ステップと、
を備えることを特徴とするソフトウェア検証方法。
【請求項２】
前記テストプログラム生成ステップは、前記要因の発生タイミングを、タイマを利用して変化させる前記要因発生プログラムコードを生成することを特徴とする請求項１に記載のソフトウェア検証方法。
【請求項３】
前記テストプログラム生成ステップは、前記要因の発生タイミングを固定させ、前記検証対象プログラムコードの実行開始タイミングを変化させる前記要因発生プログラムコードを生成することを特徴とする請求項１に記載のソフトウェア検証方法。
【請求項４】
前記テストプログラム実行ステップは、前記テストプログラムを実行する手段を複数有する場合に、前記手段に前記テストプログラムを割り当てることで並列に実行させることを特徴とする請求項１から請求項３までのいずれかに記載のソフトウェア検証方法。
【請求項５】
前記テストプログラム生成ステップの後段に、さらに、
前記テストプログラムに含まれる前記検証対象プログラムコードと前記要因において、前記検証対象プログラムコード内の共有リソースへアクセスするタイミングと前記要因の発生するタイミングとの関係により前記テストプログラムの実行必要性を判定し、不必要と判定された前記テストプログラムをテスト実行対象から外すタイミング有効域判定ステップ
を備えることを特徴とする請求項１から請求項４までのいずれかに記載のソフトウェア検証方法。
【請求項６】
前記テストプログラム生成ステップの後段に、さらに、
前記テストプログラムに含まれる前記検証対象プログラムコードと前記要因において、前記要因の発生するタイミング付近に存在する前記検証対象プログラムコード内の命令により前記テストプログラムの実行必要性を判定し、不必要と判定された前記テストプログラムをテスト実行対象から外すタイミング集約ステップ
を備えることを特徴とする請求項１から請求項５までのいずれかに記載のソフトウェア検証方法。
【請求項７】
前記テストプログラム実行ステップの後段に、さらに、前記テストプログラムの実行結果の内容が等しいものをグループ化する実行結果集約ステップを備えることを特徴とする請求項１から請求項６までのいずれかに記載のソフトウェア検証方法。
【請求項８】
前記テストプログラム実行ステップの後段に、さらに、前記実行結果の共通部分と差分を抽出する実行結果特徴抽出ステップを備え、
前記実行結果照合ステップは、前記共通部分と前記検証用データの対応部分とを照合し、不一致の検証用データは除外し、一致したものについては前記差分と検証用データの対応部分とを照合することを特徴とする請求項１から請求項７までのいずれかに記載のソフトウェア検証方法。
【請求項９】
プログラムコード実行中に別プログラムコードに実行権の切り替わる要因が任意のタイミングで発生するソフトウェアを検証する方法における正当な出力データである検証用データを作成する方法であって、
検証対象プログラムコード、前記検証対象プログラムコードの実行中のすべてのタイミングで前記要因を発生させる要因発生プログラムコード、および前記要因の発生により実行権を得る割込プログラムコードからなるテストプログラムを生成するテストプログラム生成ステップと、
前記テストプログラム生成ステップで生成した前記テストプログラムを実行し、前記テストプログラムの実行結果を出力するテストプログラム実行ステップと、
を備えることを特徴とする検証用データ作成方法。
【請求項１０】
前記テストプログラム生成ステップは、前記要因の発生タイミングを、タイマを利用して変化させる前記要因発生プログラムコードを生成することを特徴とする請求項９に記載の検証用データ作成方法。
【請求項１１】
前記テストプログラム生成ステップは、前記要因の発生タイミングを固定させ、前記検証対象プログラムコードの実行開始タイミングを変化させる前記要因発生プログラムコードを生成することを特徴とする請求項９に記載の検証用データ作成方法。
【請求項１２】
前記テストプログラム実行ステップは、前記テストプログラムを実行する手段を複数有する場合に、前記手段に前記テストプログラムを割り当てることで並列に実行させることを特徴とする請求項９から請求項１１までのいずれかに記載の検証用データ作成方法。
【請求項１３】
前記テストプログラム生成ステップの後段に、さらに、
前記テストプログラムに含まれる前記検証対象プログラムコードと前記要因において、前記検証対象プログラムコード内の共有リソースへアクセスするタイミングと前記要因の発生するタイミングとの関係により前記テストプログラムの実行必要性を判定し、不必要と判定された前記テストプログラムをテスト実行対象から外すタイミング有効域判定ステップ
を備えることを特徴とする請求項９から請求項１２までのいずれかに記載の検証用データ作成方法。
【請求項１４】
前記テストプログラム生成ステップの後段に、さらに、
前記テストプログラムに含まれる前記検証対象プログラムコードと前記要因において、前記要因の発生するタイミング付近に存在する前記検証対象プログラムコード内の命令により前記テストプログラムの実行必要性を判定し、不必要と判定された前記テストプログラムをテスト実行対象から外すタイミング集約ステップ
を備えることを特徴とする請求項９から請求項１３までのいずれかに記載の検証用データ作成方法。
【請求項１５】
前記テストプログラム実行ステップの後段に、さらに、前記実行結果の内容を調査し、内容の等しいものをグループ化する実行結果集約ステップを備えることを特徴とする請求項９から請求項１４までのいずれかに記載の検証用データ作成方法。
【請求項１６】
前記テストプログラム実行ステップの後段に、さらに、前記実行結果の共通部分を抽出し取り除くことによりインデックスを生成する実行結果特徴抽出ステップを備えることを特徴とする請求項９から請求項１５までのいずれかに記載の検証用データ作成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアの検証において、特にプログラムコード中の排他制御が確実に行われているかを検証するための技術に関するものである。
【背景技術】
【０００２】
従来から、ソフトウェア開発における検証作業では、テスト仕様書に基づいて作成したテストプログラムを実行し、実行結果として出力されるデータを検証していた。しかし、この検証作業を人が行うために、検証の工数が増大するだけでなく、チェックミス、チェック漏れなどの発生を招いていた。そこで、自動的に検証を行う方法として、あらかじめ出力として望まれるデータである検証用データを作成しておき、評価の段階においてはテストプログラム実行時に出力されるデータとこの検証用データを自動的に照合することで効率化を図っていた（例えば、特許文献１参照）。
【０００３】
ところで、従来から割込みを用いたプログラミングモデルはよく用いられる。加えて、近年、リアルタイムＯＳなどに代表される、複数のタスクを用いたプログラミングモデルが採用される機会が増えてきた。これらのプログラミングモデルでは、あるプログラムコードの実行中に割込みが発生し、他のプログラムコードが実行権を奪って実行することがある。
【０００４】
しかし、実行権を奪われるプログラムコードと実行権を奪うプログラムコードとがともにアクセスする共有リソースがある場合、共有リソースに対するアクセスを制御する“排他制御”が必須となる。排他制御とは、プログラムコード中で、ある処理の間は使用している共有リソースを独占的に使用したい場合に、この共有リソースを独占的に使用したい区間（以降、クリティカルセクションとする）を複数のプログラムコードなどから同時にアクセスされないよう保護することをさす。
【０００５】
従来は、クリティカルセクションの全区間を割込み禁止にすることで排他制御を実現していた。しかし、長いクリティカルセクションの全区間を割込み禁止にしてしまうことで、割込み禁止時に発生した割込みが保留されてしまう。割込みの保留による割込み処理実行開始タイミングの遅れは、処理の遅延を招くなどシステム破綻につながる重大な問題の一因となり、特にリアルタイム性（即時応答性）が要求されるシステムにおいては、この影響が顕著に現れる。
【０００６】
この問題を回避するため、クリティカルセクションを含むプログラムコードに対し、クリティカルセクションの全区間でなく一部区間を割込み禁止にする工夫や、割込み禁止そのものを不要にする工夫を導入したりしてきた。
【０００７】
しかし、上記のような工夫により排他制御の制限を緩和すると、排他制御漏れが発生する可能性が高くなる。このように、高いリアルタイム性の要求と排他制御漏れによる不具合発生件数はトレードオフの関係にある。
【０００８】
この不具合を検出する検証方法において、従来は耐久テストと呼ばれる検証方法が採用されてきた。この方法は、プログラムコードの実行を何度も繰り返すことで、クリティカルセクション内で偶発的に割込みを発生させるものである。
【特許文献１】特開平１−２２６０４３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
上述の従来の技術では、ソフトウェアを自動的に検証する方法に着眼し実行しているが、プログラムコード単体で実行することに主眼を置いているため、プログラムコード中で正しく排他制御をしているかどうかを検証することはできなかった。
【００１０】
また、上述の耐久テストは、排他制御漏れの区間を検出するという観点から見ると完全なものではない。プログラムコードの実行を何度繰り返したとしても、テストに必要な全区間において割込みを発生させたことを保証するものではないからである。
【００１１】
以上のように、割込みを用いたプログラミングモデルや複数のタスクを用いたプログラミングモデルに対する排他制御の確実性を保証する検証方法は、これまでのところ十分とはいえず、その確立が望まれている。特に、上述のリアルタイム性を追求したソフトウェアにおいては、その確立が望まれている。
【課題を解決するための手段】
【００１２】
本発明は、上記の課題を解決するために次のような手段を講じる。
【００１３】
本発明のソフトウェア検証方法は、プログラムコード実行中に別プログラムコードに実行権の切り替わる要因が任意のタイミングで発生するソフトウェアを検証する方法であって、
検証対象プログラムコード、前記検証対象プログラムコードの実行中のすべてのタイミングで前記要因を発生させる要因発生プログラムコード、および前記要因の発生により実行権を得る割込プログラムコードからなるテストプログラムを生成するテストプログラム生成ステップと、
前記テストプログラム生成ステップで生成した前記テストプログラムを実行し、前記テストプログラムの実行結果を出力するテストプログラム実行ステップと、
前記テストプログラム実行ステップの出力と検証用データとを照合する実行結果照合ステップとを備えている。
【００１４】
この構成によれば、検証対象プログラムコードおよび割込プログラムコードに対し、検証対象プログラムコード実行中のすべてのタイミングにおいて別プログラムコードに実行権の切り替わる要因を発生させる要因発生プログラムコードを自動的に作成し、これらをまとめてテストプログラムとする。そして、そのようなすべてのタイミングでの実行権切り替わり要因に対応したテストプログラムを用いてテストを実行し、実行結果を照合する。すなわち、テストの必要な区間の全タイミングで割込みが発生した状況を自動的に生成し、かつ自動的に検証できる。したがって、割込みを用いたプログラミングモデルや複数のタスクを用いたプログラミングモデルに対する排他制御の確実性を保証することができる。これは特に、リアルタイム性が要求されるシステムにおいては排他制御を短くするなどの工夫をすることが多いため、排他制御漏れの検出ができる本検証方法は有効である。
【００１５】
上記のソフトウェア検証方法において、前記テストプログラム生成ステップで生成する前記要因発生プログラムコードは、前記要因の発生タイミングをタイマを利用して変化させることで生成することができる。
【００１６】
これは、要因発生プログラムコードにおけるタイマの設定で割込み発生のタイミングを調整するもので、さまざまなタイミングで割込みが発生するテストプログラムを作成できる。
【００１７】
ところで、タイマに設定できるパラメータの粒度が粗く、全タイミングで要因を発生させることができない場合もある。これに対応するには、次のようにするのがよい。すなわち、上記ソフトウェア検証方法において、前記テストプログラム生成ステップで生成する要因発生プログラムコードを、前記要因の発生タイミングを固定させ、前記検証対象プログラムコードの実行開始タイミングを変化させることで生成するとよい。
【００１８】
これは、タイマによる割込みの時刻を固定し、検証対象プログラムコードの開始タイミングを調整することでタイミング生成を実現するものである。前記のタイミングを調整する方法の一つに、“待ち”の導入がある。この“待ち”は、例えばＮＯＰ（No Operation）命令を待ちの長さ分だけ実行することで実現できる。この場合は、命令の長さを単位として自由に“待ち”長さを変更できるため、タイマによる割込み設定の粒度に制約されることなく、検証対象プログラムコードの開始タイミングを細かく調整することができる。検証対象プログラムコードの開始タイミングが変化することで、相対的に全タイミングで要因が発生するテストプログラムを作成できるため、前述のタイマによるタイミング調整を実施した場合と同様のテストを実施できる。
【００１９】
また、上記ソフトウェア検証方法において、前記テストプログラム実行ステップについては、前記テストプログラムを実行する手段を複数有する場合に、前記手段に前記テストプログラムを割り当てることで並列に実行させるものが好ましい。
【００２０】
これによれば、テストプログラムを複数の実行手段に分散させて並行して実行させることができ、テスト時間の短縮を図ることができる。
【００２１】
ところで、上記のソフトウェアの検証方法においては、テストプログラム生成ステップでは、すべての命令と命令の間に割込みが発生するテストプログラムが生成されていて、生成されたテストプログラムの数が多く、次のテストプログラム実行ステップで実行すべきテストプログラム数が多いと、処理に時間が多くかかる。これに対応するのが次のソフトウェアの検証方法である。
【００２２】
それは、上記のソフトウェアの検証方法において、前記テストプログラム生成ステップの後段に、さらに、次のような内容のタイミング有効域判定ステップを備えるものである。そのタイミング有効域判定ステップは、前記テストプログラムに含まれる前記検証対象プログラムコードと前記要因において、前記検証対象プログラムコード内の共有リソースへアクセスするタイミングと前記要因の発生するタイミングとの関係により前記テストプログラムの実行必要性を判定し、不必要と判定された前記テストプログラムをテスト実行対象から外すものである。
【００２３】
このタイミング有効域判定ステップにより、テストプログラム生成ステップで生成された全テストプログラムに対し実行必要性の判定を行い、実行が不必要と判定されたテストプログラムをテスト実行対象から外すことができる。その結果、テスト実行すべきテストプログラム数が削減され、さらにテスト時間の短縮を図ることができる。
【００２４】
あるいは、さらに次のソフトウェアの検証方法も好ましい。それは、前記テストプログラム生成ステップの後段に、次のような内容のタイミング集約ステップを備えるものである。そのタイミング集約ステップは、前記テストプログラムに含まれる前記検証対象プログラムコードと前記要因において、前記要因の発生するタイミング付近に存在する前記検証対象プログラムコード内の命令により前記テストプログラムの実行必要性を判定し、不必要と判定された前記テストプログラムをテスト実行対象から外すものである。
【００２５】
このタイミング集約ステップにより、テストの実行結果はすべて同じになることがテスト実行前に確実に分かる場合に、そのテストプログラムを実行不必要と判定し、テスト実行対象から外す。その結果、テスト実行すべきテストプログラム数が削減され、さらにテスト時間の短縮を図ることができる。
【００２６】
ところで、元のテストプログラム同士はタイミングが異なるのみであるため、テストで得られた実行結果は互いに等しくなっていることが多い。同じ内容の複数の実行結果についてそれぞれ検証用データとの照合を行うことは時間の無駄になる。これに対応するのが次のソフトウェア検証方法である。
【００２７】
それは、上記のソフトウェアの検証方法において、前記テストプログラム実行ステップの後段に、前記テストプログラムの実行結果の内容が等しいものをグループ化する実行結果集約ステップを備えるものである。
【００２８】
これによれば、テストプログラムの実行結果が複数あり、その中に同じ内容の実行結果が存在する場合に、実行結果集約ステップによってグループ化することで実行結果の数を削減し、その結果、照合すべき実行結果の数が削減され、照合処理にかかる時間の短縮を図ることができる。
【００２９】
ところで、テストで得られた実行結果が複数ある場合に、元のテストプログラム同士はタイミングが異なるのみで、いくつかの実行結果は類似していることもある。類似している複数の実行結果についてそれぞれの全体を検証用データと照合することは時間の無駄になる。これに対応するのが次のソフトウェア検証方法である。
【００３０】
それは、上記のソフトウェアの検証方法において、前記テストプログラム実行ステップの後段に、さらに、前記実行結果の共通部分と差分を抽出する実行結果特徴抽出ステップを備えるものである。前記実行結果照合ステップは、前記共通部分と前記検証用データの対応部分とを照合し、不一致の検証用データは除外し、一致したものについては前記差分と検証用データの対応部分とを照合するものである。
【００３１】
この場合、実行結果照合ステップでは、共通部分と検証用データの対応部分とを照合し、不一致の検証用データは除外し、一致したものについては差分と検証用データの対応部分とを照合する。不一致の検証用データを除外することと、部分照合を行うことにより、照合に要する時間を短縮化できる。
【００３２】
上記のソフトウェア検証方法にかかわる発明を検証用データ作成方法として、次のように展開することが可能である。検証用データ作成方法は、プログラムコード実行中に別プログラムコードに実行権の切り替わる要因が任意のタイミングで発生するソフトウェアを検証する方法における検証用データを作成する方法である。
【００３３】
すなわち、本発明による検証用データ作成方法は、
検証対象プログラムコード、前記検証対象プログラムコードの実行中のすべてのタイミングで前記要因を発生させる要因発生プログラムコード、および前記要因の発生により実行権を得る割込プログラムコードからなるテストプログラムを生成するテストプログラム生成ステップと、
前記テストプログラム生成ステップで生成した前記テストプログラムを実行し、前記テストプログラムの実行結果を出力するテストプログラム実行ステップとを備えたものである。
【００３４】
上記の検証用データ作成方法において、前記テストプログラム生成ステップは、前記要因の発生タイミングを、タイマを利用して変化させる前記要因発生プログラムコードを生成するものとする。
【００３５】
また、上記の検証用データ作成方法において、前記テストプログラム生成ステップは、前記要因の発生タイミングを固定させ、前記検証対象プログラムコードの実行開始タイミングを変化させる前記要因発生プログラムコードを生成するものとする。
【００３６】
また、上記の検証用データ作成方法において、前記テストプログラム実行ステップは、前記テストプログラムを実行する手段を複数有する場合に、前記手段に前記テストプログラムを割り当てることで並列に実行させるものとする。
【００３７】
また、上記の検証用データ作成方法において、前記テストプログラム生成ステップの後段に、さらに、前記テストプログラムに含まれる前記検証対象プログラムコードと、前記要因において、前記検証対象プログラムコード内の共有リソースへアクセスするタイミングと前記要因の発生するタイミングとの関係により前記テストプログラムの実行必要性を判定し、不必要と判定された前記テストプログラムをテスト実行対象から外すタイミング有効域判定ステップを備えるものとする。
【００３８】
また、上記の検証用データ作成方法において、前記テストプログラム生成ステップの後段に、さらに、前記テストプログラムに含まれる前記検証対象プログラムコードと前記要因において、前記要因の発生するタイミング付近に存在する前記検証対象プログラムコード内の命令により前記テストプログラムの実行必要性を判定し、不必要と判定された前記テストプログラムをテスト実行対象から外すタイミング集約ステップを備えるものとする。
【００３９】
また、上記の検証用データ作成方法において、前記テストプログラム実行ステップの後段に、さらに、前記実行結果の内容を調査し、内容の等しいものをグループ化する実行結果集約ステップを備えるものとする。
【００４０】
また、上記の検証用データ作成方法において、前記テストプログラム実行ステップの後段に、さらに、前記実行結果の共通部分を抽出し取り除くことによりインデックスを生成する実行結果特徴抽出ステップを備えるものとする。
【発明の効果】
【００４１】
本発明によれば、テストプログラム生成ステップ、テストプログラム実行ステップ、および、実行結果照合ステップを順次行うことで、テストの必要な区間の全タイミングで割込みが発生した状況を自動的に生成し、かつ自動的に検証できる。
【００４２】
また、タイミング有効域判定ステップ、タイミング集約ステップ、実行結果集約ステップ、実行結果特徴抽出ステップを追加することにより、検証時間を短縮することができる。
【発明を実施するための最良の形態】
【００４３】
以下、本発明にかかわるソフトウェア検証方法の実施の形態を図面に基づいて詳細に説明する。
【００４４】
（実施の形態１）
本発明のソフトウェア検証方法の実施の形態１について、プログラムコード実行中に他のプログラムコードが割込みによって実行される場合を例に説明する。以降、実行中のプログラムコードを検証対象プログラムコード、割込みにより割込んで実行するプログラムコードを割込プログラムコード、割込みを要因として発生させるタイミングを調整するプログラムコードを要因発生プログラムコードとする。
【００４５】
図１に本発明の実施の形態１におけるソフトウェアの検証方法１０１の概要を示す。検証方法１０１に対し、検証対象プログラムコード１０２、割込プログラムコード１０３、検証用データ１０４を入力する。そして、検証方法により検証され、「正常」、「異常」を示すテスト結果１０５が出力される。検証用データ１０４は、正常なプログラムコードから生成されるテストプログラムコードを実行すると出力されるデータからなる。
【００４６】
検証方法１０１は、テストプログラム生成ステップ１０６、テストプログラム実行ステップ１０７、実行結果照合ステップ１０８に分けられる。
【００４７】
────  テストプログラム生成ステップ  ────
図２にテストプログラム生成ステップ２０１の入出力を示す。本ステップには、検証対象プログラムコード２０２と割込プログラムコード２０３を入力する。本ステップ内で、要因発生プログラムコード２０５を生成し、入力された検証対象プログラムコード２０２、割込プログラムコード２０３と合わせてテストプログラム２０６を出力する。
【００４８】
本ステップで生成する要因発生プログラムコード２０５について説明する。要因発生プログラムコードの目的は、実行中の検証対象プログラムコードにおいてすべてのタイミングで割込みを発生させることである。
【００４９】
図３（ａ）〜図３（ｃ）に検証対象プログラムコードと割込プログラムコードの実行タイミングの関係をシーケンス図で示す。図中の斜線部が実行権を持っている区間である。
【００５０】
図３（ａ）は、検証対象プログラムコード３０３が実行終了したタイミングで割込み３０５が発生し、割込プログラムコード３０４が実行されるシーケンスである。
【００５１】
図３（ｂ）は、割込み４０５が図３（ａ）より早いタイミング、すなわち検証対象プログラムコード４０３が実行中のタイミングで発生し、割込プログラムコード４０４が割込んで実行されたあとに、検証対象プログラムコードに復帰して残りのプログラムコード４０６が実行されるシーケンスである。
【００５２】
図３（ｃ）は、割込み５０５が図３（ｂ）より早いタイミング、すなわち検証対象プログラムコード５０３の実行前のタイミングで発生し、割込プログラムコード５０４が実行され、そのあとに検証対象プログラムコード５０３が実行されるシーケンスである。
【００５３】
このように、割込みの発生するタイミングにより検証対象プログラムコード実行区間と割込プログラムコード実行区間の関係が変化する。要因発生プログラムコード２０５の役割は、検証対象プログラムコード実行中の図３（ａ）〜図３（ｃ）のすべてのタイミングで割込みを発生させ、割込プログラムコードを実行させることにある。
【００５４】
割込みが発生し実際に実行権が移動するタイミングというのは、検証対象プログラムコード内の命令と命令の間であることが多い。その場合には、検証対象プログラムコードにある命令と命令の間の数だけ、割込みが発生するタイミングが存在し、全タイミングにおいてテストプログラムを作成する必要があることから、生成されるテストプログラム数は、「（検証対象プログラム内の命令数）−１」となる。
【００５５】
要因発生プログラムコードの実現法を図４を利用して説明する。図４は、通常処理６０１と割込処理６０２、およびタイミングを調整するタイマ６０３を使用して、要因発生のタイミングの調整をタイマ割込みで実現する方法を示したシーケンス図である。図４の処理の流れを説明する。
【００５６】
（１）通常処理６０１で要因発生プログラムコード６０４を起動する。
【００５７】
（２）要因発生プログラムコード６０４内で、期待するタイミングでタイマ割込みが発生するようにタイマ６０３の設定を行う。
【００５８】
（３）通常処理６０１で検証対象プログラムコード６０５を実行する。
【００５９】
（４）タイマ６０３の設定により検証対象プログラムコード６０５の実行中にタイマ割込みが発生し、割込処理６０２に実行権が切り替わる。
【００６０】
（５）割込処理６０２で割込プログラムコード６０６を実行する。
【００６１】
（６）割込プログラムコード６０６が終了し、割込処理６０２が終了したときに、通常処理６０１に実行権が切り替わる。
【００６２】
（７）実行中であった検証対象プログラムコードの残りの部分６０７を実行する。
【００６３】
この実現方法では、要因発生プログラムコードにおけるタイマ設定で、割込み発生のタイミングを調整する。図４は図３（ｂ）のタイミングで割込みが発生した状況に対応し、６０５，６０６，６０７はそれぞれ、４０３，４０４，４０６に対応する。
【００６４】
図５は、図４の場合よりもタイマ割込みが遅くなるように設定した場合のシーケンス図である。図５の場合は、図４と同様に検証対象プログラムコード実行中に割込みが発生するが、図４の場合に比べて割込みが発生するタイミングが遅くなっている。このように、タイマ６１３の設定を変えることにより、さまざまなタイミングで割込みが発生するテストプログラムを作成していく。
【００６５】
図４の方法はタイマに対するパラメータにより割込み発生のタイミングを調整していた。しかし、タイマに設定できるパラメータの粒度が粗く、全タイミングで要因を発生させることができない場合もある。そこで、タイマによる割込みの時刻を固定し、検証対象プログラムコードの開始タイミングを調整することでタイミング生成を実現する。この実現法によるテストプログラムを図６に示す。
【００６６】
図６の要因発生プログラムコード７０４は、図４の場合と異なり、タイマ７０３に設定するパラメータを固定して、決まったタイミングで発生するようにした上で、待ち７０５を発生させている。待ちは、ＮＯＰ（No Operation：なにもしない）命令などを待ちの長さ分だけ実行することで実現する。この処理により待ちの長さは命令の長さを単位として自由に変更できるため、検証対象プログラムコードの開始タイミングを細かく調整することができる。検証対象プログラムコードの開始タイミングが変化することで、相対的に全タイミングで要因が発生するテストプログラムを作成できる。ＮＯＰ命令による待ちは、必ず命令単位で長さを変更することができるため、タイマ７０３による割込み設定の粒度に依存しない。
【００６７】
────  テストプログラム実行ステップ  ────
図８にテストプログラム実行ステップ８０１の入出力を示す。本ステップには、テストプログラム８０２を入力する。本ステップ内で入力されたテストプログラム８０２をすべて実行し、内部状態を実行結果８０３として出力する。
【００６８】
テストプログラムを実行するテスト実行部が複数存在する場合は、テストプログラムを各テスト実行部に分散させて並行して実行させることができる。本実施の形態においては、１テスト項目から複数のテストプログラムが生成されることがほとんどであるため、並列実行により、テスト時間の短縮を図ることができる。
【００６９】
────  実行結果照合ステップ  ────
図９に実行結果照合ステップ９０１の入出力を示す。本ステップには、実行結果９０２と検証用データ９０３を入力する。本ステップ内で、実行結果９０２と検証用データ９０３の照合が行われ、テスト結果９０４として、正常、異常などの出力を行う。
【００７０】
本検証方法では、検証対象プログラムコードと割込プログラムコードを入力し、全タイミングで割込みを発生させている。そのため、図３（ａ）〜図３（ｃ）に示すように、割込み発生のタイミングによって検証対象プログラムコードと割込プログラムコードの実行順序が変わる。実行順序により実行結果が変わることがあるが、入力されたプログラムコードが正しい場合は、いずれも正常動作と判定しなければならない。つまり、実行結果として期待される検証用データを複数用意して、実行結果と検証用データを照合する必要がある。
【００７１】
図１０は本ステップにおける照合処理の概要である。本検証方法では、テストプログラムと同数の実行結果（１００１〜１００３）が入力される。また、上述のとおり、検証用データ（１００４〜１００６）も複数になることがある。従来は、１つの実行結果と１つの検証用データを比較する方法で照合しているが、本発明においては従来法が使用できない。そこで、図１０のとおり、実行結果ごとに全検証用データと照合する必要がある。ただし、全実行結果が検証用データのいずれかと一致していることさえ確認できればよい。
【００７２】
図１１は実行結果１（１００１）と検証用データの照合処理のフローチャートである。１１０１は実行結果１（１００１）と検証用データ１（１００４）との照合、１１０２は実行結果１（１００１）と検証用データ２（１００５）との照合、１１０３は実行結果１（１００１）と検証用データｍ（１００６）との照合を示す。このフローチャートでは、実行結果１と各検証用データを照合していき、一致する検証用データがあったときには、即座に正常終了し、すべての検証用データと一致しなかった場合は異常終了する。
【００７３】
図１１のフローチャートで各実行結果の照合を行う。そして、図１２に示すフローチャートによって、全体の照合処理を行う。１２０１は図１１で示す実行結果１（１００１）の照合処理、１２０２は実行結果２（１００２）の照合処理、１２０２は実行結果３（１００３）の照合処理を示す。このフローチャートでは、実行結果ごとに図１１と同様のフローチャートを実行していき、すべての実行結果において正常終了している場合のみ、照合が正常終了する。一つでも異常終了する実行結果があった場合は異常終了することとなる。
【００７４】
この実行結果照合ステップが正常終了の場合は、テスト結果として「正常」を出力する。反対に、異常終了の場合は「異常」を出力する。この「異常」が出力されるのは、どの検証用データとも一致しない実行結果が一つでもある場合である。この場合は、検証対象プログラムコード、あるいは、割込プログラムコードに排他制御漏れがあることを示している。
【００７５】
（実施の形態２）
図１３は、本発明の実施の形態２におけるソフトウェアの検証方法の概要を示すもので、これは上記実施の形態１にタイミング有効域判定ステップ１３０１を追加したものに相当する。タイミング有効域判定ステップ１３０１を追加することで、テストプログラム生成ステップで生成されたテストプログラムの中から、次のテストプログラム実行ステップ１３０２で実行すべきテストプログラムの数を削減することができる。そして、テストプログラム数を削減することで、テストプログラム実行ステップ１３０２の処理にかかる時間を短縮できる。
【００７６】
────  タイミング有効域判定ステップ  ────
図１４にタイミング有効域判定ステップ１４０１の入出力を示す。入力されたテストプログラム１４０２のそれぞれで要因発生のタイミングが有効域であるかどうかを判定し、不必要と判断されたテストプログラムを除いたテストプログラム１４０３を出力する。タイミング有効域は、検証対象プログラムコード内で共有リソースにアクセスしてから同じ共有リソースへ再びアクセスするまでの間を指す。本検証方法は、共有リソースの排他制御が正しく行われているかどうかを確認する目的で行われるため、有効域以外ではテスト不要となる。
【００７７】
本ステップの処理を、図１５に示す検証対象プログラムコードの例を利用して説明する。図１５は、検証対象プログラムコードの各命令を命令１５０１〜１５１３にて示すものである。このうち、命令１５０３，１５０６，１５０８，１５１１では同じ共有リソースにアクセスしており、その他の命令はすべて共有リソースへのアクセスは含まないものとする。この場合、命令１５０３から命令１５１１までがタイミング有効域となる。図１５では、先頭の命令１５０１から命令１５０２までの間は共有リソースへアクセスする命令が含まれておらず、この間は排他制御が必要ない。しかし、テストプログラム生成ステップにて、すべての命令と命令の間に割込みが発生するテストプログラムが生成されている。そのため、命令１５０１から命令１５０２までの間のタイミングで割込みを発生させているテストプログラムを実行の対象から外すことが可能となる。同様に、命令１５１２から最後の命令１５１３までの間も共有リソースにアクセスしていないため、命令１５１２から命令１５１３までの間のタイミングで割込みを発生させているテストプログラムも実行の対象から外すことが可能となる。
【００７８】
（実施の形態３）
図１６は、本発明の実施の形態３におけるソフトウェア検証方法の概要を示すもので、これは上記の実施の形態２にタイミング集約ステップ１６０１を追加したものに相当する。タイミング集約ステップ１６０１を追加することで、テストプログラム生成ステップで生成されたテストプログラムの中から、次のテストプログラム実行ステップ１６０２で実行すべきテストプログラムの数を削減することができる。そして、テストプログラム数を削減することで、テストプログラム実行ステップ１６０２の処理にかかる時間を短縮できる。なお、図１６において、破線で囲んだステップについては、これを省略してもよい。
【００７９】
────  タイミング集約ステップ  ────
図１７にタイミング集約ステップ１７０１の入出力を示す。入力されたテストプログラム１７０２のそれぞれでタイミングを集約し、不必要と判断されたテストプログラムを除いたテストプログラム１７０３を出力する。本ステップの処理を、先に用いた図１５に示す検証対象プログラムコードの例を利用して説明する。図１５では、命令１５０４から１５０５までの間は共有リソースへアクセスする命令が含まれていない。そのため、命令１５０３から１５０６までの間に割込みが発生するように作成されたテストプログラムはすべて同じ結果になる。そこで、これらのテストプログラムを集約し、代表して命令１５０３，１５０４間に割込みが発生するテストプログラムを出力する。こうすることで、命令１５０４から１５０６までの間に割込みが発生するように作成されたテストプログラムを実行の対象から外すことが可能となる。同様に、命令１５０７と１５０８の間、命令１５０９から１５１１までの間に割込みが発生するテストプログラムもテストプログラム実行の対象から外すことができる。
【００８０】
（実施の形態４）
図１８は、本発明の実施の形態４におけるソフトウェア検証方法の概要を示すもので、これは上記の実施の形態３に実行結果集約ステップ１８０１を追加したものに相当する。実行結果集約ステップ１８０１を追加することで、テストプログラム実行ステップで出力された実行結果の数を削減することができる。そして、実行結果の数を減らすことで、次ステップの実行結果照合ステップ１８０２の処理にかかる時間を短縮できる。なお、図１８において、破線で囲んだステップについては、これらの全部または一部を省略してもよい。
【００８１】
────  実行結果集約ステップ  ────
図１８に実行結果集約ステップ１９０１の入出力を示す。入力された実行結果１９０２を集約して数を減らした実行結果１９０３を出力する。本ステップの処理例を図２０に示す。図２０の例では、多数あった実行結果２００１を２つの実行結果のグループ２００２，２００３に集約している。各グループから一つの実行結果２００４，２００５を出力することで、実行結果数を削減できる。本検証方法の特徴の一つとして、テストプログラムはタイミングが異なるのみのものであるため、その実行結果も等しくなることが多い。そのため、本ステップで実行結果の数を削減することができる。
【００８２】
（実施の形態５）
図２１は、本発明の実施の形態５におけるソフトウェア検証方法の概要を示すもので、これは上記の実施の形態４に実行結果特徴抽出ステップ２１０１を追加ものに相当する。実行結果特徴抽出ステップ２１０１を追加することで、実行結果から特徴を抽出しインデックスを付与することができる。そして、特徴量によるインデックス付与により、特に、実行結果の数が多い場合に、次ステップの実行結果照合ステップ２１０２の処理にかかる時間を短縮できる。なお、図２１において、破線で囲んだステップについては、これらの全部または一部を省略してもよい。
【００８３】
────  実行結果特徴抽出ステップ  ────
図２２に実行結果特徴抽出ステップ２２０１の入出力を示す。入力された実行結果２２０２から共通部分２２０３と差分２２０４を分離して出力する。図２３に、実行結果間の差分を特徴として抽出した場合の例を示す。実行結果２３０１〜２３０３を相互比較し、全実行結果に共通する部分を共通部分２３０７として出力し、差分２３０４〜２３０６を別に出力する。
【００８４】
本検証方法の特徴の一つとして、テストプログラムはタイミングが異なるのみのものであるため、各実行結果間の差分は小さい。差分は小さいことから、実行結果照合ステップ２１０２の処理にかかる時間を短縮できる。
【００８５】
図２４、図２５に、本ステップの結果を使用した実行結果照合ステップ２１０２の例を示す。まず、図２４に示すとおり、実行結果の共通部分２４０１と検証用データ２４０２〜２４０４の該当部分を照合する。この照合によって一致しない検証用データを排除し、図２５に示す次の処理に移る。
【００８６】
図２５は検証用データ２（２４０３）が共通部分との比較で不一致だった場合の処理を示している。図１０の例と異なり、実行結果の差分と検証用データの該当部分のみの照合でよく、照合処理の時間が短縮できる。また、検証用データ２（２４０３）は照合から除外できるため、照合処理の時間が短縮できる。本ステップは、共通部分との照合で不一致であった場合や、入力される実行結果が多い場合に有効である。
【００８７】
（実施の形態６）
これまではソフトウェア検証方法について説明してきたが、ソフトウェア検証方法で使用する検証用データを正常なプログラムコードから生成することもできる。本実施の形態は、そのような検証用データ作成方法に関するものである。
【００８８】
図２６〜図３０に検証用データ作成方法を示す。
【００８９】
図２６は、テストプログラム生成ステップ２６０３、テストプログラム実行ステップ２６０４からなる、検証用データを作成するための最小構成である。このテストプログラム生成ステップ、テストプログラム実行ステップは上記と同様のものである。
【００９０】
この最小構成に対し、図２７に示す上記同様のタイミング有効域判定ステップ２６０６や、図２８に示す上記同様のタイミング集約ステップ２６０７を追加することで、テストプログラム数が削減でき、テストプログラム実行ステップの処理時間が短縮できる。
【００９１】
また、図２９に示す上記同様の実行結果集約ステップ２６０８を追加し、同じ実行結果をまとめることで検証用データの数を削減できる。
【００９２】
さらに、図３０に示す上記同様の実行結果特徴抽出ステップ２６０９を追加することで、検証用データを共通部分と差分に分割することができる。この分割により、実施の形態５の実行結果照合ステップの図２４の処理を、図３１に示すとおり一度の照合のみで実現できる。
【産業上の利用可能性】
【００９３】
本発明の検証方法は、プログラムコード実行中の任意のタイミングで別プログラムコードが実行する状態に切り替わる要因を持つソフトウェアにおいて、確実な排他制御が行われていることを保証する検証方法である。したがって、本発明の技術は、割込みを用いたプログラミングモデルや、リアルタイムＯＳなどに代表される複数のタスクを用いたプログラミングモデルを採用したプログラムコード等に対する検証方法として有用である。
【図面の簡単な説明】
【００９４】
【図１】本発明の実施の形態１におけるソフトウェア検証方法の概要を示すブロック図
【図２】実施の形態１のソフトウェア検証方法におけるテストプログラム生成ステップの入出力を示すブロック図
【図３】実施の形態１のソフトウェア検証方法において検証対象プログラムコードの実行が終了したあと割込プログラムが実行される状況を示したシーケンス図（ａ）と、検証対象プログラムコードの実行中に割込プログラムが実行される状況を示したシーケンス図（ｂ）と、検証対象プログラムコードの実行前に割込プログラムが実行される状況を示したシーケンス図（ｃ）
【図４】実施の形態１のソフトウェア検証方法においてタイマを利用して要因発生のタイミングを調整する要因発生プログラムコードの概要を示すシーケンス図（その１）
【図５】実施の形態１のソフトウェア検証方法においてタイマを利用して要因発生のタイミングを調整する要因発生プログラムコードの概要を示すシーケンス図（その２）
【図６】実施の形態１のソフトウェア検証方法において待ちを利用して要因発生のタイミングを調整する要因発生プログラムコードの概要を示すシーケンス図（その１）
【図７】実施の形態１のソフトウェア検証方法において待ちを利用して要因発生のタイミングを調整する要因発生プログラムコードの概要を示すシーケンス図（その２）
【図８】実施の形態１のソフトウェア検証方法においてテストプログラム実行ステップの入出力を示すブロック図
【図９】実施の形態１のソフトウェア検証方法において実行結果照合ステップの入出力を示すブロック図
【図１０】実施の形態１のソフトウェア検証方法において実行結果照合ステップにおける照合処理の概要を示したブロック図
【図１１】実施の形態１のソフトウェア検証方法において実行結果照合ステップにおける１つの実行結果の照合処理を示すフローチャート
【図１２】実施の形態１のソフトウェア検証方法において実行結果照合ステップにおける照合処理を示すフローチャート
【図１３】本発明の実施の形態２におけるソフトウェア検証方法の概要を示すブロック図
【図１４】実施の形態２のソフトウェア検証方法においてタイミング有効域判定の入出力を示すブロック図
【図１５】実施の形態２のソフトウェア検証方法において検証対象プログラムコードの例を示すブロック図
【図１６】本発明の実施の形態３におけるソフトウェア検証方法の概要を示すブロック図
【図１７】実施の形態３のソフトウェア検証方法においてタイミング集約ステップの入出力を示すブロック図
【図１８】本発明の実施の形態４におけるソフトウェア検証方法の概要を示すブロック図
【図１９】実施の形態４のソフトウェア検証方法において実行結果集約ステップの入出力を示すブロック図
【図２０】実施の形態４のソフトウェア検証方法において実行結果集約ステップにおけるグループ化の概要を示すブロック図
【図２１】本発明の実施の形態５におけるソフトウェア検証方法の概要を示すブロック図
【図２２】実施の形態５のソフトウェア検証方法において実行結果特徴抽出ステップの入出力を示すブロック図
【図２３】実施の形態５のソフトウェア検証方法において実行結果特徴抽出ステップにおける差分を抽出する方法の概要を示すブロック図
【図２４】実施の形態５のソフトウェア検証方法において実行結果特徴抽出ステップを追加した場合の実行結果照合ステップにおける照合処理の概要を示したブロック図
【図２５】実施の形態５のソフトウェア検証方法において実行結果特徴抽出ステップを追加した場合の実行結果照合ステップにおける照合処理の概要を示したブロック図
【図２６】本発明の実施の形態６における検証用データ作成方法の概要を示すブロック図（その１）
【図２７】本発明の実施の形態６における検証用データ作成方法の概要を示すブロック図（その２）
【図２８】本発明の実施の形態６における検証用データ作成方法の概要を示すブロック図（その３）
【図２９】本発明の実施の形態６における検証用データ作成方法の概要を示すブロック図（その４）
【図３０】本発明の実施の形態６における検証用データ作成方法の概要を示すブロック図（その５）
【図３１】実施の形態６の検証用データ作成方法において実行結果特徴抽出ステップを追加した場合の実行結果照合ステップにおける照合処理の概要を示したブロック図
【符号の説明】
【００９５】
１０１  ソフトウェアの検証方法
１０２  検証対象プログラムコード
１０３  割込プログラムコード
１０４  検証用データ
１０５  テスト結果
１０６  テストプログラム生成ステップ
１０７  テストプログラム実行ステップ
１０８  実行結果照合ステップ
１３０１  タイミング有効域判定ステップ
１６０１  タイミング集約ステップ
１８０１  実行結果集約ステップ
２１０１  実行結果特徴抽出ステップ
【図１】
2005309800.tif 000003
【図２】
2005309800.tif 000004
【図３】
2005309800.tif 000005
【図４】
2005309800.tif 000006
【図５】
2005309800.tif 000007
【図６】
2005309800.tif 000008
【図７】
2005309800.tif 000009
【図８】
2005309800.tif 000010
【図９】
2005309800.tif 000011
【図１０】
2005309800.tif 000012
【図１１】
2005309800.tif 000013
【図１２】
2005309800.tif 000014
【図１３】
2005309800.tif 000015
【図１４】
2005309800.tif 000016
【図１５】
2005309800.tif 000017
【図１６】
2005309800.tif 000018
【図１７】
2005309800.tif 000019
【図１８】
2005309800.tif 000020
【図１９】
2005309800.tif 000021
【図２０】
2005309800.tif 000022
【図２１】
2005309800.tif 000023
【図２２】
2005309800.tif 000024
【図２３】
2005309800.tif 000025
【図２４】
2005309800.tif 000026
【図２５】
2005309800.tif 000027
【図２６】
2005309800.tif 000028
【図２７】
2005309800.tif 000029
【図２８】
2005309800.tif 000030
【図２９】
2005309800.tif 000031
【図３０】
2005309800.tif 000032
【図３１】
2005309800.tif 000033