JP2005309800A - ソフトウェア検証方法および検証用データ作成方法 - Google Patents

ソフトウェア検証方法および検証用データ作成方法 Download PDF

Info

Publication number
JP2005309800A
JP2005309800A JP2004126350A JP2004126350A JP2005309800A JP 2005309800 A JP2005309800 A JP 2005309800A JP 2004126350 A JP2004126350 A JP 2004126350A JP 2004126350 A JP2004126350 A JP 2004126350A JP 2005309800 A JP2005309800 A JP 2005309800A
Authority
JP
Japan
Prior art keywords
execution
test program
test
program code
verification
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2004126350A
Other languages
English (en)
Inventor
Masaaki Tsujino
雅章 辻野
Kunihiko Hayashi
邦彦 林
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Panasonic Holdings Corp
Original Assignee
Matsushita Electric Industrial Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Priority to JP2004126350A priority Critical patent/JP2005309800A/ja
Publication of JP2005309800A publication Critical patent/JP2005309800A/ja
Pending legal-status Critical Current

Links

Images

Abstract

【課題】 プログラムコード実行中の任意のタイミングで別プログラムコードが実行する状態に切り替わる要因を持つソフトウェアにおいて、確実な排他制御が行われていることを保証する検証方法を実現する。
【解決手段】 実行中のプログラムコードのすべてのタイミングで実行権が切り替わる要因を発生させるテストプログラムを生成するテストプログラム生成ステップ106と、前記テストプログラムを実行するテストプログラム実行ステップ107と、前記テストプログラム実行ステップの出力と正当な出力データである検証用データとを照合するテストプログラム実行結果照合ステップ108とを有することで、前記要因が全タイミングで発生するテストプログラムを生成し、実行し、評価する、という一連の検証手順を自動的に行うことができる。
【選択図】 図1

Description

本発明は、ソフトウェアの検証において、特にプログラムコード中の排他制御が確実に行われているかを検証するための技術に関するものである。
従来から、ソフトウェア開発における検証作業では、テスト仕様書に基づいて作成したテストプログラムを実行し、実行結果として出力されるデータを検証していた。しかし、この検証作業を人が行うために、検証の工数が増大するだけでなく、チェックミス、チェック漏れなどの発生を招いていた。そこで、自動的に検証を行う方法として、あらかじめ出力として望まれるデータである検証用データを作成しておき、評価の段階においてはテストプログラム実行時に出力されるデータとこの検証用データを自動的に照合することで効率化を図っていた(例えば、特許文献1参照)。
ところで、従来から割込みを用いたプログラミングモデルはよく用いられる。加えて、近年、リアルタイムOSなどに代表される、複数のタスクを用いたプログラミングモデルが採用される機会が増えてきた。これらのプログラミングモデルでは、あるプログラムコードの実行中に割込みが発生し、他のプログラムコードが実行権を奪って実行することがある。
しかし、実行権を奪われるプログラムコードと実行権を奪うプログラムコードとがともにアクセスする共有リソースがある場合、共有リソースに対するアクセスを制御する“排他制御”が必須となる。排他制御とは、プログラムコード中で、ある処理の間は使用している共有リソースを独占的に使用したい場合に、この共有リソースを独占的に使用したい区間(以降、クリティカルセクションとする)を複数のプログラムコードなどから同時にアクセスされないよう保護することをさす。
従来は、クリティカルセクションの全区間を割込み禁止にすることで排他制御を実現していた。しかし、長いクリティカルセクションの全区間を割込み禁止にしてしまうことで、割込み禁止時に発生した割込みが保留されてしまう。割込みの保留による割込み処理実行開始タイミングの遅れは、処理の遅延を招くなどシステム破綻につながる重大な問題の一因となり、特にリアルタイム性(即時応答性)が要求されるシステムにおいては、この影響が顕著に現れる。
この問題を回避するため、クリティカルセクションを含むプログラムコードに対し、クリティカルセクションの全区間でなく一部区間を割込み禁止にする工夫や、割込み禁止そのものを不要にする工夫を導入したりしてきた。
しかし、上記のような工夫により排他制御の制限を緩和すると、排他制御漏れが発生する可能性が高くなる。このように、高いリアルタイム性の要求と排他制御漏れによる不具合発生件数はトレードオフの関係にある。
この不具合を検出する検証方法において、従来は耐久テストと呼ばれる検証方法が採用されてきた。この方法は、プログラムコードの実行を何度も繰り返すことで、クリティカルセクション内で偶発的に割込みを発生させるものである。
特開平1−226043号公報
上述の従来の技術では、ソフトウェアを自動的に検証する方法に着眼し実行しているが、プログラムコード単体で実行することに主眼を置いているため、プログラムコード中で正しく排他制御をしているかどうかを検証することはできなかった。
また、上述の耐久テストは、排他制御漏れの区間を検出するという観点から見ると完全なものではない。プログラムコードの実行を何度繰り返したとしても、テストに必要な全区間において割込みを発生させたことを保証するものではないからである。
以上のように、割込みを用いたプログラミングモデルや複数のタスクを用いたプログラミングモデルに対する排他制御の確実性を保証する検証方法は、これまでのところ十分とはいえず、その確立が望まれている。特に、上述のリアルタイム性を追求したソフトウェアにおいては、その確立が望まれている。
本発明は、上記の課題を解決するために次のような手段を講じる。
本発明のソフトウェア検証方法は、プログラムコード実行中に別プログラムコードに実行権の切り替わる要因が任意のタイミングで発生するソフトウェアを検証する方法であって、
検証対象プログラムコード、前記検証対象プログラムコードの実行中のすべてのタイミングで前記要因を発生させる要因発生プログラムコード、および前記要因の発生により実行権を得る割込プログラムコードからなるテストプログラムを生成するテストプログラム生成ステップと、
前記テストプログラム生成ステップで生成した前記テストプログラムを実行し、前記テストプログラムの実行結果を出力するテストプログラム実行ステップと、
前記テストプログラム実行ステップの出力と検証用データとを照合する実行結果照合ステップとを備えている。
この構成によれば、検証対象プログラムコードおよび割込プログラムコードに対し、検証対象プログラムコード実行中のすべてのタイミングにおいて別プログラムコードに実行権の切り替わる要因を発生させる要因発生プログラムコードを自動的に作成し、これらをまとめてテストプログラムとする。そして、そのようなすべてのタイミングでの実行権切り替わり要因に対応したテストプログラムを用いてテストを実行し、実行結果を照合する。すなわち、テストの必要な区間の全タイミングで割込みが発生した状況を自動的に生成し、かつ自動的に検証できる。したがって、割込みを用いたプログラミングモデルや複数のタスクを用いたプログラミングモデルに対する排他制御の確実性を保証することができる。これは特に、リアルタイム性が要求されるシステムにおいては排他制御を短くするなどの工夫をすることが多いため、排他制御漏れの検出ができる本検証方法は有効である。
上記のソフトウェア検証方法において、前記テストプログラム生成ステップで生成する前記要因発生プログラムコードは、前記要因の発生タイミングをタイマを利用して変化させることで生成することができる。
これは、要因発生プログラムコードにおけるタイマの設定で割込み発生のタイミングを調整するもので、さまざまなタイミングで割込みが発生するテストプログラムを作成できる。
ところで、タイマに設定できるパラメータの粒度が粗く、全タイミングで要因を発生させることができない場合もある。これに対応するには、次のようにするのがよい。すなわち、上記ソフトウェア検証方法において、前記テストプログラム生成ステップで生成する要因発生プログラムコードを、前記要因の発生タイミングを固定させ、前記検証対象プログラムコードの実行開始タイミングを変化させることで生成するとよい。
これは、タイマによる割込みの時刻を固定し、検証対象プログラムコードの開始タイミングを調整することでタイミング生成を実現するものである。前記のタイミングを調整する方法の一つに、“待ち”の導入がある。この“待ち”は、例えばNOP(No Operation)命令を待ちの長さ分だけ実行することで実現できる。この場合は、命令の長さを単位として自由に“待ち”長さを変更できるため、タイマによる割込み設定の粒度に制約されることなく、検証対象プログラムコードの開始タイミングを細かく調整することができる。検証対象プログラムコードの開始タイミングが変化することで、相対的に全タイミングで要因が発生するテストプログラムを作成できるため、前述のタイマによるタイミング調整を実施した場合と同様のテストを実施できる。
また、上記ソフトウェア検証方法において、前記テストプログラム実行ステップについては、前記テストプログラムを実行する手段を複数有する場合に、前記手段に前記テストプログラムを割り当てることで並列に実行させるものが好ましい。
これによれば、テストプログラムを複数の実行手段に分散させて並行して実行させることができ、テスト時間の短縮を図ることができる。
ところで、上記のソフトウェアの検証方法においては、テストプログラム生成ステップでは、すべての命令と命令の間に割込みが発生するテストプログラムが生成されていて、生成されたテストプログラムの数が多く、次のテストプログラム実行ステップで実行すべきテストプログラム数が多いと、処理に時間が多くかかる。これに対応するのが次のソフトウェアの検証方法である。
それは、上記のソフトウェアの検証方法において、前記テストプログラム生成ステップの後段に、さらに、次のような内容のタイミング有効域判定ステップを備えるものである。そのタイミング有効域判定ステップは、前記テストプログラムに含まれる前記検証対象プログラムコードと前記要因において、前記検証対象プログラムコード内の共有リソースへアクセスするタイミングと前記要因の発生するタイミングとの関係により前記テストプログラムの実行必要性を判定し、不必要と判定された前記テストプログラムをテスト実行対象から外すものである。
このタイミング有効域判定ステップにより、テストプログラム生成ステップで生成された全テストプログラムに対し実行必要性の判定を行い、実行が不必要と判定されたテストプログラムをテスト実行対象から外すことができる。その結果、テスト実行すべきテストプログラム数が削減され、さらにテスト時間の短縮を図ることができる。
あるいは、さらに次のソフトウェアの検証方法も好ましい。それは、前記テストプログラム生成ステップの後段に、次のような内容のタイミング集約ステップを備えるものである。そのタイミング集約ステップは、前記テストプログラムに含まれる前記検証対象プログラムコードと前記要因において、前記要因の発生するタイミング付近に存在する前記検証対象プログラムコード内の命令により前記テストプログラムの実行必要性を判定し、不必要と判定された前記テストプログラムをテスト実行対象から外すものである。
このタイミング集約ステップにより、テストの実行結果はすべて同じになることがテスト実行前に確実に分かる場合に、そのテストプログラムを実行不必要と判定し、テスト実行対象から外す。その結果、テスト実行すべきテストプログラム数が削減され、さらにテスト時間の短縮を図ることができる。
ところで、元のテストプログラム同士はタイミングが異なるのみであるため、テストで得られた実行結果は互いに等しくなっていることが多い。同じ内容の複数の実行結果についてそれぞれ検証用データとの照合を行うことは時間の無駄になる。これに対応するのが次のソフトウェア検証方法である。
それは、上記のソフトウェアの検証方法において、前記テストプログラム実行ステップの後段に、前記テストプログラムの実行結果の内容が等しいものをグループ化する実行結果集約ステップを備えるものである。
これによれば、テストプログラムの実行結果が複数あり、その中に同じ内容の実行結果が存在する場合に、実行結果集約ステップによってグループ化することで実行結果の数を削減し、その結果、照合すべき実行結果の数が削減され、照合処理にかかる時間の短縮を図ることができる。
ところで、テストで得られた実行結果が複数ある場合に、元のテストプログラム同士はタイミングが異なるのみで、いくつかの実行結果は類似していることもある。類似している複数の実行結果についてそれぞれの全体を検証用データと照合することは時間の無駄になる。これに対応するのが次のソフトウェア検証方法である。
それは、上記のソフトウェアの検証方法において、前記テストプログラム実行ステップの後段に、さらに、前記実行結果の共通部分と差分を抽出する実行結果特徴抽出ステップを備えるものである。前記実行結果照合ステップは、前記共通部分と前記検証用データの対応部分とを照合し、不一致の検証用データは除外し、一致したものについては前記差分と検証用データの対応部分とを照合するものである。
この場合、実行結果照合ステップでは、共通部分と検証用データの対応部分とを照合し、不一致の検証用データは除外し、一致したものについては差分と検証用データの対応部分とを照合する。不一致の検証用データを除外することと、部分照合を行うことにより、照合に要する時間を短縮化できる。
上記のソフトウェア検証方法にかかわる発明を検証用データ作成方法として、次のように展開することが可能である。検証用データ作成方法は、プログラムコード実行中に別プログラムコードに実行権の切り替わる要因が任意のタイミングで発生するソフトウェアを検証する方法における検証用データを作成する方法である。
すなわち、本発明による検証用データ作成方法は、
検証対象プログラムコード、前記検証対象プログラムコードの実行中のすべてのタイミングで前記要因を発生させる要因発生プログラムコード、および前記要因の発生により実行権を得る割込プログラムコードからなるテストプログラムを生成するテストプログラム生成ステップと、
前記テストプログラム生成ステップで生成した前記テストプログラムを実行し、前記テストプログラムの実行結果を出力するテストプログラム実行ステップとを備えたものである。
上記の検証用データ作成方法において、前記テストプログラム生成ステップは、前記要因の発生タイミングを、タイマを利用して変化させる前記要因発生プログラムコードを生成するものとする。
また、上記の検証用データ作成方法において、前記テストプログラム生成ステップは、前記要因の発生タイミングを固定させ、前記検証対象プログラムコードの実行開始タイミングを変化させる前記要因発生プログラムコードを生成するものとする。
また、上記の検証用データ作成方法において、前記テストプログラム実行ステップは、前記テストプログラムを実行する手段を複数有する場合に、前記手段に前記テストプログラムを割り当てることで並列に実行させるものとする。
また、上記の検証用データ作成方法において、前記テストプログラム生成ステップの後段に、さらに、前記テストプログラムに含まれる前記検証対象プログラムコードと、前記要因において、前記検証対象プログラムコード内の共有リソースへアクセスするタイミングと前記要因の発生するタイミングとの関係により前記テストプログラムの実行必要性を判定し、不必要と判定された前記テストプログラムをテスト実行対象から外すタイミング有効域判定ステップを備えるものとする。
また、上記の検証用データ作成方法において、前記テストプログラム生成ステップの後段に、さらに、前記テストプログラムに含まれる前記検証対象プログラムコードと前記要因において、前記要因の発生するタイミング付近に存在する前記検証対象プログラムコード内の命令により前記テストプログラムの実行必要性を判定し、不必要と判定された前記テストプログラムをテスト実行対象から外すタイミング集約ステップを備えるものとする。
また、上記の検証用データ作成方法において、前記テストプログラム実行ステップの後段に、さらに、前記実行結果の内容を調査し、内容の等しいものをグループ化する実行結果集約ステップを備えるものとする。
また、上記の検証用データ作成方法において、前記テストプログラム実行ステップの後段に、さらに、前記実行結果の共通部分を抽出し取り除くことによりインデックスを生成する実行結果特徴抽出ステップを備えるものとする。
本発明によれば、テストプログラム生成ステップ、テストプログラム実行ステップ、および、実行結果照合ステップを順次行うことで、テストの必要な区間の全タイミングで割込みが発生した状況を自動的に生成し、かつ自動的に検証できる。
また、タイミング有効域判定ステップ、タイミング集約ステップ、実行結果集約ステップ、実行結果特徴抽出ステップを追加することにより、検証時間を短縮することができる。
以下、本発明にかかわるソフトウェア検証方法の実施の形態を図面に基づいて詳細に説明する。
(実施の形態1)
本発明のソフトウェア検証方法の実施の形態1について、プログラムコード実行中に他のプログラムコードが割込みによって実行される場合を例に説明する。以降、実行中のプログラムコードを検証対象プログラムコード、割込みにより割込んで実行するプログラムコードを割込プログラムコード、割込みを要因として発生させるタイミングを調整するプログラムコードを要因発生プログラムコードとする。
図1に本発明の実施の形態1におけるソフトウェアの検証方法101の概要を示す。検証方法101に対し、検証対象プログラムコード102、割込プログラムコード103、検証用データ104を入力する。そして、検証方法により検証され、「正常」、「異常」を示すテスト結果105が出力される。検証用データ104は、正常なプログラムコードから生成されるテストプログラムコードを実行すると出力されるデータからなる。
検証方法101は、テストプログラム生成ステップ106、テストプログラム実行ステップ107、実行結果照合ステップ108に分けられる。
──── テストプログラム生成ステップ ────
図2にテストプログラム生成ステップ201の入出力を示す。本ステップには、検証対象プログラムコード202と割込プログラムコード203を入力する。本ステップ内で、要因発生プログラムコード205を生成し、入力された検証対象プログラムコード202、割込プログラムコード203と合わせてテストプログラム206を出力する。
本ステップで生成する要因発生プログラムコード205について説明する。要因発生プログラムコードの目的は、実行中の検証対象プログラムコードにおいてすべてのタイミングで割込みを発生させることである。
図3(a)〜図3(c)に検証対象プログラムコードと割込プログラムコードの実行タイミングの関係をシーケンス図で示す。図中の斜線部が実行権を持っている区間である。
図3(a)は、検証対象プログラムコード303が実行終了したタイミングで割込み305が発生し、割込プログラムコード304が実行されるシーケンスである。
図3(b)は、割込み405が図3(a)より早いタイミング、すなわち検証対象プログラムコード403が実行中のタイミングで発生し、割込プログラムコード404が割込んで実行されたあとに、検証対象プログラムコードに復帰して残りのプログラムコード406が実行されるシーケンスである。
図3(c)は、割込み505が図3(b)より早いタイミング、すなわち検証対象プログラムコード503の実行前のタイミングで発生し、割込プログラムコード504が実行され、そのあとに検証対象プログラムコード503が実行されるシーケンスである。
このように、割込みの発生するタイミングにより検証対象プログラムコード実行区間と割込プログラムコード実行区間の関係が変化する。要因発生プログラムコード205の役割は、検証対象プログラムコード実行中の図3(a)〜図3(c)のすべてのタイミングで割込みを発生させ、割込プログラムコードを実行させることにある。
割込みが発生し実際に実行権が移動するタイミングというのは、検証対象プログラムコード内の命令と命令の間であることが多い。その場合には、検証対象プログラムコードにある命令と命令の間の数だけ、割込みが発生するタイミングが存在し、全タイミングにおいてテストプログラムを作成する必要があることから、生成されるテストプログラム数は、「(検証対象プログラム内の命令数)−1」となる。
要因発生プログラムコードの実現法を図4を利用して説明する。図4は、通常処理601と割込処理602、およびタイミングを調整するタイマ603を使用して、要因発生のタイミングの調整をタイマ割込みで実現する方法を示したシーケンス図である。図4の処理の流れを説明する。
(1)通常処理601で要因発生プログラムコード604を起動する。
(2)要因発生プログラムコード604内で、期待するタイミングでタイマ割込みが発生するようにタイマ603の設定を行う。
(3)通常処理601で検証対象プログラムコード605を実行する。
(4)タイマ603の設定により検証対象プログラムコード605の実行中にタイマ割込みが発生し、割込処理602に実行権が切り替わる。
(5)割込処理602で割込プログラムコード606を実行する。
(6)割込プログラムコード606が終了し、割込処理602が終了したときに、通常処理601に実行権が切り替わる。
(7)実行中であった検証対象プログラムコードの残りの部分607を実行する。
この実現方法では、要因発生プログラムコードにおけるタイマ設定で、割込み発生のタイミングを調整する。図4は図3(b)のタイミングで割込みが発生した状況に対応し、605,606,607はそれぞれ、403,404,406に対応する。
図5は、図4の場合よりもタイマ割込みが遅くなるように設定した場合のシーケンス図である。図5の場合は、図4と同様に検証対象プログラムコード実行中に割込みが発生するが、図4の場合に比べて割込みが発生するタイミングが遅くなっている。このように、タイマ613の設定を変えることにより、さまざまなタイミングで割込みが発生するテストプログラムを作成していく。
図4の方法はタイマに対するパラメータにより割込み発生のタイミングを調整していた。しかし、タイマに設定できるパラメータの粒度が粗く、全タイミングで要因を発生させることができない場合もある。そこで、タイマによる割込みの時刻を固定し、検証対象プログラムコードの開始タイミングを調整することでタイミング生成を実現する。この実現法によるテストプログラムを図6に示す。
図6の要因発生プログラムコード704は、図4の場合と異なり、タイマ703に設定するパラメータを固定して、決まったタイミングで発生するようにした上で、待ち705を発生させている。待ちは、NOP(No Operation:なにもしない)命令などを待ちの長さ分だけ実行することで実現する。この処理により待ちの長さは命令の長さを単位として自由に変更できるため、検証対象プログラムコードの開始タイミングを細かく調整することができる。検証対象プログラムコードの開始タイミングが変化することで、相対的に全タイミングで要因が発生するテストプログラムを作成できる。NOP命令による待ちは、必ず命令単位で長さを変更することができるため、タイマ703による割込み設定の粒度に依存しない。
──── テストプログラム実行ステップ ────
図8にテストプログラム実行ステップ801の入出力を示す。本ステップには、テストプログラム802を入力する。本ステップ内で入力されたテストプログラム802をすべて実行し、内部状態を実行結果803として出力する。
テストプログラムを実行するテスト実行部が複数存在する場合は、テストプログラムを各テスト実行部に分散させて並行して実行させることができる。本実施の形態においては、1テスト項目から複数のテストプログラムが生成されることがほとんどであるため、並列実行により、テスト時間の短縮を図ることができる。
──── 実行結果照合ステップ ────
図9に実行結果照合ステップ901の入出力を示す。本ステップには、実行結果902と検証用データ903を入力する。本ステップ内で、実行結果902と検証用データ903の照合が行われ、テスト結果904として、正常、異常などの出力を行う。
本検証方法では、検証対象プログラムコードと割込プログラムコードを入力し、全タイミングで割込みを発生させている。そのため、図3(a)〜図3(c)に示すように、割込み発生のタイミングによって検証対象プログラムコードと割込プログラムコードの実行順序が変わる。実行順序により実行結果が変わることがあるが、入力されたプログラムコードが正しい場合は、いずれも正常動作と判定しなければならない。つまり、実行結果として期待される検証用データを複数用意して、実行結果と検証用データを照合する必要がある。
図10は本ステップにおける照合処理の概要である。本検証方法では、テストプログラムと同数の実行結果(1001〜1003)が入力される。また、上述のとおり、検証用データ(1004〜1006)も複数になることがある。従来は、1つの実行結果と1つの検証用データを比較する方法で照合しているが、本発明においては従来法が使用できない。そこで、図10のとおり、実行結果ごとに全検証用データと照合する必要がある。ただし、全実行結果が検証用データのいずれかと一致していることさえ確認できればよい。
図11は実行結果1(1001)と検証用データの照合処理のフローチャートである。1101は実行結果1(1001)と検証用データ1(1004)との照合、1102は実行結果1(1001)と検証用データ2(1005)との照合、1103は実行結果1(1001)と検証用データm(1006)との照合を示す。このフローチャートでは、実行結果1と各検証用データを照合していき、一致する検証用データがあったときには、即座に正常終了し、すべての検証用データと一致しなかった場合は異常終了する。
図11のフローチャートで各実行結果の照合を行う。そして、図12に示すフローチャートによって、全体の照合処理を行う。1201は図11で示す実行結果1(1001)の照合処理、1202は実行結果2(1002)の照合処理、1202は実行結果3(1003)の照合処理を示す。このフローチャートでは、実行結果ごとに図11と同様のフローチャートを実行していき、すべての実行結果において正常終了している場合のみ、照合が正常終了する。一つでも異常終了する実行結果があった場合は異常終了することとなる。
この実行結果照合ステップが正常終了の場合は、テスト結果として「正常」を出力する。反対に、異常終了の場合は「異常」を出力する。この「異常」が出力されるのは、どの検証用データとも一致しない実行結果が一つでもある場合である。この場合は、検証対象プログラムコード、あるいは、割込プログラムコードに排他制御漏れがあることを示している。
(実施の形態2)
図13は、本発明の実施の形態2におけるソフトウェアの検証方法の概要を示すもので、これは上記実施の形態1にタイミング有効域判定ステップ1301を追加したものに相当する。タイミング有効域判定ステップ1301を追加することで、テストプログラム生成ステップで生成されたテストプログラムの中から、次のテストプログラム実行ステップ1302で実行すべきテストプログラムの数を削減することができる。そして、テストプログラム数を削減することで、テストプログラム実行ステップ1302の処理にかかる時間を短縮できる。
──── タイミング有効域判定ステップ ────
図14にタイミング有効域判定ステップ1401の入出力を示す。入力されたテストプログラム1402のそれぞれで要因発生のタイミングが有効域であるかどうかを判定し、不必要と判断されたテストプログラムを除いたテストプログラム1403を出力する。タイミング有効域は、検証対象プログラムコード内で共有リソースにアクセスしてから同じ共有リソースへ再びアクセスするまでの間を指す。本検証方法は、共有リソースの排他制御が正しく行われているかどうかを確認する目的で行われるため、有効域以外ではテスト不要となる。
本ステップの処理を、図15に示す検証対象プログラムコードの例を利用して説明する。図15は、検証対象プログラムコードの各命令を命令1501〜1513にて示すものである。このうち、命令1503,1506,1508,1511では同じ共有リソースにアクセスしており、その他の命令はすべて共有リソースへのアクセスは含まないものとする。この場合、命令1503から命令1511までがタイミング有効域となる。図15では、先頭の命令1501から命令1502までの間は共有リソースへアクセスする命令が含まれておらず、この間は排他制御が必要ない。しかし、テストプログラム生成ステップにて、すべての命令と命令の間に割込みが発生するテストプログラムが生成されている。そのため、命令1501から命令1502までの間のタイミングで割込みを発生させているテストプログラムを実行の対象から外すことが可能となる。同様に、命令1512から最後の命令1513までの間も共有リソースにアクセスしていないため、命令1512から命令1513までの間のタイミングで割込みを発生させているテストプログラムも実行の対象から外すことが可能となる。
(実施の形態3)
図16は、本発明の実施の形態3におけるソフトウェア検証方法の概要を示すもので、これは上記の実施の形態2にタイミング集約ステップ1601を追加したものに相当する。タイミング集約ステップ1601を追加することで、テストプログラム生成ステップで生成されたテストプログラムの中から、次のテストプログラム実行ステップ1602で実行すべきテストプログラムの数を削減することができる。そして、テストプログラム数を削減することで、テストプログラム実行ステップ1602の処理にかかる時間を短縮できる。なお、図16において、破線で囲んだステップについては、これを省略してもよい。
──── タイミング集約ステップ ────
図17にタイミング集約ステップ1701の入出力を示す。入力されたテストプログラム1702のそれぞれでタイミングを集約し、不必要と判断されたテストプログラムを除いたテストプログラム1703を出力する。本ステップの処理を、先に用いた図15に示す検証対象プログラムコードの例を利用して説明する。図15では、命令1504から1505までの間は共有リソースへアクセスする命令が含まれていない。そのため、命令1503から1506までの間に割込みが発生するように作成されたテストプログラムはすべて同じ結果になる。そこで、これらのテストプログラムを集約し、代表して命令1503,1504間に割込みが発生するテストプログラムを出力する。こうすることで、命令1504から1506までの間に割込みが発生するように作成されたテストプログラムを実行の対象から外すことが可能となる。同様に、命令1507と1508の間、命令1509から1511までの間に割込みが発生するテストプログラムもテストプログラム実行の対象から外すことができる。
(実施の形態4)
図18は、本発明の実施の形態4におけるソフトウェア検証方法の概要を示すもので、これは上記の実施の形態3に実行結果集約ステップ1801を追加したものに相当する。実行結果集約ステップ1801を追加することで、テストプログラム実行ステップで出力された実行結果の数を削減することができる。そして、実行結果の数を減らすことで、次ステップの実行結果照合ステップ1802の処理にかかる時間を短縮できる。なお、図18において、破線で囲んだステップについては、これらの全部または一部を省略してもよい。
──── 実行結果集約ステップ ────
図18に実行結果集約ステップ1901の入出力を示す。入力された実行結果1902を集約して数を減らした実行結果1903を出力する。本ステップの処理例を図20に示す。図20の例では、多数あった実行結果2001を2つの実行結果のグループ2002,2003に集約している。各グループから一つの実行結果2004,2005を出力することで、実行結果数を削減できる。本検証方法の特徴の一つとして、テストプログラムはタイミングが異なるのみのものであるため、その実行結果も等しくなることが多い。そのため、本ステップで実行結果の数を削減することができる。
(実施の形態5)
図21は、本発明の実施の形態5におけるソフトウェア検証方法の概要を示すもので、これは上記の実施の形態4に実行結果特徴抽出ステップ2101を追加ものに相当する。実行結果特徴抽出ステップ2101を追加することで、実行結果から特徴を抽出しインデックスを付与することができる。そして、特徴量によるインデックス付与により、特に、実行結果の数が多い場合に、次ステップの実行結果照合ステップ2102の処理にかかる時間を短縮できる。なお、図21において、破線で囲んだステップについては、これらの全部または一部を省略してもよい。
──── 実行結果特徴抽出ステップ ────
図22に実行結果特徴抽出ステップ2201の入出力を示す。入力された実行結果2202から共通部分2203と差分2204を分離して出力する。図23に、実行結果間の差分を特徴として抽出した場合の例を示す。実行結果2301〜2303を相互比較し、全実行結果に共通する部分を共通部分2307として出力し、差分2304〜2306を別に出力する。
本検証方法の特徴の一つとして、テストプログラムはタイミングが異なるのみのものであるため、各実行結果間の差分は小さい。差分は小さいことから、実行結果照合ステップ2102の処理にかかる時間を短縮できる。
図24、図25に、本ステップの結果を使用した実行結果照合ステップ2102の例を示す。まず、図24に示すとおり、実行結果の共通部分2401と検証用データ2402〜2404の該当部分を照合する。この照合によって一致しない検証用データを排除し、図25に示す次の処理に移る。
図25は検証用データ2(2403)が共通部分との比較で不一致だった場合の処理を示している。図10の例と異なり、実行結果の差分と検証用データの該当部分のみの照合でよく、照合処理の時間が短縮できる。また、検証用データ2(2403)は照合から除外できるため、照合処理の時間が短縮できる。本ステップは、共通部分との照合で不一致であった場合や、入力される実行結果が多い場合に有効である。
(実施の形態6)
これまではソフトウェア検証方法について説明してきたが、ソフトウェア検証方法で使用する検証用データを正常なプログラムコードから生成することもできる。本実施の形態は、そのような検証用データ作成方法に関するものである。
図26〜図30に検証用データ作成方法を示す。
図26は、テストプログラム生成ステップ2603、テストプログラム実行ステップ2604からなる、検証用データを作成するための最小構成である。このテストプログラム生成ステップ、テストプログラム実行ステップは上記と同様のものである。
この最小構成に対し、図27に示す上記同様のタイミング有効域判定ステップ2606や、図28に示す上記同様のタイミング集約ステップ2607を追加することで、テストプログラム数が削減でき、テストプログラム実行ステップの処理時間が短縮できる。
また、図29に示す上記同様の実行結果集約ステップ2608を追加し、同じ実行結果をまとめることで検証用データの数を削減できる。
さらに、図30に示す上記同様の実行結果特徴抽出ステップ2609を追加することで、検証用データを共通部分と差分に分割することができる。この分割により、実施の形態5の実行結果照合ステップの図24の処理を、図31に示すとおり一度の照合のみで実現できる。
本発明の検証方法は、プログラムコード実行中の任意のタイミングで別プログラムコードが実行する状態に切り替わる要因を持つソフトウェアにおいて、確実な排他制御が行われていることを保証する検証方法である。したがって、本発明の技術は、割込みを用いたプログラミングモデルや、リアルタイムOSなどに代表される複数のタスクを用いたプログラミングモデルを採用したプログラムコード等に対する検証方法として有用である。
本発明の実施の形態1におけるソフトウェア検証方法の概要を示すブロック図 実施の形態1のソフトウェア検証方法におけるテストプログラム生成ステップの入出力を示すブロック図 実施の形態1のソフトウェア検証方法において検証対象プログラムコードの実行が終了したあと割込プログラムが実行される状況を示したシーケンス図(a)と、検証対象プログラムコードの実行中に割込プログラムが実行される状況を示したシーケンス図(b)と、検証対象プログラムコードの実行前に割込プログラムが実行される状況を示したシーケンス図(c) 実施の形態1のソフトウェア検証方法においてタイマを利用して要因発生のタイミングを調整する要因発生プログラムコードの概要を示すシーケンス図(その1) 実施の形態1のソフトウェア検証方法においてタイマを利用して要因発生のタイミングを調整する要因発生プログラムコードの概要を示すシーケンス図(その2) 実施の形態1のソフトウェア検証方法において待ちを利用して要因発生のタイミングを調整する要因発生プログラムコードの概要を示すシーケンス図(その1) 実施の形態1のソフトウェア検証方法において待ちを利用して要因発生のタイミングを調整する要因発生プログラムコードの概要を示すシーケンス図(その2) 実施の形態1のソフトウェア検証方法においてテストプログラム実行ステップの入出力を示すブロック図 実施の形態1のソフトウェア検証方法において実行結果照合ステップの入出力を示すブロック図 実施の形態1のソフトウェア検証方法において実行結果照合ステップにおける照合処理の概要を示したブロック図 実施の形態1のソフトウェア検証方法において実行結果照合ステップにおける1つの実行結果の照合処理を示すフローチャート 実施の形態1のソフトウェア検証方法において実行結果照合ステップにおける照合処理を示すフローチャート 本発明の実施の形態2におけるソフトウェア検証方法の概要を示すブロック図 実施の形態2のソフトウェア検証方法においてタイミング有効域判定の入出力を示すブロック図 実施の形態2のソフトウェア検証方法において検証対象プログラムコードの例を示すブロック図 本発明の実施の形態3におけるソフトウェア検証方法の概要を示すブロック図 実施の形態3のソフトウェア検証方法においてタイミング集約ステップの入出力を示すブロック図 本発明の実施の形態4におけるソフトウェア検証方法の概要を示すブロック図 実施の形態4のソフトウェア検証方法において実行結果集約ステップの入出力を示すブロック図 実施の形態4のソフトウェア検証方法において実行結果集約ステップにおけるグループ化の概要を示すブロック図 本発明の実施の形態5におけるソフトウェア検証方法の概要を示すブロック図 実施の形態5のソフトウェア検証方法において実行結果特徴抽出ステップの入出力を示すブロック図 実施の形態5のソフトウェア検証方法において実行結果特徴抽出ステップにおける差分を抽出する方法の概要を示すブロック図 実施の形態5のソフトウェア検証方法において実行結果特徴抽出ステップを追加した場合の実行結果照合ステップにおける照合処理の概要を示したブロック図 実施の形態5のソフトウェア検証方法において実行結果特徴抽出ステップを追加した場合の実行結果照合ステップにおける照合処理の概要を示したブロック図 本発明の実施の形態6における検証用データ作成方法の概要を示すブロック図(その1) 本発明の実施の形態6における検証用データ作成方法の概要を示すブロック図(その2) 本発明の実施の形態6における検証用データ作成方法の概要を示すブロック図(その3) 本発明の実施の形態6における検証用データ作成方法の概要を示すブロック図(その4) 本発明の実施の形態6における検証用データ作成方法の概要を示すブロック図(その5) 実施の形態6の検証用データ作成方法において実行結果特徴抽出ステップを追加した場合の実行結果照合ステップにおける照合処理の概要を示したブロック図
符号の説明
101 ソフトウェアの検証方法
102 検証対象プログラムコード
103 割込プログラムコード
104 検証用データ
105 テスト結果
106 テストプログラム生成ステップ
107 テストプログラム実行ステップ
108 実行結果照合ステップ
1301 タイミング有効域判定ステップ
1601 タイミング集約ステップ
1801 実行結果集約ステップ
2101 実行結果特徴抽出ステップ

Claims (16)

  1. プログラムコード実行中に別プログラムコードに実行権の切り替わる要因が任意のタイミングで発生するソフトウェアを検証する方法であって、
    検証対象プログラムコード、前記検証対象プログラムコードの実行中のすべてのタイミングで前記要因を発生させる要因発生プログラムコード、および前記要因の発生により実行権を得る割込プログラムコードからなるテストプログラムを生成するテストプログラム生成ステップと、
    前記テストプログラム生成ステップで生成した前記テストプログラムを実行し、前記テストプログラムの実行結果を出力するテストプログラム実行ステップと、
    前記テストプログラム実行ステップの出力と検証用データとを照合する実行結果照合ステップと、
    を備えることを特徴とするソフトウェア検証方法。
  2. 前記テストプログラム生成ステップは、前記要因の発生タイミングを、タイマを利用して変化させる前記要因発生プログラムコードを生成することを特徴とする請求項1に記載のソフトウェア検証方法。
  3. 前記テストプログラム生成ステップは、前記要因の発生タイミングを固定させ、前記検証対象プログラムコードの実行開始タイミングを変化させる前記要因発生プログラムコードを生成することを特徴とする請求項1に記載のソフトウェア検証方法。
  4. 前記テストプログラム実行ステップは、前記テストプログラムを実行する手段を複数有する場合に、前記手段に前記テストプログラムを割り当てることで並列に実行させることを特徴とする請求項1から請求項3までのいずれかに記載のソフトウェア検証方法。
  5. 前記テストプログラム生成ステップの後段に、さらに、
    前記テストプログラムに含まれる前記検証対象プログラムコードと前記要因において、前記検証対象プログラムコード内の共有リソースへアクセスするタイミングと前記要因の発生するタイミングとの関係により前記テストプログラムの実行必要性を判定し、不必要と判定された前記テストプログラムをテスト実行対象から外すタイミング有効域判定ステップ
    を備えることを特徴とする請求項1から請求項4までのいずれかに記載のソフトウェア検証方法。
  6. 前記テストプログラム生成ステップの後段に、さらに、
    前記テストプログラムに含まれる前記検証対象プログラムコードと前記要因において、前記要因の発生するタイミング付近に存在する前記検証対象プログラムコード内の命令により前記テストプログラムの実行必要性を判定し、不必要と判定された前記テストプログラムをテスト実行対象から外すタイミング集約ステップ
    を備えることを特徴とする請求項1から請求項5までのいずれかに記載のソフトウェア検証方法。
  7. 前記テストプログラム実行ステップの後段に、さらに、前記テストプログラムの実行結果の内容が等しいものをグループ化する実行結果集約ステップを備えることを特徴とする請求項1から請求項6までのいずれかに記載のソフトウェア検証方法。
  8. 前記テストプログラム実行ステップの後段に、さらに、前記実行結果の共通部分と差分を抽出する実行結果特徴抽出ステップを備え、
    前記実行結果照合ステップは、前記共通部分と前記検証用データの対応部分とを照合し、不一致の検証用データは除外し、一致したものについては前記差分と検証用データの対応部分とを照合することを特徴とする請求項1から請求項7までのいずれかに記載のソフトウェア検証方法。
  9. プログラムコード実行中に別プログラムコードに実行権の切り替わる要因が任意のタイミングで発生するソフトウェアを検証する方法における正当な出力データである検証用データを作成する方法であって、
    検証対象プログラムコード、前記検証対象プログラムコードの実行中のすべてのタイミングで前記要因を発生させる要因発生プログラムコード、および前記要因の発生により実行権を得る割込プログラムコードからなるテストプログラムを生成するテストプログラム生成ステップと、
    前記テストプログラム生成ステップで生成した前記テストプログラムを実行し、前記テストプログラムの実行結果を出力するテストプログラム実行ステップと、
    を備えることを特徴とする検証用データ作成方法。
  10. 前記テストプログラム生成ステップは、前記要因の発生タイミングを、タイマを利用して変化させる前記要因発生プログラムコードを生成することを特徴とする請求項9に記載の検証用データ作成方法。
  11. 前記テストプログラム生成ステップは、前記要因の発生タイミングを固定させ、前記検証対象プログラムコードの実行開始タイミングを変化させる前記要因発生プログラムコードを生成することを特徴とする請求項9に記載の検証用データ作成方法。
  12. 前記テストプログラム実行ステップは、前記テストプログラムを実行する手段を複数有する場合に、前記手段に前記テストプログラムを割り当てることで並列に実行させることを特徴とする請求項9から請求項11までのいずれかに記載の検証用データ作成方法。
  13. 前記テストプログラム生成ステップの後段に、さらに、
    前記テストプログラムに含まれる前記検証対象プログラムコードと前記要因において、前記検証対象プログラムコード内の共有リソースへアクセスするタイミングと前記要因の発生するタイミングとの関係により前記テストプログラムの実行必要性を判定し、不必要と判定された前記テストプログラムをテスト実行対象から外すタイミング有効域判定ステップ
    を備えることを特徴とする請求項9から請求項12までのいずれかに記載の検証用データ作成方法。
  14. 前記テストプログラム生成ステップの後段に、さらに、
    前記テストプログラムに含まれる前記検証対象プログラムコードと前記要因において、前記要因の発生するタイミング付近に存在する前記検証対象プログラムコード内の命令により前記テストプログラムの実行必要性を判定し、不必要と判定された前記テストプログラムをテスト実行対象から外すタイミング集約ステップ
    を備えることを特徴とする請求項9から請求項13までのいずれかに記載の検証用データ作成方法。
  15. 前記テストプログラム実行ステップの後段に、さらに、前記実行結果の内容を調査し、内容の等しいものをグループ化する実行結果集約ステップを備えることを特徴とする請求項9から請求項14までのいずれかに記載の検証用データ作成方法。
  16. 前記テストプログラム実行ステップの後段に、さらに、前記実行結果の共通部分を抽出し取り除くことによりインデックスを生成する実行結果特徴抽出ステップを備えることを特徴とする請求項9から請求項15までのいずれかに記載の検証用データ作成方法。


