(57)【要約】【課題】仕様変更時における仕様と実装との整合性確認の効率化を図ること。【解決手段】検証支援装置１００は、検証対象の仕様変更後の機能に関する実装記述Ｈに基づく制御フローグラフ１１０と検証対象の仕様変更後の仕様記述Ｓ２とを関連付けて、実装記述Ｈおよび仕様記述Ｓ２に関連付けられた制御フローグラフ１２０と、制御フローグラフ１２０に関連付けられた仕様記述Ｓ２とを作成する。また、仕様変更前後の仕様記述Ｓ１，Ｓ２から、検証対象の仕様変更により影響を受ける仕様記述Ｓ２内の影響範囲記述１３０を特定する。そして、これら実装記述Ｈと制御フローグラフ１２０と影響範囲記述１３０とを用いて、それぞれのデータ間の双方向リンクを辿ることにより、検証対象の仕様変更により変更すべき実装記述Ｈ内の記述箇所を検索する。【選択図】図１
2010055293.tif 000002
【特許請求の範囲】
【請求項１】
検証対象の仕様と実装との整合性確認をコンピュータに支援させる検証支援プログラムであって、
前記コンピュータを、
前記検証対象の機能を実現するために実行される一連の要素群および前記機能を実現するために満たすべき前記要素の制約条件が記述された仕様記述と、前記検証対象の機能に関する実装記述とを取得する取得手段、
前記取得手段によって取得された実装記述に基づいて、前記一連の要素群および当該要素の制約条件をノードとしてグラフ化された構造体を作成する作成手段、
前記作成手段によって作成された構造体内のノードと、当該ノードがあらわす要素または制約条件に関する前記実装記述内の記述箇所とを関連付ける第１の関連付け手段、
前記仕様記述内の要素または制約条件に関する記述を用いて、前記構造体の中から前記要素または前記制約条件をあらわすノードを検出することにより、前記構造体内のノードと、当該ノードがあらわす要素または制約条件に関する前記仕様記述内の記述箇所とを関連付ける第２の関連付け手段、
前記第１および第２の関連付け手段によって関連付けられた関連付け結果を出力する出力手段、
として機能させることを特徴とする検証支援プログラム。
【請求項２】
前記コンピュータを、
前記仕様記述の中から前記検証対象の仕様変更により影響を受ける記述箇所を抽出する抽出手段、
前記第２の関連付け手段によって関連付けられた関連付け結果に基づいて、前記構造体の中から前記抽出手段によって抽出された記述箇所と関連付けられたノードを検索する第１の検索手段、
前記第１の関連付け手段によって関連付けられた関連付け結果に基づいて、前記実装記述の中から前記第１の検索手段によって検索されたノードと関連付けられた記述箇所を検索する第２の検索手段として機能させ、
前記出力手段は、
前記第２の検索手段によって検索された検索結果を出力することを特徴とする請求項１に記載の検証支援プログラム。
【請求項３】
前記コンピュータを、
前記検証対象の仕様変更前および仕様変更後の仕様記述を用いて、前記検証対象の仕様変更にともなう前記仕様変更後の仕様記述内の変更箇所を特定する特定手段、
前記特定手段によって特定された変更箇所の中から任意の要素を選択する選択手段、
前記仕様変更後の仕様記述の中から前記選択手段によって選択された要素の制約条件を探索する探索手段、
前記探索手段によって探索された制約条件に関する記述箇所を前記検証対象の仕様変更により影響を受ける記述箇所に決定する決定手段として機能させ、
前記抽出手段は、
前記仕様変更後の仕様記述の中から、前記変更箇所と前記決定手段によって決定された記述箇所とを抽出することを特徴とする請求項２に記載の検証支援プログラム。
【請求項４】
前記探索手段は、
前記仕様変更後の仕様記述に基づく要素間の遷移関係に基づいて、前記選択手段によって選択された要素を起点として遷移元となる要素を順次辿ることにより、前記仕様変更後の仕様記述の中から前記仕様変更により影響を受ける要素を探索し、
前記決定手段は、
前記探索手段によって探索された要素に関する記述箇所と、当該要素の制約条件に関する記述箇所とを前記検証対象の仕様変更により影響を受ける記述箇所に決定することを特徴とする請求項３に記載の検証支援プログラム。
【請求項５】
前記選択手段は、
前記仕様変更後の仕様記述の中から任意の制約条件を選択し、
前記探索手段は、
前記仕様変更後の仕様記述の中から前記選択手段によって選択された制約条件が定義された要素を探索し、
前記決定手段は、
前記探索手段によって探索された要素に関する記述箇所を前記検証対象の仕様変更により影響を受ける記述箇所に決定することを特徴とする請求項３または４に記載の検証支援プログラム。
【請求項６】
検証対象の仕様と実装との整合性確認を支援する検証支援装置であって、
前記検証対象の機能を実現するために実行される一連の要素群および前記機能を実現するために満たすべき前記要素の制約条件が記述された仕様記述と、前記検証対象の機能に関する実装記述とを取得する取得手段と、
前記取得手段によって取得された実装記述に基づいて、前記一連の要素群および当該要素の制約条件をノードとしてグラフ化された構造体を作成する作成手段と、
前記作成手段によって作成された構造体内のノードと、当該ノードがあらわす要素または制約条件に関する前記実装記述内の記述箇所とを関連付ける第１の関連付け手段と、
前記仕様記述内の要素または制約条件に関する記述を用いて、前記構造体の中から前記要素または前記制約条件をあらわすノードを検出することにより、前記構造体内のノードと、当該ノードがあらわす要素または制約条件に関する前記仕様記述内の記述箇所とを関連付ける第２の関連付け手段と、
前記第１および第２の関連付け手段によって関連付けられた関連付け結果を出力する出力手段と、
を備えることを特徴とする検証支援装置。
【請求項７】
制御手段および記憶手段を備え、検証対象の仕様と実装との整合性確認を支援するコンピュータが、
前記制御手段により、前記検証対象の機能を実現するために実行される一連の要素群および前記機能を実現するために満たすべき前記要素の制約条件が記述された仕様記述と、前記検証対象の機能に関する実装記述とを取得する取得工程と、
前記制御手段により、前記取得工程によって取得された実装記述に基づいて、前記一連の要素群および当該要素の制約条件をノードとしてグラフ化された構造体を作成する作成工程と、
前記制御手段により、前記作成工程によって作成された構造体内のノードと、当該ノードがあらわす要素または制約条件に関する前記実装記述内の記述箇所とを関連付ける第１の関連付け工程と、
前記制御手段により、前記仕様記述内の要素または制約条件に関する記述を用いて、前記構造体の中から前記要素または前記制約条件をあらわすノードを検出することにより、前記構造体内のノードと、当該ノードがあらわす要素または制約条件に関する前記仕様記述内の記述箇所とを関連付ける第２の関連付け工程と、
前記制御手段により、前記第１および第２の関連付け工程によって関連付けられた関連付け結果を出力する出力工程と、
を実行することを特徴とする検証支援方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、検証対象のアサーションベース検証に関し、特に、検証対象の仕様変更後のアサーションの整合性確認を支援する技術に関する。
【背景技術】
【０００２】
近年、ソフトウェアやハードウェアのシステム開発においては、設計技術の進歩によりシステムが大規模化、複雑化している。一方で、システムの大規模化、複雑化により、開発工程全体における検証工程の占める割合が増加する傾向にある。この検証工程では、システムの機能が仕様通りに動作するか否かの検証がおこなわれる。
【０００３】
システムの機能を検証するためには、仕様書に記載されているシステムの機能を網羅的に検証する必要がある。このため、仕様書からシステムの機能を検証するために意味のある一連の操作としてシナリオを抽出する必要がある。従来においては、自然言語で記述された仕様書の記述内容をコンピュータで処理可能な言語に変換し、シナリオを系統的に生成する技術がある。
【０００４】
また、アサーションを用いて、システムの機能を検証するアサーションベース検証がある。アサーションとは、システムの機能が正しく動作するために守るべき制約条件であり、設計意図としての動作を検証するために実装中に記述される文である。このアサーションは、アサーション記述言語を用いて、自然言語で記述された仕様書を翻訳する形で人手により作成される。ところが、近年のシステムの大規模化により、必要となるアサーションの数が膨大なものとなっており、作業者にかかる作業負担が増大している。そこで、従来において、アサーション記述言語に応じて仕様書からアサーションを自動生成する技術がある。
【０００５】
【特許文献１】特開２００７−２５７２９１号公報
【特許文献２】特開２００７−１１４６７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述した従来技術では、システムの仕様とアサーションとの関係が確保されていないため、システムの仕様が変更されると、その都度、実装中に散らばっている膨大な数のアサーションを人手により一つ一つチェックして変更する必要がある。ところが、この作業は、アサーション記述言語や、システムの特性や機能を十分理解した上で、動作を明確に記述し、動作が生じる条件を詳細に示す必要があり、作業者にかかる負担が大きい。
【０００７】
したがって、実装中に散らばっているアサーションを一つ一つチェックして変更するには、膨大な作業工数を要することとなり、検証作業にかかる作業時間および作業負担が増大するという問題があった。さらには、人手による作業のためチェック漏れや変更漏れが発生する可能性が高く、検証品質の低下を招くという問題があった。
【０００８】
特に、最初にアサーションを作成した技術者と、仕様変更後にアサーションを変更する技術者とが異なる場合には、実装中に散らばっているアサーションが、どの動作に紐付けられたアサーションなのかを特定することは非常に難しく、検証作業にかかる作業時間および作業負担がさらに増大するという問題がある。
【０００９】
上述した従来技術による問題点を解消するため、検証対象の仕様変更にともなって変更すべき実装記述内のアサーションを効率的かつ網羅的に特定可能とすることにより、仕様変更時における実装と仕様との整合性確認の効率化を図ることを目的とする。
【課題を解決するための手段】
【００１０】
上述した課題を解決し、目的を達成するため、この開示技術は、検証対象の機能を実現するために実行される一連の要素群および前記機能を実現するために満たすべき前記要素の制約条件が記述された仕様記述と、前記検証対象の機能に関する実装記述とを取得し、取得された実装記述に基づいて、前記一連の要素群および当該要素の制約条件をノードとしてグラフ化された構造体を作成し、作成された構造体内のノードと、当該ノードがあらわす要素または制約条件に関する前記実装記述内の記述箇所とを関連付け、前記仕様記述内の要素または制約条件に関する記述を用いて、前記構造体の中から前記要素または前記制約条件をあらわすノードを検出することにより、前記構造体内のノードと、当該ノードがあらわす要素または制約条件に関する前記仕様記述内の記述箇所とを関連付け、関連付けられた関連付け結果を出力することを要件とする。
【００１１】
この開示技術によれば、検証対象の仕様変更後の機能に関する実装記述に基づく構造体を介して、仕様変更後の仕様記述内の要素および制約条件に関する記述箇所と、実装記述内の要素および制約条件に関する記述箇所とを関連付けることができる。
【発明の効果】
【００１２】
この検証支援プログラム、検証支援装置、および検証支援方法によれば、検証対象の仕様変更にともなって変更すべき実装記述内のアサーションを効率的かつ網羅的に特定可能とすることにより、仕様変更時における実装と仕様との整合性確認の効率化を図ることができるという効果を奏する。
【発明を実施するための最良の形態】
【００１３】
以下に添付図面を参照して、この検証支援プログラム、検証支援装置、および検証支援方法の好適な実施の形態を詳細に説明する。この検証支援プログラム、検証支援装置、および検証支援方法では、検証対象の実装記述に基づく制御フローグラフを介して、実装記述と仕様記述とを関連付けることにより、仕様変更にともなって変更すべき実装記述内のアサーション記述を効率的かつ網羅的に検索する手法を提案する。
【００１４】
（本実施の形態の概要）
まず、本実施の形態の概要について説明する。本実施の形態では、検証対象となる半導体集積回路（たとえば、ＬＳＩ：Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）の仕様変更にともなう仕様と実装との整合性確認を支援する手法を提案する。特に、機能検証に利用されるアサーションに着目し、仕様変更にともなって変更すべき実装記述内のアサーション記述を効率的かつ網羅的に特定する手法を提案する。
【００１５】
図１は、本実施の形態の概要を示す説明図である。以下、本実施の形態にかかる検証支援装置１００において実行される検証支援処理の流れを説明する。図１において、まず、検証支援装置１００は、入力データとして与えられた検証対象の仕様変更後の機能に関する実装記述Ｈに基づいて、検証対象の実装時における制御の流れをあらわす制御フローグラフを作成する。この結果、実装記述Ｈと関連付けられた制御フローグラフ１１０（詳細は、後述の図７参照）が作成される。
【００１６】
つぎに、入力データとして与えられた検証対象の仕様変更後の仕様記述Ｓ２と、制御フローグラフ１１０とを関連付ける。この結果、実装記述Ｈおよび仕様記述Ｓ２に関連付けられた制御フローグラフ１２０と、制御フローグラフ１２０と関連付けられた仕様記述Ｓ２とが作成される。
【００１７】
このあと、仕様変更前の仕様記述Ｓ１と仕様変更後の仕様記述Ｓ２（制御フローグラフ１２０と関連付けられた仕様記述Ｓ２）との差分を求めることにより、仕様記述Ｓ２の中から検証対象の仕様変更により影響を受ける記述箇所を抽出する。この結果、仕様変更により影響を受ける記述箇所の集合である影響範囲記述１３０が作成される。
【００１８】
そして、これら仕様変更後の実装記述Ｈと影響範囲記述１３０と制御フローグラフ１２０とを用いて、それぞれのデータ間の双方向リンクを辿ることにより、検証対象の仕様変更により変更すべき実装記述Ｈ内の記述箇所を検索し、最後に、その検索結果をレポート情報１４０として出力する。
【００１９】
検証者は、レポート情報１４０を確認することで、検証対象の仕様変更により変更すべき実装記述Ｈ内の記述箇所を把握することができる。特に、実装記述Ｈ内に散らばっている膨大な数（たとえば、数千〜数十万）のアサーション記述の中から、仕様変更にともなって変更すべきアサーション記述を網羅的に把握することができる。
【００２０】
（検証支援装置のハードウェア構成）
つぎに、実施の形態にかかる検証支援装置１００のハードウェア構成について説明する。図２は、検証支援装置のハードウェア構成を示すブロック図である。図２において、検証支援装置１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０３と、磁気ディスクドライブ２０４と、磁気ディスク２０５と、光ディスクドライブ２０６と、光ディスク２０７と、ディスプレイ２０８と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）２０９と、キーボード２１０と、マウス２１１と、スキャナ２１２と、プリンタ２１３と、を備えている。また、各構成部はバス２００によってそれぞれ接続されている。
【００２１】
ここで、ＣＰＵ２０１は、検証支援装置１００の全体の制御を司る。ＲＯＭ２０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ２０３は、ＣＰＵ２０１のワークエリアとして使用される。磁気ディスクドライブ２０４は、ＣＰＵ２０１の制御にしたがって磁気ディスク２０５に対するデータのリード／ライトを制御する。磁気ディスク２０５は、磁気ディスクドライブ２０４の制御で書き込まれたデータを記憶する。
【００２２】
光ディスクドライブ２０６は、ＣＰＵ２０１の制御にしたがって光ディスク２０７に対するデータのリード／ライトを制御する。光ディスク２０７は、光ディスクドライブ２０６の制御で書き込まれたデータを記憶したり、光ディスク２０７に記憶されたデータをコンピュータに読み取らせたりする。
【００２３】
ディスプレイ２０８は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ２０８は、たとえば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００２４】
インターフェース（以下、「Ｉ／Ｆ」と略する。）２０９は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク２１４に接続され、このネットワーク２１４を介して他の装置に接続される。そして、Ｉ／Ｆ２０９は、ネットワーク２１４と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ２０９には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００２５】
キーボード２１０は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス２１１は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【００２６】
スキャナ２１２は、画像を光学的に読み取り、検証支援装置１００内に画像データを取り込む。なお、スキャナ２１２は、ＯＣＲ（Ｏｐｔｉｃａｌ  Ｃｈａｒａｃｔｅｒ  Ｒｅａｄｅｒ）機能を持たせてもよい。また、プリンタ２１３は、画像データや文書データを印刷する。プリンタ２１３には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
【００２７】
（仕様記述のデータ構造）
つぎに、検証対象の仕様記述（たとえば、図１に示した仕様記述Ｓ１，Ｓ２）のデータ構造について説明する。図３は、仕様記述のデータ構造をモデル化して示す説明図である。図３に示すように、仕様モデル３００は、検証対象に関する機能群とシナリオ群と操作群とからなる階層構造を有している。
【００２８】
具体的には、仕様モデル３００は、機能Ｆ１〜ＦＸから構成されている。また、機能Ｆｉ（ｉ＝１，２，…，Ｘ）は、シナリオＳ１〜ＳＹから構成されている。また、シナリオＳｊ（ｊ＝１，２，…，Ｙ）は、操作Ｏｐ１〜ＯｐＺから構成されている。シナリオＳｊおよび操作Ｏｐｋには、事前条件、事後条件が定義されている。なお、機能、シナリオ、操作、事前条件および事後条件に関する詳細な説明は後述する。
【００２９】
（仕様記述の記述内容）
ここで、図１に示した仕様変更後の仕様記述Ｓ２を例に挙げて、仕様記述の具体例について説明する。図４は、仕様記述の具体例を示す説明図（その１）である。図４において、仕様記述Ｓ２には、検証対象の機能仕様がＸＭＬ（Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）を用いて記述されている。なお、図面では、仕様記述Ｓ２の一部を抜粋して表示している。
【００３０】
具体的には、仕様記述Ｓ２には、機能「Ｆｕｎｃｔｉｏｎ＿Ａ」を実現するために実行される一連の操作群を定義するシナリオ「Ｓｃｅｎａｒｉｏ＿１」と、一連の操作「Ｏｐｅｒａｔｉｏｎ＿１」、「Ｏｐｅｒａｔｉｏｎ＿２」、「Ｗｈｉｌｅ」および「Ｏｐｅｒａｔｉｏｎ＿３」とが記述されている。
【００３１】
また、＜Ｐｒｅｃｏｎｄｉｔｉｏｎ＞と＜／Ｐｒｅｃｏｎｄｉｔｉｏｎ＞に囲まれた文字列は、直前に記述されているシナリオまたは操作に関する事前条件をあらわしている。また、＜Ｐｏｓｔｃｏｎｄｉｔｉｏｎ＞と＜／Ｐｏｓｔｃｏｎｄｉｔｉｏｎ＞に囲まれた文字列は、直前に記述されているシナリオまたは操作に関する事後条件をあらわしている。
【００３２】
本実施の形態では、シナリオや操作に定義されている事前条件、事後条件をアサーションとして扱う。アサーションは、検証対象の機能が正しく動作するために守るべき制約条件であり、設計意図としての動作を検証するために実装中に記述される。また、上述の形式でアサーションを記述することで、仕様記述内のアサーション記述をコンピュータが認識することができる。なお、アサーションとして、ここでは事前条件、事後条件のみを扱うため、それ以外の要素（たとえば、不変条件）は省略している。
【００３３】
また、仕様記述Ｓ２には、検証対象の実装記述Ｈを用いて作成される制御フローグラフ内の各ノードと、仕様記述Ｓ２内の記述とを関連付けるリンク情報の挿入位置を特定するリンク項目４０１〜４０４が記述されている。たとえば、リンク項目４０１は、仕様記述Ｓ２内の機能「Ｆｕｎｃｔｉｏｎ＿Ａ」と制御フローグラフとを関連付けるリンク情報の挿入位置となる。
【００３４】
また、リンク項目４０２は、仕様記述Ｓ２内の操作「Ｏｐｅｒａｔｉｏｎ＿１」と、制御フローグラフ内の操作「Ｏｐｅｒａｔｉｏｎ＿１」をあらわすノードとを関連付けるリンク情報の挿入位置となる。なお、図４中、符号４０５〜４１４は後述の説明で用いる。
【００３５】
（実装記述の記述内容）
つぎに、検証対象の仕様変更後の機能「Ｆｕｎｃｔｉｏｎ＿Ａ」に関する実装記述Ｈを例に挙げて、実装記述の具体例について説明する。図５は、実装記述の具体例を示す説明図である。図５において、実装記述Ｈには、検証対象の機能「Ｆｕｎｃｔｉｏｎ＿Ａ」を実現するためのプログラムがＨＤＬ（Ｈａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）を用いて記述されている。
【００３６】
具体的には、実装記述Ｈには、機能「Ｆｕｎｃｔｉｏｎ＿Ａ」を実現するために実行される一連の操作群「Ｏｐｅｒａｔｉｏｎ＿１」、「Ｏｐｅｒａｔｉｏｎ＿２」、「Ｗｈｉｌｅ」および「Ｏｐｅｒａｔｉｏｎ＿３」が記述されている。ここでは、機能「Ｆｕｎｃｔｉｏｎ＿Ａ」を構成するシナリオが１つのため、シナリオ名に関する記述は省略されている。
【００３７】
また、実装記述Ｈにおいて、『／／』で始まる１行はコメントをあらわしている。具体的には、アサーションのタイプ（事前条件、事後条件）がコメントとして記述されている。このコメント表記を利用することで、実装記述Ｈ内のアサーション記述をコンピュータが認識することができる。
【００３８】
なお、実装記述Ｈでは、機能「Ｆｕｎｃｔｉｏｎ＿Ａ」を構成するシナリオに関する記述が省略されているため、シナリオの事前条件、事後条件が機能「Ｆｕｎｃｔｉｏｎ＿Ａ」の事前条件、事後条件として記述されている。また、符号５０１〜５０７は後述の説明で用いる。
【００３９】
（検証支援装置の機能的構成）
つぎに、検証支援装置１００の機能的構成について説明する。図６は、検証支援装置の機能的構成を示すブロック図である。図６において、検証支援装置１００は、取得部６０１と、作成部６０２と、第１の関連付け部６０３と、第２の関連付け部６０４と、検出部６０５と、抽出部６０６と、特定部６０７と、選択部６０８と、探索部６０９と、決定部６１０と、第１の検索部６１１と、第２の検索部６１２と、出力部６１３と、を含む構成である。
【００４０】
この制御部となる機能（取得部６０１〜出力部６１３）は、具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶領域に記憶されたプログラムをＣＰＵ２０１に実行させることにより、または、Ｉ／Ｆ２０９により、その機能を実現する。
【００４１】
まず、取得部６０１は、検証対象の機能を実現するために実行される一連の要素群および機能を実現するために満たすべき要素の制約条件が記述された仕様記述と、検証対象の機能に関する実装記述とを取得する機能を有する。
【００４２】
ここで、仕様記述は、検証対象の機能、シナリオ、操作、パラメータなどが仕様項目として記述された電子文書である（たとえば、図４に示した仕様記述Ｓ２）。実装記述は、検証対象の仕様やアルゴリズムがプログラム言語のプログラムとして記述された電子文書である（たとえば、図５に示した実装記述Ｈ）。
【００４３】
また、要素とは、検証対象の機能を構成するシナリオ、または、シナリオを構成する操作である。シナリオとは、機能を実現するために実行される一連の操作を定義するものである。また、操作とは、検証対象の仕様を細かく分解して得られる１つの動作である。これらシナリオおよび操作には、属性情報として制約条件が定義されている。制約条件としては、たとえば、事前条件、事後条件および不変条件がある。
【００４４】
事前条件とは、機能を実現する一連の操作の実行前に満たすべき（真となる）条件である。事後条件とは、一連の操作の実行後に満たすべき条件である。不変条件とは、事後条件が発生するまでの間（一連の操作の実行中）に要求される不変の条件である。上述したように、本実施の形態では、事前条件および事後条件をアサーションとして扱う。
【００４５】
なお、仕様記述（仕様記述Ｓ１，Ｓ２）および実装記述（実装記述Ｈ）は、検証支援装置１００に直接入力することとしてもよく、また、外部のコンピュータ装置から取得することとしてもよい。また、取得された仕様記述、実装記述は、図２に示したＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶領域に記憶される。
【００４６】
作成部６０２は、取得部６０１によって取得された実装記述に基づいて、一連の要素群および当該要素の制約条件をノードとしてグラフ化された構造体を作成する機能を有する。具体的には、たとえば、実装記述内に記述されているシナリオ、操作、事前条件、事後条件および不変条件をノードとして有向グラフ化することにより、検証対象の実装時における制御の流れをあらわす制御フローグラフ（ＣＦＧ：Ｃｏｎｔｒｏｌ  Ｆｌｏｗ  Ｇｒａｐｈ）を作成することとしてもよい。
【００４７】
なお、制御フローグラフは実装記述をもとに作成されるため、実装記述が機能ごとに用意された場合には、制御フローグラフも機能ごとに作成されることとなる。また、制御フローグラフを作成する具体的な手法は、公知技術のため説明を省略する（たとえば、「Ａｌｆｒｅｄ  Ｖ．Ａｈｏ，Ｒａｖｉ  Ｓｅｔｈｉ，Ｊｅｆｆｒｅｙ  Ｄ．Ｕｌｌｍａｎ，“Ｃｏｍｐｉｌｅｒｓ”，ｐｐ．５２８−５３４，Ａｄｄｉｓｏｎ  Ｗｅｓｌｅｙ，１９８５」参照。）。
【００４８】
ここで、図５に示した実装記述Ｈに基づく制御フローグラフについて説明する。図７は、制御フローグラフの具体例を示す説明図である。図７において、制御フローグラフ７００は、機能「Ｆｕｎｃｔｉｏｎ＿Ａ」の制御の流れをグラフ化してあらわす構造体である。具体的には、制御フローグラフ７００は、シナリオ、操作、事前条件および事後条件をノードＮ１〜Ｎ１５として表現し、機能「Ｆｕｎｃｔｉｏｎ＿Ａ」の制御の流れをノード間の有向エッジとして表現したものである。
【００４９】
たとえば、ノードＮ２は、実装記述Ｈ内の記述箇所５０１に記述されている事前条件「ｉ＞０」を表現している。また、ノードＮ４は、実装記述Ｈ内の記述箇所５０２に記述されている操作「Ｏｐｅｒａｔｉｏｎ＿１」を表現している。また、ノードＮ８は、実装記述Ｈ内の記述箇所５０４の事後条件「ｖａｌ＞０」を表現している。
【００５０】
この制御フローグラフ７００では、シナリオまたは操作をあらわすノードの上下に、事前条件、事後条件をあらわすノードが付属するノード構造を有している（図７中右上参照）。このため、実装記述Ｈ内にシナリオ、事前条件および事後条件に関する記述箇所がない場合であっても、シナリオ、事前条件および事後条件をあらわすノードが表現されている。
【００５１】
たとえば、ノードＮ１は、機能「Ｆｕｎｃｔｉｏｎ＿Ａ」を構成するシナリオを表現している。また、ノードＮ３は、操作「Ｏｐｅｒａｔｉｏｎ＿１」の事前条件「なし」を表現している。また、ノードＮ５は、操作「Ｏｐｅｒａｔｉｏｎ＿１」の事後条件「なし」を表現している。
【００５２】
このようなノード構造によれば、各シナリオ、操作をあらわすノードを特定して上下に付属するノードを特定することにより、各シナリオ、操作の事前条件および事後条件をコンピュータにより自動認識することができる。なお、詳細は図９を用いて説明するが、この制御フローグラフ７００の実体は、ＸＭＬなどを用いて記述された電子情報である。また、作成された構造体（たとえば、制御フローグラフ７００）は、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶領域に記憶される。
【００５３】
図６の説明に戻り、第１の関連付け部６０３は、作成部６０２によって作成された構造体内のノードと、当該ノードがあらわす要素または制約条件に関する実装記述内の記述箇所とを関連付ける機能を有する。具体的には、たとえば、制御フローグラフ７００内のノードと、ノード（ここでは、ノードＮ２，Ｎ４，Ｎ７，Ｎ８，Ｎ１０，Ｎ１３，Ｎ１５）の作成元である実装記述Ｈ内の各記述箇所５０１〜５０７とを関連付ける。
【００５４】
より具体的には、たとえば、実装記述Ｈを読み込む際に各記述箇所の行番号を特定し、ノードの作成元となる記述箇所の行番号とノードとを関連付けたリンク情報を生成することとしてもよい。ここでは、第１の関連付け部６０３による第１の関連付け結果は、各ノードＮ２，Ｎ４，Ｎ７，Ｎ８，Ｎ１０，Ｎ１３，Ｎ１５と各記述箇所５０１〜５０７とのリンク関係をあらわすリンク情報となる。このリンク情報は、たとえば、リスト化されてＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶領域に記憶される。また、制御フローグラフ７００内にリンク情報を直接挿入することとしてもよい。
【００５５】
ここで、制御フローグラフ７００と実装記述Ｈとのリンク関係について説明する。図８は、制御フローグラフと実装記述とのリンク関係をあらわす説明図である。図８において、リンクＬ１〜Ｌ７は、制御フローグラフ７００内の各ノードＮ２，Ｎ４，Ｎ７，Ｎ８，Ｎ１０，Ｎ１３，Ｎ１５と、実装記述Ｈ内の各記述箇所５０１〜５０７とのリンク関係をあらわしている。
【００５６】
リンクＬ１を例に挙げると、ノードＮ２は、実装記述Ｈ内の記述箇所５０１をもとに作成されている。このため、ノードＮ２は、作成元である記述箇所５０１とリンク関係を有する。これらリンクＬ１〜Ｌ７はリンク情報（たとえば、実装記述Ｈ内の行番号）として、制御フローグラフ７００内に挿入される。
【００５７】
ここで、リンク情報が挿入された制御フローグラフ７００のデータ構造について説明する。図９は、制御フローグラフのデータ構造を示す説明図（その１）である。図９において、ＣＦＧ記述９００には、制御フローグラフ７００に示す機能「Ｆｕｎｃｔｉｏｎ＿Ａ」の制御の流れがＸＭＬを用いて記述されている。
【００５８】
また、ＣＦＧ記述９００には、制御フローグラフ７００内の各ノードＮ２，Ｎ４，Ｎ７，Ｎ８，Ｎ１０，Ｎ１３，Ｎ１５と、実装記述Ｈ内の各記述箇所５０１〜５０７とのリンクＬ１〜Ｌ７をあらわすリンク情報９０１〜９０５が挿入されている。これらリンク情報９０１〜９０５は、リンクＬ１〜Ｌ７のうち一部のリンク関係をあらわしている。
【００５９】
リンク情報９０１には、制御フローグラフ７００の作成元である実装記述Ｈのファイル名『ｆｉｌｅ．ｖ』と機能「Ｆｕｎｃｔｉｏｎ＿Ａ」が記述されている実装記述Ｈ内の行番号『１』が含まれている。このリンク情報９０１は、制御フローグラフ７００と実装記述Ｈとの関連付けをあらわす情報であり、リンクＬ１〜Ｌ７のいずれにも相当しない。
【００６０】
また、リンク情報９０２には、操作「Ｏｐｅｒａｔｉｏｎ＿１」が記述されている実装記述Ｈ内の行番号『７』が含まれている。このリンク情報９０２は、リンクＬ２に相当する。また、リンク情報９０３には、操作「Ｏｐｅｒａｔｉｏｎ＿２」が記述されている実装記述Ｈ内の行番号『８』が含まれている。このリンク情報９０３は、リンクＬ３に相当する。
【００６１】
また、リンク情報９０４には、操作「Ｗｈｉｌｅ」が記述されている実装記述Ｈ内の行番号『１１』が含まれている。このリンク情報９０４は、リンクＬ５に相当する。また、リンク情報９０５には、操作「Ｏｐｅｒａｔｉｏｎ＿３」が記述されている実装記述Ｈ内の行番号『１２』が含まれている。このリンク情報９０５は、リンクＬ６に相当する。
【００６２】
これらリンク情報９０１〜９０５によれば、ノードＮ４，Ｎ７，Ｎ１０，Ｎ１３と関連付けられた実装記述Ｈ内の記述箇所５０２，５０３，５０５，５０６を特定することができる。また、上述したように、ＣＦＧ記述９００には、事前条件、事後条件をあらわすノードＮ２，Ｎ８，Ｎ１５（リンクＬ１，Ｌ４，Ｌ７）に関するリンク情報が挿入されていない。
【００６３】
なぜなら、シナリオ、操作をあらわすノードのリンク情報から実装記述Ｈ内の記述箇所が特定できれば、あとは、コメント表記を参照して、そのシナリオ、操作の事後条件、事前条件が記述されている記述箇所を特定することができるからである（詳細は後述）。また、ＣＦＧ記述９００には、制御フローグラフ７００内の各ノードＮ１〜Ｎ１５と、仕様記述Ｓ２内の記述とを関連付けるリンク情報の挿入位置を特定するリンク項目９０６〜９１０が記述されている。
【００６４】
たとえば、リンク項目９０６は、制御フローグラフ７００と仕様記述Ｓ２内の機能「Ｆｕｎｃｔｉｏｎ＿Ａ」とを関連付けるリンク情報の挿入位置となる。また、リンク項目９０７は、制御フローグラフ７００内のノードＮ２と、仕様記述Ｓ２内の操作「Ｏｐｅｒａｔｉｏｎ＿１」とを関連付けるリンク情報の挿入位置となる。
【００６５】
図６の説明に戻り、第２の関連付け部６０４は、仕様記述内の要素または制約条件に関する記述を用いて、構造体の中から要素または制約条件をあらわすノードを検出することにより、構造体内のノードと、当該ノードがあらわす要素または制約条件に関する仕様記述内の記述箇所とを関連付ける機能を有する。
【００６６】
ここで、図４に示した仕様記述Ｓ２および図９に示したＣＦＧ記述９００（制御フローグラフ７００）を例に挙げて、第２の関連付け部６０４による関連付け処理の具体的内容について説明する。まず、検出部６０５は、シナリオ名を手掛かりに、仕様記述Ｓ２の中から任意のシナリオに関する記述箇所を検出する。ここでは、記述箇所４０５が検出される。
【００６７】
そして、検出部６０５は、記述箇所４０５のシナリオ名を手掛かりに、シナリオ「Ｓｃｅｎａｒｉｏ＿１」をあらわすノードをＣＦＧ記述９００の中から検出する。ここでは、未検出となる。これは、制御フローグラフ７００の作成元である実装記述Ｈ内にシナリオ「Ｓｃｅｎａｒｉｏ＿１」に関する記述が含まれていないからである。
【００６８】
また、検出部６０５は、操作名を手掛かりに、仕様記述Ｓ２の中からシナリオ「Ｓｃｅｎａｒｉｏ＿１」を構成する操作に関する記述箇所を検出する。ここでは、記述箇所４０６〜４０９が順次検出される。そして、検出部６０５は、各記述箇所４０６〜４０９の操作名を手掛かりに、操作「Ｏｐｅｒａｔｉｏｎ＿１」、「Ｏｐｅｒａｔｉｏｎ＿２」、「ｗｈｉｌｅ」および「Ｏｐｅｒａｔｉｏｎ＿３」をあらわすノードをＣＦＧ記述９００の中から検出する。ここでは、ノードＮ４，Ｎ７，Ｎ１０，Ｎ１３（図７参照）が順次検出される。
【００６９】
このあと、第２の関連付け部６０４は、検出されたノードＮ４，Ｎ７，Ｎ１０，Ｎ１３と、各ノードＮ４，Ｎ７，Ｎ１０，Ｎ１３をあらわす操作に関する仕様記述Ｓ２内の記述箇所４０６〜４０９と、をそれぞれ関連付ける。なお、シナリオ「Ｓｃｅｎａｒｉｏ＿１」をあらわすノードがＣＦＧ記述９００の中から検出された場合には、それらの関連付けもおこなわれる。
【００７０】
さらに、検出部６０５は、事前条件、事後条件をあらわすタグを手掛かりに、仕様記述Ｓ２の中からシナリオ「Ｓｃｅｎａｒｉｏ＿１」および操作「Ｏｐｅｒａｔｉｏｎ＿１」、「Ｏｐｅｒａｔｉｏｎ＿２」、「ｗｈｉｌｅ」および「Ｏｐｅｒａｔｉｏｎ＿３」の事前条件、事後条件に関する記述箇所を検出する。ここでは、記述箇所４１０〜４１４が検出される。
【００７１】
このあと、検出済みのシナリオ、操作をあらわすノードを手掛かりに、事前条件、事後条件をあらわすノードをＣＦＧ記述９００の中から検出する。ここでは、各記述箇所４１０〜４１４の事前条件、事後条件をあらわすノードＮ２，Ｎ１５，Ｎ８，Ｎ１１，Ｎ１２が検出される。ここで、記述箇所４１２を例に挙げると、検出済みのノードＮ７を手掛かりに、ノードＮ７の下に付属している操作「Ｏｐｅｒａｔｉｏｎ＿２」をあらわすノードＮ８が検出される。
【００７２】
このように、ノード構造を利用してシナリオ、操作をあらわすノードを手掛かりに事前条件、事後条件をあらわすノードを検出するため、実装記述Ｈ内に記述されている事前条件、事後条件との不整合（たとえば、記述箇所４１０）や、実装記述Ｈには記述されていない事前条件、事後条件が存在してしまう（たとえば、記述箇所４１３，４１４）ことがある。
【００７３】
このため、後述の図１０中符号１０１０に示すように、仕様記述Ｓ２内の記述箇所（この例では事前条件「ｉ＞＝０」）をあらわすノードが制御フローグラフ７００内に存在していない場合には、その記述箇所をあらわす新たなノードを作成して、制御フローグラフ７００内に挿入することとしてもよい。
【００７４】
また、検出部６０５により、操作名を手掛かりにＣＦＧ記述９００の中からノードが検出されなかった場合には、同一名の操作をあらわすノードが含まれていない旨のエラーメッセージをユーザに提示することとしてもよい。これは、仕様記述Ｓ２と実装記述Ｈとの間で操作名の不整合が発生していることを報知するものである。
【００７５】
そして、最終的に、第２の関連付け部６０４は、検出されたノードＮ２，Ｎ１５，Ｎ８，Ｎ１１，Ｎ１２と、各ノードＮ２，Ｎ１５，Ｎ８，Ｎ１１，Ｎ１２をあらわす事前条件、事後条件に関する仕様記述Ｓ２内の記述箇所４１０〜４１４と、をそれぞれ関連付けることとなる。
【００７６】
ここでは、第２の関連付け部６０４による第２の関連付け結果は、たとえば、各ノードＮ２，Ｎ４，Ｎ７，Ｎ８，Ｎ１０，Ｎ１１，Ｎ１２，Ｎ１３，Ｎ１５と各記述箇所４０６〜４１４とのリンク関係をあらわすリンク情報である。このリンク情報は、たとえば、リスト化されてＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶領域に記憶される。また、制御フローグラフ７００内にリンク情報を直接挿入することとしてもよい。
【００７７】
ここで、制御フローグラフ７００と仕様記述Ｓ２とのリンク関係について説明する。図１０は、制御フローグラフと仕様記述とのリンク関係をあらわす説明図である。図１０において、リンクＬ８〜Ｌ１６は、制御フローグラフ７００内の各ノードＮ２，Ｎ４，Ｎ７，Ｎ８，Ｎ１０，Ｎ１１，Ｎ１２，Ｎ１３，Ｎ１５と、仕様記述Ｓ２内の各記述箇所４０５〜４０９とのリンク関係をあらわしている（記述箇所４０５とノードＮ１とのリンク関係は不図示）。
【００７８】
これらリンクＬ８〜Ｌ１６は、たとえば、リンク情報として制御フローグラフ７００および仕様記述Ｓ２内に挿入される。なお、リンクＬ８については、上述したように、仕様記述Ｓ２内の記述箇所４１０をあらわすノードが制御フローグラフ７００内に存在していないため、その記述箇所をあらわすノードが新たに作成されて、制御フローグラフ７００内に挿入されている（符号１０１０）。
【００７９】
ここで、リンク情報が挿入された制御フローグラフ７００のデータ構造について説明する。図１１は、制御フローグラフのデータ構造を示す説明図（その２）である。図１１において、ＣＦＧ記述９００には、制御フローグラフ７００内の各ノードＮ２，Ｎ４，Ｎ７，Ｎ８，Ｎ１０，Ｎ１１，Ｎ１２，Ｎ１３，Ｎ１５と、仕様記述Ｓ２内の各記述箇所４０６〜４０９とのリンクＬ８〜Ｌ１６をあらわすリンク情報１１０１〜１１０５が挿入されている。
【００８０】
リンク情報１１０１には、仕様記述Ｓ２の仕様書名『Ｅｘａｍｐｌｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ』と機能「Ｆｕｎｃｔｉｏｎ＿Ａ」が含まれている。このリンク情報１１０１は、制御フローグラフ７００と仕様記述Ｓ２との関連付けをあらわす情報であり、リンクＬ８〜Ｌ１６のいずれにも相当しない。
【００８１】
また、リンク情報１１０２には、仕様記述Ｓ２の仕様書名『Ｅｘａｍｐｌｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ』と操作「Ｏｐｅｒａｔｉｏｎ＿１」が含まれている。このリンク情報１１０２は、リンクＬ１０に相当する。また、リンク情報１１０３には、仕様記述Ｓ２の仕様書名『Ｅｘａｍｐｌｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ』と操作「Ｏｐｅｒａｔｉｏｎ＿２」が含まれている。このリンク情報１１０３は、リンクＬ１１に相当する。
【００８２】
また、リンク情報１１０４には、仕様記述Ｓ２の仕様書名『Ｅｘａｍｐｌｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ』と操作「Ｗｈｉｌｅ」が含まれている。このリンク情報１１０４は、リンクＬ１３に相当する。また、リンク情報１１０５には、仕様記述Ｓ２の仕様書名『Ｅｘａｍｐｌｅ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ』と操作「Ｏｐｅｒａｔｉｏｎ＿３」が含まれている。このリンク情報１１０５は、リンクＬ１６に相当する。
【００８３】
これらリンク情報１１０１〜１１０５によれば、ノードＮ４，Ｎ７，Ｎ１０，Ｎ１３と関連付けられた仕様記述Ｓ２内の記述箇所４０６〜４０９を特定することができる。
【００８４】
つぎに、リンク情報が挿入された仕様記述Ｓ２について説明する。図１２は、仕様記述の具体例を示す説明図（その２）である。図１２において、仕様記述Ｓ２には、制御フローグラフ７００内のノードＮ２，Ｎ４，Ｎ７，Ｎ８，Ｎ１０，Ｎ１１，Ｎ１２，Ｎ１３，Ｎ１５と、仕様記述Ｓ２内の各記述箇所４０６〜４０９とのリンクＬ８〜Ｌ１６をあらわすリンク情報１２０１〜１２０５が挿入されている。
【００８５】
リンク情報１２０１には、制御フローグラフ７００のＣＦＧ名『ＣｏｎｔｒｏｌＦｌｏｗＧｒａｐｈ』と機能「Ｆｕｎｃｔｉｏｎ＿Ａ」が含まれている。このリンク情報１２０１は、制御フローグラフ７００と仕様記述Ｓ２との関連付けをあらわす情報であり、リンクＬ８〜Ｌ１６のいずれにも相当しない。
【００８６】
また、リンク情報１２０２には、制御フローグラフ７００のＣＦＧ名『ＣｏｎｔｒｏｌＦｌｏｗＧｒａｐｈ』とノード名「Ｏｐｅｒａｔｉｏｎ＿１」が含まれている。このリンク情報１２０２は、リンクＬ１０に相当する。また、リンク情報１２０３には、制御フローグラフ７００のＣＦＧ名『ＣｏｎｔｒｏｌＦｌｏｗＧｒａｐｈ』とノード名「Ｏｐｅｒａｔｉｏｎ＿２」が含まれている。このリンク情報１２０３は、リンクＬ１１に相当する。
【００８７】
また、リンク情報１２０４には、制御フローグラフ７００のＣＦＧ名『ＣｏｎｔｒｏｌＦｌｏｗＧｒａｐｈ』とノード名「Ｗｈｉｌｅ」が含まれている。このリンク情報１２０４は、リンクＬ１３に相当する。また、リンク情報１２０５には、制御フローグラフ７００のＣＦＧ名『ＣｏｎｔｒｏｌＦｌｏｗＧｒａｐｈ』とノード名「Ｏｐｅｒａｔｉｏｎ＿３」が含まれている。このリンク情報１２０５は、リンクＬ１６に相当する。
【００８８】
これらリンク情報１２０１〜１２０５によれば、仕様記述Ｓ２内の記述箇所４０６〜４０９と関連付けられた制御フローグラフ７００内のノードＮ４，Ｎ７，Ｎ１０，Ｎ１３を特定することができる。
【００８９】
図６の説明に戻り、出力部６１３は、第１の関連付け部６０３および第２の関連付け部６０４によって関連付けられた関連付け結果を出力する機能を有する。具体的には、図１１に示したＣＦＧ記述９００および図１２に示した仕様記述Ｓ２を出力することとしてもよく、また、リンク情報をリスト化したものを出力することとしてもよい。
【００９０】
なお、出力形式としては、たとえば、ディスプレイ２０８への表示、プリンタ２１３への印刷出力、Ｉ／Ｆ２０９による外部装置への送信がある。また、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶領域に記憶することとしてもよい。
【００９１】
これら第１の関連付け部６０３および第２の関連付け部６０４によって関連付けられた第１および第２の関連付け結果（たとえば、図１１に示したＣＦＧ記述９００および図１２に示した仕様記述Ｓ２）によれば、仕様変更後の仕様記述内の要素および制約条件に関する記述箇所と、仕様変更後の機能に関する実装記述内の要素および制約条件に関する記述箇所との関連付けを認識することができる。
【００９２】
（仕様と実装との整合性確認手法）
つぎに、上述した第１および第２の関連付け結果を用いて、検証対象の仕様変更後の仕様と実装との整合性確認手法について説明する。検証対象の仕様変更には、検証対象の機能の追加、削除、変更などの検証対象全体の変更がある。
【００９３】
具体的には、機能の変更としては、シナリオの追加、削除がある。シナリオの変更としては、事前条件、事後条件、不変条件の変更のほか、操作の追加、削除、順序の変更がある。操作の変更としては、事前条件、事後条件、不変条件の変更や、呼び出す他の操作の追加、削除、順序の変更や、パラメータ設定の変更がある。
【００９４】
以下、仕様と実装との整合性確認手法を実現するために各機能部が有する機能について説明する。まず、抽出部６０６は、仕様変更後の仕様記述の中から検証対象の仕様変更により影響を受ける記述箇所を抽出する。具体的には、たとえば、検証対象の仕様変更前の仕様記述Ｓ１および仕様変更後の仕様記述Ｓ２を用いて、仕様記述Ｓ２の中から仕様変更により影響を受ける記述箇所を自動抽出することとしてもよい。
【００９５】
また、図２に示したキーボード２１０やマウス２１１をユーザが操作することで、仕様記述Ｓ２の中から仕様変更により影響を受ける記述箇所を指定することとしてもよい。この場合、抽出部６０６は、指定された記述箇所を仕様記述Ｓ２の中から抽出することとなる。なお、抽出された記述箇所は、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶領域に記憶される。
【００９６】
＜抽出処理の具体的説明＞
ここで、抽出部６０６による抽出処理の具体的な処理内容について説明する。まず、特定部６０７は、検証対象の仕様変更前および仕様変更後の仕様記述を用いて、検証対象の仕様変更にともなう仕様変更後の仕様記述内の変更箇所を特定する。
【００９７】
具体的には、たとえば、既存の差分検出プログラム（たとえば、ｄｉｆｆコマンド）を用いて、仕様記述Ｓ１と仕様記述Ｓ２との差分を検出することで、仕様変更により変更された変更箇所を特定することができる。この差分集合は、たとえば、ＸＭＬによって記述された記述箇所の集合となる。なお、特定された変更箇所は、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶領域に記憶される。
【００９８】
つぎに、この変更箇所をもとに仕様記述Ｓ２の中から検証対象の仕様変更により直接的および間接的に影響を受ける記述箇所（影響範囲）を抽出する。以下、仕様記述Ｓ２の中から影響範囲を抽出する具体的な手法の一例を説明する。
【００９９】
まず、選択部６０８は、特定部６０７によって特定された変更箇所の中から任意の要素を選択する。具体的には、たとえば、要素名（シナリオ名、操作名など）を手掛かりに、任意の要素を選択する。なお、選択された選択結果は、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶領域に記憶される。
【０１００】
つぎに、探索部６０９は、仕様変更後の仕様記述の中から、選択された要素の制約条件を探索する。具体的には、たとえば、事前条件、事後条件をあらわすタグを手掛かりに、選択された要素の配下にある事前条件または／および事後条件を探索する。なお、探索された探索結果は、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶領域に記憶される。
【０１０１】
そして、決定部６１０は、探索部６０９によって探索された制約条件に関する記述箇所を検証対象の仕様変更により影響を受ける記述箇所に決定する。なお、決定された決定結果は、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶領域に記憶される。
【０１０２】
また、探索部６０９は、仕様変更後の仕様記述に基づく要素間の遷移関係に基づいて、選択部６０８によって選択された要素を起点として遷移元となる要素を順次辿ることにより、仕様変更後の仕様記述の中から仕様変更により影響を受ける要素を探索する。要素間の遷移関係は、たとえば、仕様変更後の仕様記述内に記述されている要素をノードとして有向グラフ化された遷移グラフを用いて認識することができる。
【０１０３】
より具体的には、既存の探索アルゴリズムを用いて遷移グラフを参照することで、選択部６０８よって選択された要素を起点として遷移元となる要素を順次辿ることにより、仕様変更により影響を受ける要素を探索することができる。たとえば、仕様変更により新たな操作が追加された場合、その操作を含むシナリオや、その操作を呼び出す他の操作が探索される。この場合、決定部６１０は、探索された要素に関する記述箇所と、当該要素の制約条件に関する記述箇所とを検証対象の仕様変更により影響を受ける記述箇所に決定する。
【０１０４】
また、選択部６０８は、変更箇所の中から任意の制約条件を選択する。具体的には、たとえば、事前条件、事後条件をあらわすタグを手掛かりに、変更箇所の中から制約条件を選択する。この場合、探索部６０９は、仕様変更後の仕様記述の中から、選択された制約条件が定義されている要素を探索する。そして、決定部６１０は、探索された要素に関する記述箇所を検証対象の仕様変更により影響を受ける記述箇所に決定する。
【０１０５】
これら選択部６０８、探索部６０９および決定部６１０による一連の処理は、たとえば、変更箇所の中から選択されていない未選択の要素、制約条件がなくなるまで繰り返し実行される。そして、最終的に、抽出部６０６は、仕様変更後の仕様記述の中から、特定部６０７によって特定された変更箇所と決定部６１０によって決定された記述箇所とを抽出する。
【０１０６】
なお、仕様記述Ｓ２の中から影響範囲を抽出する手法はこれに限らない。以下、図１３を用いて、仕様記述Ｓ２の中から影響範囲を抽出する他の手法の概要を説明する。図１３は、仕様変更により影響を受ける記述箇所を抽出する流れを示す概念図である。図１３において、検証対象の仕様変更前の仕様記述Ｓ１と仕様変更後の仕様記述Ｓ２とが簡単化されて示されている。
【０１０７】
ここでは説明のため、仕様変更後の仕様記述Ｓ２の各記述箇所を（１）〜（１５）と表記する。また、変更箇所ボックスＢ１、影響範囲ボックスＢ２にチェックすることは、特定部６０７による特定結果、決定部６１０による決定結果をＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶領域に記憶することを意味している。
【０１０８】
ここでは、検証対象の仕様変更として、シナリオ「Ｓｃｅｎａｒｉｏ＿１」の事前条件「ｉ＞０」が事前条件「ｉ＞＝０」に変更され、新たな操作「Ｏｐｅｒａｔｉｏｎ＿３」が追加されている。このため、特定部６０７により、仕様記述Ｓ２内の変更箇所として、記述箇所（２）、（１３）〜（１５）が特定される（変更箇所ボックスＢ１にチェック）。
【０１０９】
つぎに、選択部６０８により、仕様記述Ｓ２の中から任意のシナリオ（ここでは、シナリオ「Ｓｃｅｎａｒｉｏ＿１」のみ）を選択する。そして、シナリオ「Ｓｃｅｎａｒｉｏ＿１」の事前条件、事後条件に関する記述箇所（２）、（３）の変更箇所ボックスＢ１がチェックされているか否かを判断する。具体的には、探索部６０９により、仕様記述Ｓ２の変更箇所の中から記述箇所（２）、（３）を探索し、探索された場合にチェックされていると判断する。ここでは、記述箇所（２）がチェックされている。
【０１１０】
この場合、決定部６１０により、シナリオ「Ｓｃｅｎａｒｉｏ＿１」に関する記述箇所（１）、事前条件「ｉ＞＝０」に関する記述箇所（２）、および事後条件「ｏｕｔ＞０」に関する記述箇所（３）の影響範囲ボックスＢ２がチェックされる。
【０１１１】
このあと、選択部６０８により、仕様記述Ｓ２の中から任意の操作（ここでは、「Ｏｐｅｒａｔｉｏｎ＿１」、「Ｏｐｅｒａｔｉｏｎ＿２」、「ｗｈｉｌｅ」、「Ｏｐｅｒａｔｉｏｎ＿３」が順次選択される）を選択する。そして、操作、事前条件、事後条件に関する記述箇所の変更箇所ボックスＢ１がチェックされているか否かを判断する。ここでは、記述箇所（１３）〜（１５）がチェックされている。
【０１１２】
この場合、決定部６１０により、操作「Ｏｐｅｒａｔｉｏｎ＿３」に関する記述箇所（１３）、事前条件「ｖａｌ＜＝ｉ」に関する記述箇所（１４）、および事後条件「なし」に関する記述箇所（１５）の影響範囲ボックスＢ２がチェックされる。この結果、抽出部６０６により、仕様記述Ｓ２の中から検証対象の仕様変更により影響を受ける記述箇所（１）〜（３）、（１３）〜（１５）が抽出される。
【０１１３】
ここで、影響範囲（仕様変更により影響を受ける記述箇所）の具体例について説明する。図１４は、影響範囲記述の具体例を示す説明図である。図１４において、影響範囲記述１４００は、検証対象の仕様変更により影響を受ける仕様記述Ｓ２内の記述箇所の集合である。
【０１１４】
この影響範囲記述１４００は、図１２に示した仕様記述Ｓ２から、仕様変更により影響を受けない記述箇所およびその記述箇所に関するリンク情報を削除して作成したものであるため、仕様変更により影響を受ける記述箇所とともに、その記述箇所に関するリンク情報が含まれている。ここでは、リンク情報１２０１，１２０５が含まれている。なお、符号１４０１，１４０２で示す記述箇所は、影響範囲が他の機能へ及んだときに辿るためのリンク情報となる。
【０１１５】
＜検索処理の具体的説明＞
つぎに、検証対象の仕様変更により影響を受ける記述箇所から実装記述内の変更すべき記述箇所を検索する処理について説明する。まず、第１の検索部６１１は、第２の関連付け部６０４によって関連付けられた関連付け結果に基づいて、構造体の中から抽出部６０６によって抽出された記述箇所と関連付けられたノードを検索する。そして、第２の検索部６１２は、第１の関連付け部６０３によって関連付けられた関連付け結果に基づいて、実装記述の中から第１の検索部６１１によって検索されたノードと関連付けられた記述箇所を検索する。
【０１１６】
ここで、仕様変更により影響を受ける仕様記述Ｓ２内の記述箇所（図１４に示した影響範囲記述１４００）から、実装記述Ｈ内の変更すべき記述箇所を検索する処理の流れについて説明する。図１５は、実装記述内の変更すべき記述箇所を検索する流れを示す概念図である。まず、選択部６０８により、影響範囲記述１４００の中から任意のシナリオまたは操作を選択する。ここでは、操作「Ｏｐｅｒａｔｉｏｎ＿３」が選択された場合を例に挙げて説明する。
【０１１７】
このあと、第１の検索部６１１により、操作「Ｏｐｅｒａｔｉｏｎ＿３」のリンク情報１２０５を参照して、制御フローグラフ７００の中からノードＮ１３を検索する。リンク情報１２０５は、記述箇所４０９とノードＮ１３とを関連付ける第２の関連付け結果である。また、ノードＮ１３は、図１１に示したＣＦＧ記述９００内の記述箇所１１０５に相当する。このため、ＣＦＧ記述９００の中から記述箇所１１０５が検索される（図１５中矢印１５０１）。
【０１１８】
そして、第２の検索部６１２により、ノードＮ１３のリンク情報９０５を参照して、実装記述Ｈの中から操作「Ｏｐｅｒａｔｉｏｎ＿３」に関する記述箇所を検索する。リンク情報９０５は、ノードＮ１３と記述箇所５０６とを関連付ける第１の関連付け結果である。ここでは、実装記述Ｈ内の１２行目の記述箇所５０６が検索される（図１５中矢印１５０２）。
【０１１９】
このように、仕様記述Ｓ２内の操作に関する記述箇所と、制御フローグラフ７００（ＣＦＧ記述９００）内のノードとを関連付ける第２の関連付け結果を参照することで、仕様記述Ｓ２内の任意の操作と関連付けられたノードを検索することができる。
【０１２０】
同様に、事前条件または事後条件（アサーション）についても、第２の関連付け結果を参照することで、仕様記述Ｓ２内の任意の事前条件または事後条件と関連付けられたノードを検索することができる。さらに、事前条件または事後条件とノードとを直接関連付ける第２の関連付け結果が存在しない場合でも、つぎの手法を用いて事前条件または事後条件と関連付けられたノードを検索することができる。
【０１２１】
具体的には、仕様記述Ｓ２内の操作に関する記述箇所と、制御フローグラフ７００内のノードとを関連付けるリンク情報をもとに検索することができる。たとえば、操作「Ｏｐｅｒａｔｉｏｎ＿２」の事後条件「ｖａｌ＞０」をあらわすノードＮ８を検索する場合には、まず、仕様記述Ｓ２内の記述箇所４０７のリンク情報１２０３をもとにノードＮ７を検索する。
【０１２２】
そして、図７に示したノード構造をもとに、検索されたノードＮ７の下に付属しているノードＮ８を検索する。このように、事前条件または事後条件をあらわすノードについては、仕様記述Ｓ２内の操作に関する記述箇所と、制御フローグラフ７００内の操作をあらわすノードとのリンク関係がわかれば、ノード構造を利用して検索可能である。
【０１２３】
また、出力部６１３は、第２の検索部６１２によって検索された検索結果を、検証対象の仕様変更により変更すべき実装記述内の記述箇所として出力する。具体的には、たとえば、実装記述のファイル名と、その実装記述内の変更すべき記述箇所の行番号とを関連付けた情報を出力することとしてもよい。また、実装記述を表示するとともに、実装記述内の変更すべき記述箇所を強調表示することとしてもよい。
【０１２４】
ここで、出力部６１３による出力結果（レポート情報）の具体例について説明する。図１６は、レポート情報の具体例を示す説明図である。図１６において、レポート情報１６００には、検証対象の仕様変更により影響を受ける仕様記述Ｓ２内の影響範囲１６１０と、検証対象の仕様変更後の実装記述Ｈとが示されている。
【０１２５】
ここでは、矢印１６３０，１６４０により、検証対象の仕様変更により影響を受ける記述箇所１６１１，１６１２と、検証対象の仕様変更にともなって変更すべき実装記述Ｈ内のアサーション記述１６２１，１６２２との対応関係が示されている。また、実装記述Ｈ内のアサーション記述１６２１，１６２２が反転表示されている。なお、実装記述Ｈ内の左隅の数字は、実装記述Ｈ内における行番号である。このレポート情報１６００によれば、検証者は、検証対象の仕様変更により変更すべき実装記述Ｈ内のアサーション記述１６２１，１６２２を把握することができる。
【０１２６】
（検証支援装置の検証支援処理手順）
つぎに、本実施の形態にかかる検証支援装置１００の検証支援処理手順について説明する。以下に説明する手順は、検証支援装置１００に検証対象の仕様変更前後の仕様記述（たとえば、仕様記述Ｓ１，Ｓ２）および仕様変更後の機能に関する実装記述（たとえば、実装記述Ｈ）を入力することでコンピュータにより自動実行される。
【０１２７】
図１７は、検証支援処理手順の一例を示すフローチャートである。図１７のフローチャートにおいて、まず、取得部６０１により、検証対象の仕様変更前後の仕様記述および検証対象の仕様変更後の機能に関する実装記述を取得したか否かを判断する（ステップＳ１７０１）。
【０１２８】
ここで、仕様変更前後の仕様記述および実装記述を取得するのを待って（ステップＳ１７０１：Ｎｏ）、取得した場合（ステップＳ１７０１：Ｙｅｓ）、作成部６０２により、取得された実装記述に基づいて、検証対象の実装時における制御の流れをあらわす制御フローグラフを作成する（ステップＳ１７０２）。
【０１２９】
このあと、第１の関連付け部６０３により、実装記述と制御フローグラフとを関連付ける第１の関連付け処理を実行して（ステップＳ１７０３）、つぎに、第２の関連付け部６０４により、仕様記述と制御フローグラフとを関連付ける第２の関連付け処理を実行する（ステップＳ１７０４）。
【０１３０】
そして、抽出部６０６により、仕様変更後の仕様記述の中から検証対象の仕様変更により影響を受ける影響範囲を抽出する抽出処理を実行する（ステップＳ１７０５）。このあと、検証対象の仕様変更により変更すべき実装記述内の記述箇所を検索する検索処理を実行して（ステップＳ１７０６）、最後に、出力部６１３により、検索された検索結果を出力して（ステップＳ１７０７）、本フローチャートによる一連の処理を終了する。
【０１３１】
（第１の関連付け処理手順）
つぎに、図１７に示したステップＳ１７０３における第１の関連付け処理の具体的な処理手順について説明する。図１８は、第１の関連付け処理の具体的な処理手順の一例を示すフローチャートである。図１８のフローチャートにおいて、まず、選択部６０８により、図１７に示したステップＳ１７０２において作成された制御フローグラフの中から任意のノードを選択する（ステップＳ１８０１）。
【０１３２】
このあと、検出部６０５により、図１７に示したステップＳ１７０１において取得された実装記述の中から、選択されたノードの作成元である記述箇所を検出する（ステップＳ１８０２）。そして、第１の関連付け部６０３により、選択されたノードと検出された記述箇所とを関連付ける（ステップＳ１８０３）。
【０１３３】
つぎに、制御フローグラフの中から選択されていない未選択のノードがあるか否かを判断し（ステップＳ１８０４）、未選択のノードがある場合には（ステップＳ１８０４：Ｙｅｓ）、ステップＳ１８０１に戻る。一方、未選択のノードがない場合には（ステップＳ１８０４：Ｎｏ）、図１７に示したステップＳ１７０４に移行する。
【０１３４】
これにより、実装記述内の要素（シナリオ、操作）または制約条件（事前条件または事後条件）に関する記述箇所と、制御フローグラフ内の当該記述箇所をあらわすノードとを関連付けることができる。
【０１３５】
（第２の関連付け処理手順）
つぎに、図１７に示したステップＳ１７０４における第２の関連付け処理の具体的な処理手順について説明する。図１９は、第２の関連付け処理の具体的な処理手順の一例を示すフローチャートである。図１９のフローチャートにおいて、まず、図１７に示したステップＳ１７０１において取得された仕様変更後の仕様記述の中から検出されていない未検出のシナリオに関する記述箇所があるか否かを判断する（ステップＳ１９０１）。
【０１３６】
ここで、未検出の記述箇所がある場合には（ステップＳ１９０１：Ｙｅｓ）、検出部６０５により、仕様変更後の仕様記述の中から任意のシナリオに関する記述箇所を検出する（ステップＳ１９０２）。このあと、仕様変更後の仕様記述の中から検出されていない上記シナリオを構成する操作に関する未検出の記述箇所があるか否かを判断する（ステップＳ１９０３）。
【０１３７】
ここで、未検出の記述箇所がある場合には（ステップＳ１９０３：Ｙｅｓ）、検出部６０５により、仕様変更後の仕様記述の中から上記シナリオを構成する任意の操作に関する記述箇所を検出し（ステップＳ１９０４）、検出された記述箇所を参照して、制御フローグラフの中から上記操作をあらわすノードを検出する（ステップＳ１９０５）。
【０１３８】
ここで、ノードが検出された場合は（ステップＳ１９０６：Ｙｅｓ）、第２の関連付け部６０４により、操作に関する記述箇所と操作をあらわすノードとを関連付ける（ステップＳ１９０７）。このあと、仕様変更後の仕様記述の中から検出されていない上記操作の事前条件または事後条件に関する記述箇所があるか否かを判断する（ステップＳ１９０８）。
【０１３９】
ここで、未検出の記述箇所がある場合には（ステップＳ１９０８：Ｙｅｓ）、検出部６０５により、仕様変更後の仕様記述の中から上記操作の事前条件または事後条件に関する記述箇所を検出し（ステップＳ１９０９）、制御フローグラフの中から上記事前条件または上記事後条件をあらわすノードを検出する（ステップＳ１９１０）。
【０１４０】
ここで、ノードが検出されなかった場合は（ステップＳ１９１１：Ｎｏ）、ステップＳ１９０８に戻る。一方、ノードが検出された場合は（ステップＳ１９１１：Ｙｅｓ）、第２の関連付け部６０４により、事前条件または事後条件に関する記述箇所と事前条件または事後条件をあらわすノードとを関連付けて（ステップＳ１９１２）、ステップＳ１９０８に戻る。
【０１４１】
また、ステップＳ１９０８において、未検出の記述箇所がない場合には（ステップＳ１９０８：Ｎｏ）、ステップＳ１９０３に戻る。さらに、ステップＳ１９０３において、未検出の記述箇所がない場合には（ステップＳ１９０３：Ｎｏ）、ステップＳ１９０１に戻る。そして、ステップＳ１９０１において、未検出の記述箇所がない場合には（ステップＳ１９０１：Ｎｏ）、図１７に示したステップＳ１７０５に移行する。
【０１４２】
また、ステップＳ１９０６において、ノードが検出されなかった場合には（ステップＳ１９０６：Ｎｏ）、出力部６１３により、仕様記述Ｓ２と実装記述Ｈとの間で操作名の不整合が発生していることを報知するエラー処理を実行して（ステップＳ１９１３）、一連の処理を終了する。
【０１４３】
これにより、仕様記述内のシナリオ、操作およびシナリオ、操作の事前条件、事後条件に関する記述箇所と、制御フローグラフ内の当該記述箇所をあらわすノードとを関連付けることができる。
【０１４４】
なお、ここでは事前条件および事後条件に関する記述箇所と、制御フローグラフ内の当該記述箇所をあらわすノードとを関連付けることとしたが、これにかかる一連の処理（ステップＳ１９０８〜ステップＳ１９１２）は省略可能である。なぜなら、ノード構造を利用して、制御フローグラフ内のシナリオ、操作をあらわすノードから、そのシナリオ、操作の事前条件および事後条件をあらわすノードを検索することができるからである。
【０１４５】
（抽出処理手順）
つぎに、図１７に示したステップＳ１７０５における抽出処理の具体的な処理手順について説明する。図２０は、抽出処理の具体的な処理手順の一例を示すフローチャートである。図２０のフローチャートにおいて、まず、特定部６０７により、図１７に示したステップＳ１７０１において取得された仕様変更前の仕様記述および仕様変更後の仕様記述を用いて、検証対象の仕様変更にともなう仕様変更後の仕様記述内の変更箇所を特定する（ステップＳ２００１）。
【０１４６】
このあと、仕様変更後の仕様記述の中から選択されていない未選択のシナリオがあるか否かを判断する（ステップＳ２００２）。ここで、未選択のシナリオがある場合には（ステップＳ２００２：Ｙｅｓ）、選択部６０８により、仕様変更後の仕様記述の中から任意のシナリオ（以下、「選択シナリオ」という）を選択する（ステップＳ２００３）。
【０１４７】
そして、探索部６０９により、ステップＳ２００１において特定された変更箇所の中から選択シナリオの事前条件または事後条件に関する記述箇所を探索する（ステップＳ２００４）。ここで、記述箇所が探索されなかった場合には（ステップＳ２００５：Ｎｏ）、ステップＳ２００７に移行する。
【０１４８】
一方、記述箇所が探索された場合には（ステップＳ２００５：Ｙｅｓ）、決定部６１０により、選択シナリオに関する記述箇所と選択シナリオの事前条件および事後条件に関する記述箇所とを、検証対象の仕様変更により影響を受ける影響範囲に決定する（ステップＳ２００６）。
【０１４９】
つぎに、選択シナリオを構成する操作のうち、仕様変更後の仕様記述の中から選択されていない未選択の操作があるか否かを判断する（ステップＳ２００７）。ここで、未選択の操作がある場合には（ステップＳ２００７：Ｙｅｓ）、選択部６０８により、仕様変更後の仕様記述の中から任意の操作（以下、「選択操作」という）を選択する（ステップＳ２００８）。
【０１５０】
そして、探索部６０９により、特定された変更箇所の中から、選択操作、選択操作の事前条件または事後条件のいずれかに関する記述箇所を探索する（ステップＳ２００９）。ここで、記述箇所が探索されなかった場合には（ステップＳ２０１０：Ｎｏ）、ステップＳ２００７に戻る。
【０１５１】
一方、記述箇所が探索された場合には（ステップＳ２０１０：Ｙｅｓ）、決定部６１０により、選択操作、選択シナリオに関する記述箇所と、選択操作、選択シナリオの事前条件および事後条件に関する記述箇所とを、検証対象の仕様変更により影響を受ける影響範囲に決定して（ステップＳ２０１１）、ステップＳ２００７に戻る。
【０１５２】
また、ステップＳ２００７において、未選択の操作がない場合には（ステップＳ２００７：Ｎｏ）、ステップＳ２００２に戻る。そして、ステップＳ２００２において、未選択のシナリオがない場合には（ステップＳ２００２：Ｎｏ）、抽出部６０６により、仕様変更後の仕様記述の中から決定された影響範囲を抽出して（ステップＳ２０１２）、図１７に示したステップＳ１７０６に移行する。
【０１５３】
これにより、仕様変更後の仕様記述の中から仕様変更により直接的および間接的に影響を受ける影響範囲（仕様変更にともなう不具合の発生原因となる記述箇所）を自動抽出することができる。
【０１５４】
（検索処理手順）
つぎに、図１７に示したステップＳ１７０６における検索処理の具体的な処理手順について説明する。図２１は、検索処理の具体的な処理手順の一例を示すフローチャートである。図２１のフローチャートにおいて、まず、図２０に示したステップＳ２０１２において抽出された影響範囲の中から選択されていない未選択のシナリオがあるか否かを判断する（ステップＳ２１０１）。
【０１５５】
ここで、未選択のシナリオがある場合には（ステップＳ２１０１：Ｙｅｓ）、選択部６０８により、影響範囲の中から任意のシナリオ（以下、「選択シナリオ」という）を選択する（ステップＳ２１０２）。そして、第１の検索部６１１により、図１７に示したステップＳ１７０４において実行された第２の関連付け処理の第２の関連付け結果を参照して、選択シナリオと関連付けられている制御フローグラフ内のノードを検索する（ステップＳ２１０３）。さらに、第１の検索部６１１により、制御フローグラフ内の検索されたノードに付属する事前条件および事後条件をあらわすノード（以下、「検索ノード」という）を検索する（ステップＳ２１０４）。
【０１５６】
そして、第２の検索部６１２により、図１７に示したステップＳ１７０３において実行された第１の関連付け処理の第１の関連付け結果を参照して、検索ノードと関連付けられている実装記述内の記述箇所を検索する（ステップＳ２１０５）。なお、ステップＳ２１０５において、実装記述内に検索ノードと関連付けられている記述箇所がない場合には未検索となる。
【０１５７】
このあと、ステップＳ２１０２において選択された選択シナリオを構成する操作のうち、影響範囲の中から選択されていない未選択の操作があるか否かを判断する（ステップＳ２１０６）。ここで、未選択の操作がある場合には（ステップＳ２１０６：Ｙｅｓ）、影響範囲の中から任意の操作（以下、「選択操作」という）を選択する（ステップＳ２１０７）。
【０１５８】
このあと、第１の検索部６１１により、第２の関連付け処理の第２の関連付け結果を参照して、選択操作と関連付けられている制御フローグラフ内のノードを検索し（ステップＳ２１０８）、さらに、第１の検索部６１１により、検索されたノードに付属する事前条件および事後条件をあらわす検索ノードを検索する（ステップＳ２１０９）。
【０１５９】
そして、第２の検索部６１２により、第１の関連付け処理の第１の関連付け結果を参照して、検索ノードと関連付けられている実装記述内の記述箇所を検索して（ステップＳ２１１０）、ステップＳ２１０６に移行する。なお、ステップＳ２１１０において、実装記述内に検索ノードと関連付けられている記述箇所がない場合には未検索となる。
【０１６０】
また、ステップＳ２１０６において、未選択の操作がない場合には（ステップＳ２１０６：Ｎｏ）、ステップＳ２１０１に戻り、未選択のシナリオがない場合には（ステップＳ２１０１：Ｎｏ）、図１７に示したステップＳ１７０７に移行する。
【０１６１】
これにより、検証対象の仕様変更にともなって変更すべき実装記述内の記述箇所（アサーション記述）を検索することができる。
【０１６２】
以上説明したように、本実施の形態によれば、検証対象の仕様変更後の機能に関する実装記述Ｈに基づく制御フローグラフ７００（ＣＦＧ記述９００）を介して、仕様変更後の仕様記述Ｓ２内のシナリオ、操作、事前条件および事後条件に関する記述箇所と、実装記述Ｈ内のシナリオ、操作、事前条件および事後条件に関する記述箇所とを関連付けることができる。
【０１６３】
また、この関連付け結果（第１および第２の関連付け結果）を用いて、検証対象の仕様変更により影響を受ける仕様記述Ｓ２内の記述箇所と関連付けられた実装記述Ｈ内の記述箇所を検索することができる。これにより、検証者は、検索結果（レポート情報１６００）を確認することで、検証対象の仕様変更にともなって変更すべき実装記述Ｈ内の記述箇所を把握することができる。
【０１６４】
特に、実装記述Ｈ内に散らばっている膨大な数（たとえば、数千〜数十万）のアサーション記述（事前条件および事前条件に関する記述箇所）の中から、検証対象の仕様変更にともなって変更すべきアサーション記述を効率的かつ網羅的に把握することができる。
【０１６５】
これにより、従来のように、仕様変更される度に、仕様変更前後の仕様記述Ｓ１，Ｓ２および実装記述Ｈを照らし合わせて変更すべきアサーションを人手でチェックするなどの面倒な作業が不要となる。このため、検証作業にかかる作業負担の軽減化および作業時間の短縮化を図ることができる。さらに、従来の人手によるチェックに比べて、変更すべきアサーション記述を網羅的に把握することが可能となるため、検証品質の向上を図ることができる。
【０１６６】
なお、本実施の形態で説明した検証支援方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーションなどのコンピュータで実行することにより実現することができる。このプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、このプログラムは、インターネットなどのネットワークを介して配布することが可能な媒体であってもよい。
【０１６７】
また、本実施の形態で説明した検証支援装置１００は、スタンダードセルやストラクチャードＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）などの特定用途向けＩＣ（以下、単に「ＡＳＩＣ」と称す。）やＦＰＧＡなどのＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）によっても実現することができる。具体的には、たとえば、上述した検証支援装置１００の機能（取得部６０１〜出力部６１３）をＨＤＬ記述によって機能定義し、そのＨＤＬ記述を論理合成してＡＳＩＣやＰＬＤに与えることにより、検証支援装置１００を製造することができる。
【０１６８】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１６９】
（付記１）検証対象の仕様と実装との整合性確認をコンピュータに支援させる検証支援プログラムであって、
前記コンピュータを、
前記検証対象の機能を実現するために実行される一連の要素群および前記機能を実現するために満たすべき前記要素の制約条件が記述された仕様記述と、前記検証対象の機能に関する実装記述とを取得する取得手段、
前記取得手段によって取得された実装記述に基づいて、前記一連の要素群および当該要素の制約条件をノードとしてグラフ化された構造体を作成する作成手段、
前記作成手段によって作成された構造体内のノードと、当該ノードがあらわす要素または制約条件に関する前記実装記述内の記述箇所とを関連付ける第１の関連付け手段、
前記仕様記述内の要素または制約条件に関する記述を用いて、前記構造体の中から前記要素または前記制約条件をあらわすノードを検出することにより、前記構造体内のノードと、当該ノードがあらわす要素または制約条件に関する前記仕様記述内の記述箇所とを関連付ける第２の関連付け手段、
前記第１および第２の関連付け手段によって関連付けられた関連付け結果を出力する出力手段、
として機能させることを特徴とする検証支援プログラム。
【０１７０】
（付記２）前記コンピュータを、
前記仕様記述の中から前記検証対象の仕様変更により影響を受ける記述箇所を抽出する抽出手段、
前記第２の関連付け手段によって関連付けられた関連付け結果に基づいて、前記構造体の中から前記抽出手段によって抽出された記述箇所と関連付けられたノードを検索する第１の検索手段、
前記第１の関連付け手段によって関連付けられた関連付け結果に基づいて、前記実装記述の中から前記第１の検索手段によって検索されたノードと関連付けられた記述箇所を検索する第２の検索手段として機能させ、
前記出力手段は、
前記第２の検索手段によって検索された検索結果を出力することを特徴とする付記１に記載の検証支援プログラム。
【０１７１】
（付記３）前記コンピュータを、
前記検証対象の仕様変更前および仕様変更後の仕様記述を用いて、前記検証対象の仕様変更にともなう前記仕様変更後の仕様記述内の変更箇所を特定する特定手段、
前記特定手段によって特定された変更箇所の中から任意の要素を選択する選択手段、
前記仕様変更後の仕様記述の中から前記選択手段によって選択された要素の制約条件を探索する探索手段、
前記探索手段によって探索された制約条件に関する記述箇所を前記検証対象の仕様変更により影響を受ける記述箇所に決定する決定手段として機能させ、
前記抽出手段は、
前記仕様変更後の仕様記述の中から、前記変更箇所と前記決定手段によって決定された記述箇所とを抽出することを特徴とする付記２に記載の検証支援プログラム。
【０１７２】
（付記４）前記探索手段は、
前記仕様変更後の仕様記述に基づく要素間の遷移関係に基づいて、前記選択手段によって選択された要素を起点として遷移元となる要素を順次辿ることにより、前記仕様変更後の仕様記述の中から前記仕様変更により影響を受ける要素を探索し、
前記決定手段は、
前記探索手段によって探索された要素に関する記述箇所と、当該要素の制約条件に関する記述箇所とを前記検証対象の仕様変更により影響を受ける記述箇所に決定することを特徴とする付記３に記載の検証支援プログラム。
【０１７３】
（付記５）前記選択手段は、
前記仕様変更後の仕様記述の中から任意の制約条件を選択し、
前記探索手段は、
前記仕様変更後の仕様記述の中から前記選択手段によって選択された制約条件が定義された要素を探索し、
前記決定手段は、
前記探索手段によって探索された要素に関する記述箇所を前記検証対象の仕様変更により影響を受ける記述箇所に決定することを特徴とする付記３または４に記載の検証支援プログラム。
【０１７４】
（付記６）前記要素は、前記機能を構成するシナリオまたは当該シナリオを構成する操作であり、
前記制約条件は、前記シナリオまたは前記操作の事前条件、事後条件および不変条件の少なくともいずれかであり、
前記作成手段は、
前記実装記述に記述されている前記シナリオ、前記操作、前記事前条件、前記事後条件および前記不変条件をノードとして有向グラフ化することにより、前記検証対象の実装時における制御の流れをあらわす制御フローグラフを作成することを特徴とする付記１〜５のいずれか一つに記載の検証支援プログラム。
【０１７５】
（付記７）検証対象の仕様と実装との整合性確認を支援する検証支援装置であって、
前記検証対象の機能を実現するために実行される一連の要素群および前記機能を実現するために満たすべき前記要素の制約条件が記述された仕様記述と、前記検証対象の機能に関する実装記述とを取得する取得手段と、
前記取得手段によって取得された実装記述に基づいて、前記一連の要素群および当該要素の制約条件をノードとしてグラフ化された構造体を作成する作成手段と、
前記作成手段によって作成された構造体内のノードと、当該ノードがあらわす要素または制約条件に関する前記実装記述内の記述箇所とを関連付ける第１の関連付け手段と、
前記仕様記述内の要素または制約条件に関する記述を用いて、前記構造体の中から前記要素または前記制約条件をあらわすノードを検出することにより、前記構造体内のノードと、当該ノードがあらわす要素または制約条件に関する前記仕様記述内の記述箇所とを関連付ける第２の関連付け手段と、
前記第１および第２の関連付け手段によって関連付けられた関連付け結果を出力する出力手段と、
を備えることを特徴とする検証支援装置。
【０１７６】
（付記８）制御手段および記憶手段を備え、検証対象の仕様と実装との整合性確認を支援するコンピュータが、
前記制御手段により、前記検証対象の機能を実現するために実行される一連の要素群および前記機能を実現するために満たすべき前記要素の制約条件が記述された仕様記述と、前記検証対象の機能に関する実装記述とを取得する取得工程と、
前記制御手段により、前記取得工程によって取得された実装記述に基づいて、前記一連の要素群および当該要素の制約条件をノードとしてグラフ化された構造体を作成する作成工程と、
前記制御手段により、前記作成工程によって作成された構造体内のノードと、当該ノードがあらわす要素または制約条件に関する前記実装記述内の記述箇所とを関連付ける第１の関連付け工程と、
前記制御手段により、前記仕様記述内の要素または制約条件に関する記述を用いて、前記構造体の中から前記要素または前記制約条件をあらわすノードを検出することにより、前記構造体内のノードと、当該ノードがあらわす要素または制約条件に関する前記仕様記述内の記述箇所とを関連付ける第２の関連付け工程と、
前記制御手段により、前記第１および第２の関連付け工程によって関連付けられた関連付け結果を出力する出力工程と、
を実行することを特徴とする検証支援方法。
【図面の簡単な説明】
【０１７７】
【図１】本実施の形態の概要を示す説明図である。
【図２】検証支援装置のハードウェア構成を示すブロック図である。
【図３】仕様記述のデータ構造をモデル化して示す説明図である。
【図４】仕様記述の具体例を示す説明図（その１）である。
【図５】実装記述の具体例を示す説明図である。
【図６】検証支援装置の機能的構成を示すブロック図である。
【図７】制御フローグラフの具体例を示す説明図である。
【図８】制御フローグラフと実装記述とのリンク関係をあらわす説明図である。
【図９】制御フローグラフのデータ構造を示す説明図（その１）である。
【図１０】制御フローグラフと仕様記述とのリンク関係をあらわす説明図である。
【図１１】制御フローグラフのデータ構造を示す説明図（その２）である。
【図１２】仕様記述の具体例を示す説明図（その２）である。
【図１３】仕様変更により影響を受ける記述箇所を抽出する流れを示す概念図である。
【図１４】影響範囲記述の具体例を示す説明図である。
【図１５】実装記述内の変更すべき記述箇所を検索する流れを示す概念図である。
【図１６】レポート情報の具体例を示す説明図である。
【図１７】検証支援処理手順の一例を示すフローチャートである。
【図１８】第１の関連付け処理の具体的な処理手順の一例を示すフローチャートである。
【図１９】第２の関連付け処理の具体的な処理手順の一例を示すフローチャートである。
【図２０】抽出処理の具体的な処理手順の一例を示すフローチャートである。
【図２１】検索処理の具体的な処理手順の一例を示すフローチャートである。
【符号の説明】
【０１７８】
１００  検証支援装置
６０１  取得部
６０２  作成部
６０３  第１の関連付け部
６０４  第２の関連付け部
６０５  検出部
６０６  抽出部
６０７  特定部
６０８  選択部
６０９  探索部
６１０  決定部
６１１  第１の検索部
６１２  第２の検索部
６１３  出力部
【図１】
2010055293.tif 000003
【図２】
2010055293.tif 000004
【図３】
2010055293.tif 000005
【図４】
2010055293.tif 000006
【図５】
2010055293.tif 000007
【図６】
2010055293.tif 000008
【図７】
2010055293.tif 000009
【図８】
2010055293.tif 000010
【図９】
2010055293.tif 000011
【図１０】
2010055293.tif 000012
【図１１】
2010055293.tif 000013
【図１２】
2010055293.tif 000014
【図１３】
2010055293.tif 000015
【図１４】
2010055293.tif 000016
【図１５】
2010055293.tif 000017
【図１６】
2010055293.tif 000018
【図１７】
2010055293.tif 000019
【図１８】
2010055293.tif 000020
【図１９】
2010055293.tif 000021
【図２０】
2010055293.tif 000022
【図２１】
2010055293.tif 000023