JP7447044B2 - プログラム分析装置、プログラム分析方法およびトレース処理追加装置 - Google Patents
プログラム分析装置、プログラム分析方法およびトレース処理追加装置 Download PDFInfo
- Publication number
- JP7447044B2 JP7447044B2 JP2021044926A JP2021044926A JP7447044B2 JP 7447044 B2 JP7447044 B2 JP 7447044B2 JP 2021044926 A JP2021044926 A JP 2021044926A JP 2021044926 A JP2021044926 A JP 2021044926A JP 7447044 B2 JP7447044 B2 JP 7447044B2
- Authority
- JP
- Japan
- Prior art keywords
- execution
- program
- function
- execution path
- trace
- 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.)
- Active
Links
- 238000012545 processing Methods 0.000 title description 83
- 230000006870 function Effects 0.000 claims description 144
- 230000007547 defect Effects 0.000 claims description 117
- 238000004458 analytical method Methods 0.000 claims description 58
- 238000000034 method Methods 0.000 claims description 22
- 238000001514 detection method Methods 0.000 claims description 18
- 230000009467 reduction Effects 0.000 claims description 17
- 230000007257 malfunction Effects 0.000 claims description 12
- 238000003780 insertion Methods 0.000 description 19
- 230000037431 insertion Effects 0.000 description 19
- 230000008569 process Effects 0.000 description 15
- 238000012360 testing method Methods 0.000 description 14
- 238000010586 diagram Methods 0.000 description 10
- 238000012986 modification Methods 0.000 description 6
- 230000004048 modification Effects 0.000 description 6
- 230000005856 abnormality Effects 0.000 description 5
- 238000004364 calculation method Methods 0.000 description 4
- 230000002159 abnormal effect Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 230000002950 deficient Effects 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 239000000284 extract Substances 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 238000011144 upstream manufacturing Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4434—Reducing the memory space required by the program code
- G06F8/4435—Detection or removal of dead or redundant code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/445—Exploiting fine grain parallelism, i.e. parallelism at instruction level
- G06F8/4451—Avoiding pipeline stalls
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Description
非再現不具合の解消のアプローチとして、記号実行を用いた分析を行うことができる。記号実行は、対象のソフトウェアが実行し得る処理の順序(実行パス)を網羅的に抽出し、それぞれのパスを実行する入力を決定する技術である。記号実行を用いることで、テスト時に入力するデータの生成や、不具合が発生する場合の入力データの導出が可能となり、テストを効率的に実施することができる。
以下に本発明を実施するための形態(実施形態)における不具合分析支援システムについて説明する。不具合分析システムは、プログラム(ソースコード、ソフトウェア)に対して記号実行の技術を用いて不具合箇所(の範囲)を特定する。記号実行とは、変数に具体的な値を代入してプログラムを実行する(プログラムの処理を進める)替わりに、変数に制約条件を設けて制約条件を更新しながらプログラムの実行をシミュレーションする技術である。後記するように、記号実行を用いることで関数の引数と戻り値の仕様に矛盾する引数の値(不具合発生条件)を算出することができ、不具合分析(不具合箇所の特定)に利用することができる。
図1は、本実施形態に係る不具合分析支援システム10の全体構成図である。図1を参照しながら不具合分析支援システム10の構成、および不具合分析の流れを説明する。
不具合分析支援システム10は、トレース処理追加装置200と不具合分析装置100(プログラム分析装置)とを含んで構成される。トレース処理追加装置200は、ソースコード410、実行パス情報420、およびトレース仕様430を入力とし、トレース処理付きソースコード440を出力する。トレース処理追加装置200は、実行時における変数の値を実行ログ460に出力するトレース処理(Trace文)をソースコード410に埋め込む。トレース処理追加装置200の詳細については後記する。
トレース処理追加装置200は、ソースコード410、実行パス情報420、およびトレース仕様430を入力とし、トレース処理付きソースコード440を出力する。トレース処理とは、実行ログ460にプログラムの変数の値を記録する処理である。ソースコード410は分析対象となるソースコードであって、トレース処理の埋め込み対象である。
図4は、本実施形態に係る実行パスを説明するための有向グラフ500である。有向グラフ500のノードはソースコードのステップ(ステートメント、文、行)を示し、エッジはステップの実行順序を示す。有向グラフ500では、ノード501が示すステップからプログラムが開始し、ノード502が示す条件分岐のステップ(条件分岐文)で実行パスが2つに分かれることを示す。始点となるノード501から始まり、終点(例えばノード521,522,523)となるノードまでのそれぞれの有向グラフ500のパスが実行パスである。有向グラフ500は実行パス全体を示していることになる。なお、実行パスの部分パスもまた実行パスと呼ぶ。
実行パス情報420は、ステップの実行パス(ステップ実行パスとも記す)および関数の実行パス(関数実行パスとも記す)の双方を含むものとする。
図5は、本実施形態に係るトレース処理追加装置200の機能ブロック図である。トレース処理追加装置200は、コンピュータであって、制御部210、記憶部220、および入出力部280を含んで構成される。入出力部280には、ディスプレイやキーボード、マウスなどのユーザインターフェイス機器が接続される。また入出力部280は、記録媒体とのインターフェイス機能や他の装置との通信機能を備える。
トレース処理追加部213は、ソースコードの条件分岐文(if文)の前に、当該条件分岐の判定に参照される変数の値を実行ログ460に出力するTrace文を挿入する。
図6は、本実施形態に係るトレース処理追加処理のフローチャートである。
ステップS11においてソースコード入出力部211は、ソースコード410(図1参照)、実行パス情報420、およびトレース仕様430を取得して記憶部220に格納する。
ステップS13においてトレース箇所決定部212は、ステップS12で決定した挿入順位の高い関数から順にステップS14~S15を繰り返す処理を開始する。
ステップS16においてソースコード入出力部211は、Trace文が挿入されたソースコード(図1記載のトレース処理付きソースコード440)を出力する。
不具合分析装置100は、トレース処理付きソースコード440、実行パス情報420、関数仕様書470、および実行ログ460を入力とし、不具合分析結果480を出力する(図1参照)。関数仕様書470は、ソースコード410に含まれる関数の仕様書であって、引数および戻り値の型や範囲を含む(後記する図8記載の関数仕様479参照)。
c<1 | 10<=c (2)
a+b >= a-b & c=a+b (4)
例えばトレース結果169は、プログラム実行時に変数xと変数yとがともに5であったことを示しており、第1の実行パスが削除され第2の実行パスが残るため、(1)&(2)&(4)から不具合発生条件を算出すればよい。
図9は、本実施形態に係る不具合分析処理のフローチャートである。
ステップS21において関数仕様取得部111は、実行パス情報420(図1参照)、関数仕様書470、トレース処理付きソースコード440、および実行ログ460を取得する。関数仕様取得部111は、取得した関数仕様書470と実行ログ460とを関数仕様データベース150と実行ログデータベース160とにそれぞれ格納する。また、関数仕様取得部111は、実行パス情報420に含まれる関数実行パスおよびステップ実行パスを関数実行パスデータベース130および実行パスデータベース140にそれぞれ格納する。
ステップS23において実行パス削減部112は、ステップS22で取得したトレース結果ごとにステップS24を繰り返す処理を開始する。
ステップS25において不具合箇所検出部113は、実行パス削減部112が削減して残った実行パスについて記号実行を行い、不具合が発生する関数と不具合発生条件とを算出する。算出された不具合発生条件は、不具合分析結果480として出力される。
トレース処理追加装置200はソースコード410にトレース処理(Trace文)を追加する。不具合分析装置100は、トレース処理が出力したトレース結果を参照してソースコード410に含まれる実行パスを削減し、残った実行パス(残存実行パス)について記号実行処理を行って、不具合発生条件を算出する。
不具合分析装置100は不具合条件を効率よく算出でき、開発者は不具合条件を参照することで不具合を特定して修正することができる。
上記した実施形態においてトレース処理追加装置200のトレース箇所決定部212は、通る実行パスが多いノード(関数)ほどTrace文の挿入順位が高いとしている(図6記載のステップS12参照)。トレース箇所決定部212は、不具合発生が多い関数ほどTrace文の挿入順位を高くするようにしてもよい。また、トレース箇所決定部212は、テストを行っていない実行パスへのTrace文の挿入順位を高くするようにしてもよい。
上記の実施形態におけるトレース処理(Trace文)は、条件分岐文に含まれる変数の値を実行ログに出力している。不具合分析装置100は、この値を参照して何れの分岐先に分岐したかを判断している。トレース処理は、変数の値を出力する替わりに何れの分岐先に分岐したかを示す情報を出力するようにしてもよい。例えば、条件分岐文の条件式の値(条件の真偽値)を記録するようにしてもよい。
上記した実施形態では不具合条件として、不具合分析装置100は関数の引数の範囲を示す論理式と、戻り値の範囲外を示す論理積との論理積を満たす条件(引数の値)を算出している(図8参照)。不具合分析装置100は関数仕様と矛盾(相反)する他の不具合条件を求めてもよい。例えば、関数の引数の範囲を示す論理式と、実行パスのなかで当該関数が直接または間接に呼び出す関数の引数の範囲外を示す論理式との論理積を満たす条件を算出してもよい。例えば図8において、関数barの引数の仕様から求まる関数fooの引数(a+b、a-b)の範囲を示す論理式と、関数fooの引数の仕様で示される論理式の否定との論理積を満たす条件を算出してもよい。
以上、本発明のいくつかの実施形態について説明したが、これらの実施形態は、例示に過ぎず、本発明の技術的範囲を限定するものではない。例えば、上記した実施形態では、トレース処理追加装置200、および不具合分析装置100の入力として、全ての実行パス情報を含む実行パス情報420がある。トレース処理追加装置200および不具合分析装置100は、ソースコード410またはトレース処理付きソースコード440を分析して実行パスを抽出して、実行パス情報420を不要としてもよい。
100 不具合分析装置(プログラム分析装置)
111 関数仕様取得部(実行パス取得部)
112 実行パス削減部
113 不具合箇所検出部
114 記号実行エンジン
200 トレース処理追加装置
211 ソースコード入出力部
212 トレース箇所決定部(トレース処理追加部)
213 トレース処理追加部
410 ソースコード
420 実行パス情報
430 トレース仕様
440 トレース処理付きソースコード
460 実行ログ
470 関数仕様書
480 不具合分析結果(不具合条件)
500 有向グラフ(実行パス)
Claims (7)
- プログラムのなかで順に実行されるステートメントの列である実行パスについて、実行される可能性のある全ての実行パスである全実行パスから、前記プログラムに含まれる条件分岐の分岐先に係る情報を参照して実行されない実行パスを削除する実行パス削減部と、
前記プログラムに含まれる関数の引数および戻り値の範囲の仕様を取得する関数仕様取得部と、
前記実行パス削減部が削除した後の残存実行パスに含まれる関数のなかで、前記仕様と矛盾する前記引数の値である不具合条件を算出する不具合箇所検出部と、を備える
ことを特徴とするプログラム分析装置。 - 前記条件分岐の分岐先に係る情報は、前記プログラムの実行時に生成される実行ログに含まれる当該条件分岐で参照される変数の値、および当該条件分岐に含まれる条件式の値の何れかである
ことを特徴とする請求項1に記載のプログラム分析装置。 - 前記不具合条件は、
前記残存実行パスに含まれる関数のなかで、前記引数の範囲を示す論理式と、前記戻り値の範囲を示す論理式の否定となる論理式との論理積を満足する前記引数および前記戻り値の値である不具合条件、および
前記残存実行パスに含まれる関数のなかで、前記引数の範囲を示す論理式と、前記残存実行パスのなかで当該関数が直接または間接に呼び出す被呼び出し関数の引数の範囲を示す論理式の否定となる論理式との論理積を満足する当該関数の引数の値である不具合条件、の何れかである
ことを特徴とする請求項1に記載のプログラム分析装置。 - 前記不具合箇所検出部は、前記プログラムの実行時にエラーが発生したステートメントを含む前記残存実行パスを特定して、前記不具合条件を算出する
ことを特徴とする請求項1に記載のプログラム分析装置。 - 前記不具合箇所検出部は、不具合条件を算出する関数として過去に不具合が発生した関数を優先して不具合条件を算出する
ことを特徴とする請求項1に記載のプログラム分析装置。 - 前記不具合箇所検出部は、不具合条件を算出する関数としてテストが未実施である実行パスを含む関数を優先して不具合条件を算出する
ことを特徴とする請求項1に記載のプログラム分析装置。 - プログラム分析装置のプログラム分析方法であって、
前記プログラム分析装置は、
プログラムのなかで順に実行されるステートメントの列である実行パスについて、実行される可能性のある全ての実行パスである全実行パスから、前記プログラムに含まれる条件分岐の分岐先に係る情報を参照して実行されない実行パスを削除するステップと、
前記プログラムに含まれる関数の引数および戻り値の範囲の仕様を取得するステップと、
前記実行されない実行パスが削除された後の残存実行パスに含まれる関数のなかで、前記仕様と矛盾する前記引数の値である不具合条件を算出するステップと、を実行することを
特徴とするプログラム分析方法。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2021044926A JP7447044B2 (ja) | 2021-03-18 | 2021-03-18 | プログラム分析装置、プログラム分析方法およびトレース処理追加装置 |
PCT/JP2022/005804 WO2022196219A1 (ja) | 2021-03-18 | 2022-02-15 | プログラム分析装置、プログラム分析方法およびトレース処理追加装置 |
EP22770978.9A EP4310682A1 (en) | 2021-03-18 | 2022-02-15 | Program analysis device, program analysis method, and tracing process addition device |
US18/547,873 US20240143300A1 (en) | 2021-03-18 | 2022-02-15 | Program analyzing apparatus, program analyzing method, and trace processing addition apparatus |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2021044926A JP7447044B2 (ja) | 2021-03-18 | 2021-03-18 | プログラム分析装置、プログラム分析方法およびトレース処理追加装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2022144078A JP2022144078A (ja) | 2022-10-03 |
JP7447044B2 true JP7447044B2 (ja) | 2024-03-11 |
Family
ID=83322252
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2021044926A Active JP7447044B2 (ja) | 2021-03-18 | 2021-03-18 | プログラム分析装置、プログラム分析方法およびトレース処理追加装置 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20240143300A1 (ja) |
EP (1) | EP4310682A1 (ja) |
JP (1) | JP7447044B2 (ja) |
WO (1) | WO2022196219A1 (ja) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2013149164A (ja) | 2012-01-20 | 2013-08-01 | Hitachi Automotive Systems Ltd | ソフトウェア検証支援装置、ソフトウェア検証支援方法、ソフトウェア検証支援プログラム |
US20180114026A1 (en) | 2016-10-25 | 2018-04-26 | Nanjing University | Method and system automatic buffer overflow warning inspection and bug repair |
-
2021
- 2021-03-18 JP JP2021044926A patent/JP7447044B2/ja active Active
-
2022
- 2022-02-15 WO PCT/JP2022/005804 patent/WO2022196219A1/ja active Application Filing
- 2022-02-15 US US18/547,873 patent/US20240143300A1/en active Pending
- 2022-02-15 EP EP22770978.9A patent/EP4310682A1/en active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2013149164A (ja) | 2012-01-20 | 2013-08-01 | Hitachi Automotive Systems Ltd | ソフトウェア検証支援装置、ソフトウェア検証支援方法、ソフトウェア検証支援プログラム |
US20180114026A1 (en) | 2016-10-25 | 2018-04-26 | Nanjing University | Method and system automatic buffer overflow warning inspection and bug repair |
Also Published As
Publication number | Publication date |
---|---|
EP4310682A1 (en) | 2024-01-24 |
WO2022196219A1 (ja) | 2022-09-22 |
JP2022144078A (ja) | 2022-10-03 |
US20240143300A1 (en) | 2024-05-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10586053B2 (en) | Method for automatically detecting security vulnerability based on hybrid fuzzing, and apparatus thereof | |
Heger et al. | Automated root cause isolation of performance regressions during software development | |
US9569345B2 (en) | Architectural failure analysis | |
US8386851B2 (en) | Functional coverage using combinatorial test design | |
US20130024847A1 (en) | Software test automation systems and methods | |
US20080256393A1 (en) | Detecting unexpected impact of software changes using coverage analysis | |
US20160321586A1 (en) | Selecting tests for execution on a software product | |
US20170010957A1 (en) | Method for Multithreaded Program Output Uniqueness Testing and Proof-Generation, Based on Program Constraint Construction | |
Herzig | Using pre-release test failures to build early post-release defect prediction models | |
Ribeiro et al. | Evaluating data-flow coverage in spectrum-based fault localization | |
Caglayan et al. | Usage of multiple prediction models based on defect categories | |
JPWO2013058393A1 (ja) | 異常検出装置、プログラム、及び、方法 | |
US9404972B2 (en) | Diagnosis and debug with truncated simulation | |
Chatelain et al. | VeriTracer: Context-enriched tracer for floating-point arithmetic analysis | |
US11163674B1 (en) | System and method for identifying a faulty component in a spectrum ambiguity group | |
KR20190128457A (ko) | 대상 프로그램에 포함된 대상 함수를 테스트하는 방법 및 장치 | |
JP7447044B2 (ja) | プログラム分析装置、プログラム分析方法およびトレース処理追加装置 | |
US10579761B1 (en) | Method and system for reconstructing a graph presentation of a previously executed verification test | |
Jayakumar et al. | Property-based fault injection: A novel approach to model-based fault injection for safety critical systems | |
Vesra | A study of various static and dynamic metrics for open source software | |
Bernardi et al. | Facilitating fault-simulation comprehension through a fault-lists analysis tool | |
Stratan et al. | Diagnosing Violations of Time-based Properties Captured in iCFTL | |
Zhyhulin et al. | Combined method of prioritization and automation of software regression testing | |
Lübke | Selecting and prioritizing regression test suites by production usage risk in time-constrained environments | |
CN114153750B (zh) | 代码检查方法及装置、代码编写方法、电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20230221 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20231219 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20240129 |
|
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: 20240213 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20240228 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 7447044 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |