(57)【要約】【課題】ソフトウェア品質評価におけるデータコピー処理の正確性を保証できる手段を提供する。【解決手段】システムシミュレータ１０は、ソフトウェアを実行してソフトウェアを模擬する命令セットシミュレータ１００と、命令セットシミュレータ１００が模擬するソフトウェアによってアクセスされるメモリの動作を模擬するメモリモデル２００と、ソフトウェアによるメモリモデルへのアクセスを監視し、監視したアクセス監視結果を記録し、記録したアクセス監視結果に基づいて、ソフトウェアによる処理であってコピー元となるコピー元メモリのデータを読み出してコピー先となるコピー先メモリへ書き込む処理であるデータコピー処理に、予め定義されたエラーが発生したかどうかを検出するコピー漏れ検出部２００とを備えた。【選択図】図１
2015162191.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアを実行して前記ソフトウェアを模擬するソフトウェア模擬部と、
前記ソフトウェア模擬部が模擬する前記ソフトウェアによってアクセスされるメモリの動作を模擬するメモリ模擬部と、
前記ソフトウェアによる前記メモリ模擬部へのアクセスを監視し、監視したアクセス監視結果を記録し、記録した前記アクセス監視結果に基づいて、前記ソフトウェアによる処理であってコピー元となるコピー元メモリのデータを読み出してコピー先となるコピー先メモリへ書き込む処理であるデータコピー処理に、予め定義されたエラーが発生したかどうかを検出するエラー検出部と
を備えたことを特徴とするソフトウェア試験装置。
【請求項２】
前記ソフトウェア試験装置は、
前記データコピー処理において前記コピー元メモリのアドレスと、前記コピー先メモリのアドレスとの組を含むメモリマップ情報が予め格納されたメモリマップ情報格納部を備え、
前記エラー検出部は、
前記アクセス監視結果を前記メモリマップ情報に記録し、前記アクセス監視結果が記録された前記メモリマップ情報に基づいて、前記エラーを検出することを特徴とする請求項１記載のソフトウェア試験装置。
【請求項３】
前記メモリマップ情報格納部が格納する前記メモリマップ情報は、
有効と無効との２つの状態のいずれにあるかを示す第１のフラグを含み、
前記エラー検出部は、
前記ソフトウェアによって前記メモリ模擬部へ前記コピー元メモリへのデータの書き込み指示が送信されたか監視し、前記コピー元メモリへのデータの書き込み指示の検出に基づき前記第１のフラグを有効にすると共に、前記第１のフラグの状態に基づいて、前記エラーを検出することを特徴とする請求項２記載のソフトウェア試験装置。
【請求項４】
前記メモリマップ情報格納部が格納する前記メモリマップ情報は、
有効と無効との２つの状態のいずれにあるかを示す第２のフラグを含み、
前記エラー検出部は、
前記ソフトウェアによって前記メモリ模擬部へ前記コピー先メモリへのデータの書き込み指示が送信されたかどうかを監視し、前記コピー先メモリへのデータの書き込み指示の検出に基づき前記第２のフラグの状態を有効にすると共に、前記第１のフラグと前記第２のフラグとの状態に基づいて、前記エラーを検出することを特徴とする請求項３記載のソフトウェア試験装置。
【請求項５】
前記ソフトウェア試験装置は、さらに、
前記ソフトウェアを模擬するソフトウェア模擬部から出力される実行命令アドレスに基づいて、命令網羅率を示すコードカバレッジを測定するコードカバレッジ測定部を備えたことを特徴とする請求項１〜４のいずれかに記載のソフトウェア試験装置。
【請求項６】
前記エラー検出部は、
前記コードカバレッジ測定部による前記コードカバレッジの測定結果が予め設定された閾値を超える場合に、前記アクセス監視結果に基づいて、前記予め定義されたエラーが発生したかどうかを検出することを特徴とする請求項５記載のソフトウェア試験装置。
【請求項７】
コンピュータに、
ソフトウェアを実行して前記ソフトウェアを模擬する処理、
模擬される前記ソフトウェアによってアクセスされるメモリの動作を模擬する処理、
模擬される前記ソフトウェアによるメモリアクセス処理を監視し、監視したアクセス監視結果を記録し、記録した前記アクセス監視結果に基づいて、前記ソフトウェアによる処理であってコピー元となるコピー元メモリのデータを読み出してコピー先となるコピー先メモリへ書き込む処理であるデータコピー処理に、予め定義されたエラーが発生したかどうかを検出する処理
を実行させるためのソフトウェア試験プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ソフトウェアの品質を試験するソフトウェア試験プログラムに関する。
【背景技術】
【０００２】
組込みソフトウェア試験（以下、ソフトウェアはＳ／Ｗと記す）では一般的に、コードカバレッジなどのテストカバレッジを利用することによって、Ｓ／Ｗ品質評価が行われる。例えば特許文献１では、複数のモジュールで構成されたコンピュータシステムが組み込まれた組込みシステムの保守支援装置において、クラスタのテストを行ない、その結果に対して評価指標となるテスト網羅率を示すテストカバレッジを表示する技術が提案されている。特許文献２では、新たなコードカバレッジを用いて、コード間の一致と不一致とを明確に区別することができる一致性検査方法などが提案されている。特許文献３では、デバイスＡＰＩ呼び出しカバレッジを計算することにより、テストシナリオを評価する技術が提案されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１２−０７３６９２号公報
【特許文献２】特開２００９−１６３６３６号公報
【特許文献３】特開２０１２−１０３７４５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
コードカバレッジを利用した従来のＳ／Ｗ品質評価では、多様な条件で発生するデータコピー漏れを検出できないという課題があった。特許文献１〜３はコードカバレッジを利用しているため、データコピー処理が適切に実装されていない場合においても、誤って品質に問題が無いと判断してしまう。なぜなら、コードカバレッジはソースコードにおいて、通り得る論理パスの網羅率を示す指標であり、一つ一つの命令の正誤までは判断しないからである。
【０００５】
この発明は、Ｓ／Ｗ品質評価におけるデータコピー処理の正確性を保証することを目的とする。
【課題を解決するための手段】
【０００６】
この発明のソフトウェア試験装置は、
ソフトウェアを実行して前記ソフトウェアを模擬するソフトウェア模擬部と、
前記ソフトウェア模擬部が模擬する前記ソフトウェアによってアクセスされるメモリの動作を模擬するメモリ模擬部と、
前記ソフトウェアによる前記メモリ模擬部へのアクセスを監視し、監視したアクセス監視結果を記録し、記録した前記アクセス監視結果に基づいて、前記ソフトウェアによる処理であってコピー元となるコピー元メモリのデータを読み出してコピー先となるコピー先メモリへ書き込む処理であるデータコピー処理に、予め定義されたエラーが発生したかどうかを検出するエラー検出部と
を備えたことを特徴とする。
【発明の効果】
【０００７】
この発明によれば、Ｓ／Ｗ品質評価におけるデータコピー処理の正確性を保証することができる。
【図面の簡単な説明】
【０００８】
【図１】実施の形態１の図で、システムシミュレータ１０の構成図。
【図２】実施の形態１の図で、システムシミュレータ１０を用いた際の、コピー漏れ検出手順を示すフローチャート。
【図３】実施の形態１の図で、コピー漏れ検出部２００の構成図。
【図４】図２のコピー漏れ検出Ｓ１１の内容を示す詳細フローチャート。
【図５】実施の形態１の図で、メモリマップ４００を示す図。
【図６】実施の形態１の図で、コピー漏れ検出結果５００を示す図。
【図７】実施の形態１の図で、コピー漏エラーリストを示す図。
【図８】図４のテーブル初期化Ｓ１１０の内容を示す詳細フローチャート。
【図９】図４のメモリアクセス監視Ｓ１１１の内容を示す詳細フローチャート。
【図１０】図９のＳ１１１２の内容を示す詳細フローチャート。
【図１１】図９のＳ１１１４の内容を示す詳細フローチャート。
【図１２】図９のＳ１１１６の内容を示す詳細フローチャート。
【図１３】図４のエラー検出Ｓ１１４の内容を示す詳細フローチャート。
【図１４】実施の形態２のシステムシミュレータ２０の構成図。
【図１５】実施の形態２の図で、システムシミュレータ２０を用いた際の、コピー漏れ検出手順を示すフローチャート。
【図１６】実施の形態２の図で、システムシミュレータ１０，２０のハードウェア構成の一例を示す図。
【発明を実施するための形態】
【０００９】
実施の形態１．
［システムシミュレータ１０の構成］
図１は、システムシミュレータ１０（ソフトウェア試験装置）の構成図である。図１を参照してシステムシミュレータ１０の構成を説明する。システムシミュレータ１０は、命令セットシミュレータ（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｓｉｍｕｌａｔｏｒ）１００、コピー漏れ検出部２００（エラー検出部）、メモリモデル３００（メモリ模擬部）を備える。図２でシステムシミュレータ１０の動作を後述する。
【００１０】
（命令セットシミュレータ１００）
命令セットシミュレータ１００（ソフトウェア模擬部）は、Ｓ／Ｗとテストパタンを読み込み、命令処理、メモリアクセス、及びプログラムカウンタの動作をシミュレーション（模擬）する機能を有する。
【００１１】
（コピー漏れ検出部２００）
コピー漏れ検出部２００は、Ｓ／Ｗによるメモリモデル３００へのアクセスを監視し、監視したアクセス監視結果を後述のメモリマップレコード２１１に記録し、メモリマップレコード２１１に基づいて、模擬されているＳ／Ｗによるデータコピー処理に、予め定義されたエラーが発生したかどうかを検出する。なおデータコピー処理とは、Ｓ／Ｗによる処理であり、コピー元となるＳｏｕｒｃｅメモリのデータを読み出して、コピー先となるＤｅｓｔｉｎａｔｉｏｎメモリへ書き込む処理である。具体的には、コピー漏れ検出部２００は、命令セットシミュレータ１００から出力される実行命令アドレス、メモリモデルへのＲ／Ｗ（リード・ライト）リクエスト、アドレス、データ、及びメモリマップ４００を基にコピー漏れ検出を行う。検出結果はコピー漏れ検出結果５００に出力される。図３、図４で、コピー漏れ検出部２００の内部構成及び動作を後述する。
【００１２】
（メモリモデル３００）
メモリモデル３００は、システムに実装されるメモリの動作を模擬する機能を有する。システムシミュレータ１０では、データのコピー元となるＳｏｕｒｃｅメモリと、データのコピー先となるＤｅｓｔｉｎａｔｉｏｎメモリの２種類を想定する。この２種類のメモリは同一メモリでもよいし、または独立した２枚のメモリを用いて構成される。メモリの動作を正しく模擬できるのであれば、システムシミュレータ１０に適用するためのメモリモデルの実装方法は特に制限されない。
【００１３】
（メモリマップ４００）
メモリマップ４００は、ＳｏｕｒｃｅメモリのＲ／Ｗトリガ設定、Ｓｏｕｒｃｅメモリのアドレスと、Ｄｅｓｔｉｎａｔｉｏｎメモリのアドレスのペアを定義したファイルである。
図５は、メモリマップ４００のイメージを示す。
【００１４】
（コピー漏れ検出結果５００）
コピー漏れ検出結果５００は、コピー漏れ検出部２００が検出したコピー漏れに関する詳細情報の出力である。
図６は、コピー漏れ検出結果の出力イメージを示す。
図７は、検出可能なエラーのリストを示す。
【００１５】
［システムシミュレータ１０の全体動作フローチャート］
図２は、システムシミュレータ１０を用いた際の、コピー漏れ検出手順を示すフローチャートである。図２を参照してシステムシミュレータ１０の動作を説明する。
（１）Ｓ１０では、命令セットシミュレータ１００がＳ／Ｗシミュレーションを実行する。
（２）Ｓ１１では、コピー漏れの検出を行う。コピー漏れの検出の詳細フローは、図４、図８、図９、図１０、図１１、図１２、図１３で説明する。図２のＳ１１の詳細が図４である。図４はさらに、図８、図９、図１３で詳しく説明（後述）する。図４のＳ１１０、Ｓ１１１、Ｓ１１４の詳細が、それぞれ図８、図９、図１３である。また、図９のＳ１１１２、Ｓ１１１４、Ｓ１１１６の詳細が、それぞれ図１０〜図１２である（後述）。
（３）Ｓ１２では、コピー漏れが０かどうか（コピー漏れが無いかどうか）の判断を行う。Ｓ１２が真である（コピー漏れが無い）場合、テストを終了する。Ｓ１２が偽である（コピー漏れがある）場合、Ｓ１３に分岐する。
（４）Ｓ１３では、例えば担当者が、コピー漏れ検出結果５００を評価し、コピー漏れ原因箇所を特定する。
（５）Ｓ１４では、例えば担当者が、コピー漏れ原因箇所を修正する。修正後、再びＳ１０を実行する。
（６）以上のプロセスをＳ１２において、コピー漏れが０と判断されるまで実行する。
【００１６】
［コピー漏れ検出部２００の構成］
図３は、コピー漏れ検出部２００の構成図である。図３を参照してコピー漏れ検出部２００の内部構成について説明する。コピー漏れ検出部２００は、メモリマップテーブル２１０、テーブル初期化部２２０、メモリアクセス監視部２３０、エラー検出部２４０を備える。
【００１７】
（メモリマップテーブル２１０）
メモリマップテーブル２１０は、メモリマップレコード２１１（メモリマップ情報）をＳｏｕｒｃｅメモリアドレスとＤｅｓｔｉｎａｔｉｏｎメモリアドレスの組み合わせ数分保持する。ＳｏｕｒｃｅメモリアドレスとＤｅｓｔｉｎａｔｉｏｎメモリアドレスの組み合わせは、メモリマップ４００で定義される。メモリマップレコード２１１は、Ｓｏｕｒｃｅメモリアドレス、またはＤｅｓｔｉｎａｔｉｏｎメモリアドレスをキーとして検索できるように、登録される。
なおメモリマップテーブル２１０はシステムシミュレータ１０のハードウェア構成を示す実施の形態３における磁気ディスク装置９６０（メモリマップ情報格納部の一例）あるいはＲＡＭ９５２（メモリマップ情報格納部の一例）に格納される。
【００１８】
（メモリマップレコード２１１）
メモリマップレコード２１１は、ＳｏｕｒｃｅメモリＲ／Ｗトリガ設定２１２、ＳｏｕｒｃｅメモリＰＵＳＨフラグ２１３（第１のフラグ）、ＳｏｕｒｃｅメモリＰＯＰフラグ２１４（第２のフラグ）、Ｓｏｕｒｃｅメモリアドレス２１５、Ｄｅｓｔｉｎａｔｉｏｎメモリアドレス２１６、実行命令アドレス２１７、及びメモリデータ２１８から構成される。
ＳｏｕｒｃｅメモリＲ／Ｗトリガ設定２１２、Ｓｏｕｒｃｅメモリアドレス２１５、Ｄｅｓｔｉｎａｔｉｏｎメモリアドレス２１６は、後述（テーブル初期化処理）のようにそれぞれメモリマップ４００の値が記載される。ＳｏｕｒｃｅメモリＰＵＳＨフラグ２１３、ＳｏｕｒｃｅメモリＰＯＰフラグ２１４、実行命令アドレス２１７、及びメモリデータ２１８等は、後述（Ｓ１１１４２，Ｓ１１１６３）のように、メモリアクセスの監視結果に応じて記録される。
【００１９】
（１）ＳｏｕｒｃｅメモリＲ／Ｗトリガ設定２１２は、Ｓｏｕｒｃｅメモリのリードとライトどちらの発生タイミングでデータを登録するのかを表す。
（２）ＳｏｕｒｃｅメモリＰＵＳＨフラグ２１３は、Ｓｏｕｒｃｅメモリのデータがテーブルに登録された状態かどうかを表す。
（３）ＳｏｕｒｃｅメモリＰＯＰフラグ２１４は、Ｓｏｕｒｃｅメモリのデータがテーブルから削除された状態かどうかを表す。
（４）Ｓｏｕｒｃｅメモリアドレス２１５は、Ｓｏｕｒｃｅメモリのアドレスを表す。
（５）Ｄｅｓｔｉｎａｔｉｏｎメモリアドレス２１６は、Ｄｅｓｔｉｎａｔｉｏｎメモリのアドレスを表す。
（６）実行命令アドレス２１７は、Ｓｏｕｒｃｅメモリにアクセスをおこなった命令のアドレスを表す。
（７）メモリデータ２１８は、Ｓｏｕｒｃｅメモリに書き込まれたデータ、またはＳｏｕｒｃｅメモリから読みだされたデータを表す。
【００２０】
（テーブル初期化部２２０）
テーブル初期化部２２０は、メモリアクセス監視部２３０がメモリマップテーブル２１０上をＳｏｕｒｃｅメモリアドレス、またはＤｅｓｔｉｎａｔｉｏｎメモリアドレスをキーとして検索を行えるように、メモリマップテーブル２１０を初期化する。初期化はＳ／Ｗシミュレーション開始時に実行される。テーブル初期化部２２０は、メモリマップ４００に記述されたＳｏｕｒｃｅメモリアドレスとＤｅｓｔｉｎａｔｉｏｎメモリアドレスを１セットとして、１つのレコードのＳｏｕｒｃｅメモリアドレス２１５とＤｅｓｔｉｎａｔｉｏｎメモリアドレス２１６に値を設定する。またテーブル初期化部２２０は、メモリマップ４００に記述されたＳｏｕｒｃｅメモリＲ／Ｗトリガ設定をＳｏｕｒｃｅメモリＲ／Ｗトリガ設定２１２に設定する。テーブル初期化部２２０は、ＳｏｕｒｃｅメモリＰＵＳＨフラグ２１３、ＳｏｕｒｃｅメモリＰＯＰフラグ２１４、実行命令アドレス２１７、及びメモリデータ２１８は、０に設定する。データの設定完了後、テーブル初期化部２２０は、メモリマップテーブル２１０にメモリマップレコード２１１を登録する。テーブル初期化部２２０の動作のフローチャートは、図８で後述する。
【００２１】
（メモリアクセス監視部２３０）
メモリアクセス監視部２３０は、メモリＲ／Ｗリクエストの発生をトリガとしてメモリマップテーブル２１０上を検索する。メモリアドレスをキーとしてメモリマップテーブル２１０の検索を行い、ヒットするレコードが存在すれば、データの登録・削除を行う。シミュレーションの途中でコピー漏れが発生した場合は、メモリアクセス監視部２３０は、エラー検出部２４０に通知し、コピー漏れ検出結果５００に検出結果を出力させる。メモリアクセス監視部２３０の動作は、図９、図１０、図１１、図１２の説明で後述する。
【００２２】
（エラー検出部２４０）
エラー検出部２４０は、メモリアクセス監視部２３０からのエラー通知、またはシミュレーション終了のタイミングで動作する。エラー検出部２４０は、各メモリマップレコード２１１の状態を基に、コピー漏れの原因を検出し、コピー漏れ検出結果５００に検出結果を出力する。エラー検出部２４０の動作は、図１３で後述する。
【００２３】
［コピー漏れ検出Ｓ１１の詳細動作］
図４はコピー漏れ検出Ｓ１１の詳細フローチャートである。図４を参照してコピー漏れ検出Ｓ１１の詳細動作を説明する。
（１）Ｓ１１０では、テーブル初期化部２２０がテーブルの初期化を行う。このテーブル初期化部２２０の動作詳細は図８で後述する。
（２）Ｓ１１１では、メモリアクセス監視部２３０が、ソフトウェアのメモリアクセスを監視し、アクセスがあればメモリマップテーブル２１０の検索・更新を行う。メモリアクセス監視部２３０の動作詳細は図９、図１０、図１１、図１２で後述する。
（３）Ｓ１１２では、メモリアクセス監視部２３０が、エラーが起こったかどうかを判定し、Ｓ１１１でエラーが起こったかどうかで分岐する。Ｓ１１２が真（エラーが発生）の場合、Ｓ１１４へ進む。Ｓ１１２が偽である（エラーが発生していない）場合、Ｓ１１３へ進む。
（４）Ｓ１１３では、シミュレーションが終了したかどうかで分岐する。Ｓ１１３が真である（シミュレーション終了）場合、Ｓ１１４へ進む。Ｓ１１３が偽である（シミュレーションが終了していない）場合、Ｓ１１１に戻る。
（５）Ｓ１１４では、メモリアクセス監視部２３０によるメモリアクセス監視（Ｓ１１１）でエラーが発生した場合に、エラー検出部２４０が、詳細情報をコピー漏れ検出結果５００に出力する。また、エラー検出部２４０は、シミュレーション終了後に、メモリマップテーブル２１０中の各メモリマップレコード２１１のフラグをチェックし、エラーが発生していないかどうかチェックする。この詳細は図１３で後述する。
【００２４】
［テーブル初期化Ｓ１１０の詳細動作］
図８は、テーブル初期化部２２０が実行するテーブル初期化（Ｓ１１０）の詳細フローチャートである。図を参照してテーブル初期化部２２０によるテーブル初期化Ｓ１１０の動作について説明する。図８の動作主体はテーブル初期化部２２０である。
（１）Ｓ１１００では、テーブル初期化部２２０は、メモリマップ４００からメモリマップデータを読み出す。
（２）Ｓ１１０１では、テーブル初期化部２２０は、メモリマップレコード２１１を生成し、全ての設定（２１２）、フラグ（２１３、２１４）、アドレス（２１５〜２１７）、データ（２１８）を０にクリアする。
（３）Ｓ１１０２では、テーブル初期化部２２０は、Ｓ１１００１で生成したメモリマップレコード２１１の各項目（２１２，２１５，２１６）に、Ｓ１１００で読み出したＳｏｕｒｃｅメモリＲ／Ｗトリガ設定、Ｓｏｕｒｃｅメモリアドレス、Ｄｅｓｔｉｎａｔｉｏｎメモリアドレスを設定する。
（４）Ｓ１１０３では、テーブル初期化部２２０は、Ｓ１１０１で生成したメモリマップレコード２１１をメモリマップテーブル２１０に登録する。
（５）Ｓ１１０４では、メモリマップ４００の全データを読み出したかどうかで分岐する。
Ｓ１１０４が真（読出し完了）であれば、終了する。Ｓ１１０４が偽（読出し未完了）であれば、Ｓ１１００に戻る。
【００２５】
［メモリアクセス監視Ｓ１１１の詳細動作］
図９は、メモリアクセス監視部２３０によるメモリアクセス監視Ｓ１１１の詳細フローチャートであり、動作主体はメモリアクセス監視部２３０である。図９を参照してメモリアクセス監視部２３０が行うメモリアクセス監視Ｓ１１１の詳細動作を説明する。図９におけるＳ１１１１，Ｓ１１１３、Ｓ１１１５等の判断は、メモリアクセス監視部２３０が、図３のメモリＲ／Ｗリクエスト、メモリアドレス等の入力されるデータをメモリマップテーブル２１０で参照することで判断できる。
（１）Ｓ１１１０では、メモリアクセスがあるかどうか判断する。エラー検出部２４０は図２においてメモリＲ／Ｗリクエスト等が入力されたかどうかで判断可能である。Ｓ１１１０が真（メモリアクセスあり）であれば、Ｓ１１１１へ分岐する。Ｓ１１１０が偽（メモリアクセスなし）であれば、終了する。
（２）Ｓ１１１１では、メモリアクセス監視部２３０は、Ｄｅｓｔｉｎａｔｉｏｎメモリからの読出しかどうか判断する。Ｓ１１１１が真（Ｄｅｓｔｉｎａｔｉｏｎメモリからの読出しである）であれば、Ｓ１１１２に分岐する。Ｓ１１１１が偽（Ｄｅｓｔｉｎａｔｉｏｎメモリからの読出しではない）であれば、Ｓ１１１３に分岐する。
（３）Ｓ１１１２では、メモリアクセス監視部２３０はＤｅｓｔｉｎａｔｉｏｎメモリ読出し時の処理を行う。詳細は図１０で後述する。
（４）Ｓ１１１３では、メモリアクセス監視部２３０は、Ｓｏｕｒｃｅメモリへの書込みかどうか判断する。Ｓ１１１３が真（Ｓｏｕｒｃｅメモリへの書込みである）であれば、Ｓ１１１４に分岐する。Ｓ１１１３が偽（Ｓｏｕｒｃｅメモリへの書込みではない）であれば、Ｓ１１１５に分岐する。
（５）Ｓ１１１４では、メモリアクセス監視部２３０は、Ｓｏｕｒｃｅメモリ書込み時の処理を行う。詳細動作は図１１で後述する。
（６）Ｓ１１１５では、メモリアクセス監視部２３０は、Ｄｅｓｔｉｎａｔｉｏｎメモリへの書込みかどうか判断する。Ｓ１１１５が真（Ｄｅｓｔｉｎａｔｉｏｎメモリへの書込みである）であれば、Ｓ１１１６に分岐する。Ｓ１１１５が偽（Ｄｅｓｔｉｎａｔｉｏｎメモリへの書込みではない）であれば、終了する。
（７）Ｓ１１１６では、メモリアクセス監視部２３０は、Ｄｅｓｔｉｎａｔｉｏｎメモリ書込み時の処理を行う。詳細は図１２で後述する。
【００２６】
［Ｄｅｓｔｉｎａｔｉｏｎメモリ読出し時の処理Ｓ１１１２の詳細］
図１０は、Ｄｅｓｔｉｎａｔｉｏｎメモリ読出し時の処理Ｓ１１１２の詳細フローチャートである。動作主体はメモリアクセス監視部２３０である。図１０を参照して、メモリアクセス監視部２３０による、Ｄｅｓｔｉｎａｔｉｏｎメモリ読出し時の処理Ｓ１１１２の詳細内容を説明する。
（１）Ｓ１１１２０では、メモリアクセス監視部２３０は、メモリマップテーブル２１０に、入力されたメモリアドレスに対してヒットするメモリマップレコードが存在するかどうか検索する。Ｓ１１１２０が真（該当レコードが存在する）であれば、処理はＳ１１１２１に分岐する。Ｓ１１１２０が偽（該当レコードが存在しない）であれば、処理は終了する。
（２）Ｓ１１１２１では、メモリアクセス監視部２３０は、ＳｏｕｒｃｅメモリＰＵＳＨフラグ２１３が無効かどうかで処理を分岐する。Ｓ１１１２１が真（ＳｏｕｒｃｅメモリＰＵＳＨフラグ２１３が無効）であれば、終了する。Ｓ１１１２１が偽（ＳｏｕｒｃｅメモリＰＵＳＨフラグ２１３が有効）であれば、Ｓ１１１２２に分岐する。なおＳｏｕｒｃｅメモリＰＵＳＨフラグ２１３は、図１１のＳ１１１４２で有効にされる。
（３）Ｓ１１１２２では、読出しタイミングエラーを発生する。読出しタイミングエラーは、割り込みや外部からの非同期の読出しによって、ＳｏｕｒｃｅメモリへのデータをＤｅｓｔｉｎａｔｉｏｎメモリにコピーする前に、誤ってＤｅｓｔｉｎａｔｉｏｎメモリが読み出されたことを示す。つまりＳ１１１２１でＳ１１１２１が偽（ＳｏｕｒｃｅメモリＰＵＳＨフラグ２１３が有効）とは、メモリマップテーブル２１０にＳｏｕｒｃｅメモリのデータが登録状態（図１２のＳ１１１３の処理を経ていない）にあることを示す。なお図１０〜図１３では、メモリアクセス監視部２３０は，エラー発生の場合（Ｓ１１１２２，Ｓ１１１４３、Ｓ１１１６４，Ｓ１１１６７，Ｓ１１１６８、Ｓ１１１６９、Ｓ１１１４３）、エラー検出リクエストを、エラー検出部２４０に送信する（図２、図３）が、「Ｓ１１１２２，Ｓ１１１４３、Ｓ１１１６４，Ｓ１１１６７，Ｓ１１１６８、Ｓ１１１６９、Ｓ１１１４３」の各エラーは、エラーとして検出するために、「予め定義されたエラー」である。
【００２７】
［Ｓｏｕｒｃｅメモリ書込み時の処理Ｓ１１１４の詳細］
図１１を参照して、Ｓｏｕｒｃｅメモリ書込み時の処理Ｓ１１１４の詳細を説明する。図１１は、Ｓｏｕｒｃｅメモリ書込み時の処理Ｓ１１１４の詳細フローチャートである。図１１の動作主体はメモリアクセス監視部２３０である。
（１）Ｓ１１１４０では、メモリアクセス監視部２３０は、メモリマップテーブル２１０に、入力されたメモリアドレスにヒットするレコードが存在するかどうか検索する。Ｓ１１１４０が真（該当レコードが存在する）であれば、Ｓ１１１４１に分岐する。Ｓ１１１４０が偽（該当レコードが存在しない）であれば、終了する。
（２）Ｓ１１１４１では、メモリアクセス監視部２３０は、ＳｏｕｒｃｅメモリＰＵＳＨフラグ２１３が無効かどうかで分岐する。Ｓ１１１４１が真（ＳｏｕｒｃｅメモリＰＵＳＨフラグ２１３が無効）であれば、Ｓ１１１４２に分岐する。Ｓ１１１４１が偽（ＳｏｕｒｃｅメモリＰＵＳＨフラグ２１３が有効）であれば、Ｓ１１１４３に分岐する。
（３）Ｓ１１１４２では、メモリアクセス監視部２３０は、入力されたＳｏｕｒｃｅメモリデータ、入力された実行命令アドレスを登録し、ＳｏｕｒｃｅメモリＰＵＳＨフラグ２１３を有効にする。
（４）Ｓ１１１４３では、メモリアクセス監視部２３０は、コピー漏れエラーを出力する。コピー漏れエラーは、Ｓｏｕｒｃｅメモリの有効データをＤｅｓｔｉｎａｔｉｏｎメモリにコピーする前に、Ｓｏｕｒｃｅメモリへの書込みを行ったことを示す。
【００２８】
［Ｄｅｓｔｉｎａｔｉｏｎメモリ書込み時の処理Ｓ１１１６の詳細］
図１２は、Ｄｅｓｔｉｎａｔｉｏｎメモリ書込み時の処理Ｓ１１１６の詳細フローチャートである。動作主体はメモリアクセス監視部２３０である。図１２を参照してＤｅｓｔｉｎａｔｉｏｎメモリ書込み時の処理Ｓ１１１６の動作について説明する。
（１）Ｓ１１１６０では、メモリアクセス監視部２３０は、メモリマップテーブル２１０に入力されたメモリアドレスにヒットするレコードが存在するかどうか検索する。Ｓ１１１６０が真（該当レコードが存在する）であれば、Ｓ１１１６１に分岐する。Ｓ１１１６０が偽（該当レコードが存在しない）であれば、終了する。
（２）Ｓ１１１６１では、メモリアクセス監視部２３０はＳｏｕｒｃｅメモリＰＵＳＨフラグ２１３が有効かどうかで処理を分岐する。Ｓ１１１６１が真（ＳｏｕｒｃｅメモリＰＵＳＨフラグ２１３が有効）であれば、Ｓ１１１６２に分岐する。Ｓ１１１６１が偽（ＳｏｕｒｃｅメモリＰＵＳＨフラグ２１３が無効）であれば、Ｓ１１１６５に分岐する。
（３）Ｓ１１１６２では、メモリアクセス監視部２３０は、メモリマップレコードのＤｅｓｔｉｎａｔｉｏｎメモリデータと、入力されたＳｏｕｒｃｅメモリデータとが一致するかどうかで分岐する。Ｓ１１１６２が真（ＤｅｓｔｉｎａｔｉｏｎメモリデータとＳｏｕｒｃｅメモリデータ２１８が一致する）であれば、Ｓ１１１６３に分岐する。Ｓ１１１６２が偽（ＤｅｓｔｉｎａｔｉｏｎメモリデータとＳｏｕｒｃｅメモリデータ２１８が一致しない）であれば、Ｓ１１１６４に分岐する。
（４）Ｓ１１１６３では、メモリアクセス監視部２３０はＳｏｕｒｃｅメモリＰＵＳＨフラグ２１３を無効、ＳｏｕｒｃｅメモリＰＯＰフラグ２１４を有効にする。Ｓ１１１６３ではエラーは発生しないが、これは、メモリマップレコード２１１が存在し、ＳｏｕｒｃｅメモリデータＰＵＳＨフラグが有効（Ｓｏｕｒｃｅメモリにはデータが格納済み）であり、Ｄｅｓｔｉｎａｔｉｏｎメモリデータ（図３左側の、入力されたデータ）とＳｏｕｒｃｅメモリデータ（メモリマップレコード２１１のＤｅｓｔｉｎａｔｉｏｎメモリアドレス２１６の値）とが同一のためである。
（５）Ｓ１１１６４では、メモリアクセス監視部２３０は、Ｄｅｓｔｉｎａｔｉｏｎメモリデータエラーを出力する。Ｄｅｓｔｉｎａｔｉｏｎメモリデータエラーは、Ｄｅｓｔｉｎａｔｉｏｎメモリへの書込みにおいて、コピー元のＳｏｕｒｃｅメモリデータと異なるデータの書込みが行われたことを示す。
（６）Ｓ１１１６５では、メモリアクセス監視部２３０はＳｏｕｒｃｅメモリＰＯＰフラグ２１４が有効かどうかで処理を分岐する。Ｓ１１１６５が真（ＳｏｕｒｃｅメモリＰＯＰフラグ２１４が有効）であれば、Ｓ１１１６６に分岐する。Ｓ１１１６５が偽（ＳｏｕｒｃｅメモリＰＯＰフラグ２１４が無効）であれば、Ｓ１１１６９に分岐する。
（７）Ｓ１１１６６では、メモリアクセス監視部２３０は、ＤｅｓｔｉｎａｔｉｏｎメモリデータとＳｏｕｒｃｅメモリデータ２１８が一致するかどうかで処理を分岐する。Ｓ１１１６６が真（ＤｅｓｔｉｎａｔｉｏｎメモリデータとＳｏｕｒｃｅメモリデータ２１８が一致する）であれば、Ｓ１１１６７に分岐する。Ｓ１１１６６が偽（ＤｅｓｔｉｎａｔｉｏｎメモリデータとＳｏｕｒｃｅメモリデータ２１８が一致しない）であれば、Ｓ１１１６８に分岐する。
（８）Ｓ１１１６７では、メモリアクセス監視部２３０は、Ｄｅｓｔｉｎａｔｉｏｎメモリ多重書込みエラーを出力する。Ｄｅｓｔｉｎａｔｉｏｎメモリ多重書込みエラーは、Ｄｅｓｔｉｎａｔｉｏｎメモリへの書き込みにおいて、既にコピーされているＤｅｓｔｉｎａｔｉｏｎメモリアドレスへ、再度書込みをおこなったことを示す。
（９）Ｓ１１１６８では、メモリアクセス監視部２３０は、コピー順序エラーを出力する。コピー順序エラーはＳｏｕｒｃｅメモリにデータが格納される前に、Ｄｅｓｔｉｎａｔｉｏｎメモリに書込みをおこなったことを示す。
（１０）Ｓ１１１６９では、メモリアクセス監視部２３０は、コピー順序エラーを出力する。コピー順序エラーはＳｏｕｒｃｅメモリにデータが格納される前に、Ｄｅｓｔｉｎａｔｉｏｎメモリに書込みをおこなったことを示す。
【００２９】
［エラー検出Ｓ１１４の詳細］
図１３は、エラー検出部２４０が行う、エラー検出Ｓ１１４の詳細フローチャートである。図１３の動作主体はエラー検出部２４０である。図１３を参照してエラー検出Ｓ１１４の動作について説明する。
（１）Ｓ１１４０では、エラー検出部２４０は、メモリアクセス監視でエラーが発生したかどうかで分岐する。上記のように（図３、図４）、メモリアクセス監視部２３０はエラーを検出すると、エラー検出部２４０にエラー出力として、エラー検出リクエストを送信する。Ｓ１１４０が真であれば、Ｓ１１４１に分岐する。Ｓ１１４０が偽であれば、Ｓ１１４２に分岐する。
（２）Ｓ１１４１では、エラー検出部２４０は、コピー漏れ検出結果５００にエラーの詳細を出力する。
（３）Ｓ１１４２では、エラー検出部２４０は、メモリマップテーブル２１０からメモリマップレコード２１１の取得を行う（図２）。
（４）Ｓ１１４３では、エラー検出部２４０はＳｏｕｒｃｅメモリＰＵＳＨフラグ２１３が有効かどうか判断する。Ｓ１１４３が真であれば、Ｓ１１４４に分岐する。Ｓ１１４３が偽であれば、Ｓ１１４５に進む。
（５）Ｓ１１４４では、エラー検出部２４０はコピー未実行エラーを出力する。コピー未実行エラーはコピー記述漏れ、コピー記述のアドレス指定ミス等の理由により、正常なコピーが行われなかったことを表す。
（６）Ｓ１１４５でエラー検出部２４０はコピー漏れ検出結果５００にエラーの詳細を出力する。
（７）Ｓ１１４６ではメモリマップテーブル２１０に含まれる全レコードのチェックが完了したかどうかで分岐する。Ｓ１１４６が真であれば、終了する。Ｓ１１４６が偽であれば、Ｓ１１４２に戻る。
【００３０】
以上のように、システムシミュレータ１０はコピー漏れ検出部２００を備えたので、さまざまな要因、及びタイミングで発生するコピー漏れを検出することが可能となる。またシステムシミュレータ１０によれば、多様な条件で発生するデータコピー漏れが検出可能となり、Ｓ／Ｗ品質評価におけるデータコピー処理の正確性を保証する手段を提供できる。
【００３１】
実施の形態２．
図１４、図１５を参照して実施の形態２のシステムシミュレータ２０を説明する。実施の形態１のシステムシミュレータ１０はコピー漏れ検出部２００を備えるが、実施の形態２のシステムシミュレータ２０は、コピー漏れ検出部２００に加え、コードカバレッジ測定部６００を備える。以下の説明では、実施の形態１と異なる部分についてのみ説明する。
【００３２】
図１４は、システムシミュレータ２０の構成図である。図１４を参照してシステムシミュレータ２０の全体構成について説明する。システムシミュレータ２０は、システムシミュレータ１０に対して、さらにコードカバレッジ測定部６００を備える。命令セットシミュレータ１００、コピー漏れ検出部２００、メモリモデル３００、メモリマップ４００、コピー漏れ検出結果５００等は実施の形態１と同様である。
【００３３】
（コードカバレッジ測定部６００）
コードカバレッジ測定部６００は、命令セットシミュレータ１００から出力される実行命令アドレスを基に、命令網羅率を測定する機能を有数する。コードカバレッジ測定部６００による測定結果は、コードカバレッジ測定結果７００に出力される。コードカバレッジを正しく測定できるのであれば、本システムに適用するためのコードカバレッジ測定部６００の実装方法は特に制限されない。コードカバレッジ測定結果７００は、コードカバレッジ測定部６００が計測したコードカバレッジに関する詳細情報の出力である。
【００３４】
図１５は、システムシミュレータ２０の全体動作を示すフローチャートである。図１５を参照してシステムシミュレータ２０の動作について説明する。コードカバレッジ測定、コピー漏れ検出の２フェーズで構成されている。
【００３５】
＜フェーズ１＞
（１）Ｓ２０で命令セットシミュレータ１００がＳ／Ｗシミュレーションを実行する。
（２）Ｓ２１で、コードカバレッジ測定部６００がコードカバレッジの測定を行う。
（３）Ｓ２２で、コードカバレッジ測定部６００は、コードカバレッジが１００％（閾値の一例）かどうかの判断を行う。Ｓ２２が真である（カバレッジが１００％である）場合、Ｓ２５に進む。なおコードカバレッジが１００％は一例であり、９０％以上でもよいし８０％以上でも構わない。閾値としてのコードカバレッジの値は自由に設定すればよい。Ｓ２２が偽である（カバレッジが１００％ではない）場合、Ｓ２３に分岐する。
（３）Ｓ２３で例えば担当者が、コードカバレッジ測定結果７００を評価する。Ｓ２４で、例えば担当者が、該当箇所を修正する。修正後、再びＳ２０を実行する。以上のプロセスをＳ２２において、カバレッジが１００％と判断されるまで実行する。カバレッジが１００％と判断されれば、処理は、フェーズ２に進む。
【００３６】
＜フェーズ２＞
フェーズ２は実施の形態１の図２と同様である。
（１）Ｓ２５で命令セットシミュレータ１００がＳ／Ｗシミュレーションを実行する。
（２）Ｓ２６でコピー漏れの検出を行う。
（３）Ｓ２７でコピー漏れが０かどうか（コピー漏れが無いかどうか）の判断を行う。Ｓ２７が真である（コピー漏れなし）場合、終了する。Ｓ２７が偽である（コピー漏れがある）場合、Ｓ２８に分岐する。
（４）Ｓ２８で例えば担当者がコピー漏れ検出結果５００を評価し、コピー漏れ原因箇所を特定する。
（５）Ｓ２９で、例えば担当者がコピー漏れ原因箇所を修正する。修正後、再びＳ２５を実行する。
（６）以上のプロセスをＳ２７において、コピー漏れが０と判断されるまで実行する。
【００３７】
実施の形態２のシステムシミュレータ２０は、コピー漏れ検出部とコードカバレッジ計測部とを備えたので、以下のような２つのフェーズの検証が可能となり、Ｓ／Ｗ品質を保証することができる。
＜フェーズ１＞
コードカバレッジ計測の結果が１００％になるまで、テストパタンの修正を行う。本フェーズでテストパタンの妥当性を保証することができる。
＜フェーズ２＞
コピー漏れが０になるまで、ソースコードのコピー漏れ原因箇所の修正を行う。本フェーズでコピー処理の正確性を保証することができる。
【００３８】
実施の形態３．
図１６は、システムシミュレータ１０、２０のハードウェア構成の一例を示す図である。図１６を参照して実施の形態４を説明する。実施の形態４は、コンピュータであるシステムシミュレータ１０、２０のハードウェア構成を説明する。システムシミュレータ１０、２０のハードウェア構成は同様であるので、システムシミュレータ１０について説明する。
【００３９】
ハードウェア資源を示す図１６において、コンピュータであるシステムシミュレータ１０は、プログラムを実行するＣＰＵ９５０（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を備えている。ＣＰＵ９５０は、バス９５８を介してＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）９５１、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）９５２、表示装置９５３、キーボード９５４、マウス９５５、通信ボード９５６、ＣＤＤ９５７、磁気ディスク装置９６０と接続され、これらのハードウェアデバイスを制御する。磁気ディスク装置９６０の代わりに、光ディスク装置、フラッシュメモリなどの記憶装置でもよい。
【００４０】
ＲＡＭ９５２は、揮発性メモリの一例である。ＲＯＭ９５１、ＣＤＤ９５７、磁気ディスク装置９６０等の記録媒体は、不揮発性メモリの一例である。これらは、記憶装置あるいは記憶部、格納部、バッファの一例である。通信ボード９５６、キーボード９５４などは、入力部、入力装置の一例である。また、通信ボード９５６、表示装置９５３などは、出力部、出力装置の一例である。通信ボード９５６は、ネットワークに接続されている。
【００４１】
磁気ディスク装置９６０には、オペレーティングシステム９６１（ＯＳ）、プログラム群９６２、ファイル群９６３が記憶されている。プログラム群９６２のプログラムは、ＣＰＵ９５０、オペレーティングシステム９６１により実行される。
【００４２】
上記プログラム群９６２には、以上の実施の形態の説明において「〜部」として説明した機能を実行するプログラムが記憶されている。プログラムは、ＣＰＵ９５０により読み出され実行される。
【００４３】
ファイル群９６３には、以上の実施の形態の説明において、「〜の判定結果」、「〜の算出結果」、「〜の抽出結果」、「〜の生成結果」、「〜の処理結果」として説明した情報や、データや信号値や変数値やパラメータなどが、「〜ファイル」や「〜データベース」の各項目として記憶されている。「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。また、ディスクやメモリなどの記録媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ９５０によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示などのＣＰＵの動作に用いられる。抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示などのＣＰＵの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
【００４４】
また、以上に述べた実施の形態の説明において、データや信号値は、ＲＡＭ９５２のメモリ、ＣＤＤ９５７のコンパクトディスク、磁気ディスク装置９６０の磁気ディスク、その他光ディスク、ミニディスク、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等の記録媒体に記録される。また、データや信号は、バス９５８や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
【００４５】
また、以上の実施の形態の説明において、「〜部」、「命令セットシミュレータ」及び「メモリモデル」として説明したものは、「〜手段」、であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」として説明したものは、ソフトウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、ＤＶＤ等の記録媒体に記憶される。プログラムはＣＰＵ９５０により読み出され、ＣＰＵ９５０により実行される。すなわち、プログラムは、以上に述べた「〜部」としてコンピュータを機能させるものである。あるいは、以上に述べた「〜部」の手順や方法をコンピュータに実行させるものである。
【００４６】
以上の実施の形態では、システムシミュレータ１０を説明したが、この動作は、プログラムとしても把握できることは以上の説明から当然である。また、システムシミュレータ１０の各「〜部」の動作は方法としても把握できることは以上の説明により明らかである。
【符号の説明】
【００４７】
１０，２０  システムシミュレータ、１００  命令セットシミュレータ、２００  コピー漏れ検出部、２１０  メモリマップテーブル、２１１  メモリマップレコード、２１２  ＳｏｕｒｃｅメモリＲ／Ｗトリガ設定、２１３  ＳｏｕｒｃｅメモリＰＵＳＨフラグ、２１４  ＳｏｕｒｃｅメモリＰＯＰフラグ、２１５  Ｓｏｕｒｃｅメモリアドレス、２１６  Ｄｅｓｔｉｎａｔｉｏｎメモリアドレス、２１７  実行命令アドレス、２１８  メモリデータ、２２０  テーブル初期化部、２３０  メモリアクセス監視部、２４０  エラー検出部、３００  メモリモデル、４００  メモリマップ、５００  コピー漏れ検出結果、６００  コードカバレッジ測定部、７００  コードカバレッジ測定結果。
【図１】
2015162191.tif 000003
【図２】
2015162191.tif 000004
【図３】
2015162191.tif 000005
【図４】
2015162191.tif 000006
【図５】
2015162191.tif 000007
【図６】
2015162191.tif 000008
【図７】
2015162191.tif 000009
【図８】
2015162191.tif 000010
【図９】
2015162191.tif 000011
【図１０】
2015162191.tif 000012
【図１１】
2015162191.tif 000013
【図１２】
2015162191.tif 000014
【図１３】
2015162191.tif 000015
【図１４】
2015162191.tif 000016
【図１５】
2015162191.tif 000017
【図１６】
2015162191.tif 000018