(57)【要約】      （修正有）【課題】ユーザの作業量を削減することができる決定プログラムおよび決定方法を提供する。【解決手段】決定プログラムは、単体検査の対象であるソースコードを読み込みＳ１、ソースコードに含まれる条件分岐を抽出しＳ２、条件分岐の条件式に含まれる変数の取り得る値と、条件式の判定結果と、の組み合わせに基づき、単体検査を行う場合に代入する変数の設定値を決定しＳ３、決定した設定値を出力するＳ４。【選択図】図１
2018124654.tif 000002
【特許請求の範囲】
【請求項１】
単体検査の対象であるソースコードを読み込む手順と、
前記ソースコードに含まれる条件分岐を抽出する手順と、
前記条件分岐の条件式に含まれる変数の取り得る値と、前記条件式の判定結果と、の組み合わせに基づき、前記単体検査を行う場合に代入する前記変数の設定値を決定する手順と、
決定した前記設定値を出力する手順と、
をコンピュータに実行させることを特徴とする決定プログラム。
【請求項２】
前記変数の設定値を決定する手順として、
前記変数の取り得る値の全てが少なくとも１回は代入されるように、前記設定値を決定すること
を特徴とする請求項１に記載の決定プログラム。
【請求項３】
前記変数の設定値を決定する手順として、
前記変数の取り得る値と前記判定結果との組み合わせが少なくとも１回は検査されるように、前記設定値を決定すること
を特徴とする請求項１または２に記載の決定プログラム。
【請求項４】
前記変数の設定値を決定する手順として、
複数の前記変数の取り得る値の組み合わせのうち、前記ソースコードでは組み合わせられない組み合わせを除外して前記設定値を決定すること
を特徴とする請求項１〜３のいずれか一項に記載の決定プログラム。
【請求項５】
前記変数の設定値を決定する手順として、
複数の前記変数の取り得る値の組み合わせのうち、判定結果に影響を与えない前記変数の前記設定値を含む組み合わせを除外して前記設定値を決定すること
を特徴とする請求項１〜４のいずれか一項に記載の決定プログラム。
【請求項６】
前記変数の設定値を決定する手順として、
前記条件式に含まれる演算子の演算順序に応じて、判定結果に影響を与えない前記変数の前記設定値を含む前記組み合わせの少なくとも１つが検査されるように前記設定値を決定すること
を特徴とする請求項５に記載の決定プログラム。
【請求項７】
前記条件分岐を抽出する手順は、
前記ソースコードのプリプロセス実行時に行われること
を特徴とする請求項１〜６のいずれか一項に記載の決定プログラム。
【請求項８】
単体検査の対象であるソースコードを読み込む工程と、
前記ソースコードに含まれる条件分岐を抽出する工程と、
前記条件分岐の条件式に含まれる変数の取り得る値と、前記条件式の判定結果と、の組み合わせに基づき、前記単体検査を行う場合に代入する前記変数の設定値を決定する工程と、
決定した前記設定値を出力する工程と、
を含むことを特徴とする決定方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、決定プログラムおよび決定方法に関する。
【背景技術】
【０００２】
従来、作成したソースコードが正しく動作するか否かを検査する方法として、ソースコードのユニットごとに検査する単体検査が知られている。単体検査では、例えばテストデータを用いて検査対象であるソースコードをテスト項目ごとに実行することで、ソースコードの欠陥を検査する。
【０００３】
例えば、ソースコードで行うテスト項目を抽出する方法として、当該ソースコードの条件分岐を抽出し、抽出した条件分岐の正否両条件をプログラム入力変数のみで表した式に分解する方法が知られている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平５−２１０５３７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来の方法では条件分岐の正否両条件をプログラム入力変数で表しているため、プログラム入力変数に代入する値をユーザが設定する必要がある。例えばソースコードの規模が大きくなり、ユーザが設定すべき変数の数が増えるほど、ユーザの作業量が増えてしまう。
【０００６】
本発明は、上記に鑑みてなされたものであって、ユーザの作業量を削減することができる決定プログラムおよび決定方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述した課題を解決し、目的を達成するために、本発明に係る決定プログラムは、単体検査の対象であるソースコードを読み込む手順をコンピュータに実行させる。更に決定プログラムは、ソースコードに含まれる条件分岐を抽出する手順をコンピュータに実行させる。更に決定プログラムは、条件分岐の条件式に含まれる変数の取り得る値と、条件式の判定結果と、の組み合わせに基づき、単体検査を行う場合に代入する変数の設定値を決定する手順をコンピュータに実行させる。更に決定プログラムは、決定した設定値を出力する手順をコンピュータに実行させる。
【発明の効果】
【０００８】
本発明によれば、ユーザの作業量を削減することができる。
【図面の簡単な説明】
【０００９】
【図１】図１は、実施形態に係る決定方法を説明する図である。
【図２】図２は、実施形態に係る検査装置の構成を示すブロック図である。
【図３】図３は、実施形態に係るソースコードの一例を示す図である。
【図４】図４は、実施形態に係る変数情報を説明する図である。
【図５Ａ】図５Ａは、実施形態に係る組み合わせ生成部が生成する組み合わせテーブルの一例を示す図である。
【図５Ｂ】図５Ｂは、実施形態に係る重複除去部が生成する設定値テーブルを示す図である。
【図６】図６は、実施形態に係る組み合わせ生成部が生成する組み合わせテーブルの一例を示す図である。
【図７Ａ】図７Ａは、実施形態に係る組み合わせ生成部が生成する組み合わせテーブルの一例を示す図である。
【図７Ｂ】図７Ｂは、実施形態に係る重複除去部が生成する設定値テーブルの一例を示す図である。
【図８Ａ】図８Ａは、実施形態に係るソースコードの一例を示す図である。
【図８Ｂ】図８Ｂは、実施形態に係る組み合わせ生成部が生成する組み合わせテーブルの一例を示す図である。
【図９】図９は、実施形態に係るソースコードの一例を示す図である。
【図１０】図１０は、実施形態に係るソースコードの一例を示す図である。
【図１１Ａ】図１１Ａは、実施形態に係るソースコードの一例を示す図である。
【図１１Ｂ】図１１Ｂは、実施形態に係る組み合わせ生成部が生成する組み合わせテーブルの一例を示す図である。
【図１１Ｃ】図１１Ｃは、実施形態に係る重複除去部が生成するテーブルの一例を示す図である。
【図１１Ｄ】図１１Ｄは、実施形態に係る重複除去部が生成するテーブルの一例を示す図である。
【図１１Ｅ】図１１Ｅは、実施形態に係る重複除去部が生成する設定値テーブルの一例を示す図である。
【図１２】図１２は、実施形態に係る検査装置が実行する決定処理の処理手順を示すフローチャートである。
【図１３】図１３は、実施形態の変形例に係る組み合わせ生成部が生成する組み合わせテーブルの一例を示す図である。
【発明を実施するための形態】
【００１０】
以下、添付図面を参照して、本願の開示する決定プログラムおよび決定方法の実施形態を詳細に説明する。なお、この実施形態により本発明が限定されるものではない。
【００１１】
（１．決定方法）
図１を用いて、実施形態に係る決定方法について説明する。図１は、実施形態に係る決定方法を説明する図である。実施形態に係る決定方法は、ソースコードの単体検査を行う場合にソースコードに含まれる変数に代入（設定）する設定値を決定する方法であり、例えば単体検査を行う検査装置で実行されるものとする。
【００１２】
ここで、ソースコードの単体検査とは、テストデータを用いてモジュールごとにソースコードを実行することで、ソースコードに不備がないか確認する検査のことである。単体検査には、例えば条件分岐で正しく処理が分岐するか否かを確認する検査が含まれる。かかる検査では、条件分岐の条件式に含まれる変数に取り得る値を設定することで、正しく条件分岐が行われるか否かが検査される。
【００１３】
したがって、テストデータには、例えば条件式に含まれる変数の設定値が含まれる。変数が複数の設定値を取り得る場合、取り得る全ての設定値に対して単体検査が行われるように、テストデータを生成する。
【００１４】
このとき、条件式に複数の変数が含まれる場合は、複数の変数の取り得る値を組み合わせてテストデータを生成する。したがって、例えば、ソースコードの規模が大きくなり、ソースコードに含まれる変数の数が増加すると、複数の変数の設定値の組み合わせ数が増加する。そのため、検査を行う人間（ユーザ）がテストデータを生成すると、作業量が増加するとともに、かかる組み合わせに漏れが発生してしまう可能性がある。
【００１５】
そこで、実施形態に係る決定方法では、ソースコード中の条件分岐の条件式に含まれる変数を抽出し、抽出した変数の取り得る値の組み合わせに基づいて、テストデータを生成するようにした。
【００１６】
これにより、検査装置が自動でテストデータを生成することができ、ユーザの作業量を削減することができるとともに、単体検査の漏れを抑制することができる。
【００１７】
以下、図１を用いて、テストデータとして変数の設定値を決定する決定方法について具体的に説明する。
【００１８】
図１に示すように、検査装置は、まず検査対象であるＣ言語で記載されたソースコードを読み込む（ステップＳ１）。図１では、プリプロセッサ指令の条件分岐を示す「＃ｉｆ」を含むソースコード３１を読み込むものとする。
【００１９】
次に、検査装置は、ソースコード３１に含まれる条件分岐を抽出する（ステップＳ２）。図１の例では、「＃ｉｆ  （Ａ＝＝ＵＳＥ）＆＆（Ｂ＝＝ＵＳＥ）」を抽出する。
【００２０】
検査装置は、抽出した条件分岐の条件式の取り得る値と条件式の判定結果との組み合わせに基づいて条件式に含まれる変数の設定値を決定する（ステップＳ３）。
【００２１】
図１に示す条件分岐の条件式「（Ａ＝＝ＵＳＥ）＆＆（Ｂ＝＝ＵＳＥ）」は、２つの条件式の論理積で表されている。ここで、条件分岐の条件式を条件式ｃと記載する。また、条件式ｃの論理演算子「＆＆」の左辺の条件式「Ａ＝＝ＵＳＥ」を条件式ａ、右辺の条件式「Ｂ＝＝ＵＳＥ」を条件式ｂと記載する。また、条件式ａには変数Ａが含まれており、条件式ｂには変数Ｂが含まれている。なお、ここでは、変数Ａ、Ｂの取り得る値が「ＵＳＥ」、「ＮＯＴ」、「ＯＴＨＥＲ」の３つであるとして説明する。
【００２２】
検査装置は、条件式ｃに含まれる変数Ａ、Ｂの設定値を決定するために、まず変数Ａ、Ｂの取り得る値および各条件式ａ〜ｃの判定結果の組み合わせテーブル３３ａを生成する。例えば、変数Ａが「ＵＳＥ」、変数Ｂが「ＵＳＥ」である場合、条件式ａ（Ａ＝＝ＵＳＥ）の判定結果はＴＲＵＥ（図１では「Ｔ」と記載）になり、条件式ｂ（Ｂ＝＝ＵＳＥ）の判定結果もＴＲＵＥになる。したがって、条件式ａ、ｂの論理積である条件式ｃの判定結果はＴＲＵＥになる。
【００２３】
検査装置は、変数Ａ、Ｂの取り得る値の組み合わせを変えながら各条件式ａ〜ｃの判定を行い、変数Ａ、Ｂの取り得る値と、各条件式ａ〜ｃの判定結果との組み合わせテーブル３３ａを生成する。変数Ａ、Ｂはともに３つの設定値を取り得るため、組み合わせ数は３×３＝９通りとなる。
【００２４】
検査装置は、生成した組み合わせテーブル３３ａに基づき、単体検査を行う場合に設定する設定値の組み合わせを決定する。
【００２５】
ここで、変数Ａ、Ｂの取り得る値の組み合わせ全てについて単体検査を行うとすると、組み合わせ数が多くなり、検査に時間がかかってしまう場合がある。例えば、変数の数が多い場合や、変数の取り得る値の数が多い場合、検査数が多くなり検査にかかる時間が長くなる。
【００２６】
そこで、検査装置は、例えば組み合わせテーブル３３ａの中から検査不要な組み合わせを除外して、検査時に設定する設定値の組み合わせを決定し設定値テーブル３３を生成する。
【００２７】
例えば、変数Ａ、Ｂの取り得る値の組み合わせには、検査対象のソースコードでは組み合わせられない組み合わせが含まれる。具体的には、例えば、ある変数Ｃが車両の種類を表し、別の変数Ｄがトランスミッションの種類を表しているものとする。このとき、ある車種Ｓのトランスミッションがオートマチックトランスミッション（ＡＴ）のみであり、マニュアルトランスミッション（ＭＴ）がないとする。この場合、変数Ｃ＝＝Ｓ、変数Ｄ＝＝ＭＴの組み合わせは、車種Ｓの車両で実行されるソースコードでは組み合わせられない組み合わせとなる。このように、変数の取り得る値によっては、実際には組み合わせられない場合がある。実際にはソースコード上で組み合わせることがない組み合わせについて単体検査を行うと、検査数が無駄に増加し、検査時間が長くなってしまう。
【００２８】
そこで、検査装置は、組み合わせられない変数の設定値の組み合わせでは単体検査を行わないとして、かかる組み合わせを除外する。例えば、変数Ａが「ＮＯＴ」であり、変数Ｂが「ＯＴＨＥＲ」である組み合わせが、ソースコード上で許容されない組み合わせであるとする。すなわち、図１に示す組み合わせテーブル３３ａの９行目の組み合わせが許容されない場合、検査装置はかかる９行目の組み合わせを単体検査時の設定値の組み合わせから除外する。
【００２９】
また、検査装置は、条件式ｃの判定後の処理が重複する変数Ａ、Ｂの組み合わせを除外する。これは、組み合わせテーブル３３ａの中には、変数の設定値にかかわらず同じ処理を行う組み合わせが含まれることがあるためである。
【００３０】
例えば条件式ｃに２つの条件式ａ、ｂが含まれる場合、左の条件式ａから順に条件判定を行う。そのため、条件式ａが不成立（ＦＡＬＳＥ、図１では「Ｆ」と記載）の場合、条件式ｂの判定結果にかかわらず条件式ｃは不成立となりソースコード３１の処理Ｐ１は実行されない。なお、例えば、図１の組み合わせテーブル３３ａでは、２、３、５、６、８、９行目の組み合わせで、変数Ｂの値にかかわらず、いずれも条件式ｃがＦとなっている。
【００３１】
このように、条件式ａがＦ（不成立）となった場合、条件式ｂの正否、すなわち変数Ｂの値は、条件式ｃの判定結果に影響を与えない。したがって、例えば条件式ａがＦとなる検査を少なくとも一度行えば、その他の条件式ａがＦとなる検査を省略しても単体検査の精度に影響を与えない。
【００３２】
そこで、検査装置は、図１の組み合わせテーブル３３ａの中から、５、６、８および９行目の組み合わせを除外して設定値の組み合わせを決定する。なお、検査装置は、変数Ａ、Ｂの取り得る値が、それぞれ少なくとも１回は設定されるように設定値を決定する。したがって、検査装置は、変数Ａが「ＯＴＨＥＲ」である場合の単体検査を行うために、図１の組み合わせテーブル３３ａの３行目の組み合わせは除外しない。このように、検査装置は、図１の設定値テーブル３３に示すように５つの組み合わせを、単体検査を行う場合の変数Ａ、Ｂの設定値の組み合わせに決定する。
【００３３】
検査装置は、決定した設定値の組み合わせを例えば図示しない記憶部に出力する（ステップＳ４）。
【００３４】
このように、検査装置が実施形態に係る決定方法を実行することで、ソースコードに含まれる変数の設定値を自動で決定することができ、ユーザの作業量を削減することができる。また、ユーザが設定値を設定する場合に比べて、設定漏れを抑制することができる。
【００３５】
さらに、検査装置は、検査対象のソースコードでは組み合わせられない組み合わせや、条件式ｃの判定結果に影響しない変数Ｂの値を含む組み合わせを除外して、設定値の組み合わせを決定する。
【００３６】
これにより、検査装置は、単体検査の検査数を低減することができる。例えば図１では、変数Ａ、Ｂの取り得る値の組み合わせ全てで検査を行う場合、９通りの検査を行わなければならないが、検査装置が所定の組み合わせを除外して、設定値の組み合わせ数を５つに減らすことで、検査数を５に削減することができる。
【００３７】
（２．検査装置）
以下、検査装置１の構成例について、図２〜図１２を参照して説明する。図２は、実施形態に係る検査装置１の構成を示すブロック図である。なお、図２では、実施形態の特徴を説明するために必要な構成要素のみを機能ブロックで表しており、一般的な構成要素についての記載を省略している。
【００３８】
換言すれば、図２に図示される各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。例えば、各機能ブロックの分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することが可能である。
【００３９】
実施形態に係る検査装置１は、決定部１０と、検査部２０と、記憶部３０とを備える。決定部１０は、読込部１１０と、抽出部１２０と、設定値決定部１３０と、出力部１４０と、を備える。記憶部３０は、ソースコード３１、変数情報３２、設定値テーブル３３を記憶する。
【００４０】
ここで、検査装置１は、例えば、ＣＰＵ（Central  Processing  Unit）、ＲＯＭ（Read  Only  Memory）、ＲＡＭ（Random  Access  Memory）、ＨＤＤ（Hard  Disk  Drive）、入出力ポートなどを有するコンピュータや各種の回路を含む。
【００４１】
コンピュータのＣＰＵは、例えば、ＲＯＭに記憶された決定プログラムを読み出して実行することによって、決定部１０の読込部１１０、抽出部１２０、設定値決定部１３０および出力部１４０として機能する。また、コンピュータのＣＰＵは、例えばＲＯＭに記憶された検査プログラムを読み出して実行することによって、検査部２０として機能する。
【００４２】
また、記憶部３０は、たとえば、ＲＡＭやＨＤＤに対応する。ＲＡＭやＨＤＤは、ソースコード３１、変数情報３２、設定値テーブル３３、決定プログラムや検査プログラム等の各種プログラムに関する情報等を記憶することができる。なお、検査装置１は、有線や無線のネットワークで接続された他のコンピュータや可搬型記録媒体を介して上記したプログラムや各種情報を取得することとしてもよい。
【００４３】
（２．１．決定部）
決定部１０は、単体検査を行う場合に条件分岐の条件式に含まれる変数に設定する設定値の組み合わせを決定する。決定部１０は、上述したように、読込部１１０と、抽出部１２０と、設定値決定部１３０と、出力部１４０と、を備える。
【００４４】
なお、ここでは、決定部１０がＣ言語で記載されたソースコード３１の変数の設定値を決定する場合について説明するがソースコード３１に用いられるプログラミング言語はＣ言語に限定されない。例えばソースコード３１がＦＯＲＴＲＡＮ等の他のプログラミング言語で記載されていてもよい。
【００４５】
また、ここでは、ソースコード３１のプリプロセス実行時に決定部１０がソースコード３１に含まれるプリプロセッサ指令の条件分岐を抽出するものとするが、これに限定されない。例えば、決定部１０が抽出する条件分岐はプリプロセッサ指令以外の条件分岐であってもよい。また、プリプロセス実行時以外であっても、決定部１０が設定値を決定するために条件分岐を抽出するようにしてもよい。
【００４６】
（２．１．１．読込部）
読込部１１０は、記憶部３０から検査対象であるソースコード３１および変数情報３２を読み出す。読込部１１０は読み出したソースコード３１を抽出部１２０に出力する。また、読込部１１０は読み出した変数情報３２を設定値決定部１３０に出力する。
【００４７】
（２．１．２．抽出部）
抽出部１２０は、読込部１１０からソースコード３１を受け取ると、ソースコード３１から条件分岐の条件式や変数等、後段の設定値決定部１３０で変数の値を設定するために必要な情報を抽出する。抽出部１２０は、分岐抽出部１２１と、変数抽出部１２２と、定義抽出部１２３と、を備える。
【００４８】
（２．１．２．１．分岐抽出部）
分岐抽出部１２１は、ソースコード３１から条件分岐を抽出する。例えば、読込部１１０が図３に示すソースコード３１を読み込んだ場合、分岐抽出部１２１は、条件分岐「＃ｉｆ（Ａ＝＝ＵＳＥ）｜｜（Ｂ＝＝ＵＳＥ）」を抽出する。このように、分岐抽出部１２１は、ソースコード３１に含まれる条件分岐に関する指令「＃ｉｆ」や「＃ｅｌｓｅ」、「＃ｅｌｉｆ」等を検出することで、ソースコード３１に含まれる条件分岐を抽出する。なお、図３は、実施形態に係るソースコード３１の一例を示す図である。
【００４９】
分岐抽出部１２１は、抽出した条件分岐を変数抽出部１２２に出力する。
【００５０】
なお、ここでは、分岐抽出部１２１が条件分岐を１つ抽出する例について説明したが、分岐抽出部１２１が抽出する条件分岐の数は１つに限定されない。分岐抽出部１２１は、例えばソースコード３１に含まれる条件分岐を全て抽出する。ソースコード３１に複数の条件分岐が含まれる場合、分岐抽出部１２１は、複数の条件分岐を抽出する。
【００５１】
（２．１．２．２．変数抽出部）
変数抽出部１２２は、分岐抽出部１２１が抽出した条件分岐の条件式に含まれる変数を抽出する。変数抽出部１２２は、条件式に含まれる関係演算子の左辺のオペランドを変数として抽出する。例えば図３のソースコード３１の場合、変数抽出部１２２は、変数Ａ、Ｂを抽出する。
【００５２】
変数抽出部１２２は、抽出した変数Ａ、Ｂを定義抽出部１２３に出力する。
【００５３】
（２．１．２．３．定義抽出部）
定義抽出部１２３は、変数抽出部１２２が抽出した変数Ａ、Ｂの定義をソースコード３１から抽出する。定義抽出部１２３は、例えば変数Ａ、Ｂの取り得る値を抽出する。ここでは、定義抽出部１２３は、変数Ａ、Ｂの取り得る値として「ＵＳＥ」、「ＮＯＴ」、「ＯＴＨＥＲ」の３つを抽出するものとする。
【００５４】
定義抽出部１２３は、変数Ａ、Ｂおよびかかる変数Ａ、Ｂの取り得る値を設定値決定部１３０に出力する。
【００５５】
なお、ここでは変数Ａ、Ｂの取り得る値を文字列としているが、これに限定されない。例えば変数Ａ、Ｂが「０」、「１」、「２」などの整数であってもよい。また、ここでは、定義抽出部１２３がソースコード３１から変数Ａ、Ｂの取り得る値を抽出するとしたが、これに限定されない。定義抽出部１２３が、例えば変数Ａ、Ｂごとに取り得る値を予め定義した定義情報に基づいて変数Ａ、Ｂの取り得る値を抽出してもよい。なお、定義情報は例えば記憶部３０に記憶される。
【００５６】
また、ここでは、分岐抽出部１２１および変数抽出部１２２が条件分岐および変数Ａ、Ｂを抽出してから変数Ａ、Ｂの取り得る値を抽出するとしたが、これに限定されない。例えば、分岐抽出部１２１が条件分岐を抽出する前に、定義抽出部１２３がソースコード３１に含まれる変数の定義情報を抽出するようにしてもよい。この場合、定義抽出部１２３は、抽出した定義情報に基づき、変数抽出部１２２が抽出した変数Ａ、Ｂの取り得る値を決定するものとする。
【００５７】
（２．１．３．設定値決定部）
設定値決定部１３０は、抽出部１２０が抽出した変数（図３の例では変数Ａ、Ｂ）の取り得る値および条件式の判定結果の組み合わせに基づき、単体検査を行う場合に変数に設定する値（設定値）を決定する。設定値決定部１３０は、組み合わせ生成部１３１と、禁止除去部１３２と、重複除去部１３３とを備える。
【００５８】
（２．１．３．１．組み合わせ生成部）
組み合わせ生成部１３１は、抽出部１２０が抽出した変数の取り得る値および条件分岐の条件式の判定結果の組み合わせを含む組み合わせテーブルを生成する。組み合わせ生成部１３１は、生成した組み合わせを禁止除去部１３２に出力する。なお、組み合わせ生成部１３１による組み合わせの生成例については、図５Ａ、図６等を用いて後述する。
【００５９】
（２．１．３．２．禁止除去部）
禁止除去部１３２は、組み合わせ生成部１３１が生成した変数の取り得る値の組み合わせのうち、ソースコード３１を実行する場合に組み合わせられない、すなわち組み合わせが禁止されている組み合わせを除外する。
【００６０】
禁止除去部１３２は、読込部１１０が読み込んだ変数情報３２に基づいて禁止されている組み合わせを除外する。図４に示すように、変数情報３２は、変数Ａ、Ｂの組み合わせの可否を示すテーブルである。なお、図４は、実施形態に係る変数情報３２を説明する図である。図４では、ソースコード３１を実行する場合に組み合わせられる変数Ａ、Ｂの組を「○」で表し、組み合わせられない変数Ａ、Ｂの組を「×」で表している。
【００６１】
例えば、図４では、変数Ａが「ＯＴＨＥＲ」であり、変数Ｂが「ＯＴＨＥＲ」である組み合わせが「×」になっている。この場合、禁止除去部１３２は、変数Ａが「ＯＴＨＥＲ」であり、変数Ｂが「ＯＴＨＥＲ」である組み合わせを、組み合わせ生成部１３１が生成した組み合わせテーブルから除去する。
【００６２】
なお、ここでは、禁止除去部１３２が、組み合わせ生成部１３１が生成した組み合わせテーブルから組み合わせが禁止されている組み合わせを除去するとしたが、これに限定されない。例えば、組み合わせ生成部１３１が、変数情報３２を参照して禁止されている組み合わせを除いて組み合わせテーブルを生成するようにしてもよい。これにより、禁止除去部１３２が行う処理を省略することができる。
【００６３】
また、ここでは、禁止除去部１３２が記憶部３０に記憶される変数情報３２に基づいて除去する組み合わせを決定するとしたが、これに限定されない。例えばソースコード３１に組み合わせを禁止する記載がある場合、禁止除去部１３２がかかる記載に基づいて組み合わせテーブルから除去するようにしてもよい。例えば、変数Ａが「ＯＴＨＥＲ」であり、かつ、変数Ｂが「ＯＴＨＥＲ」である場合にエラーとなる記載がソースコード３１に含まれている場合、禁止除去部１３２が、変数Ａが「ＯＴＨＥＲ」であり、変数Ｂが「ＯＴＨＥＲ」である組み合わせを除去するようにしてもよい。
【００６４】
（２．１．３．３．重複除去部）
重複除去部１３３は、条件式の判定後の処理が重複する変数の組み合わせを、組み合わせ生成部１３１が生成した組み合わせテーブルから除去し、単体検査に用いる変数の設定値を決定する。重複除去部１３３は、決定した設定値を含む設定値テーブル３３を出力部１４０に出力する。
【００６５】
以下、図５Ａ〜図１１Ｅを用いて、組み合わせ生成部１３１が生成する組み合わせテーブルおよび重複除去部１３３が除去する変数の組み合わせについて条件式の演算子ごとに説明する。なお、説明を簡略化するために、禁止除去部１３２による組み合わせの除去は行われない、すなわち禁止される組み合わせはないものとして説明する。
【００６６】
（ａ．＃ｉｆ文）
まず、図５Ａ〜図８Ｂを用いて、条件分岐に含まれるプリプロセッサ指令が「＃ｉｆ」である場合について説明する。
【００６７】
（ａ−１．比較演算子：等号）
図５Ａおよび図５Ｂを用いて、条件分岐（＃ｉｆ）の条件式に含まれる演算子が等号（＝＝）である場合について説明する。図５Ａは、実施形態に係る組み合わせ生成部１３１が生成する組み合わせテーブル３３ａ＿１の一例を示す図である。また、図５Ｂは、実施形態に係る重複除去部１３３が生成する設定値テーブル３３＿１を示す図である。
【００６８】
分岐抽出部１２１が抽出した条件分岐が「＃ｉｆ  Ａ＝＝ＵＳＥ」であったとする。以下、条件分岐に含まれる「Ａ＝＝ＵＳＥ」を条件式ｃｅ１と記載する。この場合、組み合わせ生成部１３１は、図５Ａに示すように、変数Ａの取り得る値と条件式ｃｅ１の判定結果との組み合わせを含む組み合わせテーブル３３ａ＿１を生成する。
【００６９】
図５Ａに示すように、変数Ａの取り得る値は「ＵＳＥ」、「ＮＯＴ」、「ＯＴＨＥＲ」である。この場合、条件式ｃｅ１の対応する判定結果はそれぞれ「Ｔ」（ＴＲＵＥ）、「Ｆ」（ＦＡＬＳＥ）、「Ｆ」となる。
【００７０】
ここで、条件式ｃｅ１に含まれる変数Ａの取り得る全ての値は、必ず１回は検査される必要がある。そのため、図５Ａに示すように、変数Ａが「ＮＯＴ」であっても「ＯＴＨＥＲ」であっても判定結果は「Ｆ」となり判定後の処理は変わらないが、重複除去部１３３は、変数Ａの取り得る値を除去せずに、取り得る値全てを検査時に設定する値とする。これにより、重複除去部１３３は、例えば図５Ｂに示すように、「ＵＳＥ」、「ＮＯＴ」、「ＯＴＨＥＲ」を設定値とする設定値テーブル３３＿１を生成する。
【００７１】
（ａ−２．比較演算子：等号否定）
次に、図６を用いて、条件式の演算子が等号否定（！＝）である場合について説明する。図６は、実施形態に係る組み合わせ生成部１３１が生成する組み合わせテーブル３３ａ＿２の一例を示す図である。
【００７２】
分岐抽出部１２１が抽出した条件分岐が「＃ｉｆ  Ａ！＝ＵＳＥ」であったとする。以下、条件分岐に含まれる「Ａ！＝ＵＳＥ」を条件式ｃｅ２と記載する。この場合、組み合わせ生成部１３１は、図６に示すように、変数Ａの取り得る値と条件式ｃｅ２の判定結果との組み合わせを含む組み合わせテーブル３３ａ＿２を生成する。
【００７３】
図６に示すように、変数Ａの取り得る値は「ＵＳＥ」、「ＮＯＴ」、「ＯＴＨＥＲ」である。この場合、条件式ｃｅ２の対応する判定結果はそれぞれ「Ｆ」、「Ｔ」、「Ｔ」となる。
【００７４】
重複除去部１３３は、条件式ｃｅ１の場合と同様に変数Ａの取り得る値を除去せずに、取り得る値全てを検査時に設定する値とする。これにより、重複除去部１３３は、例えば図５Ｂと同様に、「ＵＳＥ」、「ＮＯＴ」、「ＯＴＨＥＲ」を設定値とする設定値テーブル３３＿１を生成する。
【００７５】
（ａ−３．論理演算子：論理和）
図７Ａおよび図７Ｂを用いて、条件式に論理和（｜｜、ＯＲ条件）が含まれる場合について説明する。図７Ａは、実施形態に係る組み合わせ生成部１３１が生成する組み合わせテーブル３３ａ＿３の一例を示す図である。図７Ｂは、実施形態に係る重複除去部１３３が生成する設定値テーブル３３＿３の一例を示す図である。
【００７６】
分岐抽出部１２１が、図３に示すソースコード３１から条件分岐「＃ｉｆ  （Ａ＝＝ＵＳＥ）  ｜｜  （Ｂ＝＝ＵＳＥ）」を抽出したとする。以下、条件分岐の条件式「（Ａ＝＝ＵＳＥ）｜｜（Ｂ＝＝ＵＳＥ）」を条件式ｃｅ３と記載する。また、条件式ｃｅ３に含まれる論理和の左辺の条件式「Ａ＝＝ＵＳＥ」を条件式ｃｅＬ、右辺の条件式「Ｂ＝＝ＵＳＥ」を条件式ｃｅＲと記載する。
【００７７】
この場合、組み合わせ生成部１３１は、図７Ａに示すように変数Ａ、Ｂの取り得る値と条件式ｃｅＬ、ｃｅＲ、ｃｅ３の判定結果との組み合わせを含む組み合わせテーブル３３ａ＿３を生成する。
【００７８】
図７Ａの組み合わせテーブル３３ａ＿３の５行目に示すように、組み合わせ生成部１３１は、例えば変数Ａを「ＵＳＥ」、変数Ｂを「ＵＳＥ」とする組み合わせを生成する。この場合、条件式ｃｅＬの判定結果は「Ｔ」、条件式ｃｅＲの判定結果は「Ｔ」となる。また、条件式ｃｅ３の判定結果は「Ｔ」となる。
【００７９】
組み合わせ生成部１３１は、変数Ａ、Ｂの取り得る値を「ＵＳＥ」、「ＮＯＴ」、「ＯＴＨＥＲ」と変更させながら、各条件式ｃｅＬ、ｃｅＲ、ｃｅ３を判定し、判定結果を組み合わせテーブル３３ａ＿３に書き込む。
【００８０】
組み合わせ生成部１３１は、変数Ａ、Ｂの取り得る値全ての組み合わせに対して条件式ｃｅＬ、ｃｅＲ、ｃｅ３の判定結果を算出することで、図７Ａの組み合わせテーブル３３ａ＿３に示すように９通りの組み合わせを生成する。
【００８１】
次に、重複除去部１３３は、組み合わせ生成部１３１が生成した９通りの組み合わせの中から、判定結果に影響を与えない変数の値を含む組み合わせを除去する。
【００８２】
例えば、Ｃ言語において論理和は左側から順に演算される。したがって、条件式ｃｅＬが成立した場合、条件式ｃｅＲの判定結果にかかわらず条件式ｃｅ３の判定結果は「成立（Ｔ）」となる。すなわち、変数Ａが「ＵＳＥ」の場合、変数Ｂの値は条件式ｃｅ３の判定結果に影響を与えない。
【００８３】
したがって、変数Ａが「ＵＳＥ」である組み合わせ、すなわち図７Ａに示す組み合わせテーブル３３ａ＿３の２、５、８行目の組み合わせを少なくとも１回実行すると、条件式ｃｅ３が「Ｔ」である検査を少なくとも１回は実行することができる。換言すると、組み合わせテーブル３３ａ＿３の２、５、８行目の組み合わせで行う検査は、処理が重複する検査であると言える。
【００８４】
そこで、本実施形態では、重複除去部１３３が、処理が重複する組み合わせ（図７Ａでは２、５、８行目の組み合わせ）の少なくとも１つを除去することで、検査数を削減することとした。ただし、このとき、重複除去部１３３は、変数Ａ、Ｂの各取り得る値が少なくとも１回は検査されるように、削除する組み合わせを決定する。
【００８５】
また、重複除去部１３３は、変数Ａ、Ｂの各取り得る値と、条件式ｃｅ３の判定結果との異なる組み合わせが少なくとも１回は検査されるように、削除する組み合わせを決定する。例えば、変数Ｂが「ＮＯＴ」の場合、条件式ｃｅ３の判定結果が「Ｔ」である組み合わせと、判定結果が「Ｆ」である組み合わせとが１回は検査されるように、重複除去部１３３は、変数Ａ、Ｂの設定値を決定する。
【００８６】
なお、変数Ｂが「ＵＳＥ」の場合、条件式ｃｅ３は必ず「Ｔ」になるため、条件式ｃｅ３が「Ｆ」の組み合わせは存在しない。このように、変数Ａ、Ｂの取り得る値によっては条件式ｃｅ３の判定結果が異なる組み合わせが存在しない場合もある。
【００８７】
重複除去部１３３は、例えば図７Ａの組み合わせテーブル３３ａ＿３の場合、５行目の組み合わせは除去するが、８行目の組み合わせは除去しない。これは、５行目の組み合わせの変数Ｂが「ＵＳＥ」、条件式ｃｅ３が「Ｔ」であり、この組み合わせは４、６行目の組み合わせと同じであるためである。また、８行目の組み合わせは、変数Ｂが「ＯＴＨＥＲ」であり、条件式ｃｅ３が「Ｔ」であるが、この組み合わせは他の組み合わせに含まれないためである。
【００８８】
重複除去部１３３は、組み合わせテーブル３３ａ＿３の５行目の組み合わせを除外し、１〜４、６〜９行目に含まれる変数Ａ、Ｂの組み合わせを設定値の組み合わせに決定し、図７Ｂに示す設定値テーブル３３＿３を生成する。
【００８９】
なお、論理積（＆＆、ＡＮＤ条件）については、図１を用いて上述したため、ここでの説明を省略する。
【００９０】
（ｂ．ネスト条件）
次に、図８Ａおよび図８Ｂを用いて、分岐抽出部１２１が、＃ｉｆ文が入れ子になったネスト条件を抽出した場合について説明する。図８Ａは、実施形態に係るソースコード３１ｂの一例を示す図である。図８Ｂは、実施形態に係る組み合わせ生成部１３１が生成する組み合わせテーブル３３ａ＿４の一例を示す図である。
【００９１】
図８Ａに示すように、ソースコード３１ｂにネスト条件が含まれると、例えば条件分岐「＃ｉｆ  Ａ＝＝ＵＳＥ」が成立する場合に、条件分岐「＃ｉｆ  Ｂ＝＝ＵＳＥ」を含む処理Ｐ１が実行される。
【００９２】
このようにソースコード３１ｂにネスト条件が含まれる場合、分岐抽出部１２１は、親となる条件分岐「＃ｉｆ  Ａ＝＝ＵＳＥ」および子となる条件分岐「＃ｉｆ  Ｂ＝＝ＵＳＥ」をそれぞれ抽出する。
【００９３】
まず、組み合わせ生成部１３１は、親となる条件分岐「＃ｉｆ  Ａ＝＝ＵＳＥ」に含まれる条件式「Ａ＝＝ＵＳＥ」の変数Ａと判定結果との組み合わせテーブルを生成する。かかる組み合わせテーブルは、図５Ａに示す組み合わせテーブル３３ａ＿１と同じであるため図示を省略する。
【００９４】
次に、組み合わせ生成部１３１は、子となる条件分岐「＃ｉｆ  Ｂ＝＝ＵＳＥ」の組み合わせテーブル３３ａ＿４を生成する。この場合、組み合わせ生成部１３１は、親となる条件分岐「＃ｉｆ  Ａ＝＝ＵＳＥ」を考慮して組み合わせテーブル３３ａ＿４を生成する。すなわち、組み合わせ生成部１３１は、変数Ａ、Ｂと条件式「Ａ＝＝ＵＳＥ」、「Ｂ＝＝ＵＳＥ」の判定結果との組み合わせテーブル３３ａ＿４を生成する。
【００９５】
重複除去部１３３は、子となる条件分岐に基づいて生成された組み合わせテーブル３３ａ＿４に含まれる組み合わせから、検査で行う処理が重複する組み合わせを削除する。例えば、図８Ａに示すソースコード３１ｂでは、親となる条件分岐が不成立（Ｆ）の場合、子となる条件分岐は処理されない。すなわち、変数Ａが「ＵＳＥ」でなければ、変数Ｂの値にかかわらず処理Ｐ１は実行されない。
【００９６】
そこで、重複除去部１３３は、図８Ｂに示す組み合わせテーブル３３ａ＿４のうち、３、５、８、９行目の組み合わせを除外して、変数Ａ、Ｂの設定値を決定する。なお、組み合わせを除外する方法は、図１を用いて説明した演算子に論理積が含まれる場合と同じであるため、説明を省略する。
【００９７】
（ｃ．＃ｅｌｓｅ文）
図９を用いて、分岐抽出部１２１が条件分岐として＃ｅｌｓｅ文を抽出した場合について説明する。図９は、実施形態に係るソースコード３１ｃの一例を示す図である。
【００９８】
図９に示すように、分岐抽出部１２１が条件分岐「＃ｉｆ  （Ａ＝＝ＵＳＥ）＆＆（Ｂ＝＝ＵＳＥ）」および条件分岐「＃ｅｌｓｅ」を抽出したものとする。
【００９９】
この場合、分岐抽出部１２１は、条件分岐「＃ｅｌｓｅ」の条件式として条件分岐「＃ｉｆ  （Ａ＝＝ＵＳＥ）＆＆（Ｂ＝＝ＵＳＥ）」の否定である条件式を抽出する。換言すると、分岐抽出部１２１は、図９に示すように、条件分岐「＃ｅｌｓｅ」を「＃ｉｆ  （Ａ！＝ＵＳＥ）｜｜（Ｂ！＝ＵＳＥ）」に置き換える。図９では置き換えたソースコードをソースコード３１ｃ＿１として示している。
【０１００】
組み合わせ生成部１３１は、分岐抽出部１２１が抽出した条件分岐「＃ｉｆ  （Ａ＝＝ＵＳＥ）＆＆（Ｂ＝＝ＵＳＥ）」および「＃ｉｆ  （Ａ！＝ＵＳＥ）｜｜（Ｂ！＝ＵＳＥ）」についてそれぞれ組み合わせテーブルを生成する。また、重複除去部１３３は、各組み合わせテーブルから処理が重複する組み合わせを除外して、条件分岐ごとに設定値テーブルを生成する。
【０１０１】
（ｄ．＃ｅｌｉｆ文）
図１０を用いて、分岐抽出部１２１が条件分岐として＃ｅｌｉｆ文を抽出した場合について説明する。図１０は、実施形態に係るソースコード３１ｄの一例を示す図である。
【０１０２】
図１０に示すように、分岐抽出部１２１が条件分岐「＃ｉｆ  （Ａ＝＝ＵＳＥ）＆＆（Ｂ＝＝ＵＳＥ）」および条件分岐「＃ｅｌｉｆ  （Ｃ＝＝ＵＳＥ）」を抽出したものとする。
【０１０３】
この場合、分岐抽出部１２１は、条件分岐「＃ｅｌｉｆ  （Ｃ＝＝ＵＳＥ）」の条件式として「（Ａ＝＝ＵＳＥ）＆＆（Ｂ＝＝ＵＳＥ）」の否定である条件式と「Ｃ＝＝ＵＳＥ」との論理積を抽出する。換言すると、分岐抽出部１２１は、図１０に示すように、条件分岐「「＃ｅｌｉｆ  （Ｃ＝＝ＵＳＥ）」を「＃ｉｆ  （（Ａ！＝ＵＳＥ）｜｜（Ｂ！＝ＵＳＥ））＆＆（Ｃ＝＝ＵＳＥ）」に置き換える。図１０では置き換えたソースコードをソースコード３１ｄ＿１として示している。
【０１０４】
組み合わせ生成部１３１は、分岐抽出部１２１が抽出した条件分岐「＃ｉｆ  （Ａ＝＝ＵＳＥ）＆＆（Ｂ＝＝ＵＳＥ）」および「＃ｉｆ  （（Ａ！＝ＵＳＥ）｜｜（Ｂ！＝ＵＳＥ））＆＆（Ｃ＝＝ＵＳＥ）」についてそれぞれ組み合わせテーブルを生成する。また、重複除去部１３３は、各組み合わせテーブルから処理が重複する組み合わせを除外して、条件分岐ごとに設定値テーブルを生成する。なお、条件分岐に含まれるＣは変数であり、変数Ａ、Ｂと同様に「ＵＳＥ」、「ＮＯＴ」、「ＯＴＨＥＲ」の３つの値を取り得るものとする。
【０１０５】
ここで、図１１Ａ〜図１１Ｅを用いて条件分岐「＃ｉｆ  （（Ａ！＝ＵＳＥ）｜｜（Ｂ！＝ＵＳＥ））＆＆（Ｃ＝＝ＵＳＥ）」（図１０参照）のように、条件式に複数の論理演算子が含まれる場合に、組み合わせ生成部１３１が生成する組み合わせテーブルについて説明する。
【０１０６】
図１１Ａは、実施形態に係るソースコード３１ｅの一例を示す図である。また、図１１Ｂは、実施形態に係る組み合わせ生成部１３１が生成する組み合わせテーブル３３ａ＿５の一例を示す図である。図１１Ｃおよび図１１Ｄは、実施形態にかかる重複除去部１３３が生成するテーブル３３ａ＿６、３３ａ＿８の一例を示す図である。図１１Ｅは、実施形態にかかる重複除去部１３３が生成する設定値テーブル３３＿９の一例を示す図である。
【０１０７】
なお、以下、図１１Ａに示すように、条件式に複数の論理演算子が複数含まれる条件分岐として、「＃ｉｆ（（Ａ＝＝ＵＳＥ）＆＆（Ｂ＝＝ＵＳＥ））｜｜（（Ｃ＝＝ＵＳＥ）｜｜（Ｄ＝＝ＵＳＥ））」を例にとって説明する。ここで、条件式に含まれるＣ、Ｄは変数であり、変数Ａ、Ｂと同様に、「ＵＳＥ」、「ＮＯＴ」、「ＯＴＨＥＲ」の３つの値を取り得るものとする。
【０１０８】
また、ここでは、「（Ａ＝＝ＵＳＥ）＆＆（Ｂ＝＝ＵＳＥ）」を条件式ｃｅ５と記載し、「（Ｃ＝＝ＵＳＥ）｜｜（Ｄ＝＝ＵＳＥ）」を条件式ｃｅ６と記載する。また、条件式ｃｅ５と条件式ｃｅ６の論理和、すなわち条件分岐の条件式「（（Ａ＝＝ＵＳＥ）＆＆（Ｂ＝＝ＵＳＥ））｜｜（（Ｃ＝＝ＵＳＥ）｜｜（Ｄ＝＝ＵＳＥ））」を条件式ｃｅ７と記載する。
【０１０９】
まず、組み合わせ生成部１３１は、図１１Ｂに示すように、条件式ｃｅ５〜ｃｅ７の判定結果の組み合わせテーブル３３ａ＿５を生成する。
【０１１０】
次に、組み合わせ生成部１３１は、条件式ｃｅ５について変数Ａ、Ｂおよび条件式ｃｅ５の判定結果の組み合わせテーブル３３ａ（図１参照）を生成する。
【０１１１】
重複除去部１３３は、図１１Ｃに示すように、組み合わせテーブル３３ａから重複する組み合わせ（図１の組み合わせテーブル３３ａの５、６、８および９行目の組み合わせ）を除去したテーブル３３ａ＿６を生成する。
【０１１２】
組み合わせ生成部１３１は、条件式ｃｅ６について変数Ｃ、Ｄおよび条件式ｃｅ６の判定結果の組み合わせテーブル３３ａ＿７を生成する。なお、組み合わせテーブル３３ａ＿７は、図７Ａに示す組み合わせテーブル３３ａ＿３の変数Ａ、Ｂを変数Ｃ、Ｄに置き換えたものであるため、図示を省略する。
【０１１３】
また、重複除去部１３３は、組み合わせ生成部１３１が生成した組み合わせテーブル３３ａ＿７から重複する組み合わせ（図７Ａの組み合わせテーブル３３ａ＿３の５行目の組み合わせ）を除去したテーブル３３ａ＿８を生成する。
【０１１４】
重複除去部１３３は、生成したテーブル３３ａ＿６、３３ａ＿８を、組み合わせテーブル３３ａ＿５を用いて統合することで図１１Ｅに示す設定値テーブル３３＿９を生成する。
【０１１５】
例えば、図１１Ｂに示す組み合わせテーブル３３ａ＿５の１行目は、条件式ｃｅ５の判定結果が「Ｆ」であり、条件式ｃｅ６が「Ｆ」である。そのため、重複除去部１３３は、テーブル３３ａ＿６の判定結果が「Ｆ」となる組み合わせ（図１１Ｃのテーブル３３ａ＿６の２〜５行目の組み合わせ）とテーブル３３ａ＿８の判定結果が「Ｆ」となる組み合わせ（図１１Ｄのテーブル３３ａ＿８の１、３、６、８行目の組み合わせ）を統合する。
【０１１６】
なお、図１１Ｅに示す設定値テーブル３３＿９の１〜４行目は、図１１Ｂに示す組み合わせテーブル３３ａ＿５の２行目に該当する。また、設定値テーブル３３＿９の５〜２０行目は、図１１Ｂに示す組み合わせテーブル３３ａ＿５の３行目に該当する。設定値テーブル３３＿９の２１〜３６行目は、図１１Ｂに示す組み合わせテーブル３３ａ＿５の１行目に該当する。
【０１１７】
なお、図１１Ｂに示す組み合わせテーブル３３ａ＿５の４行目の組み合わせは、２行目の組み合わせと重複するため、テーブル３３ａ＿６、３３ａ＿８を統合する際に組み合わせを除外している。これは、条件式ｃｅ５が「Ｔ」であるならば、条件式ｃｅ６の判定結果にかかわらず、条件式ｃｅ７が「Ｔ」になるためである。そのため、組み合わせテーブル３３ａ＿５の２、４行目のいずれか一方を除外しても単体検査に影響を与えないため、図１１Ｂに示す組み合わせテーブル３３ａ＿５の４行目の組み合わせに基づいたテーブル３３ａ＿６、３３ａ＿８の統合は除外することができる。
【０１１８】
（２．１．４．出力部）
出力部１４０は、重複除去部１３３が生成した設定値テーブル３３を記憶部３０に記憶させる。なお、ここでは、出力部１４０が設定値テーブル３３を記憶させるとしたが、例えば重複除去部１３３が記憶部３０に記憶するようにしてもよい。
【０１１９】
また、出力部１４０が検査部２０に設定値テーブル３３を出力するようにしてもよく、あるいは図示しないディスプレイ等に出力するようにしてもよい。
【０１２０】
（２．２．検査部）
検査部２０は、記憶部３０からソースコード３１および設定値テーブル３３を読み出すと、設定値テーブル３３に含まれる変数の設定値を用いてソースコード３１をモジュールごとに実行することで、ソースコード３１の単体検査を行う。
【０１２１】
（３．決定処理）
次に、図１２を用いて、実施形態に係る検査装置１が実行する決定処理の処理手順について説明する。図１２は、実施形態に係る検査装置１が実行する決定処理の処理手順を示すフローチャートである。
【０１２２】
図１２に示すように、まず、検査装置１は、ソースコード３１を読み込む（ステップＳ１０１）。次に、検査装置１は、ソースコード３１から条件分岐を抽出する（ステップＳ１０２）。
【０１２３】
検査装置１は、抽出した条件分岐の条件式に含まれる変数を抽出する（ステップＳ１０３）。検査装置１は、抽出した変数の取り得る値全てを抽出する（ステップＳ１０４）。
【０１２４】
検査装置１は、変数の取り得る値と条件式の判定結果との組み合わせを生成する（ステップＳ１０５）。
【０１２５】
検査装置１は、ステップＳ１０５で生成した組み合わせのなかから、ソースコード３１を実行する場合には組み合わせられない変数の設定値を含む組み合わせを除外する（ステップＳ１０６）。
【０１２６】
検査装置１は、ステップＳ１０５で生成した組み合わせのなかから、単体検査に影響を与えない変数の値を含む組み合わせを除外する（ステップ１０７）。
【０１２７】
検査装置１は、ステップＳ１０６およびステップＳ１０７で除外した組み合わせに基づき、変数の設定値の組み合わせを決定し（ステップＳ１０８）、決定した設定値の組み合わせを出力する（ステップＳ１０９）。
【０１２８】
以上のように、実施形態に係る検査装置１は、ソースコード３１に含まれる変数の設定値を自動で決定することができ、ユーザの作業量を削減することができる。
【０１２９】
（４．変形例）
以上、本発明の実施形態について説明してきたが、この発明は上記実施形態に限定されるものではなく様々な変形が可能である。以下では、このような変形例について説明する。上記実施形態および以下で説明する形態を含む全ての形態は、適宜に組み合わせ可能である。
【０１３０】
上記実施形態では、検査装置１が変数と条件式の判定結果との組み合わせテーブルを生成してから、重複する組み合わせを除外するとしたが、これに限定されない。例えば論理積を含む条件式の組み合わせを算出する場合に、検査装置１が重複する組み合わせを除外しつつ、組み合わせテーブルを生成するようにしてもよい。
【０１３１】
具体的に、検査装置１の組み合わせ生成部１３１は、複数の条件式の論理積を算出する場合に、複数の条件式が「Ｔ」となるようにしてから、各条件式が１つずつ「Ｆ」になるように複数の条件式に含まれる変数を設定する。
【０１３２】
例えば図１に示す条件式ｃ「（Ａ＝＝ＵＳＥ）＆＆（Ｂ＝＝ＵＳＥ）」の場合、組み合わせ生成部１３１は、条件式ａ「Ａ＝＝ＵＳＥ」および条件式ｂ「Ｂ＝＝ＵＳＥ」がどちらも「Ｔ」になるように変数Ａ、Ｂの組み合わせを生成する。この場合、組み合わせ生成部１３１は、変数Ａ、Ｂともに「ＵＳＥ」とする。
【０１３３】
次に、組み合わせ生成部１３１は、各条件式ａ、ｂが１つずつ「Ｆ」になるように変数Ａ、Ｂの組み合わせを生成する。まず、組み合わせ生成部１３１は、条件式ａが「Ｆ」となり、条件式ｂが「Ｔ」となる変数Ａ、Ｂの組み合わせとして、変数Ａが「ＮＯＴ」、変数Ｂが「ＵＳＥ」の組み合わせと、変数Ａが「ＯＴＨＥＲ」、変数Ｂが「ＵＳＥ」の組み合わせを生成する。続いて、組み合わせ生成部１３１は、条件式ａが「Ｔ」となり、条件式ｂが「Ｆ」となる変数Ａ、Ｂの組み合わせを生成する。最後に、条件式ａ、ｂともに「Ｆ」となる変数Ａ、Ｂの組み合わせを生成する。
【０１３４】
これにより、図１３に示すように、重複した組み合わせを除去した組み合わせテーブル３３ａ＿１０を生成することができ、重複除去部１３３の処理を省略することができる。なお、図１３は、変形例に係る組み合わせ生成部１３１が生成する組み合わせテーブルの一例を示す図である。
【０１３５】
また、上記実施形態では、検査装置１が変数の設定を決定する決定部１０と、単体検査を行う検査部２０とを備えるとしたが、これに限定されない。例えば決定部１０と検査部２０とをそれぞれ別の装置に実装するようにしてもよい。すなわち、実施形態に係る決定方法を実行する決定装置（図示せず）が、単体検査を行う検査装置１と別の装置であってもよい。
【０１３６】
（５．効果）
上記実施形態に係る決定プログラムは、単体検査の対象であるソースコード３１を読み込む手順をコンピュータに実行させる。更に決定プログラムは、ソースコード３１に含まれる条件分岐を抽出する手順をコンピュータに実行させる。更に決定プログラムは、条件分岐の条件式に含まれる変数の取り得る値と、条件式の判定結果と、の組み合わせに基づき、単体検査を行う場合に代入する変数の設定値を決定する手順をコンピュータに実行させる。更に決定プログラムは、決定した設定値を出力する手順をコンピュータに実行させる。
【０１３７】
これにより、単体検査を行う場合に代入する変数の設定値をコンピュータが決定することができ、ユーザの作業量を削減することができる。
【０１３８】
上記実施形態に係る決定プログラムは、変数の設定値を決定する手順として、変数の取り得る値の全てが少なくとも１回は代入されるように、設定値を決定する。
【０１３９】
これにより、変数の設定値の漏れを抑制することができ、単体検査の精度を向上させることができる。
【０１４０】
上記実施形態に係る決定プログラムは、変数の設定値を決定する手順として、変数の取り得る値と判定結果との組み合わせが少なくとも１回は検査されるように、設定値を決定する。
【０１４１】
これにより、変数の設定値の漏れを抑制することができ、単体検査の精度を向上させることができる。
【０１４２】
上記実施形態に係る決定プログラムは、変数の設定値を決定する手順として、複数の変数の取り得る値の組み合わせのうち、ソースコード３１では組み合わせられない組み合わせを除外して設定値を決定する。
【０１４３】
これにより、単体検査の検査数を削減することができ検査規模の増加を抑制することができる。
【０１４４】
上記実施形態に係る決定プログラムは、変数の設定値を決定する手順として、複数の変数の取り得る値の組み合わせのうち、判定結果に影響を与えない変数の設定値を含む組み合わせを除外して設定値を決定する。
【０１４５】
これにより、単体検査の検査数を削減することができ検査規模の増加を抑制することができる。
【０１４６】
上記実施形態に係る決定プログラムは、変数の設定値を決定する手順として、条件式に含まれる演算子の演算順序に応じて、判定結果に影響を与えない前記変数の設定値を含む前記組み合わせの少なくとも１つが検査されるように前記設定値を決定する。
【０１４７】
これにより、単体検査の検査数を削減することができ検査規模の増加を抑制することができる。
【０１４８】
上記実施形態に係る決定プログラムは、条件分岐を抽出する手順は、ソースコード３１のプリプロセス実行時に行われる。
【０１４９】
これにより、プリプロセス実行時に、単体検査を行う場合に変数に代入する設定値を決定することができる。
【０１５０】
さらなる効果や変形例は、当業者によって容易に導き出すことができる。このため、本発明のより広範な態様は、以上のように表しかつ記述した特定の詳細および代表的な実施形態に限定されるものではない。したがって、添付の特許請求の範囲およびその均等物によって定義される総括的な発明の概念の精神または範囲から逸脱することなく、様々な変更が可能である。
【符号の説明】
【０１５１】
１    検査装置
１０    決定部
１１０    読込部
１２０    抽出部
１３０    設定値決定部
１４０    出力部
２０    検査部
３０    記憶部
【図１】
2018124654.tif 000003
【図２】
2018124654.tif 000004
【図３】
2018124654.tif 000005
【図４】
2018124654.tif 000006
【図５Ａ】
2018124654.tif 000007
【図５Ｂ】
2018124654.tif 000008
【図６】
2018124654.tif 000009
【図７Ａ】
2018124654.tif 000010
【図７Ｂ】
2018124654.tif 000011
【図８Ａ】
2018124654.tif 000012
【図８Ｂ】
2018124654.tif 000013
【図９】
2018124654.tif 000014
【図１０】
2018124654.tif 000015
【図１１Ａ】
2018124654.tif 000016
【図１１Ｂ】
2018124654.tif 000017
【図１１Ｃ】
2018124654.tif 000018
【図１１Ｄ】
2018124654.tif 000019
【図１１Ｅ】
2018124654.tif 000020
【図１２】
2018124654.tif 000021
【図１３】
2018124654.tif 000022