(57)【要約】【課題】プログラムに数式の演算結果を分岐条件が含まれている場合も分岐を網羅する試験データを出力できる支援装置、支援方法及びコンピュータを前記支援装置として機能させるコンピュータプログラムを提供する。【解決手段】プログラムのテストを実行するコンピュータ装置のＣＰＵは、テスト対象のソースファイルに含まれる分岐の条件式（ｘ＝＝０）に関する変数ｘを求めるマクロ関数（read_bit_01）がある場合には、外部変数「dummy_BIT_A_1」に書き換える。マクロ関数が展開された場合の演算式などがなくなるので、テスト実行用プログラムを用いてテストデータを自動的に取得することが可能となる。【選択図】図４
2010066900.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに実行させる対象プログラムに含まれる分岐命令の分岐条件に関し、一部又は全部の分岐を網羅させる前記対象プログラムへの入力データを解析して出力し、前記対象プログラムの試験を支援するための支援装置において、
対象プログラムを構文解析して分岐命令を抽出する手段と、
該手段が抽出した分岐命令の分岐条件に関する変数を抽出する手段と、
該手段が抽出した変数の値を変化させる演算式を抽出する手段と、
該手段が抽出した演算式を、外部変数を用いる式に書き換える処理、及び前記外部変数の宣言文を追加する処理の内、少なくともいずれかの処理を実行する書換手段と、
該書換手段が書き換えた後の対象プログラムに基づき、分岐条件に関する変数に対応して前記対象プログラムへの入力データを出力する出力手段と
を備えることを特徴とする支援装置。
【請求項２】
前記出力手段は、分岐を網羅するための外部変数の名称と、該外部変数へ入力されるべきデータのリストとを出力するようにしてあること
を特徴とする請求項１に記載の支援装置。
【請求項３】
前記出力手段が出力したデータを、書き換え前の対象プログラムに対応するデータ形式に書き換える編集手段と、
対象プログラムを読み出して試験を実行する手段と、
該手段が実行する前記対象プログラムへの入力データとして、前記編集手段が書き換えた後のデータを入力する手段と
を備えることを特徴とする請求項１に記載の支援装置。
【請求項４】
コンピュータに実行させる対象プログラムに含まれる分岐命令の分岐条件に関し、一部又は全部の分岐を網羅させる前記対象プログラムへの入力データを解析して出力し、前記対象プログラムの試験を支援するための方法において、
対象プログラムを構文解析して分岐命令を抽出し、
抽出した分岐命令の分岐条件に関する変数を抽出し、
抽出した変数の値を変化させる演算式を抽出し、
抽出した演算式を、外部変数を用いる式に書き換えるか、又は、前記外部変数の宣言文を追加するかの内少なくともいずれかを実行し、
書き換えた後の対象プログラムに基づき、分岐条件に関する変数に対応して前記対象プログラムへの入力データを出力する
ことを特徴とする支援方法。
【請求項５】
コンピュータに、対象プログラムに含まれる分岐命令の分岐条件に関し、一部又は全部の分岐を網羅させる前記対象プログラムへの入力データを解析して出力させ、前記対象プログラムの試験を支援するための処理を実行させるコンピュータプログラムにおいて、
コンピュータに、
対象プログラムを構文解析して分岐命令を抽出するステップ、
抽出した分岐命令の分岐条件に関する変数を抽出するステップ、
抽出した変数の値を変化させる演算式を抽出するステップ、
抽出した演算式を、外部変数を用いる式に書き換える処理、及び前記外部変数の宣言文を追加する処理の内、少なくともいずれかの処理を実行するステップ、並びに
書き換えられた後の対象プログラムに基づき、分岐条件に関する変数に対応して前記対象プログラムへの入力データを出力するステップ
を実行させることを特徴とするコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータプログラムの開発工程で、コンピュータプログラムに含まれる分岐を網羅する試験データを自動的に出力し、前記コンピュータプログラムの試験を支援する支援装置に関する。特に、コンピュータプログラムに、数式の演算結果を分岐条件とするプログラムコードが含まれている場合も分岐を網羅する試験データを出力できる支援装置、支援方法及びコンピュータを前記支援装置として機能させるコンピュータプログラムに関する。
【背景技術】
【０００２】
コンピュータプログラムを開発する工程では、作成されたコンピュータプログラムに基づき、設計通りにコンピュータが動作するか否かの試験が必要となる。
【０００３】
完成するコンピュータプログラムの品質を高めるためには、コンピュータプログラムに基づいて実行される全ての処理が行なわれるよう、所謂ホワイトボックステストを実行することが必要である。ホワイトボックステストの実行には、全ての分岐条件を網羅する試験データを作成する必要がある。しかしながら、実装されるコンピュータプログラムは数千にもなる関数の組み合わせにて構成されるので、全ての分岐を網羅する試験データを作成するためには高い技術力と知識とが要求される。
【０００４】
そこで、人間が作成したコンピュータプログラム（ソースプログラム）を構文解析し、Ｃ言語ベースのソースプログラムであればｉｆ文、ｓｗｉｔｃｈ文などの分岐命令を抽出して分岐条件に関するデータを出力する方法が考えられる。具体的には、分岐命令に含まれる変数及び該変数に対する条件とを構文解析により抽出し、条件に関する閾値等を試験データとして出力する。
【０００５】
特許文献１には、試験データをユーザからの入力情報に応じて対話形式で自動的に出力し、且つ出力した試験データを入力して試験対象のプログラムを実行する試験の実行も対話形式により自動的に実行させることができる技術が開示されている。
【特許文献１】特開平７−１９１８８０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
特許文献１に開示されている技術により、自動的に分岐を網羅する試験データを出力することができる。しかしながら特許文献１に開示されている技術では、試験データを出力させるための処理は、ユーザが各種データを入力する対話形式により実現される。この場合、分岐を漏れなく網羅する試験データを作成するためには、ユーザがプログラミングについて高い知識及び技術力を有していることが必要となる。
【０００７】
コンピュータプログラムに含まれる分岐命令の分岐条件が、数式に基づく演算結果を含む場合には、演算前のデータの場合分けを考慮して分岐を網羅するためのデータを自動的に出力する必要がある。また、複数のデータ間の演算結果が分岐条件に関わる場合、それらのデータの組み合わせを考慮する必要がある。
【０００８】
しかしながら、従来技術により構文解析に基づいて分岐命令を抽出する構成では、演算前のデータの場合分け、演算に用いられるデータの組み合わせを考慮して試験データを出力することは、演算が複雑であるほど困難である。したがって、単純に構文解析に基づく方法では、演算結果に関する分岐命令に対応する試験データを出力できない場合がある。
【０００９】
本発明は斯かる事情に鑑みてなされたものであり、コンピュータプログラムに数式の演算結果を分岐条件とするプログラムコードが含まれている場合でも、分岐を網羅する試験データを自動的に出力することができる支援装置、支援方法及びコンピュータを前記支援装置として機能させるコンピュータプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
第１発明に係る支援装置は、コンピュータに実行させる対象プログラムに含まれる分岐命令の分岐条件に関し、一部又は全部の分岐を網羅させる前記対象プログラムへの入力データを解析して出力し、前記対象プログラムの試験を支援するための支援装置において、対象プログラムを構文解析して分岐命令を抽出する手段と、該手段が抽出した分岐命令の分岐条件に関する変数を抽出する手段と、該手段が抽出した変数の値を変化させる演算式を抽出する手段と、該手段が抽出した演算式を、外部変数を用いる式に書き換える処理、及び前記外部変数の宣言文を追加する処理の内、少なくともいずれかの処理を実行する書換手段と、該書換手段が書き換えた後の対象プログラムに基づき、分岐条件に関する変数に対応して前記対象プログラムへの入力データを出力する出力手段とを備えることを特徴とする。
【００１１】
第２発明に係る支援装置は、前記出力手段は、分岐を網羅するための外部変数の名称と、該外部変数へ入力されるべきデータのリストとを出力するようにしてあることを特徴とする。
【００１２】
第３発明に係る支援装置は、前記出力手段が出力したデータを、書き換え前の対象プログラムに対応するデータ形式に書き換える編集手段と、対象プログラムを読み出して試験を実行する手段と、該手段が実行する前記対象プログラムへの入力データとして、前記編集手段が書き換えた後のデータを入力する手段とを備えることを特徴とする。
【００１３】
第４発明に係る支援方法は、コンピュータに実行させる対象プログラムに含まれる分岐命令の分岐条件に関し、一部又は全部の分岐を網羅させる前記対象プログラムへの入力データを解析して出力し、前記対象プログラムの試験を支援するための方法において、対象プログラムを構文解析して分岐命令を抽出し、抽出した分岐命令の分岐条件に関する変数を抽出し、抽出した変数の値を変化させる演算式を抽出し、抽出した演算式を、外部変数を用いる式に書き換えるか、又は、前記外部変数の宣言文を追加するかの内少なくともいずれかを実行し、書き換えた後の対象プログラムに基づき、分岐条件に関する変数に対応して前記対象プログラムへの入力データを出力することを特徴とする。
【００１４】
第５発明に係るコンピュータプログラムは、コンピュータに、対象プログラムに含まれる分岐命令の分岐条件に関し、一部又は全部の分岐を網羅させる前記対象プログラムへの入力データを解析して出力させ、前記対象プログラムの試験を支援するための処理を実行させるコンピュータプログラムにおいて、コンピュータに、対象プログラムを構文解析して分岐命令を抽出するステップ、抽出した分岐命令の分岐条件に関する変数を抽出するステップ、抽出した変数の値を変化させる演算式を抽出するステップ、抽出した演算式を、外部変数を用いる式に書き換える処理、及び前記外部変数の宣言文を追加する処理の内、少なくともいずれかの処理を実行するステップ、並びに書き換えられた後の対象プログラムに基づき、分岐条件に関する変数に対応して前記対象プログラムへの入力データを出力するステップを実行させることを特徴とする。
【００１５】
第１発明、第４発明及び第５発明では、試験の対象プログラムから構文解析により分岐命令が抽出され、抽出された分岐命令の分岐条件に関する変数が抽出される。抽出された変数の値を求める式などの変数の値を変化させる演算式がある場合には該演算式が抽出される。そして、前記変数に外部変数を代入するなどの外部変数を用いる式に書き換えられるか、及び、前記外部変数の宣言文が追加されるか、少なくともいずれか一方の処理が実行される。更に、書き換え後の対象プログラムに基づき、分岐を網羅するための分岐条件に関する変数に対応して対象プログラムへ入力されるべきデータ、即ち外部変数に入力されるべきデータが出力される。分岐条件に関する変数を求めるための演算式の複雑さに応じて、入力データの数及び組み合わせが多くなる可能性が高い。しかしながら、演算式を一の外部変数を用いる式に書き換えることにより、分岐を網羅するための外部変数への入力データで済む。また、外部変数であるから他の演算によらず、直接的に入力データを出力することが容易となる。演算式を外部変数に置き換えた場合でも、分岐を網羅するための外部変数への入力データを用いることで、分岐を網羅する試験を実行することが可能である。
【００１６】
第２発明では、分岐を網羅するために書き換えられた外部変数の名称と、外部変数に入力されるべきデータのリストとが出力される。これにより、試験実行時及び品質保証に必要となる工程表の作成に用いることができる。また、ユーザが分岐を網羅するためのデータを認識することができる。対象プログラムの設計通りにプログラムが作成されているか否かを確認することが可能である。また、試験の実行後に分岐命令に関する部分を修正する際に参考とすることができる。
【００１７】
第３発明では、対象プログラムの試験を実行する際に、第１又は第２発明によって出力されたデータを、対象プログラムを実行するコンピュータによって読み出されるデータ形式のデータに書き換える。そして、対象プログラムを実行する手段は、書き換え後のデータを入力して対象プログラムを実行する。第１又は第２発明によって出力されたデータは、分岐を網羅するための入力データであるから、これらのデータを入力して試験を実行することにより、プログラムに含まれる分岐を網羅する試験を自動的に実行することができる。
【発明の効果】
【００１８】
本発明による場合、試験の対象プログラムに含まれる分岐条件に数式による演算結果を含む場合でも、分岐を網羅する試験を実行するための前記対象プログラムへの入力データを自動的に出力することができる。
【発明を実施するための最良の形態】
【００１９】
以下、本発明をその実施の形態を示す図面に基づいて具体的に説明する。
【００２０】
（実施の形態１）
図１は、支援装置として動作するコンピュータ装置の構成を示すブロック図である。コンピュータ装置１は、各構成部の動作を制御するＣＰＵ（Central Processing Unit）１０と、各種データが記憶されるハードディスク（ＨＤ：Hard Disk）１１と、各種データの一時的記憶に利用されるＲＡＭ（Random Access Memory）１２と、ＣＰＵ１０及び入出力装置間の信号の入出力を中継するＩ／Ｏ（In／Out）１３と、ＣＤ−ＲＯＭ（Compact Disk−Read Only Memory）、ＤＶＤ−ＲＯＭ（Digital Versatile Disk−ROM）等の記録媒体２１，２２，２３からデータを読み取るドライブ１４とを備える。Ｉ／Ｏ１３には、液晶、有機ＥＬ（Electroluminescence）等を利用したディスプレイ１５、キーボード１６、マウス１７等の入出力装置が接続されている。
【００２１】
ＣＰＵ１０は、ＨＤ１１に記憶されているＯＳ（Operating System）（図示せず）を実行し、ＯＳ上でプログラム開発ソフト等を読み出して実行することにより演算処理を行なう。特に、ＨＤ１１に記憶されている支援プログラム１８をＣＰＵ１０が読み出して実行することにより、ＣＰＵ１０は本発明に係る支援装置としての動作を実現する。
【００２２】
ＨＤ１１には、支援プログラム１８の他に、テスト対象のソフトウェアプログラムに対するテストを実行するテスト実行用プログラム１９が記憶されている。ＣＰＵ１０はテスト実行用プログラム１９を読み出して実行した場合、指定されるソフトウェアプログラムのファイルを読み出して所定のテストを実行するようにしてある。また、ＨＤ１１には、テスト対象であるマイコン制御プログラムソースファイル２０が記憶されている。なお、支援プログラム１８及びテスト実行用プログラム１９は、ＣＰＵ１０及びＯＳに対応する実行形式であるが、マイコン制御プログラムソースファイル２０は実行形式でなくソースファイルである。
【００２３】
ＲＡＭ１２には、ＳＲＡＭ（Static RAM）、ＤＲＡＭ（Dynamic RAM）等のメモリを利用する。ＲＡＭには、ＣＰＵ１０による処理によって発生したデータが一時的に記憶される。
【００２４】
Ｉ／Ｏ１３には、ディスプレイ１５への画像信号を出力するためのデジタルインタフェース、キーボード１６、マウス１７からの信号を入力するためのＵＳＢ（Universal Serial Bus）インタフェース等を利用する。ＣＰＵ１０は、Ｉ／Ｏ１３を介してディスプレイ１５への画像信号の出力を制御し、Ｉ／Ｏ１３を介してキーボード１６、マウス１７から入力される信号を検知する。
【００２５】
ドライブ１４は、ＣＤ及びＤＶＤの読み取り装置である。ＣＰＵ１０は、ドライブ１４を制御し、記憶媒体２１，２２，２３からデータを読み出してＨＤ１１又はＲＡＭ１２に記憶することが可能である。ＨＤ１１に記憶されている支援プログラム１８は、ＣＰＵ１０がドライブ１４を介して記録媒体２１から読み出した支援プログラム２４を複製（インストール）したものでもよい。同様に、テスト実行用プログラム１９は記録媒体２２に記録されていたテスト実行用プログラム２５をインストールしたものでもよい。マイコン制御プログラムソースファイル２０は、記録媒体２３に記録されていたマイコン制御プログラムソースファイル２６を複製したものでもよい。
【００２６】
ここで、ＨＤ１１に記憶されているテスト実行用プログラム１９について説明する。実施の形態１におけるテスト実行用プログラム１９は、テスト対象のソフトウェアプログラムを読み出して構文解析し、テストデータをファイルに出力する機能を実現するように構成されている。ただし、テスト実行用プログラム１９では、分岐命令の条件に関する変数が演算式によって求められる場合に、当該分岐命令に対応するテストデータを出力できないという制限を有している。
【００２７】
図２は、テスト実行用プログラム１９によるテストデータの出力の可否を説明する説明図である。図２（ａ）及び図２（ｂ）はテスト対象のソフトウェアプログラムの内容例を示し、いずれもＣ言語で作成されている。図２（ａ）は、テスト実行用プログラム１９によるテストデータを出力できる場合の例、図２（ｂ）は、テスト実行用プログラム１９によるテストデータを出力できない場合の例を示す。
【００２８】
図２（ａ）及び図２（ｂ）に示す例ではいずれの場合も、分岐命令であるｉｆ文の条件式に引数の変数ａが含まれており、変数ａがゼロであるか否かの分岐条件によって、関数ｆｕｎｃからゼロが返されるか、又は１が返されるかの分岐に応じた処理が行なわれる。この場合、いずれも分岐条件は変数ａがゼロであるか否かである。図２（ａ）に示す例のソースファイルに対し、ＣＰＵ１０がテスト実行用プログラム１８を読み出して実行した場合、分岐をいずれも網羅するために変数ａに対応して入力されるべきテストデータとして、ａ＝０及びａ＝１の値が出力される。
【００２９】
一方、図２（ｂ）に示す例のソースファイルには、図中の破線で示すように以下に示す演算式（式１）が含まれる。
ａ＝ａ＆０ｘ０１…（１）
式１は変数ａを演算により求める式である。この場合、演算後の変数ａは、演算前の変数ａが偶数であればゼロとなり、奇数であれば１となる。人間がプログラムのソースファイルを見た場合にはこのように、式１の意義を即座に理解して逆算できるので、分岐をいずれも網羅するために変数ａに対応して入力されるべきテストデータとしては、偶数の代表としてａ＝０、奇数の代表としてａ＝１を挙げればよいことが判る。しかしながら、コンピュータが式１を構文解析して逆算し、分岐条件に関する変数ａが「ゼロ」又は「１」となるの式１の右辺の変数ａへの入力データの候補を特定することは容易ではない。演算式が他の変数を含み複雑であるほど困難となる。
【００３０】
実施の形態１に示すテスト実行用プログラム１９では、上述のような困難性により、分岐命令の条件に関する変数が演算式によって求められる場合に当該分岐命令に対応するテストデータを出力できない。
【００３１】
そこで、本発明に係る支援装置では、支援プログラム１８をＣＰＵ１０が読み出して実行することにより、テスト対象のプログラムを以下に説明するように一時的に書き換え、演算式を含んでいてもテストデータを出力できるようにする。
【００３２】
なお、以下の説明では、コンピュータ装置１のＣＰＵ１０がテスト対象のマイコン制御プログラムソースファイル２０に対し、支援プログラム１８を実行することによって実現する処理について示す。なお、マイコン制御プログラムソースファイル２０は、マイコン（マイクロコンピュータ）が内蔵するＲＯＭ（Read Only Memory）に記憶させてマイコンの動作を制御するためのプログラムのソースファイルである。マイコン制御プログラムソースファイル２０は、マイコンへの入力である各ピンに対応付けられる記憶領域から、入力が表わすデータを読み出し、読み出したデータを用いた演算処理を行なう各関数を含む。これらの関数は、別のヘッダファイル内で定義されるマクロ関数を用いて記載されている。
【００３３】
図３は、実施の形態１におけるコンピュータ装置１のＣＰＵ１０が支援プログラム１８を実行することによって行なう処理手順の一例を示すフローチャートである。ＣＰＵ１０は、テスト対象のマイコン制御プログラムソースファイル２０をＲＡＭ１２に複製し、複製したファイル及び元のファイルに対し以下の処理を実行する。
【００３４】
ＣＰＵ１０は、読み込んだマイコン制御プログラムソースファイル２０を構文解析することにより、各関数におけるｉｆ文又はｓｗｉｔｃｈ文等の分岐命令を抽出する（ステップＳ１）。ＣＰＵ１０は、再度マイコン制御プログラムソースファイル２０を構文解析することにより、ステップＳ１で抽出した分岐命令の分岐条件に関する変数を抽出する（ステップＳ２）。
【００３５】
次に、ＣＰＵ１０は、マイコン制御プログラムソースファイル２０の先頭から１行ずつ文字列を読み出す（ステップＳ３）。ＣＰＵ１０は、読み出した１行から、ステップＳ２で抽出した変数に関する演算処理のマクロ関数を検索する（ステップＳ４）。ＣＰＵ１０は、ステップＳ４における検索により、マイコン制御プログラムソースファイル２０内に抽出した変数に対するマクロ関数の有無を判断する（ステップＳ５）。
【００３６】
ＣＰＵ１０は、ステップＳ５にてマクロ関数が有ると判断した場合（Ｓ５：ＹＥＳ）、マクロ関数を外部変数へ書き換え（ステップＳ６）、書き換えた外部変数を一時的にリストとしてＲＡＭ１２に記憶しておき（ステップＳ７）、処理をステップＳ４へ戻す。なお、ステップＳ６における書き換えは、マクロ関数を展開した場合の処理の内容に応じて行なう。マクロ関数の名前と、外部変数への書き換え方法との間に関係式を定義しておき、ＣＰＵ１０が関係式に基づいて書き換え可能にしておいてもよい。
【００３７】
ＣＰＵ１０は、ステップＳ５にてマクロ関数が無いと判断した場合（Ｓ５：ＮＯ）、ステップＳ３で読み出した１行でソースファイルの終端に達したか否かを判断する（ステップＳ８）。ＣＰＵ１０は、ソースファイルの終端に達していないと判断した場合（Ｓ８：ＮＯ）、処理をステップＳ３へ戻し、次の１行を読み出して以降の処理を行なう。
【００３８】
ＣＰＵ１０は、ソースファイルの終端に達したと判断した場合（Ｓ８：ＹＥＳ）、ＲＡＭ１２に記憶してある外部変数のリスト夫々の宣言文をソースファイル先頭に追加し、ソースファイルとして完成させる（ステップＳ９）。
【００３９】
次にＣＰＵ１０は、書き換え後のソースファイルに基づき、マイコン制御プログラムソースファイル２０のテストデータを出力する（ステップＳ１０）。詳細には、ＣＰＵ１０は、ステップＳ９により完成させた書き換え後のソースファイルに対してテスト実行用プログラム１９を実行することにより、任意のファイルに出力されるテストデータを得る。
【００４０】
ＣＰＵ１０は、ステップＳ１０で出力されたテストデータを、書き換え前のマイコン制御プログラムソースファイル２０に対応する形式に編集し（ステップＳ１１）、編集したテストデータを入力するようにして書き換え前のマイコン制御プログラムソースファイル２０に対するテスト実行用プログラム１９を実行し（ステップＳ１２）、処理を終了する。
【００４１】
なお、ＣＰＵ１０は、ステップＳ１１にてマイコン制御プログラムソースファイル２０に対応する形式に編集した後のテストデータのリストをテキスト形式にし、Ｉ／Ｏ１３を介してディスプレイ１５へ出力する。
【００４２】
ＣＰＵ１０が、支援プログラム１８に基づいて上述のような処理を実行することにより、テスト対象であるマイコン制御プログラムソースファイル２０に対する一部又は全部の分岐を網羅するテストデータを自動的に出力し、更にテストを実行することができる。
【００４３】
次に、ＣＰＵ１０が自動的に出力するテストデータについて具体例を挙げて説明する。図４は、実施の形態１における書き換え前後のマイコン制御プログラムソースファイル２０の内容例を示す説明図である。図４（ａ）は、書き換え前のマイコン制御プログラムソースファイル２０の内容例を示し、図４（ｂ）はＣＰＵ１０による書き換え後のソースファイルの内容例を示す。
【００４４】
なお、図４（ａ）に示すマイコン制御プログラムソースファイル２０では、以下のような処理を行なう関数「func」が定義されている。関数「func」が呼び出された場合、変数「BIT_A_1」で示される記憶領域に書き込まれた入力の値を、マクロ関数「read_bit_01」で読み出し、読み出した値がゼロである場合は（ｘ＝＝０）、関数「func」はゼロを返し、それ以外の場合は関数「func」は１を返す。マクロ関数「read_bit_01」及び変数「BIT_A_1」は、別のヘッダファイル「bit_define.h」にて定義されている。変数「BIT_A_1」は、マイコン制御プログラムソースファイル２０を実行形式にしたプログラムを実行するマイコンが読み出す記憶領域（例えばＢｕｆ［］で定義される配列）における所定の１ビット分を示す。変数「BIT_A_1」で示される１ビット分の領域には、プログラムを実行してマイコンが動作する場合に、マイコンへ入力される一つの情報が書き込まれる。マクロ関数「read_bit_01」は引数が示す記憶領域からデータを読み出す関数として定義されている。
【００４５】
ＣＰＵ１０は、図４（ａ）に示すようなマイコン制御プログラムソースファイル２０を読み出した場合、支援プログラム１８により、７行目のｉｆ文及び９行目のｅｌｓｅ文を抽出する（図３、Ｓ１参照）。そしてＣＰＵ１０は、ｉｆ文の条件式に含まれる変数ｘを抽出する（同、Ｓ２参照）。ＣＰＵ１０は、マイコン制御プログラムソースファイル２０の先頭から１行ずつ読み出して変数ｘに関するマクロ関数を検索する（同、Ｓ４参照）。ＣＰＵ１０は、６行目に変数ｘに演算処理のマクロ関数「read_bit_01(BIT_A_1)」による演算結果を代入する演算式「ｘ＝read_bit_01(BIT_A_1);」を検索により抽出する。ＣＰＵ１０は、マクロ関数「read_bit_01」の定義に基づき、データを読み出す関数として認識し、抽出した演算式を、引数「BIT_A_1」の文字列に、文字列「dummy_」を付け加えた外部変数「dummy_BIT_A_1」を代入する式に書き換える（同、Ｓ６）。そして、外部変数「dummy_BIT_A_1」の宣言文をマイコン制御プログラムソースファイル２０の先頭、少なくとも関数「func」の定義の前に追加する（同、Ｓ９）。
【００４６】
このようなＣＰＵ１０の処理により、図４（ｂ）に示すように、分岐の条件式に関する変数ｘを求めるマクロ関数を含む演算式「ｘ＝read_bit_01(BIT_A_1)；」は、外部変数を代入する式「x=dummy_BIT_A_1；」へと書き換えられている。更に、外部変数「dummy_BIT_A_1」の宣言文が追加されている。
【００４７】
なお、図４（ｂ）ではヘッダファイル「bit_define.h」のｉｎｃｌｕｄｅ宣言が削除されているが、必須ではない。
【００４８】
図４（ａ）に示す例のようなマイコン制御プログラムソースファイル２０に対し、ＣＰＵ１０がテスト実行用プログラム１９を実行した場合、マクロ関数を含む演算式「ｘ＝read_bit_01(BIT_A_1)；」にて求められる変数ｘについては、分岐の条件式に関する変数であってもテストデータが出力されない。しかしながら、図４（ｂ）に示す例のようなプログラムソースファイルとなった場合、ＣＰＵ１０がテスト実行用プログラム１９を実行してテストデータの出力を試みることにより（図３、Ｓ１０参照）、テストデータを得ることができる。
【００４９】
図５は、実施の形態１における書き換え後のマイコン制御プログラムソースファイル２０に対して出力されるテストデータの内容例を示す説明図である。図５（ａ）は、ＣＰＵ１０による編集前の出力テストデータ、図５（ｂ）はＣＰＵ１０による編集後の出力テストデータを示す。
【００５０】
図４（ｂ）に示した書き換え後のマイコン制御プログラムソースファイル２０に対し、分岐命令ｉｆ文の変数ｘがゼロであるか否かの条件式に対応して、変数ｘに外部変数「dummy_BIT_A_1」を代入する式が抽出される。この場合、変数ｘがゼロであるか否かの分岐を網羅するためには、外部変数「dummy_BIT_A_1」の値がゼロである場合と、それ以外の場合とに対応するテストデータが必要となる。したがって、図５（ａ）に示すように、テストデータとして、「dummy_BIT_A_1」がゼロである入力データ「値１」と、「dummy_BIT_A_1」がゼロでない「１」である入力データ「値２」とが出力される。
【００５１】
ここで外部変数「dummy_BIT_A_1」は、一時的に書き換えた外部変数であるから、書き換え前の元のマイコン制御プログラムソースファイル２０には対応しない。これに対しＣＰＵ１０は、テスト実行用プログラム１９により得られたテストデータ（図４（ａ））における入力変数名を、「dummy_BIT_A_1」から「dummy_」を除去する編集を行なう（図３、Ｓ１１参照）。図５（ｂ）に示すように、テストデータとして変数「BIT_A_1」にゼロが代入される場合の「値１」と、変数「BIT_A_1」に「１」が代入される場合の「値２」とが得られる。変数「BIT_A_1」は、元のマイコン制御プログラムソースファイル２０に対応しているので、テストデータとしてそのまま利用できる。実際に、変数「BIT_A_1」にゼロが代入される場合と、「BIT_A_1」に「１」が代入される場合との２通りで関数「func」内の分岐を網羅させることができ、有効にテストが実行できる。
【００５２】
なお、実際にマイコンがマイコン制御プログラムソースファイル２０の実行形式のプログラムにて処理を実行する際には、変数「BIT_A_1」は配列Ｂｕｆ［］で確保される記憶領域の１ビットを示す。したがってＣＰＵ１０は、配列Ｂｕｆ［］内における変数「BIT_A_1」で示される位置を具体的に特定する記載に書き換えてもよい。具体的には、変数「BIT_A_1」が、指定される記憶領域（例えばＢｕｆ［］）における最下位ビット（ＬＳＢ：least significant bit）から３番目の１ビットを示す場合、それを表わす記載に編集してもよい。
【００５３】
次に、他のソースファイルの例を挙げて説明する。図６は、実施の形態１における書き換え前後のマイコン制御プログラムソースファイル２０の他の内容例を示す説明図である。図６（ａ）は書き換え前のマイコン制御プログラムソースファイル２０の内容例を示し、図６（ｂ）はＣＰＵ１０による書き換え後のマイコン制御プログラムソースファイル２０の内容例を示す。
【００５４】
なお、図６（ａ）に示すマイコン制御プログラムソースファイル２０では、以下のような処理を行なう関数「func」が定義されている。関数「func」が呼び出された場合はまず、変数「BIT_A_1」で示される記憶領域、即ちマイコンからの出力を、マクロ関数「write_bit_on_01」によりＯＮ（１）とする。そして当該マイコンからの出力の内容が反映される変数「BIT_A」で示される記憶領域のデータ（２ビット分）をマクロ関数「read_bit_02」で読み出し、読み出した値が「１」である場合（ｘ＝＝１）、関数「func」はゼロを返し、それ以外の場合は関数「func」は１を返す。マクロ関数「write_bit_on_01」は、引数が示す記憶領域へ１（＝ＯＮ）を書き込む関数として定義されている。マクロ関数「read_bit_02」は、引数が示す記憶領域から２ビット読み出す関数として定義されている。変数「BIT_A」は、変数「BIT_A_1」が示す記憶領域における所定の１ビットを含む２ビット分を示す。例えば、変数「BIT_A_1」がＢｕｆ［１０］における３ビット目から１ビット分の領域を示す場合、変数「BIT_A」は、Ｂｕｆ［１０］における３ビット目から２ビット分の領域を示す。
【００５５】
この場合、単純にマクロ関数「write_bit_on_01(BIT_A_1)」及びマクロ関数「read_bit_02(BIT_A)」夫々を外部変数に変換したのでは、夫々独立のデータに対応するプログラムの構成となる。しかしながら、元のマイコン制御プログラムソースファイル２０にて定義される変数「BIT_A_1」と変数「BIT_A」とは、同一の記憶領域を参照するマクロ変数であって、一方に対応する記憶領域のデータが書き換えられた場合に、他方の変数で参照されるデータも変わり、夫々独立のデータではない。したがって、独立のデータに対応させた場合には、元の構成とは異なるプログラムへ書き換えたことになり、テスト実行用プログラム１９を読み出して実行した場合に、正確なテストデータを出力することができない。
【００５６】
そこで、ＣＰＵ１０はマクロ関数を外部変数に書き換える際に、書き換え対象のマクロ関数及び引数となるマクロ変数の内容を参照し、外部変数を用いて元の演算式に記憶領域の共有関係を対応させた式へと書き換える。
【００５７】
ＣＰＵ１０は、図６（ａ）に示すようなマイコン制御プログラムソースファイル２０を読み出した場合、、支援プログラム１８により、８行目のｉｆ文及び１０行目のｅｌｓｅ文を抽出する（図３、Ｓ１参照）。そしてＣＰＵ１０は、ｉｆ文の条件式に含まれる変数ｘを抽出する（同、Ｓ２参照）。ＣＰＵ１０は、マイコン制御プログラムソースファイル２０の先頭から１行ずつ読み出して変数ｘに関するマクロ関数を検索する（同、Ｓ４参照）。ＣＰＵ１０は、６行目に、変数ｘに関係するマクロ関数「read_bit_02(BIT_A)」の引数「BIT_A」と記憶領域を共有、即ち同一の記憶領域を参照する変数「BIT_A_1」を引数とするマクロ関数「write_bit_on_01(BIT_A_1)」を抽出する。このとき、１行ずつプログラムを読み出す場合には、事前に変数「BIT_A_1」が変数ｘを求める式に関係しており、且つ変数「BIT_A_1」は変数「BIT_A」と記憶領域を共有していることをＣＰＵ１０は認識している構成としておく。ＣＰＵ１０は、ヘッダファイル「bit_define.h」における定義により、マクロ関数「write_bit_on_01(BIT_A_1)」が引数が示す記憶領域へ「１（＝ＯＮ）」を書き込む関数であることを認識できる。したがってＣＰＵ１０は、マクロ関数「write_bit_on_01(BIT_A_1)」を、引数「BIT_A_1」の文字列に、文字列「dummy_」を付け加えた外部変数「dummy_BIT_A_1」に１を書き込む式へ一時的に書き換える。
【００５８】
次に、ＣＰＵ１０は、７行目に変数ｘに演算処理のマクロ関数「read_bit_02(BIT_A)」による演算結果を代入する演算式を検索により抽出する。ＣＰＵ１０は、マクロ関数「read_bit_02」の定義に基づき、データを読み出す関数として認識する。そして更に、ＣＰＵ１０は、引数のマクロ変数「BIT_A」が、既に書き換えた引数「BIT_A_1」と記憶領域を共有する変数であることを認識する。これらの認識に基づきＣＰＵ１０は、外部変数「dummy_BIT_A」を共用体とし、外部変数「dummy_BIT_A_1」に１を書き込む式を、外部変数「dummy_BIT_A」のＬＳＢから１ビット分に１を書き込む式へ書き換え直し、更に、マクロ関数「read_bit_02(BIT_A)」を、外部変数「dummy_BIT_A」のＬＳＢから２ビット分を読み出して変数ｘへ代入する式に書き換える（図３、Ｓ６）。そして、ＣＰＵ１０は、外部変数「dummy_BIT_A」の宣言文を共用体の型で宣言する形式にて追加する（同、Ｓ９）。
【００５９】
このようなＣＰＵ１０の処理により、図６（ｂ）に示すように、分岐の条件式に関する変数ｘを求めるマクロ関数を含む演算式「ｘ＝read_bit_02(BIT_A)；」は、外部変数の２ビット分を代入する式「x=dummy_BIT_A.bit1_2;」へ書き換えられている。また、変数ｘに値を代入する式によって読み出される記憶領域への書き込みに関するマクロ関数「write_bit_on_01(BIT_A);」は、「dummy_BIT_A.bit1_1=1;」と書き換えられている。また、外部変数「dummy_BIT_A」の宣言文が追加されている。なお、図６（ｂ）では、外部変数「dummy_BIT_A」は共用体を用いるので、その型の宣言文も追加されている。「dummy_bit」型は、ｉｎｔｅｇｅｒ型のサイズ分の記憶領域を確保し、「bit1_1」はその記憶領域のＬＳＢから１ビット分のビットフィールドを示し、「bit1_2」はＬＳＢから２ビット分のビットフィールドを示す。
【００６０】
なお、図６（ｂ）ではヘッダファイル「bit_define.h」のｉｎｃｌｕｄｅ宣言が削除されているが、必須ではない。
【００６１】
図６（ａ）に示す例のようなマイコン制御プログラムソースファイル２０に対し、ＣＰＵ１０がテスト実行用プログラム１９を実行した場合、マクロ関数を含む演算式「x=read_bit_01(BIT_A);」にて求められる変数ｘについては、分岐の条件式に関する変数であってもテストデータが出力されない。しかしながら、図６（ｂ）に示す例のようなソースファイルとなった場合、ＣＰＵ１０がテスト実行用プログラム１９を実行してテストデータの出力を試みることにより（図３、Ｓ１０参照）、テストデータを得ることができる。
【００６２】
図７は、実施の形態１における書き換え後のマイコン制御プログラムソースファイル２０に対して出力されるテストデータの内容例を示す説明図である。図７（ａ）は、ＣＰＵ１０による編集前の出力テストデータ、図７（ｂ）はＣＰＵ１０による編集後の出力テストデータを示す。
【００６３】
図６（ｂ）に示した書き換え後のマイコン制御プログラムソースファイル２０に対し、分岐命令ｉｆ文の変数ｘが「１」であるか否かの条件式に対応して、変数ｘに外部変数「dummy_BIT_A」が示すデータを代入する式が抽出される。この場合、変数ｘが「１」であるか否かの分岐を網羅するためには、外部変数「dummy_BIT_A」は２ビット分のデータを示すから、値が０〜３である場合に対応するテストデータが必要となる。したがって、図７（ａ）に示すように、テストデータとして、外部変数「dummy_BIT_A」が０〜３である入力データ「値１」〜「値４」が出力される。
【００６４】
ここで外部変数「dummy_BIT_A」は、一時的に書き換えた外部変数であるから、書き換え前の元のマイコン制御プログラムソースファイル２０には対応しない。これに対しＣＰＵ１０は、テスト実行用プログラム１９により得られたテストデータ（図７（ａ））における入力変数名を「dummy_BIT_A」から「dummy_」を除去する編集を行なう（図３、Ｓ１１参照）。これにより、図７（ｂ）に示すように、テストデータとして変数「BIT_A」に０〜３が夫々代入される場合の「値１」〜「値４」とが得られる。変数「BIT_A」は、元のマイコン制御プログラムソースファイル２０に対応しているので、テストデータとしてそのまま利用できる。実際に、変数「BIT_A」に夫々０〜３が代入される場合の４通りで関数「func」内の分岐を網羅させることができ、有効にテストが実行できる。
【００６５】
なお、実際にマイコンがマイコン制御プログラムソースファイル２０の実行形式のプログラムにて処理を実行する際には、変数「BIT_A」は配列Ｂｕｆ［］で確保される記憶領域の２ビット分を示す。したがってＣＰＵ１０は、配列Ｂｕｆ［］内における変数「BIT_A」で示される位置を具体的に特定する記載に書き換えてもよい。このとき変数「BIT_A_1」についても、Ｂｕｆ［］内における変数「BIT_A_1」で示される位置を具体的に特定する記載に書き換えてもよい。
【００６６】
（実施の形態２）
実施の形態１では、元のソースファイルを書き換える際に、実際にマクロ関数を含む演算式が記載されている箇所を書き換える構成とした。これに対し実施の形態２では、マクロ関数の定義を書き換えたヘッダファイルを作成してリンクさせる構成とする。
【００６７】
実施の形態２におけるコンピュータ装置は、ソースファイルの書き換えの処理の詳細以外は実施の形態１におけるコンピュータ装置１と同様の構成である。したがって、実施の形態１と同一の符号を付して詳細な説明を省略し、以下に相違点である処理手順について説明する。
【００６８】
図８は、実施の形態２におけるコンピュータ装置１のＣＰＵ１０が支援プログラム１８を実行することによって行なう処理手順の一例を示すフローチャートである。ＣＰＵ１０は、テスト対象のマイコン制御プログラムソースファイル２０をＲＡＭ１２に複製し、複製したファイル及び元のファイルに対し以下の処理を実行する。なお、以下に示す処理手順の内の、実施の形態１におけるＣＰＵ１０による処理手順の共通する処理手順については同一のステップ番号を付して詳細な説明を省略する。
【００６９】
ＣＰＵ１０は、読み込んだマイコン制御プログラムソースファイル２０から分岐命令を抽出し（Ｓ１）、分岐命令に関する変数を抽出する（Ｓ２）。次にＣＰＵ１０は、ソースファイルから１行ずつ読み出して（Ｓ３）、マクロ関数を検索し（Ｓ４）、マクロ関数の有無を判断する（Ｓ５）。ＣＰＵ１０は、マクロ関数が有ると判断した場合（Ｓ５：ＹＥＳ）、対応させる外部変数をリストとして記憶しておき（Ｓ７）処理をステップＳ４へ戻す。このときＣＰＵ１０は、プログラムソースファイルを書き換えない。
【００７０】
ＣＰＵ１０は、マクロ関数が無いと判断した場合（Ｓ５：ＮＯ）、プログラムソースファイルの終端へ達したか否かを判断し（Ｓ８）、達していないと判断したときは（Ｓ８：ＮＯ）、処理をステップＳ３へ戻す。
【００７１】
ＣＰＵ１０は、ソースファイルの終端へ達したと判断した場合（Ｓ８：ＹＥＳ）、記憶しておいた外部変数の宣言文、及び、書き換え対象のマクロを再定義する記載を含むヘッダファイルを作成する（ステップＳ１３）。再定義されるマクロは、マクロ関数を外部変数に置き換えるものである。次にＣＰＵ１０は、作成したヘッダファイルのｉｎｃｌｕｄｅ宣言を、ソースファイルの先頭であって、元のマクロ関数の定義を含むヘッダファイル「bit_define.h」のｉｎｃｌｕｄｅ宣言よりも後に読みこまれるように追加する（ステップＳ１４）。
【００７２】
そしてＣＰＵ１０は、書き換え後のソースファイルに基づき、マイコン制御プログラムソースファイル２０のテストデータを出力し（Ｓ１０）、出力されたテストデータを編集する（Ｓ１１）。ＣＰＵ１０は、編集後のテストデータを用いてテスト実行用プログラム１９を実行し（Ｓ１２）、処理を終了する。
【００７３】
これにより、元のマイコン制御プログラムソースファイル２０における関数定義の内部の記載を書き換えることなく、マクロ関数を含む演算式がソースファイルに含まれている場合でも分岐を網羅するテストデータを自動的に出力し、更にテストを実行することができる。
【００７４】
図９は、実施の形態２における書き換え前後のマイコン制御プログラムソースファイル２０の内容例を示す説明図である。図９（ａ）は、書き換え前のマイコン制御プログラムソースファイル２０の内容例を示し、実施の形態２におけるＣＰＵ１０による書き換え後のソースファイルの内容例を示す。
【００７５】
図９（ａ）に示すマイコン制御プログラムソースファイル２０の内容は、実施の形態１の図４（ａ）に示した内容例を同一であるので詳細な説明を省略する。
【００７６】
実施の形態２におけるＣＰＵ１０が図８に示した処理手順を実行した場合、ＣＰＵ１０は、７行目のｉｆ文及び９行目のｅｌｓｅ文を抽出する（図８、Ｓ１参照）。そしてＣＰＵ１０は、ｉｆ文の条件式に含まれる変数ｘを抽出する（同、Ｓ２参照）。ＣＰＵ１０は、マイコン制御プログラムソースファイル２０の先頭から１行ずつ読み出して変数ｘに関するマクロ関数を検索する（同、Ｓ４参照）。ＣＰＵ１０は、６行目に変数ｘに演算処理のマクロ関数「read_bit_01(BIT_A_1)」による演算結果を代入する演算式を検索により抽出する。ＣＰＵ１０は、マクロ関数「read_bit_01」の定義に基づき、データを読み出す関数として認識し、引数「BIT_A_1」の文字列に、文字列「dummy_」を付け加えた外部変数「dummy_BIT_A_1」をリストに追加して記憶しておく（同、Ｓ７）。そしてＣＰＵ１０は、ソースファイルの終端に達した後（同、Ｓ８：ＹＥＳ）、記憶しておいた外部変数の宣言文及びマクロの再定義を含むヘッダファイルを作成し、ヘッダファイルのｉｎｃｌｕｄｅ宣言を、元のマクロ関数及びマクロ変数を定義したヘッダファイル「bit_define.h」のｉｎｃｌｕｄｅ宣言よりも後に追加する（Ｓ１３、Ｓ１４）。
【００７７】
このようなＣＰＵ１０の処理により、図９（ｂ）のヘッダファイル「dummy.h」に示すように、「#undef」文により、分岐の条件式に関する変数ｘを求めるマクロ関数「read_bit_01(BIT_A_1)」の定義が削除され、「#define」文により、「read_bit_01(BIT_A_1)」は、「dummy_BIT_A_1」へと置き換えられるマクロが再定義される。そして、このヘッダファイル「dummy.h」をリンクするように#include文がマイコン制御プログラムソースファイル２０に追加される。
【００７８】
図９（ａ）に示す例のようなマイコン制御プログラムソースファイル２０に対し、ＣＰＵ１０がテスト実行用プログラム１９を実行した場合はテストデータが出力されない。しかしながら、図９（ｂ）に示す例のようなソースファイルとなった場合、ＣＰＵ１０がテスト実行用プログラム１９を実行してテストデータの出力を試みることにより（図８、Ｓ１０参照）、テストデータを得ることができる。
【００７９】
実施の形態２においてＣＰＵ１０の処理により得られる、図９（ｂ）に示す例のソースファイルに対するテストデータの例は、実施の形態１における例と同様である（図５参照）。このように、分岐の条件式に含まれる変数に関する関数「func」内の記載を書き換えることなしに、ヘッダファイルを追加する構成としても、マクロ関数の演算式を含む場合であってもテストデータを得ることができる。
【００８０】
実施の形態１及び２では、コンピュータ装置１のＣＰＵ１０が支援プログラム１８に基づいてマイコン制御プログラムソースファイル２０を解析し、テスト実行用プログラム１９を実行する手順の構成を示して説明した。この手順に限らず、テスト実行用プログラム１９は、支援プログラム１８の実行が終了した後に、支援プログラム１８とは別個に実行される構成としてもよい。
【００８１】
なお、上述のように開示された本実施の形態はすべての点で例示であって、制限的なものではないと考えられるべきである。本発明の範囲は、上記した意味ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【００８２】
【図１】支援装置として動作するコンピュータ装置の構成を示すブロック図である。
【図２】テスト実行用プログラムによるテストデータの出力の可否を説明する説明図である。
【図３】実施の形態１におけるコンピュータ装置のＣＰＵが支援プログラムを実行することによって行なう処理手順の一例を示すフローチャートである。
【図４】実施の形態１における書き換え前後のマイコン制御プログラムソースファイルの内容例を示す説明図である。
【図５】実施の形態１における書き換え後のマイコン制御プログラムソースファイルに対して出力されるテストデータの内容例を示す説明図である。
【図６】実施の形態１における書き換え前後のマイコン制御プログラムソースファイルの他の内容例を示す説明図である。
【図７】実施の形態１における書き換え後のマイコン制御プログラムソースファイルに対して出力されるテストデータの内容例を示す説明図である。
【図８】実施の形態２におけるコンピュータ装置のＣＰＵが支援プログラムを実行することによって行なう処理手順の一例を示すフローチャートである。
【図９】実施の形態２における書き換え前後のマイコン制御プログラムソースファイルの内容例を示す説明図である。
【符号の説明】
【００８３】
１  コンピュータ装置
１０  ＣＰＵ
１１  ＨＤ
１８  支援プログラム
１９  テスト実行用プログラム
２０  マイコン制御プログラムソースファイル（対象プログラム）
【図１】
2010066900.tif 000003
【図２】
2010066900.tif 000004
【図３】
2010066900.tif 000005
【図４】
2010066900.tif 000006
【図５】
2010066900.tif 000007
【図６】
2010066900.tif 000008
【図７】
2010066900.tif 000009
【図８】
2010066900.tif 000010
【図９】
2010066900.tif 000011