JP2004126350A 2004-04-22 2004-04-22 ソフトウェア検証方法および検証用データ作成方法 Pending JP2005309800A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2004126350A JP2005309800A (ja) 2004-04-22 2004-04-22 ソフトウェア検証方法および検証用データ作成方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004126350A JP2005309800A (ja) 2004-04-22 2004-04-22 ソフトウェア検証方法および検証用データ作成方法

Publications (1)

Publication Number Publication Date
JP2005309800A true JP2005309800A (ja) 2005-11-04

Family

ID=35438509

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004126350A Pending JP2005309800A (ja) 2004-04-22 2004-04-22 ソフトウェア検証方法および検証用データ作成方法

Country Status (1)

Country Link
JP (1) JP2005309800A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2014199496A1 (ja) * 2013-06-13 2014-12-18 三菱電機株式会社 プログラム検証装置及びプログラム検証方法及びプログラム
WO2017038290A1 (ja) * 2015-08-31 2017-03-09 日立オートモティブシステムズ株式会社 検証システム、検証装置、及び、車両制御装置
JP2019057118A (ja) * 2017-09-21 2019-04-11 株式会社東芝 デバッグ支援装置、デバッグ支援プログラム

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2014199496A1 (ja) * 2013-06-13 2014-12-18 三菱電機株式会社 プログラム検証装置及びプログラム検証方法及びプログラム
JP5951130B2 (ja) * 2013-06-13 2016-07-13 三菱電機株式会社 プログラム検証装置及びプログラム検証方法及びプログラム
WO2017038290A1 (ja) * 2015-08-31 2017-03-09 日立オートモティブシステムズ株式会社 検証システム、検証装置、及び、車両制御装置
JP2019057118A (ja) * 2017-09-21 2019-04-11 株式会社東芝 デバッグ支援装置、デバッグ支援プログラム

