JPH10307735A - C++言語の計算機プログラム検査処理方法およびプログラム記憶媒体 - Google Patents
C++言語の計算機プログラム検査処理方法およびプログラム記憶媒体Info
- Publication number
- JPH10307735A JPH10307735A JP9119014A JP11901497A JPH10307735A JP H10307735 A JPH10307735 A JP H10307735A JP 9119014 A JP9119014 A JP 9119014A JP 11901497 A JP11901497 A JP 11901497A JP H10307735 A JPH10307735 A JP H10307735A
- Authority
- JP
- Japan
- Prior art keywords
- program
- language
- pattern
- source program
- type
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Debugging And Monitoring (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
(57)【要約】
【課題】C++言語で記述されたソースプログラムから
整数型のオブジェクトの大きさが変わると動作が変わる
箇所を自動的に検出する。 【解決手段】C++言語で記述されたC++ソースプロ
グラム2を入力し,C++言語の仕様によって定まる整
数型(char型,short 型,int 型,long型)のオブジェ
クトの大きさが変わるとプログラムの動作が変わるパタ
ンを,入力したソースプログラムを解析することによっ
て検出する。その検出したパタンに該当するソースプロ
グラムが記述されているファイル名,行番号,オブジェ
クトを表す名前と演算に関する情報を検出メッセージ4
として出力する。
整数型のオブジェクトの大きさが変わると動作が変わる
箇所を自動的に検出する。 【解決手段】C++言語で記述されたC++ソースプロ
グラム2を入力し,C++言語の仕様によって定まる整
数型(char型,short 型,int 型,long型)のオブジェ
クトの大きさが変わるとプログラムの動作が変わるパタ
ンを,入力したソースプログラムを解析することによっ
て検出する。その検出したパタンに該当するソースプロ
グラムが記述されているファイル名,行番号,オブジェ
クトを表す名前と演算に関する情報を検出メッセージ4
として出力する。
Description
【0001】
【発明の属する技術分野】本発明は,プログラム言語で
あるC++言語を利用して作成された計算機プログラム
の検査処理方法であって,特に,C++プログラムから
整数型のオブジェクトの大きさが変わると動作が変わる
箇所を検出するC++言語の計算機プログラム検査処理
方法およびそれを実現するためのプログラム記憶媒体に
関するものである。
あるC++言語を利用して作成された計算機プログラム
の検査処理方法であって,特に,C++プログラムから
整数型のオブジェクトの大きさが変わると動作が変わる
箇所を検出するC++言語の計算機プログラム検査処理
方法およびそれを実現するためのプログラム記憶媒体に
関するものである。
【0002】
【従来の技術】ISOおよびANSIで標準化中の計算
機プログラム言語C++は,他のプログラム言語では,
同様な内容の誤記であれば構文違反や文法違反になるよ
うなところが,構文違反や文法違反のエラーとはなら
ず,異なる意味のプログラムとなることがあり,動作誤
りが潜在する可能性がある。
機プログラム言語C++は,他のプログラム言語では,
同様な内容の誤記であれば構文違反や文法違反になるよ
うなところが,構文違反や文法違反のエラーとはなら
ず,異なる意味のプログラムとなることがあり,動作誤
りが潜在する可能性がある。
【0003】例えば,意図した内容が「if(a==f(x)) 」
であるときに,「if(a=f(x))」と誤記しても構文違反や
文法違反のエラーとはならず,動作誤りが生じる。変数
aの値と関数f(x)の値とが等しいかどうかではな
く,変数aに関数f(x)の値を代入した結果が0か1
かによって,次に実行すべき処理が決定されるからであ
る。
であるときに,「if(a=f(x))」と誤記しても構文違反や
文法違反のエラーとはならず,動作誤りが生じる。変数
aの値と関数f(x)の値とが等しいかどうかではな
く,変数aに関数f(x)の値を代入した結果が0か1
かによって,次に実行すべき処理が決定されるからであ
る。
【0004】また,例えば意図した内容が「x=y / *z ;
/*comment*/ 」であるときに,「x=y /*z ; /*comme
nt*/」というように誤記すると,コメント部分が「/*
comment*/ 」ではなく,「/*z ; /*comment*/」と解
釈されるので,動作誤りが生じる。
/*comment*/ 」であるときに,「x=y /*z ; /*comme
nt*/」というように誤記すると,コメント部分が「/*
comment*/ 」ではなく,「/*z ; /*comment*/」と解
釈されるので,動作誤りが生じる。
【0005】このため,プログラムを作成する際に従う
べきコーディング規約を定め,プログラム作成者等が誤
記を回避するよう努めたり,コーディング規約に違反す
る箇所をソースプログラムの出力リストから検出するこ
とが行われてきた。
べきコーディング規約を定め,プログラム作成者等が誤
記を回避するよう努めたり,コーディング規約に違反す
る箇所をソースプログラムの出力リストから検出するこ
とが行われてきた。
【0006】しかし,従来,プログラムが動作する場合
のプロセッサあるいは利用するコンパイラが変わり,整
数型の大きさが変わった時に動作が変わる箇所を検出す
るものはなかった。
のプロセッサあるいは利用するコンパイラが変わり,整
数型の大きさが変わった時に動作が変わる箇所を検出す
るものはなかった。
【0007】
【発明が解決しようとする課題】LSI作成技術の進歩
に伴いマイクロプロセッサのレジスタの幅が,16ビッ
トから32ビット,32ビットから64ビットに拡張さ
れてきている。これを反映してC++言語で記述された
ソースプログラムから,計算機で動作するロードモジュ
ールを生成する各種のC++コンパイラにおけるint 型
オブジェクトの大きさが2バイトから4バイト,long型
オブジェクトの大きさが4バイトから8バイトに変わっ
てきている。
に伴いマイクロプロセッサのレジスタの幅が,16ビッ
トから32ビット,32ビットから64ビットに拡張さ
れてきている。これを反映してC++言語で記述された
ソースプログラムから,計算機で動作するロードモジュ
ールを生成する各種のC++コンパイラにおけるint 型
オブジェクトの大きさが2バイトから4バイト,long型
オブジェクトの大きさが4バイトから8バイトに変わっ
てきている。
【0008】このため,適切な制約の下に十分注意して
ソースプログラムを作成しないと,特定のプロセッサ,
コンパイラでしか正しく動作しない,という問題があっ
た。また,以前に作成したソースプログラムを,作成し
た時にターゲットとしていなかったプロセッサ,コンパ
イラでも正しく動作させる場合に,プログラムの規模が
大きければなおのこと,どこを修正すればよいかを特定
することが困難であった。
ソースプログラムを作成しないと,特定のプロセッサ,
コンパイラでしか正しく動作しない,という問題があっ
た。また,以前に作成したソースプログラムを,作成し
た時にターゲットとしていなかったプロセッサ,コンパ
イラでも正しく動作させる場合に,プログラムの規模が
大きければなおのこと,どこを修正すればよいかを特定
することが困難であった。
【0009】本発明は上記問題点の解決を図り,C++
言語で記述されたソースプログラムから整数型のオブジ
ェクトの大きさが変わると動作が変わる箇所を,自動的
に検出し,さらに動作が変わらないように修正できるな
らば自動修正する手段を提供することを目的とする。
言語で記述されたソースプログラムから整数型のオブジ
ェクトの大きさが変わると動作が変わる箇所を,自動的
に検出し,さらに動作が変わらないように修正できるな
らば自動修正する手段を提供することを目的とする。
【0010】
【課題を解決するための手段】C++言語の仕様書から
整数型(char型,short 型,int 型,long型)のオブジ
ェクトの大きさが変わると動作が変わるパタン(オブジ
ェクトに対する単項演算とオブジェクト間の二項演算)
を抽出する。該当パタンを,C++言語で記述されたソ
ースプログラムから,ファイル名,行番号,オブジェク
トを表す名前と演算とで特定して検出する。
整数型(char型,short 型,int 型,long型)のオブジ
ェクトの大きさが変わると動作が変わるパタン(オブジ
ェクトに対する単項演算とオブジェクト間の二項演算)
を抽出する。該当パタンを,C++言語で記述されたソ
ースプログラムから,ファイル名,行番号,オブジェク
トを表す名前と演算とで特定して検出する。
【0011】ソースプログラムからの検出を進めるに当
たり,一つのソースプログラムをオブジェクトの大きさ
によって異なる解釈をしなければならない事態に陥るこ
とがある。例えば,long型オブジェクトの大きさが4バ
イトのとき,次のプログラム1はプログラム2と動作を
同じくするが,long型オブジェクトの大きさが8バイト
のときにはプログラム3と動作を同じくする。
たり,一つのソースプログラムをオブジェクトの大きさ
によって異なる解釈をしなければならない事態に陥るこ
とがある。例えば,long型オブジェクトの大きさが4バ
イトのとき,次のプログラム1はプログラム2と動作を
同じくするが,long型オブジェクトの大きさが8バイト
のときにはプログラム3と動作を同じくする。
【0012】 このようにオブジェクトの大きさによって異なる解釈が
必要な場合に備えて,検査の前にオブジェクトの大きさ
をどの値とみなして検出を進めるかを定めておく。
必要な場合に備えて,検査の前にオブジェクトの大きさ
をどの値とみなして検出を進めるかを定めておく。
【0013】オブジェクトの大きさが変わると動作が変
わるパタンとしてソースプログラムから抽出するパタン
は,以下のパタンである。 (1) wchar_t ,size_t , ptrdiff_t 型オブジェク
トの定義 (2) sizeof(X) ただし,Xはint 型あるいはその別名,およびint 型を
メンバに含む集成型名,あるいは左記の型をもつオブジ
ェクトである。
わるパタンとしてソースプログラムから抽出するパタン
は,以下のパタンである。 (1) wchar_t ,size_t , ptrdiff_t 型オブジェク
トの定義 (2) sizeof(X) ただし,Xはint 型あるいはその別名,およびint 型を
メンバに含む集成型名,あるいは左記の型をもつオブジ
ェクトである。
【0014】(3) sizeof(Y) ただし,Yはlong型あるいはその別名,およびlong型を
メンバに含む集成型名,あるいは左記の型をもつオブジ
ェクトである。
メンバに含む集成型名,あるいは左記の型をもつオブジ
ェクトである。
【0015】(4) unsigned short型オブジェクトとプロ
モーション後int 型のオブジェクトの間の<,<=,
>,>=演算 (5) プロモーション後unsigned型のオブジェクトとlong
型のオブジェクトの間の<,<=,>,>=演算 なお,プロモーションとは,int 型より大きさが小さい
整数型のオブジェクトを演算する場合に,一度int 型ま
たはunsigned型に変換して演算するための変換である。
モーション後int 型のオブジェクトの間の<,<=,
>,>=演算 (5) プロモーション後unsigned型のオブジェクトとlong
型のオブジェクトの間の<,<=,>,>=演算 なお,プロモーションとは,int 型より大きさが小さい
整数型のオブジェクトを演算する場合に,一度int 型ま
たはunsigned型に変換して演算するための変換である。
【0016】(6) unsigned short型オブジェクトと負の
整定数との間の<,<=,>,>=演算 (7) プロモーション後unsigned型のオブジェクトとlong
型の+,−,*,/演算の結果と負の整定数との<,<
=,>,>=演算 (8) 231以上232未満の値をもつ整定数と符号付型との
<,<=,>,>=演算 (9) 27 以上28 未満の値をもつ16進あるいは8進の
整定数と符号付型との<,<=,>,>=演算 (10)プロモーション後unsigned型オブジェクトとlong型
の負の値との<,<=,>,>=演算 (11)long型,unsigned long 型オブジェクトのビット反
転演算 (12)プロモーション後int 型オブジェクト,unsigned型
になるオブジェクトのビット反転 以上の(1) 〜(12)のパタンをソースプログラムから検出
し,その検出結果を出力する。以上のパタンを検出でき
れば,整数型のオブジェクトの大きさが変わることによ
り予期しない動作が生じるようなことに対して事前に対
処することができる。なお,パタンごとに検出するかど
うかを検査の前に指定させて,特定のパタンのみを検出
するようにすることもできる。検出結果に従って,検査
したソースプログラムを自動修正することも可能であ
る。
整定数との間の<,<=,>,>=演算 (7) プロモーション後unsigned型のオブジェクトとlong
型の+,−,*,/演算の結果と負の整定数との<,<
=,>,>=演算 (8) 231以上232未満の値をもつ整定数と符号付型との
<,<=,>,>=演算 (9) 27 以上28 未満の値をもつ16進あるいは8進の
整定数と符号付型との<,<=,>,>=演算 (10)プロモーション後unsigned型オブジェクトとlong型
の負の値との<,<=,>,>=演算 (11)long型,unsigned long 型オブジェクトのビット反
転演算 (12)プロモーション後int 型オブジェクト,unsigned型
になるオブジェクトのビット反転 以上の(1) 〜(12)のパタンをソースプログラムから検出
し,その検出結果を出力する。以上のパタンを検出でき
れば,整数型のオブジェクトの大きさが変わることによ
り予期しない動作が生じるようなことに対して事前に対
処することができる。なお,パタンごとに検出するかど
うかを検査の前に指定させて,特定のパタンのみを検出
するようにすることもできる。検出結果に従って,検査
したソースプログラムを自動修正することも可能であ
る。
【0017】
【発明の実施の形態】図1は,本発明の概要説明図であ
る。図中,1はCPUおよびメモリ等からなる処理装
置,2は検査対象のC++ソースプログラム,3は検査
条件や抑止条件等の指定情報,4は検査結果の検出メッ
セージ,5は自動修正した修正ソースプログラム,10
はC++ソースプログラムから整数型のオブジェクトの
大きさが変わると動作が変わる箇所を検出するC++プ
ログラム検査部を表す。
る。図中,1はCPUおよびメモリ等からなる処理装
置,2は検査対象のC++ソースプログラム,3は検査
条件や抑止条件等の指定情報,4は検査結果の検出メッ
セージ,5は自動修正した修正ソースプログラム,10
はC++ソースプログラムから整数型のオブジェクトの
大きさが変わると動作が変わる箇所を検出するC++プ
ログラム検査部を表す。
【0018】C++プログラム検査部10は,C++ソ
ースプログラム2を入力し,C++ソースプログラム2
の構文解析および意味解析を行い,整数型のオブジェク
トの大きさが変わると動作が変わるパタンを検出する。
このとき,検査条件指定または抑止条件指定の指定情報
3があれば,その条件に従って検出する。
ースプログラム2を入力し,C++ソースプログラム2
の構文解析および意味解析を行い,整数型のオブジェク
トの大きさが変わると動作が変わるパタンを検出する。
このとき,検査条件指定または抑止条件指定の指定情報
3があれば,その条件に従って検出する。
【0019】また,C++プログラム検査部10は,C
++ソースプログラム2中で検出したパタンの部分を,
整数型のオブジェクトの大きさが変わっても動作が変わ
らない記述,または意図した所定の動作となるような記
述に自動修正する手段を持つ。
++ソースプログラム2中で検出したパタンの部分を,
整数型のオブジェクトの大きさが変わっても動作が変わ
らない記述,または意図した所定の動作となるような記
述に自動修正する手段を持つ。
【0020】図2は,本発明の実施の形態に係るモジュ
ール構成図である。図2のC++プログラムチェッカ2
0およびプリプロセッサ24は,図1のC++プログラ
ム検査部10に相当する。この例では,C++プログラ
ムチェッカ20およびプリプロセッサ24は,UNIX
オペレーティングシステム上で動作し,ソースファイル
32等からC++言語で記述されたソースプログラムを
入力して構文解析および意味解析を行い,前述したパタ
ンを検出して,検出結果の検出メッセージ4をファイル
あるいは端末に出力する。
ール構成図である。図2のC++プログラムチェッカ2
0およびプリプロセッサ24は,図1のC++プログラ
ム検査部10に相当する。この例では,C++プログラ
ムチェッカ20およびプリプロセッサ24は,UNIX
オペレーティングシステム上で動作し,ソースファイル
32等からC++言語で記述されたソースプログラムを
入力して構文解析および意味解析を行い,前述したパタ
ンを検出して,検出結果の検出メッセージ4をファイル
あるいは端末に出力する。
【0021】C++プログラムを検査するための手段
は,4つの論理的な機能区分(カスタマイザ23,プリ
プロセッサ24,チェッカ本体21,ポストプロセッサ
22)から構成され,カスタマイザ23,プリプロセッ
サ24,C++プログラムチェッカ20の3つのロード
モジュールから構成される(図2)。
は,4つの論理的な機能区分(カスタマイザ23,プリ
プロセッサ24,チェッカ本体21,ポストプロセッサ
22)から構成され,カスタマイザ23,プリプロセッ
サ24,C++プログラムチェッカ20の3つのロード
モジュールから構成される(図2)。
【0022】カスタマイザ23は,C++プログラムの
チェッカ起動時に一度だけ実行され,C++プログラム
チェッカ20の起動時に指定されたオプション,起動オ
プションが指定されないときどのように解釈するかを記
述したデフォルト情報ファイル30とカスタマイズファ
イル31とから,カスタマイズ情報テーブルファイル3
5を作成する。
チェッカ起動時に一度だけ実行され,C++プログラム
チェッカ20の起動時に指定されたオプション,起動オ
プションが指定されないときどのように解釈するかを記
述したデフォルト情報ファイル30とカスタマイズファ
イル31とから,カスタマイズ情報テーブルファイル3
5を作成する。
【0023】作成されたカスタマイズ情報テーブルファ
イル35には,どのケースの検査をすべきかの情報や,
sizeof(char)の値,sizeof(short) の値,sizeof(int)
の値,sizeof(long)の値,size_t , ptrdiff_t , w
char_t の型,ソースプログラムが参照するヘッダファ
イルがどのディレクトリにあるかの情報,プログラム起
動時のオプションや環境変数等を保存している。プログ
ラム起動時のオプションは,ここではUNIXのC++
コンパイラに倣った内容としている。ヘッダファイル,
環境変数等についてはUNIXシステム等において知ら
れているので,ここでの詳細な説明は省略する。
イル35には,どのケースの検査をすべきかの情報や,
sizeof(char)の値,sizeof(short) の値,sizeof(int)
の値,sizeof(long)の値,size_t , ptrdiff_t , w
char_t の型,ソースプログラムが参照するヘッダファ
イルがどのディレクトリにあるかの情報,プログラム起
動時のオプションや環境変数等を保存している。プログ
ラム起動時のオプションは,ここではUNIXのC++
コンパイラに倣った内容としている。ヘッダファイル,
環境変数等についてはUNIXシステム等において知ら
れているので,ここでの詳細な説明は省略する。
【0024】プリプロセッサ24は,ソースファイル3
2,プロトタイプファイル33,マクロ定義ファイル3
4を読み込み,C++ソースプログラムの中に記述され
ている#から始まる行(行制御,ファイル取り込み,マ
クロ定義)とマクロの展開を行い,前記パタンに該当す
る箇所が見つかれば,エラーファイル37に出力し,マ
クロ展開した内容をチェッカ本体21が読むように出力
する。このファイルを図2では中間ファイル36として
示している。
2,プロトタイプファイル33,マクロ定義ファイル3
4を読み込み,C++ソースプログラムの中に記述され
ている#から始まる行(行制御,ファイル取り込み,マ
クロ定義)とマクロの展開を行い,前記パタンに該当す
る箇所が見つかれば,エラーファイル37に出力し,マ
クロ展開した内容をチェッカ本体21が読むように出力
する。このファイルを図2では中間ファイル36として
示している。
【0025】チェッカ本体21は,プリプロセッサ24
の出力した中間ファイル36を読み込んで,構文解析,
意味解析を行い,前記パタンに該当する箇所が見つかれ
ば,その情報をエラーファイル37に出力する。
の出力した中間ファイル36を読み込んで,構文解析,
意味解析を行い,前記パタンに該当する箇所が見つかれ
ば,その情報をエラーファイル37に出力する。
【0026】ポストプロセッサ22は,プリプロセッサ
24およびチェッカ本体21によってエラーファイル3
7に出力された内容をマージし,カスタマイズ情報テー
ブルファイル35に記述された内容に従って編集して,
それらを検出メッセージ4として出力する。また,カス
タマイズ情報テーブルファイル35に記述された内容に
従って,整数型のオブジェクトの大きさが変わっても動
作が変わらないようにソースプログラムを修正できる場
合には自動修正して,その修正結果を修正ソースファイ
ル40に出力する。
24およびチェッカ本体21によってエラーファイル3
7に出力された内容をマージし,カスタマイズ情報テー
ブルファイル35に記述された内容に従って編集して,
それらを検出メッセージ4として出力する。また,カス
タマイズ情報テーブルファイル35に記述された内容に
従って,整数型のオブジェクトの大きさが変わっても動
作が変わらないようにソースプログラムを修正できる場
合には自動修正して,その修正結果を修正ソースファイ
ル40に出力する。
【0027】以上のように各モジュールが順に動作し,
作成したC++ソースプログラムを格納したソースファ
イル32を読み込んで,前記パタンに一致する箇所をそ
のファイル名と行番号,パタンとそれの構成要素である
識別子あるいは整定数を含んで検出する。
作成したC++ソースプログラムを格納したソースファ
イル32を読み込んで,前記パタンに一致する箇所をそ
のファイル名と行番号,パタンとそれの構成要素である
識別子あるいは整定数を含んで検出する。
【0028】以上の処理において補助的に用いられるフ
ァイルについて簡単に説明する。カスタマイズファイル
31は,C++プログラムチェッカの起動時に指定でき
るオプションが指定されなかった場合にどのような解釈
をするかを記述したファイルである。
ァイルについて簡単に説明する。カスタマイズファイル
31は,C++プログラムチェッカの起動時に指定でき
るオプションが指定されなかった場合にどのような解釈
をするかを記述したファイルである。
【0029】デフォルト情報ファイル30は,C++プ
ログラムチェッカ20の起動時のオプションで指定しな
い情報について指定するファイルであり,例えば,マク
ロや型をソースプログラムで定義されているのと同様に
定義する。これはC++コンパイラが内部で定義してい
るプロセッサやオペレーティング・システム(OS)の
名前をもつ識別子を,C++プログラムチェッカ20が
倣って定義するために利用する。
ログラムチェッカ20の起動時のオプションで指定しな
い情報について指定するファイルであり,例えば,マク
ロや型をソースプログラムで定義されているのと同様に
定義する。これはC++コンパイラが内部で定義してい
るプロセッサやオペレーティング・システム(OS)の
名前をもつ識別子を,C++プログラムチェッカ20が
倣って定義するために利用する。
【0030】メッセージファイル38は,C++プログ
ラムチェッカ20が出力するメッセージの雛型(出力時
に埋めるファイル名,行番号,オブジェクト名を除いた
メッセージ等)を格納しているファイルである。
ラムチェッカ20が出力するメッセージの雛型(出力時
に埋めるファイル名,行番号,オブジェクト名を除いた
メッセージ等)を格納しているファイルである。
【0031】演算結果ファイル39は,次のようなもの
である。C++言語ではint 型より大きさが小さい整数
型のオブジェクトは,演算する場合に一度int 型または
unsigned型に変換されてから演算される(この変換をプ
ロモーションと呼ぶ)。この変換は,ケースに依存す
る。例えば,sizeof(int) =2の時に,unsigned short
型はunsigned型に変換されてから演算されるが,sizeof
(int) =4の時には,int 型に変換されてから演算され
る。演算結果ファイル39は,この処理のためのもの
で,各型のオブジェクトが各ケースの時にどの型に変換
されるかを記述して保存しているものである。
である。C++言語ではint 型より大きさが小さい整数
型のオブジェクトは,演算する場合に一度int 型または
unsigned型に変換されてから演算される(この変換をプ
ロモーションと呼ぶ)。この変換は,ケースに依存す
る。例えば,sizeof(int) =2の時に,unsigned short
型はunsigned型に変換されてから演算されるが,sizeof
(int) =4の時には,int 型に変換されてから演算され
る。演算結果ファイル39は,この処理のためのもの
で,各型のオブジェクトが各ケースの時にどの型に変換
されるかを記述して保存しているものである。
【0032】カスタマイズ情報テーブルファイル35
は,カスタマイズファイル31と起動オプションとを解
析して編集したファイルである。中間ファイル36は,
プロプロセッサ24が#includeや#define,マクロの展開
を行った結果と定義されているシンボル一覧を出力する
ファイルである。
は,カスタマイズファイル31と起動オプションとを解
析して編集したファイルである。中間ファイル36は,
プロプロセッサ24が#includeや#define,マクロの展開
を行った結果と定義されているシンボル一覧を出力する
ファイルである。
【0033】エラーファイル37は,プリプロセッサ2
4,チェッカ本体21が検出した内容を一旦保持してお
くファイルである。シンボルテーブル50〜52は,プ
ログラム中のシンボル情報を記憶するテーブルであり,
トークンテーブル53は,プログラム中で括弧やコロン
等の区切り記号で区切られた単位の情報を記憶するテー
ブルである。
4,チェッカ本体21が検出した内容を一旦保持してお
くファイルである。シンボルテーブル50〜52は,プ
ログラム中のシンボル情報を記憶するテーブルであり,
トークンテーブル53は,プログラム中で括弧やコロン
等の区切り記号で区切られた単位の情報を記憶するテー
ブルである。
【0034】C++言語で記述された計算機プログラム
において,整数型(char型,short型,int 型,long
型)のオブジェクトの大きさがどのように変わっても動
作が変わらないプログラムは適用範囲が広いが,実現で
きる機能範囲が狭くなり必ずしも現実的とはいえない。
において,整数型(char型,short型,int 型,long
型)のオブジェクトの大きさがどのように変わっても動
作が変わらないプログラムは適用範囲が広いが,実現で
きる機能範囲が狭くなり必ずしも現実的とはいえない。
【0035】char型,short 型,int 型,long型のオブ
ジェクトの大きさは言語仕様から次の条件を満たす必要
がある。 ・sizeof(char)≦sizeof(short) ≦sizeof(int) ≦size
of(long) ・1≦sizeof(char),2≦sizeof(short) ,2≦sizeof
(int) ,4≦sizeof(long) このためプログラムの開発条件は次の多くのケースがあ
る。
ジェクトの大きさは言語仕様から次の条件を満たす必要
がある。 ・sizeof(char)≦sizeof(short) ≦sizeof(int) ≦size
of(long) ・1≦sizeof(char),2≦sizeof(short) ,2≦sizeof
(int) ,4≦sizeof(long) このためプログラムの開発条件は次の多くのケースがあ
る。
【0036】sizeof(int) の値(int 型オブジェクトの
大きさ)がプロセッサのレジスタを反映して,16ビッ
ト,32ビット,64ビットの場合が考えられる。した
がって,sizeof(int) だけに関しても, ・16ビットのみ(sizeof(int) =2) ・32ビットのみ(sizeof(int) =4) ・64ビットのみ(sizeof(int) =8) ・16ビットまたは32ビット ・32ビットまたは64ビット ・16または32または64ビット のケースがある。
大きさ)がプロセッサのレジスタを反映して,16ビッ
ト,32ビット,64ビットの場合が考えられる。した
がって,sizeof(int) だけに関しても, ・16ビットのみ(sizeof(int) =2) ・32ビットのみ(sizeof(int) =4) ・64ビットのみ(sizeof(int) =8) ・16ビットまたは32ビット ・32ビットまたは64ビット ・16または32または64ビット のケースがある。
【0037】sizeof(char)とsizeof(int) ,sizeof(sho
rt) とsizeof(int) ,sizeof(int)とsizeof(long)の大
小関係について<,=,<または=というケースがさら
に加わる。
rt) とsizeof(int) ,sizeof(int)とsizeof(long)の大
小関係について<,=,<または=というケースがさら
に加わる。
【0038】以上のような各種の開発条件に対応した検
査を可能とするために,C++プログラムチェッカ20
に対して,検査条件を指定することができる。図3は,
検査条件指定の説明図である。
査を可能とするために,C++プログラムチェッカ20
に対して,検査条件を指定することができる。図3は,
検査条件指定の説明図である。
【0039】char,short ,int ,long, wchar_t ,
size_t , ptrdiff_t 型は,ターゲットとなるプロセ
ッサやコンパイラ(環境)によって変わるため,プログ
ラム開発者は,開発条件に関して図3に示すような選択
肢の中から選択する必要がある。
size_t , ptrdiff_t 型は,ターゲットとなるプロセ
ッサやコンパイラ(環境)によって変わるため,プログ
ラム開発者は,開発条件に関して図3に示すような選択
肢の中から選択する必要がある。
【0040】図3(A)は,char,short ,int ,long
型のそれぞれの大きさに関する選択肢であり,図3
(B)は,char型の値の範囲に関する選択肢であり,図
3(C)〜(E)は,それぞれ wchar_t 型,size_t
型, ptrdiff_t 型に関する選択肢を示している。
型のそれぞれの大きさに関する選択肢であり,図3
(B)は,char型の値の範囲に関する選択肢であり,図
3(C)〜(E)は,それぞれ wchar_t 型,size_t
型, ptrdiff_t 型に関する選択肢を示している。
【0041】これらの選択肢の中で「または」「どれで
も」という条件が含まれる場合には,いくつかの環境で
検査対象のプログラムを動作させたいというプログラム
開発者の意思がある。そこで,「または」「どれでも」
を含む条件の場合に動作が変わる箇所をプログラムから
検出する。
も」という条件が含まれる場合には,いくつかの環境で
検査対象のプログラムを動作させたいというプログラム
開発者の意思がある。そこで,「または」「どれでも」
を含む条件の場合に動作が変わる箇所をプログラムから
検出する。
【0042】検査条件は,図3(A)〜(E)のそれぞ
れの場合の積だけ存在することになる。すなわち,
(A)について15種,(B)について3種,(C)に
ついて10種,(D)について5種,(E)について3
種であるから,検査条件は,15×3×10×5×3=
6750通りある。
れの場合の積だけ存在することになる。すなわち,
(A)について15種,(B)について3種,(C)に
ついて10種,(D)について5種,(E)について3
種であるから,検査条件は,15×3×10×5×3=
6750通りある。
【0043】また,不要な検出メッセージ4を出力しな
いようにするため,または不要な自動修正をしないよう
にするため,C++プログラムチェッカ20に対して,
抑止条件を指定することもできる。抑止条件の対象とし
ては,ファイルとパタンを選択することができ,対象フ
ァイルの指定では,前述したパタンがあっても検出しな
いファイルおよびプログラムの行を指定することができ
る。対象パタンの指定では,前述した(1) 〜(12)のパタ
ンのうち,検出を抑止するパタンを指定することができ
る。
いようにするため,または不要な自動修正をしないよう
にするため,C++プログラムチェッカ20に対して,
抑止条件を指定することもできる。抑止条件の対象とし
ては,ファイルとパタンを選択することができ,対象フ
ァイルの指定では,前述したパタンがあっても検出しな
いファイルおよびプログラムの行を指定することができ
る。対象パタンの指定では,前述した(1) 〜(12)のパタ
ンのうち,検出を抑止するパタンを指定することができ
る。
【0044】次に検査後の自動修正の例について説明す
る。図4は,C++ソースプログラムについての自動修
正の例を示している。例えば検査対象が,図4に示すよ
うなC++ソースプログラム2であったとする。ここ
で,int 型が2バイトまたは4バイトで動作を変えたく
ないものとする。
る。図4は,C++ソースプログラムについての自動修
正の例を示している。例えば検査対象が,図4に示すよ
うなC++ソースプログラム2であったとする。ここ
で,int 型が2バイトまたは4バイトで動作を変えたく
ないものとする。
【0045】このC++ソースプログラム2について,
前述したパタン抽出を行うと「(4)unsigned short型オ
ブジェクトとプロモーション後int 型のオブジェクトの
間の<,<=,>,>=演算」のパタンが該当する。
前述したパタン抽出を行うと「(4)unsigned short型オ
ブジェクトとプロモーション後int 型のオブジェクトの
間の<,<=,>,>=演算」のパタンが該当する。
【0046】このプログラムでは,「i<us」の部分(i
とusの値の比較結果) がオブジェクトの大きさによって
変わる。sizeof(short) とsizeof(int) が等しいとき
に,unsigned shortは,int 型ではなく,unsigned型に
プロモートが起きるためである。そこで,int 型が2バ
イトでも4バイトでも動作が変わらないようにするに
は,図4に示すような修正ソースプログラム5に修正す
ればよい。すなわち,動作を変わらないようにするに
は,「i<(int)us 」のように大小比較する変数の型を予
め整合させる。このような自動修正は,前記パタンに対
応したルーチンを用意することにより実現することがで
きる。
とusの値の比較結果) がオブジェクトの大きさによって
変わる。sizeof(short) とsizeof(int) が等しいとき
に,unsigned shortは,int 型ではなく,unsigned型に
プロモートが起きるためである。そこで,int 型が2バ
イトでも4バイトでも動作が変わらないようにするに
は,図4に示すような修正ソースプログラム5に修正す
ればよい。すなわち,動作を変わらないようにするに
は,「i<(int)us 」のように大小比較する変数の型を予
め整合させる。このような自動修正は,前記パタンに対
応したルーチンを用意することにより実現することがで
きる。
【0047】なお,図4に示すC++ソースプログラム
2に対する検査結果の出力は,例えば「ファイル名:
行:iとusとの<はshort型とint型のサイズ
依存」というような検出メッセージであり,自動修正を
行わない場合でも,この検出メッセージによってプログ
ラム開発者に注意を促すことができる。
2に対する検査結果の出力は,例えば「ファイル名:
行:iとusとの<はshort型とint型のサイズ
依存」というような検出メッセージであり,自動修正を
行わない場合でも,この検出メッセージによってプログ
ラム開発者に注意を促すことができる。
【0048】この検出メッセージにおいて,「ファイル
名」の部分には,このC++ソースプログラム2が格納
されているファイルのファイル名,「行」の部分には
「i<us」が記述されている行の行番号が埋め込まれる。
名」の部分には,このC++ソースプログラム2が格納
されているファイルのファイル名,「行」の部分には
「i<us」が記述されている行の行番号が埋め込まれる。
【0049】図5は,図2に示すプリプロセッサ24の
フローチャートである。プリプロセッサ24は,まずス
テップS1では,エラー中断時に制御を移すべき処理の
登録を行う。次に,環境変数,起動オプションの取得を
行い,内部テーブルに設定する(S2)。さらに,トー
クンテーブルの初期化,シンボルテーブルの初期化を行
い(S3,S4),続いてカスタマイズ情報の取得およ
びカスタマイズ情報テーブルファイル35への初期化を
行う(S5)。また,マクロ定義ファイル34およびプ
ロトタイプファイル33の読み込みを行い,内部への初
期化を行う(S6)。
フローチャートである。プリプロセッサ24は,まずス
テップS1では,エラー中断時に制御を移すべき処理の
登録を行う。次に,環境変数,起動オプションの取得を
行い,内部テーブルに設定する(S2)。さらに,トー
クンテーブルの初期化,シンボルテーブルの初期化を行
い(S3,S4),続いてカスタマイズ情報の取得およ
びカスタマイズ情報テーブルファイル35への初期化を
行う(S5)。また,マクロ定義ファイル34およびプ
ロトタイプファイル33の読み込みを行い,内部への初
期化を行う(S6)。
【0050】以上の初期化処理の後,ステップS7で
は,ソースファイル32から順次,検査対象のプログラ
ムを読み込む。ステップS8の判定により「#」から始
まる行のときは,ステップS9へ進み。次の前処理指令
かを判断する。
は,ソースファイル32から順次,検査対象のプログラ
ムを読み込む。ステップS8の判定により「#」から始
まる行のときは,ステップS9へ進み。次の前処理指令
かを判断する。
【0051】#if,#ifdef,#ifndef,#elif,#endif,#else,
#include,#define,#line,#error,#pragma,#ident このいずれかであれば,その前処理指令に対応した処理
を行い(S10),検出パタンに一致するかどうかを判
定する(S11)。検出パタンに一致しなければ,ステ
ップS7へ戻る。検出パタンに一致すれば,診断メッセ
ージをエラーファイル37へ出力し(S12),その
後,ステップS7へ戻る。
#include,#define,#line,#error,#pragma,#ident このいずれかであれば,その前処理指令に対応した処理
を行い(S10),検出パタンに一致するかどうかを判
定する(S11)。検出パタンに一致しなければ,ステ
ップS7へ戻る。検出パタンに一致すれば,診断メッセ
ージをエラーファイル37へ出力し(S12),その
後,ステップS7へ戻る。
【0052】ステップS8の判定で「#」から始まる行
ではない場合,ステップS15へ進み,通常のコンパイ
ラ等で行われているように,トークンテーブルへの出
力,シンボルテーブルへの出力を行い(S15,S1
6),それらを中間ファイル36へ出力する(S1
7)。以上の処理(S7〜S17)をソースファイル3
2が尽きるまで行い(S18),ソースファイル32が
尽きたら,チェッカ本体21を起動する(S19)。
ではない場合,ステップS15へ進み,通常のコンパイ
ラ等で行われているように,トークンテーブルへの出
力,シンボルテーブルへの出力を行い(S15,S1
6),それらを中間ファイル36へ出力する(S1
7)。以上の処理(S7〜S17)をソースファイル3
2が尽きるまで行い(S18),ソースファイル32が
尽きたら,チェッカ本体21を起動する(S19)。
【0053】図6は,図2に示すチェッカ本体21のフ
ローチャートである。チェッカ本体21は,プリプロセ
ッサ24と同様に,まずステップS21では,エラー中
断時に制御を移すべき処理の登録を行う。次に,環境変
数,起動オプションの取得を行い,内部テーブルに設定
する(S22)。次に,トークンテーブルの読み込み
(S23),シンボルテーブルの読み込み(S24)を
行い,続いてカスタマイズ情報の取得および内部への初
期化を行う(S25)。
ローチャートである。チェッカ本体21は,プリプロセ
ッサ24と同様に,まずステップS21では,エラー中
断時に制御を移すべき処理の登録を行う。次に,環境変
数,起動オプションの取得を行い,内部テーブルに設定
する(S22)。次に,トークンテーブルの読み込み
(S23),シンボルテーブルの読み込み(S24)を
行い,続いてカスタマイズ情報の取得および内部への初
期化を行う(S25)。
【0054】以上の初期化処理の後,ステップS26で
は,プリプロセッサ24の出力を読み込む。それを構文
解析し,内部で構文木を生成する(S27)。そして,
構文木と検出パタンとが一致するかどうかを調べ(S2
8),一致する場合には,診断メッセージをエラーファ
イル37へ出力する(S29)。
は,プリプロセッサ24の出力を読み込む。それを構文
解析し,内部で構文木を生成する(S27)。そして,
構文木と検出パタンとが一致するかどうかを調べ(S2
8),一致する場合には,診断メッセージをエラーファ
イル37へ出力する(S29)。
【0055】次に意味解析し,文を所定の内部形式に変
換する(S30)。なお,構文解析,意味解析等の処理
は,通常のコンパイラで行われている処理と同様である
ので,ここでの詳しい説明は省略する。
換する(S30)。なお,構文解析,意味解析等の処理
は,通常のコンパイラで行われている処理と同様である
ので,ここでの詳しい説明は省略する。
【0056】文を内部形式に変換した後,その内部形式
と検出パタンとが一致するかどうを調べる(S31)。
一致する場合には,診断メッセージをエラーファイル3
7へ出力する(S32)。
と検出パタンとが一致するかどうを調べる(S31)。
一致する場合には,診断メッセージをエラーファイル3
7へ出力する(S32)。
【0057】以上の処理(S26〜S32)をプリプロ
セッサ24の出力ファイルが尽きるまで行い(S3
3),出力ファイルが尽きたら,ポストプロセッサを起
動する(S34)。
セッサ24の出力ファイルが尽きるまで行い(S3
3),出力ファイルが尽きたら,ポストプロセッサを起
動する(S34)。
【0058】図7は,図2に示すポストプロセッサ22
のフローチャートである。ポストプロセッサ22は,ま
ずステップS41でカスタマイズ情報テーブルファイル
35の読み込みを行う。次に,エラーファイル37の読
み込みを行い(S42),読み込んだエラーファイル3
7の内容の診断メッセージを診断対象となったファイ
ル,行の順に並べかえ,中間ファイルを作成する(S4
3)。
のフローチャートである。ポストプロセッサ22は,ま
ずステップS41でカスタマイズ情報テーブルファイル
35の読み込みを行う。次に,エラーファイル37の読
み込みを行い(S42),読み込んだエラーファイル3
7の内容の診断メッセージを診断対象となったファイ
ル,行の順に並べかえ,中間ファイルを作成する(S4
3)。
【0059】次に,作成した中間ファイルから,抑止条
件指定により抑止対象となっている診断メッセージを削
除し,中間ファイルを更新する(S44)。また,この
中間ファイルの内容で,抑止対象となっている診断対象
ファイルに関する診断メッセージを削除する(S4
5)。
件指定により抑止対象となっている診断メッセージを削
除し,中間ファイルを更新する(S44)。また,この
中間ファイルの内容で,抑止対象となっている診断対象
ファイルに関する診断メッセージを削除する(S4
5)。
【0060】残った中間ファイルの内容を検出メッセー
ジ4として,プリンタ,ディスプレイ,ファイル等の出
力装置に出力する(S46)。また,利用者からの指定
と検出結果とに応じて,自動修正が可能であれば,図4
で説明したようなプログラムの自動修正を行い,処理を
終了する。
ジ4として,プリンタ,ディスプレイ,ファイル等の出
力装置に出力する(S46)。また,利用者からの指定
と検出結果とに応じて,自動修正が可能であれば,図4
で説明したようなプログラムの自動修正を行い,処理を
終了する。
【0061】
【実施例】以上のC++プログラムチェッカにより,約
4M(四百万)行のC++ソースプログラムを調査した
ところ,凡そ100K(十万)行に1箇所の割合でlong
型が4バイトと8バイトとで動作が変わる箇所が発見で
きた。
4M(四百万)行のC++ソースプログラムを調査した
ところ,凡そ100K(十万)行に1箇所の割合でlong
型が4バイトと8バイトとで動作が変わる箇所が発見で
きた。
【0062】
【発明の効果】以上説明したように,本発明によれば,
プログラムが動作する場合のプロセッサあるいは利用す
るコンパイラが変わり,整数型のオブジェクトの大きさ
が変わったときに動作が変わる箇所を自動的に検出する
ことができるので,各種の環境に応じたプログラムの開
発が容易になり,動作誤りを未然に防止することが可能
になる。さらに,自動修正機能を設けることによって,
より一層の労力の軽減および信頼性の向上が可能にな
る。
プログラムが動作する場合のプロセッサあるいは利用す
るコンパイラが変わり,整数型のオブジェクトの大きさ
が変わったときに動作が変わる箇所を自動的に検出する
ことができるので,各種の環境に応じたプログラムの開
発が容易になり,動作誤りを未然に防止することが可能
になる。さらに,自動修正機能を設けることによって,
より一層の労力の軽減および信頼性の向上が可能にな
る。
【図1】本発明の概要説明図である。
【図2】本発明の実施の形態に係るモジュール構成図で
ある。
ある。
【図3】検査条件指定の説明図である。
【図4】C++ソースプログラムについての自動修正の
例を示す図である。
例を示す図である。
【図5】プリプロセッサのフローチャートである。
【図6】チェッカ本体のフローチャートである。
【図7】ポストプロセッサのフローチャートである。
【符号の説明】 1 処理装置 2 C++ソースプログラム 3 指定情報 4 検出メッセージ 5 修正ソースプログラム 10 C++プログラム検査部
Claims (5)
- 【請求項1】 プログラム言語であるC++言語を利用
して作成された計算機プログラムの検査処理方法であっ
て,C++言語で記述されたソースプログラムを入力す
る過程と,整数型のオブジェクトの大きさが変わるとプ
ログラムの動作が変わるパタンを,入力したソースプロ
グラムから検出する過程と,前記検出したパタンに該当
するソースプログラム情報を出力する過程とを有するこ
とを特徴とするC++言語の計算機プログラム検査処理
方法。 - 【請求項2】 請求項1記載のC++言語の計算機プロ
グラム検査処理方法において,int 型またはlong型のオ
ブジェクトの大きさが第1の場合と第2の場合とで動作
が変わるパタンをソースプログラムから検出する場合
に,int 型またはlong型のオブジェクトの大きさをどち
らか一方に指定して検査することを特徴とするC++言
語の計算機プログラム検査処理方法。 - 【請求項3】 請求項1または請求項2記載のC++言
語の計算機プログラム検査処理方法において,前記パタ
ンごとに検出するかどうかの指定を検査の前に入力する
過程と,指定されたパタンについてのみ検出した結果を
出力する過程とを有することを特徴とするC++言語の
計算機プログラム検査処理方法。 - 【請求項4】 プログラム言語であるC++言語を利用
して作成された計算機プログラムの検査処理方法であっ
て,C++言語で記述されたソースプログラムを入力す
る過程と,整数型のオブジェクトの大きさが変わるとプ
ログラムの動作が変わるパタンを,入力したソースプロ
グラムから検出する過程と,前記検出したパタンに該当
するソースプログラムを,整数型のオブジェクトの大き
さが変わっても動作が変わらないかまたは所定の動作と
なるように自動修正する過程とを有することを特徴とす
るC++言語の計算機プログラム検査処理方法。 - 【請求項5】 プログラム言語であるC++言語を利用
して作成された計算機プログラムの検査を行うためのプ
ログラムを格納した計算機読み取り可能な記憶媒体であ
って,C++言語で記述されたソースプログラムを入力
する手順と,C++言語の仕様によって定まる整数型の
オブジェクトの大きさが変わるとプログラムの動作が変
わるパタンを,入力したソースプログラムから検出する
手順と,前記検出したパタンに該当するソースプログラ
ム情報を出力する,またはそのソースプログラムを,整
数型のオブジェクトの大きさが変わっても動作が変わら
ないかもしくは所定の動作となるように自動修正する手
順とを計算機に実行させるプログラムを格納したことを
特徴とするプログラム記憶媒体。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP9119014A JPH10307735A (ja) | 1997-05-09 | 1997-05-09 | C++言語の計算機プログラム検査処理方法およびプログラム記憶媒体 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP9119014A JPH10307735A (ja) | 1997-05-09 | 1997-05-09 | C++言語の計算機プログラム検査処理方法およびプログラム記憶媒体 |
Publications (1)
Publication Number | Publication Date |
---|---|
JPH10307735A true JPH10307735A (ja) | 1998-11-17 |
Family
ID=14750860
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP9119014A Pending JPH10307735A (ja) | 1997-05-09 | 1997-05-09 | C++言語の計算機プログラム検査処理方法およびプログラム記憶媒体 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JPH10307735A (ja) |
-
1997
- 1997-05-09 JP JP9119014A patent/JPH10307735A/ja active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6901579B1 (en) | Generation of source code from classes and maintaining the comment that indicates the role of the class in the generated source code | |
EP0785510B1 (en) | Program debugging system for debugging a program having a graphical user interface | |
US8082542B2 (en) | Load time in-lining of subroutines | |
Bailey et al. | A formal model and specification language for procedure calling conventions | |
JP2003085016A (ja) | スキーマ生成装置、データ処理装置及びその方法並びにプログラム | |
CN110737431B (zh) | 软件开发方法、开发平台、终端设备及存储介质 | |
CN111475150A (zh) | 一种跨语言绑定方法、装置、设备及存储介质 | |
JPH11249875A (ja) | プログラミング支援方法及びその装置 | |
US6611924B1 (en) | Reducing code size of debug output statements | |
JPH10312313A (ja) | C言語の計算機プログラム検査処理方法およびプログラム記憶媒体 | |
EP0528019A1 (en) | METHOD AND DEVICE FOR COMPUTER CODE PROCESSING IN A CODE TRANSLATOR. | |
US8554522B2 (en) | Detection of design redundancy | |
JPH10307735A (ja) | C++言語の計算機プログラム検査処理方法およびプログラム記憶媒体 | |
JPH05346332A (ja) | 試験プログラム実行方法 | |
JPH10312312A (ja) | 仕様によって動作が変わるc言語の計算機プログラム検査処理方法およびプログラム記憶媒体 | |
MacLennan | The Synmac syntax macroprocessor: Introduction and manual, version 5 | |
JP3327662B2 (ja) | プログラム翻訳装置及びプログラム翻訳方法 | |
CN118113291A (zh) | 一种内存安全管理方法及设备 | |
JPH08272623A (ja) | プログラム解析装置及びプログラム解析方法 | |
Andersson Glass | μSPL-Proprietary Graphics Language Transpiler: Asserting translation correctness using runtime verification | |
JP3077627B2 (ja) | デバッグ方法およびデバッグプログラムを記録する記録媒体 | |
Sadolewski et al. | Verification of Control System Runtime Using an Executable Semantic Model | |
JP2795332B2 (ja) | ループ処理誤り検出装置 | |
EP0526054A2 (en) | Monitoring execution of a computer program to provide test coverage analysis | |
Neuhold et al. | Specification and proving of command programs |