JP5908374B2 - コンパイラ評価装置、方法及びプログラム - Google Patents
コンパイラ評価装置、方法及びプログラム Download PDFInfo
- Publication number
- JP5908374B2 JP5908374B2 JP2012188008A JP2012188008A JP5908374B2 JP 5908374 B2 JP5908374 B2 JP 5908374B2 JP 2012188008 A JP2012188008 A JP 2012188008A JP 2012188008 A JP2012188008 A JP 2012188008A JP 5908374 B2 JP5908374 B2 JP 5908374B2
- Authority
- JP
- Japan
- Prior art keywords
- execution
- program
- test data
- source program
- range
- 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.)
- Expired - Fee Related
Links
- 238000011156 evaluation Methods 0.000 title claims description 24
- 238000000034 method Methods 0.000 title claims description 16
- 238000012360 testing method Methods 0.000 claims description 84
- 230000006870 function Effects 0.000 claims description 23
- 238000010586 diagram Methods 0.000 description 7
- 239000000284 extract Substances 0.000 description 4
- 238000012423 maintenance Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012545 processing Methods 0.000 description 2
- 238000012790 confirmation Methods 0.000 description 1
Images
Landscapes
- Debugging And Monitoring (AREA)
Description
ソースプログラムと、このソースプログラムからコンパイルされた実行プログラムとの一致又は不一致は、例えば次のようにして確認することができる。
この2種類のコンパイラにおいて、共通の箇所に同じバグが存在する可能性は極めて低い。このため、出力結果に不一致が存在すれば、いずれか一方のコンパイラにバグの存在が推定される(例えば、特許文献1,2)。
しかし、CPUによっては、このように2種類のコンパイラを入手することが困難な場合があり、この場合は、ソースプログラムと実行プログラムの一致・不一致を確認することが不可能である。
以下、本発明の実施形態を添付図面に基づいて説明する。
図1に示すように第1実施形態に係るコンパイラ評価装置10は、プログラミング言語で記述されたソースプログラムを保持する第1保持部11と、このソースプログラムをプロセッサで実行できるようにコンパイルした実行プログラムを保持する第2保持部12と、このソースプログラム及び実行プログラムの少なくとも一方に基づいてテストデータを生成するテストデータ生成部15と、このテストデータを保持し実行プログラムの実行手段(ターゲットCPU21)に送出する第3保持部13と、テストデータを入力しソースプログラムを実行するインタープリタ17と、実行プログラムの実行手段(ターゲットCPU21)の実行結果及びインタープリタ17の実行結果を対比して一致するか否かを判定する判定部18とを、備えている。
図2は、ソースプログラムを構成する関数の一例を示し、図3はこの図2に示すソースプログラムの関数に対応する実行プログラムを示している。
そして、関数は、if, while, do-while, for, switch等で定義されるプログラムパスの組み合わせからなり、入力変数を受け取って、実行結果を引き渡す。
プロセッサは、ソースプログラムを直接理解することができないために、図3で示されるようなバイナリコードで表される実行プログラムにより処理がなされる。
そして、生成されたテストデータ(図5)は、第3保持部13に保持される。
テストデータ生成部15は、第1保持部11からソースプログラムを読み込み(S11)、ソースプログラムの入力変数(int a, int b)を抽出する(S12)。
(a,b) : (-128,-128) , (-128,-127), ... , (+127,+127)
となる。テストデータは、2の16乗通り必要である。
(a,b) : (-32768,-32768) , (-32768,-32767), ... , (+32767,+32767)
となる。テストデータは2の32乗通り必要である。
なお、図5において、多数あるテストデータがのうち一部を示している。
第1実施形態における実行プログラムの実行手段(ターゲットCPU21)は外部機器20に設けられている。
このために、第1実施形態のコンパイラ評価装置10は、外部機器20に接続して、ソースプログラム及び実行プログラムの一致・不一致を判定する。
インタープリタ17は、第1保持部11からソースプログラムを取得し、第3保持部13から入力変数の組み合わせの異なる複数のテストデータを入力して実行する。そして、インタープリタ17は、この実行結果を判定部18に出力する。
インタープリタ17は、第1保持部11からソースプログラムを読み込み(S21)、ソースプログラムの構文解析を行って中間コードを生成する(S22)。
そして、インタープリタ17は、第3保持部13からテストデータを読み込み(S23)、中間コードを実行し(S24)、実行結果を判定部18に出力する(S25)。
ここで、複数のテストデータについての実行結果のうち、同一のテストデータについてのソースプログラムと実行プログラムの実行結果を対比するためには、同一のテストデータを順にソースプログラムと実行プログラムに入力して実行させて実行結果を順に比較する方法や、実効結果にテストデータの識別情報を付加することでソースプログラムと実行プログラムの実行結果を同一のテストデータについてソートし比較する方法等を適用することができる。
判定部18は、実行プログラムの実行手段(ターゲットCPU21)及びインタープリタ17から、入力変数の組み合わせ([int a, int b], [R1, R2])が同一のテストデータの実行結果(c, R10)をそれぞれ読み込む(S31)。
そして、これら二つの実行結果(c, R10)を対比して一致しているか否かを判定し(S32)、「一致」又は「不一致」の判定結果を出力する(S33,S34)。
そして、生成したテストデータのうち一つでも「不一致」の判定結果が得られた場合はコンパイラ14にバグが含まれると認定され、全てが「一致」の場合はバグが発見されないと認定され、その旨が表示される(S35)。
次に図1を参照して本発明における第2実施形態について説明する。
なお第2実施形態におけるコンパイラ評価装置10において、テストデータ生成部15の作用を除くその他の構成は、第1実施形態と共通するために重複する説明を省略する。
ここで、プログラムパスとは、if, while, do-while, for, switch等により規定されたデータ処理の実行順番を制御す命令である。
ここで、図9のステップS41からステップS44は、図4のステップS11からステップS14に対応するので重複する説明を省略する。
なお、制御構造の条件分岐に用いられる変数については、全てのプログラムパスを実行するテストデータを生成する。この場合、ランダムに値を割り当てて全てのプログラムパスを実行する値を用いる方法、条件分岐の条件から全てのプログラムパスを実行する値を求める方法、などを用いる。
そして、図10に示すように、テストデータ生成部15は、プログラムパスの実行又は不実行の全ての組み合わせについて、対応するテストデータ出力する(S46)。
判定部18は、実行プログラムの実行手段(ターゲットCPU21)及びインタープリタ17から、プログラムパスの実行又は不実行の組み合わせ([int a, int b], [R1, R2])が同一のテストデータの実行結果(c, R10)をそれぞれ読み込む(S31)。
そして、生成したテストデータのうち一つでも「不一致」の判定結果が得られた場合はコンパイラ14にバグが含まれると認定され、全てが「一致」の場合はバグが発見されないと認定され、その旨が表示される(S35)。
第2実施形態によれば、一致・不一致の判定を行うテストデータの数を削減することができ、コンパイラ14にバグが含まれるか否かの認定を簡素化できる。
次に図12を参照して本発明における第3実施形態について説明する。
なお第3実施形態におけるコンパイラ評価装置10は、実行プログラムの実行手段がターゲットCPUをエミュレートするために内蔵されたエミュレータ22である点を除き、その他の構成は、第1実施形態及び第2実施形態と共通する。なお、図12において図1と共通の構成又は機能を有する部分は、同一符号で示し、重複する説明を省略する。
エミュレータ22は、第2保持部12から実行プログラムを読み込む(S51)。そして、第3保持部13からテストデータを読み込んで実行プログラムを実行し(S52)、実行結果を判定部18に出力する(S53)。
第3実施形態によれば、一つのコンピュータのみで、ソースプログラムと実行プログラムの一致・不一致を判定することができる。
次に図14を参照して本発明における第4実施形態について説明する。
図14は第4実施形態におけるコンパイラ評価装置の基本構成を示す構成図を示し、図15は第4実施形態の変形例を示している。そして、図14及び図15は、それぞれ図1及び図12に対応している。
なお、図14及び図15において図1及び図12と共通の構成又は機能を有する部分は、同一符号で示し、重複する説明を省略する。
なお、この内部範囲の設定方法は、ソースプログラムに#pragma命令で指定する方法、ソースプログラムの何行目〜何行目と別ファイル指定する方法等が挙げられる。
そして、第2保持部12から実行プログラムを読み込み(S63)、内部範囲(a,b)に対応する実行プログラムの比較範囲(A,B)を設定する(S64)。
第4実施形態によれば、プログラムを構成する関数にさらに内部範囲を設定するので、一致・不一致の判定を行うテストデータの数を削減することができ、コンパイラ14にバグが含まれるか否かの認定を簡素化できる。
次に図21を参照して本発明における第5実施形態について説明する。
なお第5実施形態におけるコンパイラ評価装置10は、範囲設定部16(図14,図15)が、ソースプログラムのプログラムパスを単位として内部範囲(a,b:図16)及び比較範囲(A,B:図17)を設定する点を除き、その他の構成は、第4実施形態と共通するために重複する説明を省略する。
そして、第2保持部12から実行プログラムを読み込み(S73)、内部範囲(a,b)に対応する実行プログラムの比較範囲(A,B)を設定する(S74)。
第5実施形態によれば、プログラムを構成する関数にさらにプログラムパスを単位として内部範囲を設定するので、一致・不一致の判定を行うテストデータの数を削減することができ、コンパイラ14にバグが含まれるか否かの認定を簡素化できる。
また、コンパイラ評価装置の構成要素は、コンピュータのプロセッサで実現することも可能であり、コンパイラ評価プログラムにより動作させることが可能である。
Claims (7)
- プログラミング言語で記述されたソースプログラムを保持する第1保持部と、
前記ソースプログラムをプロセッサで実行できるようにコンパイルした実行プログラムを保持する第2保持部と、
前記ソースプログラム及び前記実行プログラムの少なくとも一方に基づいてテストデータを生成するテストデータ生成部と、
前記テストデータを保持し前記実行プログラムの実行手段に送出する第3保持部と、
前記テストデータを入力し前記ソースプログラムを実行するインタープリタと、
前記実行プログラムの実行手段の実行結果及び前記インタープリタの実行結果を対比して一致するか否かを判定する判定部と、
前記ソースプログラムを構成する関数の内部範囲を設定するとともにこの内部範囲に対応する前記実行プログラムの比較範囲を設定する範囲設定部と、を備え、
前記テストデータ生成部は、前記ソースプログラムの内部範囲及び前記実行プログラムの比較範囲の少なくとも一方に基づいてテストデータを生成することを特徴とするコンパイラ評価装置。 - 前記テストデータ生成部は、前記ソースプログラムを構成する関数を単位として抽出された入力変数の組み合わせに基づく前記テストデータを生成する請求項1に記載のコンパイラ評価装置。
- 前記テストデータ生成部は、前記ソースプログラムを構成する関数を単位として抽出されたプログラムパスの実行又は不実行の組み合わせに基づく前記テストデータを生成する請求項1に記載のコンパイラ評価装置。
- 前記実行プログラムの実行手段は、ターゲットCPUをエミュレートするために内蔵されたエミュレータ又は外部機器に設けられた前記ターゲットCPUである請求項1から請求項3のいずれか1項に記載のコンパイラ評価装置。
- 前記範囲設定部は、前記ソースプログラムのプログラムパスを単位として前記内部範囲及び前記比較範囲を設定する請求項1から請求項4のいずれか1項に記載のコンパイラ評価装置。
- プログラミング言語で記述されたソースプログラムを保持するステップと、
前記ソースプログラムをプロセッサで実行できるようにコンパイルした実行プログラムを保持するステップと、
前記ソースプログラム及び前記実行プログラムの少なくとも一方に基づいてテストデータを生成するステップと、
前記テストデータを保持しこのテストデータを前記実行プログラムの実行手段に送出するステップと、
前記テストデータを入力し前記ソースプログラムを実行するステップと、
前記実行プログラムの実行結果及び前記ソースプログラムの実行結果を対比して一致するか否かを判定するステップと、
前記ソースプログラムを構成する関数の内部範囲を設定するとともにこの内部範囲に対応する前記実行プログラムの比較範囲を設定するステップと、を含み、
前記テストデータを生成するステップでは、前記ソースプログラムの内部範囲及び前記実行プログラムの比較範囲の少なくとも一方に基づいてテストデータを生成することを特徴とするコンパイラ評価方法。 - コンピュータに、
プログラミング言語で記述されたソースプログラムを保持させるステップ、
前記ソースプログラムをプロセッサで実行できるようにコンパイルした実行プログラムを保持させるステップ、
前記ソースプログラム及び前記実行プログラムの少なくとも一方に基づいてテストデータを生成させるステップ、
前記テストデータを保持させこのテストデータを前記実行プログラムの実行手段に送出させるステップ、
前記テストデータを入力させ前記ソースプログラムを実行させるステップ、
前記実行プログラムの実行結果及び前記ソースプログラムの実行結果を対比させて一致するか否かを判定させるステップ、
前記ソースプログラムを構成する関数の内部範囲を設定するとともにこの内部範囲に対応する前記実行プログラムの比較範囲を設定するステップ、を実行させ、
前記テストデータを生成するステップでは、前記ソースプログラムの内部範囲及び前記実行プログラムの比較範囲の少なくとも一方に基づいてテストデータを生成することを特徴とするコンパイラ評価プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012188008A JP5908374B2 (ja) | 2012-08-28 | 2012-08-28 | コンパイラ評価装置、方法及びプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012188008A JP5908374B2 (ja) | 2012-08-28 | 2012-08-28 | コンパイラ評価装置、方法及びプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2014044678A JP2014044678A (ja) | 2014-03-13 |
JP5908374B2 true JP5908374B2 (ja) | 2016-04-26 |
Family
ID=50395877
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2012188008A Expired - Fee Related JP5908374B2 (ja) | 2012-08-28 | 2012-08-28 | コンパイラ評価装置、方法及びプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP5908374B2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11449410B2 (en) | 2020-03-23 | 2022-09-20 | Tmaxsoft Co., Ltd | Universal runtime verification system between source language and language converted through transpiler |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH01155438A (ja) * | 1987-12-12 | 1989-06-19 | Hitachi Ltd | コンパイラ試験方式 |
CN1567222A (zh) * | 2003-07-09 | 2005-01-19 | 松下电器产业株式会社 | 程序生成装置 |
JP2005141406A (ja) * | 2003-11-05 | 2005-06-02 | Toyota Motor Corp | コンパイラ検査システムおよび同プログラム |
JP2007041804A (ja) * | 2005-08-02 | 2007-02-15 | Sharp Corp | プログラム生成装置、プログラム検証装置および検証プログラム |
JP5303531B2 (ja) * | 2010-09-28 | 2013-10-02 | 株式会社日立製作所 | 組込システムの保守支援装置 |
-
2012
- 2012-08-28 JP JP2012188008A patent/JP5908374B2/ja not_active Expired - Fee Related
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11449410B2 (en) | 2020-03-23 | 2022-09-20 | Tmaxsoft Co., Ltd | Universal runtime verification system between source language and language converted through transpiler |
Also Published As
Publication number | Publication date |
---|---|
JP2014044678A (ja) | 2014-03-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Wang et al. | Reassembleable disassembling | |
US8898647B2 (en) | Method and apparatus for test coverage analysis | |
CN103197942B (zh) | 一种补丁的生成方法、打补丁的方法及装置 | |
EP3244306B1 (en) | A computer-implemented method for allowing modification of a region of original code | |
KR101053104B1 (ko) | 전산기기 소프트웨어 테스트 방법 및 시스템 | |
TW201405424A (zh) | 編譯系統以及編譯方法 | |
JP6759851B2 (ja) | プログラム生成プログラム、プログラム生成方法、プログラム生成装置及びコンパイルプログラム | |
JP4905480B2 (ja) | プログラム難読化プログラム及びプログラム難読化装置 | |
JP5908374B2 (ja) | コンパイラ評価装置、方法及びプログラム | |
JP6790869B2 (ja) | コンパイル方法、コンパイルプログラム及び情報処理装置 | |
JP2013152559A (ja) | プログラム比較解析装置およびプログラム比較解析方法 | |
JP2016128941A (ja) | 出力判定装置、出力判定方法、出力判定プログラム、及び、静的解析装置 | |
Gerasimov et al. | Reachability confirmation of statically detected defects using dynamic analysis | |
WO2017204139A1 (ja) | データ処理装置、データ処理方法、およびプログラム記録媒体 | |
JP6326838B2 (ja) | プログラム処理装置、プログラム処理方法、及びプログラム処理プログラム | |
Zakharov et al. | Compositional environment modelling for verification of GNU C programs | |
KR102524627B1 (ko) | 중간언어를 활용한 바이너리 프로그램 난독화 시스템 및 그 방법 | |
Gregor et al. | Using LLVM-based JIT compilation in genetic programming | |
JP6072714B2 (ja) | プログラム照合装置 | |
DeVries | Mapping of UML Diagrams to Extended Petri Nets for Formal Verification | |
Cao et al. | Compiler backend generation for application specific instruction set processors | |
JP2022118310A (ja) | コンパイル方法、開発支援装置および制御システム | |
JP5120166B2 (ja) | 組込みソフトウェア開発支援システム、支援方法およびプログラム | |
JP2002259121A (ja) | ソースラインデバッグ装置 | |
Li et al. | Concolic Testing of JavaScript using Sparkplug |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20150127 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20150811 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20150818 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20151014 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20160223 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20160323 |
|
R151 | Written notification of patent or utility model registration |
Ref document number: 5908374 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R151 |
|
LAPS | Cancellation because of no payment of annual fees |