Similar Documents

Publication Publication Date Title
US9720793B2 (en) Implementing processor functional verification by generating and running constrained random irritator tests for multiple processor system and processor core with multiple threads
US9396095B2 (en) Software verification
US20080133975A1 (en) Method for Running a Computer Program on a Computer System
US10592703B1 (en) Method and system for processing verification tests for testing a design under test
US9218273B2 (en) Automatic generation of a resource reconfiguring test
US20120278660A1 (en) Method and device for testing a system comprising at least a plurality of software units that can be executed simultaneously
JP6567212B2 (ja) 等価性検証装置および等価性検証プログラム
CN107506623B (zh) 应用程序的加固方法及装置、计算设备、计算机存储介质
JP2005309800A (ja) ソフトウェア検証方法および検証用データ作成方法
JP5537140B2 (ja) 安全制御装置、及びその安全制御プログラム
US9880813B2 (en) RTE code generating method and apparatus performing the same
JP5811859B2 (ja) ソースコードの静的解析装置、システム、方法、及びそのためのプログラム
CN103473153B (zh) 用于检测微控制器中的潜在故障的方法和系统
US8554522B2 (en) Detection of design redundancy
JP2009238176A (ja) 情報処理装置およびプログラムの検証方法
JP4952317B2 (ja) 退避データ判別方法、退避データ判別プログラムおよび退避データ判別装置
CN111984624A (zh) 一种通过矫正迁移模型进行数据迁移的方法及系统
JP6949440B2 (ja) ベクタ生成装置及びベクタ生成用プログラム
JP2007257397A (ja) 競合状態検出処理追加プログラム、競合状態検出処理追加装置、競合状態検出処理追加方法
CN112380108B (zh) 一种面向分区空间隔离的全自动测试方法
CN106021089B (zh) 一种补丁接口的测试方法及装置
JP6291242B2 (ja) 情報処理装置の論理検証方法及びプログラム
JP2011034517A (ja) 等価性検証装置、そのデータ処理方法、およびプログラム
CN112445761B (zh) 一种文件校验方法、装置及存储介质
KR101136122B1 (ko) 디에스피 탑재 소프트웨어 단위시험을 위한 브레이크 포인트 분석 방법