Automated Test Generation using CBMC

Similar documents
Bounded Model Checking Of C Programs: CBMC Tool Overview

Improving the Automatic Test Generation process for Coverage Analysis using CBMC

Introduction to CBMC: Part 1

Seminar in Software Engineering Presented by Dima Pavlov, November 2010

Application of Propositional Logic II - How to Test/Verify my C program? Moonzoo Kim

SAT-based Model Checking for C programs

Introduction to CBMC. Software Engineering Institute Carnegie Mellon University Pittsburgh, PA Arie Gurfinkel December 5, 2011

Applications of Logic in Software Engineering. CS402, Spring 2016 Shin Yoo

Symbolic and Concolic Execution of Programs

CS 267: Automated Verification. Lecture 13: Bounded Model Checking. Instructor: Tevfik Bultan

A Bounded Model Checker for SPARK Programs

MEMORY MANAGEMENT TEST-CASE GENERATION OF C PROGRAMS USING BOUNDED MODEL CHECKING

6.0 ECTS/4.5h VU Programm- und Systemverifikation ( ) June 22, 2016

CSC2108: Automated Verification Assignment 3. Due: November 14, classtime.

Software Model Checking. Xiangyu Zhang

Seminar decision procedures: Certification of SAT and unsat proofs

Ranking Functions for Loops with Disjunctive Exit-Conditions

A Case Study on Model Checking and Deductive Verification Techniques of Safety-Critical Software

Model Checking Embedded C Software using k-induction and Invariants

CSE507. Practical Applications of SAT. Computer-Aided Reasoning for Software. Emina Torlak

Handling Loops in Bounded Model Checking of C Programs via k-induction

SMT-Based Bounded Model Checking for Embedded ANSI-C Software. Lucas Cordeiro, Bernd Fischer, Joao Marques-Silva

UNDERSTANDING PROGRAMMING BUGS IN ANSI-C SOFTWARE USING BOUNDED MODEL CHECKING COUNTER-EXAMPLES

Quantifying Information Leaks in Software

arxiv: v1 [cs.se] 5 Jul 2017

Bounded Model Checking. Mooly Sagiv Slides from Arie Gurfinkel & Sagar Chaki, Daniel Jackson, Shahar Maoz

On Reasoning about Finite Sets in Software Checking

Linear Time Unit Propagation, Horn-SAT and 2-SAT

Boolean Functions (Formulas) and Propositional Logic

Verifying C & C++ with ESBMC

PROPOSITIONAL LOGIC (2)

Verification Tests for MCAPI

: A Bounded Model Checking Tool to Verify Qt Applications

Advances in Validation of Concurrent Software

An Industry Proof-of-Concept Demonstration of MC/DC from Automated Combinatorial Testing

Deductive Methods, Bounded Model Checking

Test-Case Generation and Coverage Analysis for Nondeterministic Systems Using Model-Checkers

BITCOIN MINING IN A SAT FRAMEWORK

Testing, Fuzzing, & Symbolic Execution

Cause Clue Clauses: Error Localization using Maximum Satisfiability

ESBMC 1.22 (Competition Contribution) Jeremy Morse, Mikhail Ramalho, Lucas Cordeiro, Denis Nicole, Bernd Fischer

Lecture 2: Symbolic Model Checking With SAT

Testing & Symbolic Execution

Model Checking and Its Applications

On the Generation of Test Cases for Embedded Software in Avionics or Overview of CESAR

Formal Methods for Aviation Software Design and Certification

Incremental Bounded Model Checking for Embedded Software 1

SAT Solver. CS 680 Formal Methods Jeremy Johnson

Homework 4 Solutions

Model Checking Software Programs with. First Order Logic Specifications using AIG Solvers

Integrating a SAT Solver with Isabelle/HOL

Program Verification. Aarti Gupta

2SAT Andreas Klappenecker

18-642: Unit Testing 1/31/ Philip Koopman

Automatic Verification of Loop Invariants

Automatic Software Verification

Local Two-Level And-Inverter Graph Minimization without Blowup

Preprocessing Techniques for QBFs

Bug Finding with Under-approximating Static Analyses. Daniel Kroening, Matt Lewis, Georg Weissenbacher

Bounded Model Checking of Concurrent Programs

Implementation of a Sudoku Solver Using Reduction to SAT

Incremental bounded model checking for embedded software

Static Analysis and Bugfinding

arxiv: v2 [cs.pl] 3 Apr 2018

Using Code Coverage to Improve the Reliability of Embedded Software. Whitepaper V

Polynomial SAT-Solver Algorithm Explanation

Error Explanation with Distance Metrics

Necessary test cases for Decision Coverage and Modied Condition / Decision Coverage

Formal Verification of Embedded Software in Medical Devices Considering Stringent Hardware Constraints

Finite Model Generation for Isabelle/HOL Using a SAT Solver

Horn Formulae. CS124 Course Notes 8 Spring 2018

Learning Techniques for Pseudo-Boolean Solving and Optimization

F-Soft: Software Verification Platform

Symbolic Execu.on. Suman Jana

Profile-Guided Program Simplification for Effective Testing and Analysis

Parallel and Distributed Computing

Advances in Validation of Concurrent Software

Incremental Proof Development in Dafny

Simulink Verification and Validation

Interpolation-based Software Verification with Wolverine

OptCE: A Counterexample-Guided Inductive Optimization Solver

C Bounded Model Checker

From MC/DC to RC/DC: Formalization and Analysis of Control-Flow Testing Criteria

Generating MC/DC Adequate Test Sequences Through Model Checking

Decision Procedures. An Algorithmic Point of View. Decision Procedures for Propositional Logic. D. Kroening O. Strichman.

Lecture1: Symbolic Model Checking with BDDs. Edmund M. Clarke, Jr. Computer Science Department Carnegie Mellon University Pittsburgh, PA 15213

Reinforced Condition/Decision Coverage (RC/DC): A New Criterion for Software Testing

NP-Completeness of 3SAT, 1-IN-3SAT and MAX 2SAT

Error Detection Rate of MC/DC for a Case Study from the Automotive Domain

Lookahead Saturation with Restriction for SAT

Formal Approach in Software Testing

Analysis/Bug-finding/Verification for Security

(a) (4 pts) Prove that if a and b are rational, then ab is rational. Since a and b are rational they can be written as the ratio of integers a 1

8 NP-complete problem Hard problems: demo

Simulink 모델과 C/C++ 코드에대한매스웍스의정형검증툴소개 The MathWorks, Inc. 1

Fast Generation of Lexicographic Satisfiable Assignments: Enabling Canonicity in SAT-based Applications

Lecture 1 Contracts : Principles of Imperative Computation (Fall 2018) Frank Pfenning

Testing: (A Little) Logic Coverage

Proving Properties of non-array Programs

DART: Directed Automated Random Testing. CUTE: Concolic Unit Testing Engine. Slide Source: Koushik Sen from Berkeley

Transcription:

Automated Test Generation using CBMC Rui Gonçalo CROSS Project Computer Science Department University of Minho December 2012

Automated Test Generation using CBMC Summary 2/61 Summary 1 Software Testing 2 Coverage 3 Automated Test Generation 4 Model Checking 5 CBMC 6 Goals 7 Conclusion

Automated Test Generation using CBMC Software Testing 3/61 Software Testing [1] Observation of a program in execution under controlled conditions John Rushby in Automated Test Generation and Verified Software

Automated Test Generation using CBMC Software Testing 4/61 Software Testing controlled conditions Assignment to the input variables Allows the tester to verify the behavior of the program

Automated Test Generation using CBMC Software Testing 5/61 Software Testing Assignment to the input variables Test cases

Automated Test Generation using CBMC Software Testing 6/61 Example of a test case Test case 1: (x = 0, y = 0) Test case 2: (x = 4, y = 0) int func (int x, int y) int a = 0; if (x > 3 y == 1) a = x + y; else if (x == y) a = x; a++; return a; Test case 1: (a = 1) Test case 1: (a = 5)

Automated Test Generation using CBMC Software Testing 7/61 Test Generation Generation of test cases Remains a largely manual process in software industry Entails high costs and time consuming.

Automated Test Generation using CBMC Software Testing 8/61 Automated Test Generation A process able to generate test cases in an automatic way is mandatory, to decrase the efforts of the testing phase. How many test cases?

Automated Test Generation using CBMC Coverage 9/61 Coverage Test coverage measures the percentage of source code points that a testing process reaches. Which source code points?

Automated Test Generation using CBMC Coverage 10/61 Coverage [2] Depending on the source code points: A. Statement Coverage B. Decision Coverage C. Condition Coverage D. Decision/Condition Coverage E. Modified Condition/Decision Coverage

Automated Test Generation using CBMC Coverage 11/61 Coverage if ( a == 0 && b > 3 ) { { { Condition Decision Condition

Automated Test Generation using CBMC Coverage 12/61 Statement Coverage Every statement has been invoked at least once. S#1 if (x > 1 && y == 0) S#2 a = x + y; S#3 if (x == 2 y > 1) S#4 b = x - y; x y S#1 S#2 S#3 S#4 2 0

Automated Test Generation using CBMC Coverage 13/61 Statement Coverage If the programmer used the or operator, in the first decision, by mistake, the test case would not notice! S#1 if (x > 1 y == 0) S#2 a = x + y; S#3 if (x == 2 y > 1) S#4 b = x - y; x y S#1 S#2 S#3 S#4 2 0

Automated Test Generation using CBMC Coverage 14/61 Decision Coverage Every decision has taken all possible outcomes at least once. x y Decision if (x == 2 y > 1) a = x + y; 2 1 TRUE 1 1 FALSE

Automated Test Generation using CBMC Coverage 15/61 Decision Coverage The effect of the second condition is not tested! x y Decision if (x == 2 y > 1) a = x + y; 2 1 TRUE 1 1 FALSE

Automated Test Generation using CBMC Coverage 16/61 Condition Coverage Every condition has taken all possible outcomes at least once. x y Cond#1 Cond#2 if (x == 2 y > 1) a = x + y; 2 1 TRUE FALSE 1 2 FALSE TRUE

Automated Test Generation using CBMC Coverage 17/61 Condition Coverage The decision is always TRUE! x y Cond#1 Cond#2 Decision if (x == 2 y > 1) a = x + y; 2 1 TRUE FALSE TRUE 1 2 FALSE TRUE TRUE

Automated Test Generation using CBMC Coverage 18/61 Condition/Decision Coverage Every condition and decision have taken all possible outcomes at least once. x y Cond#1 Cond#2 Decision if (x == 2 y > 1) a = x + y; 2 2 TRUE TRUE TRUE 1 1 FALSE FALSE FALSE

Automated Test Generation using CBMC Coverage 19/61 Condition/Decision Coverage The independent effect of the conditions is not tested! if (x == 2 y > 1) a = x + y; if (x == 2 y > 1) a = x + y; if (x == 2 && y > 1) a = x + y; x y Cond#1 Cond#2 Decision 2 2 TRUE TRUE TRUE 1 1 FALSE FALSE FALSE

Automated Test Generation using CBMC Coverage 20/61 Modified Condition/Decision Coverage Every condition in a decision must be shown to independently affect the decision s outcome. x y Cond#1 Cond#2 Decision if (x == 2 y > 1) a = x + y; 2 2 TRUE TRUE TRUE 1 1 FALSE FALSE FALSE 2 1 TRUE FALSE FALSE 1 2 FALSE TRUE TRUE

Automated Test Generation using CBMC Coverage 21/61 Modified Condition/Decision Coverage The number of test cases must be at least n + 1, where n is the number of variables in the decision x y Cond#1 Cond#2 Decision if (x == 2 y > 1) a = x + y; 2 2 TRUE TRUE TRUE 1 1 FALSE FALSE FALSE 2 1 TRUE FALSE FALSE 1 2 FALSE TRUE TRUE

Automated Test Generation using CBMC Coverage 22/61 Modified Condition/Decision Coverage The standard DO- 178B 1 Software Considerations in Airbone Systems and Equipment Certifications requires: Level A MC/DC Level B Decision Coverage Level C Statement Coverage 1- http://www.verifysoft.com/en_do-178b.html

Automated Test Generation using CBMC Automated Test Generation 23/61 Automated Test Generation How?

Automated Test Generation using CBMC Model Checking 24/61 Bounded Model Checking Model Checking: Given a model M of a system and a property P: - if M P (M models P), P holds in M, i. e. the system functions according to P. - if M P (M doens t model P), P doesn t hold in M, and a counterexample is produced, i. e. an execution of the system that does not satisfy P

Automated Test Generation using CBMC Model Checking 25/61 Bounded Model Checking Bounded Model Checking: Given a model M of a system, a property P and a bound k (>0): - Encode all executions of M of length k into a formula M k - Encode all executions of M of length k that violate P into P k - if (M k P k ) is unsatisfiable then P holds in M of length k - if (M k P k ) is satisfiable then P doesn t hold in M of length k, and a counterexample is produced

Automated Test Generation using CBMC Model Checking 26/61 Conjunctive Normal Form The formula (M k P k ) is passed to a SAT solver in Conjunctive Normal Form (CNF). How to translate C programs into CNF?

Automated Test Generation using CBMC Model Checking 27/61 Conjunctive Normal Form C programs into CNF: 1º - Unwinding loops int func(int a) { int r = 0, i = 0; while (i < max) { a++; assert(a!= 0); r = max + (r / a); i++; r = r * 2; return r; k = 1 int func(int a) { int r = 0, i = 0; if (i < max) { a++; assert(a!= 0); r = max + (r / a); i++; r = r * 2; return r;

Automated Test Generation using CBMC Model Checking 28/61 Conjunctive Normal Form C programs into CNF: 2º - Static Single Assigment Form int func(int a) { int r = 0, i = 0; if (i < max) { a++; assert(a!= 0); r = max + (r / a); i++; r = r * 2; return r; M := r 0 = 0 i 0 = 0 a 1 = a 0 + 1 r 1 = max 0 + r 0 / a 1 i 1 = i 0 + 1 r 2 = (i 0 < max 0 )? r 1 : r 0 r 3 = r 2 * 2 P := a 1!= 0

Automated Test Generation using CBMC Model Checking 29/61 Conjunctive Normal Form M 1 := (r 0 = 0) (i 0 = 0) (a 1 = a 0 + 1) (r 1 = max 0 + r 0 / a 1 ) (i 1 = i 0 + 1) (r 2 = (i 0 < max 0 )? r 1 : r 0 ) (r 3 = r 2 * 2) P 1 := (a 1 = 0) (M k P k ) SAT solver SAT or UNSAT?

Automated Test Generation using CBMC CBMC 30/61 CBMC Bounded Model Checking for ANSI- C programs Checks safety properties: - buffer overflows - pointer safety - division by zero - not- a- number - unitialized variable - data race CBMC calls an assertion generator (goto- instrument) to add assertions in the code to verify these properties

Automated Test Generation using CBMC CBMC 31/61 CBMC How to use CBMC to Automated Test Generation?

Automated Test Generation using CBMC CBMC 32/61 CBMC [4] 1º - Assign nondeterminist values to the input variables (use the CBMC functions with prefix nondet_) 2º - add assertions #ifdef ASSERTION_1 assert(0); #endif 3º - run CBMC $ cbmc file.c - D ASSERTION_1

Automated Test Generation using CBMC CBMC 33/61 CBMC int func(int x, int y) { int a = 0; while (x > 3 y == 1) { #ifdef ASSERTION_1 assert(0); #endif a++; x- - ; y++; return a; int main() { int x = nondet_int(); int y = nondet_int(); return func(x,y); $ cbmc file.c - D ASSERTION_1 - - unwind 1 - - no- unwinding- assertions

Automated Test Generation using CBMC CBMC 34/61 CBMC int func(int x, int y) { int a = 0; while (x > 3 y == 1) { #ifdef ASSERTION_1 assert(0); #endif a++; x- - ; y++; return a; When CBMC reaches an assert(0) stops the execution and give us the variables values that lead the program to this point Which test case returns the decision (x > 3) (y == 1) as TRUE?

Automated Test Generation using CBMC CBMC 35/61 CBMC $ cbmc file.c - D ASSERTION_1 - - unwind 1 - - no- unwinding- assertions int func(int x, int y) { int a = 0; while (x > 3 y == 1) { #ifdef ASSERTION_1 assert(0); #endif a++; x- - ; y++; return a; Test case (x = - 1073741824, y = 1) Generic Property Instrumentation Starting Bounded Model Checking Unwinding loop c::func.0 iteration 1 file func.c line 5 function func size of program expression: 38 assignments simple slicing removed 11 assignments Generated 1 VCC(s), 1 remaining after simplification Passing problem to propositional reduction Running propositional reduction Solving with MiniSAT2 with simplifier 532 variables, 800 clauses SAT checker: negated claim is SATISFIABLE, i.e., does not hold Runtime decision procedure: 0.003s Building error trace (...) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - x=- 1073741824 (11000000000000000000000000000000) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - y=1 (00000000000000000000000000000001) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - a=0 (00000000000000000000000000000000)

Automated Test Generation using CBMC CBMC 36/61 CBMC and MC/DC How to use CBMC to Automated Test Generation and achieve MC/DC?

Automated Test Generation using CBMC CBMC 37/61 Control Flow Graph int a = 0 int func(int x, int y) { int a = 0; while (x > 3 y == 1) { a++; x- - ; y++; return a; True a++; x--; y++; True False while (x > 3 y == 1) False return a;

Automated Test Generation using CBMC CBMC 38/61 Control Flow Graph unwind k = 1 int a = 0 int func(int x, int y) { int a = 0; if (x > 3 y == 1) { a++; x- - ; y++; return a; a++; x--; y++; True if (x > 3 y == 1) False return a;

Automated Test Generation using CBMC CBMC 39/61 CBMC and MC/DC MC/DC requires: x > 3 : TRUE and FALSE int a = 0 y == 1 : TRUE and FALSE x > 3 y == 1: TRUE and FALSE if (x > 3 y == 1) int func(int x, int y) { int a = 0; if (x > 3 y == 1) { a++; x- - ; y++; return a; a++; x--; y++; True return a; False

Automated Test Generation using CBMC CBMC 40/61 CBMC and MC/DC if (x > 3) { if ( y == 1) { ASSERTION_1 a++; x- - ; y++; else { ASSERTION_2 a++; x- - ; y++; else { if ( y == 1) { ASSERTION_3 a++; x- - ; y++; else { ASSERTION_4 T a++; x--; y++; T if (y == 1) F a++; x--; y++; int a = 0 if (x > 3) a++; x--; y++; T return a; F if (y == 1) F

Automated Test Generation using CBMC CBMC 41/61 CBMC and MC/DC x y C#1: x > 3 C#2: y == 1 C#1 C#2 1073741824 1 TRUE TRUE TRUE 1073741824-2096361621 TRUE FALSE TRUE - 2130706432 1 FALSE TRUE TRUE - 2147483584-2122265085 FALSE FALSE FALSE

Automated Test Generation using CBMC CBMC 42/61 CBMC and MC/DC x y C#1: x > 3 C#2: y == 1 C#1 C#2 1073741824 1 TRUE TRUE TRUE 1073741824-2096361621 TRUE FALSE TRUE - 2130706432 1 FALSE TRUE TRUE - 2147483584-2122265085 FALSE FALSE FALSE 100% MC/DC

Automated Test Generation using CBMC CBMC 43/61 CBMC and MC/DC How to use CBMC to Automated Test Generation and achieve MC/DC without redundant test cases?

Automated Test Generation using CBMC CBMC 44/61 CBMC effectively [5] Consider the branches from if statements nodes b 1 S b 2 The algorithm builds paths that execute each branch only once.

Automated Test Generation using CBMC CBMC 45/61 CBMC effectively int test(int a[], int size) { int negatives = 0, i = 0; while(i < size) { if (a[i] < 0) negatives++; i++; return negatives; a + - - + -... k = 3 int test(int a[], int size) { int negatives = 0, i = 0; if (i < size) { if (a[i] < 0) negatives++; i++; if (i < size) { if (a[i] < 0) negatives++; i++; if (i < size) { if (a[i] < 0) negatives++; i++; return negatives;

Automated Test Generation using CBMC CBMC 46/61 CBMC effectively S0 int test(int a[], int size) { S0: int negatives = 0, i = 0; S1: if (i < size) { b 1 b 2 S2: if (a[i] < 0) b 3 b 4 S3: negatives++; S4: i++; S5: if (i < size) { b 1 b 2 S6: if (a[i] < 0) b 3 b 4 S7: negatives++; S8: i++; S9: if (i < size) { b 1 b 2 S10: if (a[i] < 0) b 3 b 4 S11: negatives++; S12: i++; S13: return negatives; Rui Gonçalo S10 b 1 b 3 b 4 b 3 S8 S9 S6 S11 b 3 S2 S4 b 1 S5 b 2 b 4 b 2 S7 b 1 b 4 S3 S1 S12 Automated Test Generation using CBMC b 2 S13

Automated Test Generation using CBMC CBMC 47/61 CBMC effectively S0 Path = {S0,S1 Branches to find = {b 1,b 2,b 3,b 4 b 3 S4 S2 b 1 b 4 S3 S1 b 2 Succ of S1? S2 and S13 Which one to choose? b 3 S8 S6 b 1 S5 b 2 b 4 S7 The one that has the higher number of branches to find S10 b 1 b 4 S9 b 2 S2 - > {b 1,b 2,b 3,b 4 S13 - > { b 3 S11 S12 S13

Automated Test Generation using CBMC CBMC 48/61 CBMC effectively S0 Path = {S0,S1,S2 Branches to find = {b 2,b 3,b 4 b 3 S4 S2 b 1 b 4 S3 S1 b 2 Succ of S2? S3 and S4 Which one to choose? b 3 S8 S6 b 1 S5 b 2 b 4 S7 if the number of branches to find is the same, choose in lexicograph order S10 b 1 b 4 S9 b 2 b 3 S11 S12 S13

Automated Test Generation using CBMC CBMC 49/61 CBMC effectively S0 Path = {S0,S1,S2,S3 Branches to find = {b 2,b 3 b 3 S4 S2 b 1 b 4 S3 S1 b 2 Succ of S3? Succ of S4? S4 S5 b 3 S8 S6 b 1 S5 b 2 b 4 S7 S10 b 1 b 3 b 4 S9 S11 b 2 S12 S13

Automated Test Generation using CBMC CBMC 50/61 CBMC effectively S0 Path = {S0,S1,S2,S3,S4,S5 Branches to find = {b 2,b 3 b 3 S4 S2 b 1 b 4 S3 S1 b 2 Succ of S5? S6 and S13 S6 - > {b 2,b 3 S13 - > { b 3 S8 S6 b 1 S5 b 2 b 4 S7 b 1 S9 b 2 S10 b 4 b 3 S11 S12 S13

Automated Test Generation using CBMC CBMC 51/61 CBMC effectively S0 Path = {S0,S1,S2,S3,S4,S5,S6 Branches to find = {b 2,b 3 b 3 S4 S2 b 1 b 4 S3 S1 b 2 Succ of S6? S7 and S8 S7 - > { S8 - > {b 3 b 3 S8 S6 b 1 S5 b 2 b 4 S7 b 1 S9 b 2 S10 b 4 b 3 S11 S12 S13

Automated Test Generation using CBMC CBMC 52/61 CBMC effectively S0 Path = {S0,S1,S2,S3,S4,S5,S6,S8,S9 Branches to find = {b 2 b 3 S4 S2 b 1 b 4 S3 S1 b 2 Succ of S9? S10 and S13 S10 - > { S13 - > { b 3 S8 S6 b 1 S5 b 2 b 4 S7 but b 1 was already found!! S10 b 1 b 4 S9 b 2 b 3 S11 S12 S13

Automated Test Generation using CBMC CBMC 53/61 CBMC effectively S0 Path = {S0,S1,S2,S3,S4,S5,S6,S8,S9,S13 Branches to find = { b 3 S4 S2 b 1 b 4 S3 S1 b 2 All branches found! b 1 S5 b 2 Algorithm is finished! How may paths? b 3 S8 S6 b 4 S7 One was enough to b 1 S9 b 2 cover all branches. S10 b 4 b 3 S11 S12 S13

Automated Test Generation using CBMC CBMC 54/61 CBMC effectively S0 Intrument the code: - No branch points; - Force CBMC to go through that path. - Insert CPROVER_assume int test(int a[], int size) { int b = 0, c = 0; CPROVER_assume(c < size); CPROVER_assume(a[c] < 0); b++; c++; CPROVER_assume(c < size); CPROVER_assume(!(a[c] < 0)); c++; CPROVER_assume(!(c < size)); assert(0); return b; S1 S2 S3 S4 S5 S6 S8 S9 Rui Gonçalo Automated Test Generation using CBMC S13

Automated Test Generation using CBMC CBMC 55/61 CBMC effectively int test(int a[], int size) { int negatives = 0, i = 0; if (i < size) { if (a[i] < 0) negatives++; i++; if (i < size) { if (a[i] < 0) negatives++; i++; if (i < size) { if (a[i] < 0) negatives++; i++; a return negatives; Test case: T = (size=2, a[0]=- 2147483648, a[1]=0) -2147483648 0 Rui Gonçalo Automated Test Generation using CBMC

Automated Test Generation using CBMC CBMC 56/61 Goals - Automated Test Generation survey - Apply CBMC in Automated Test Generation - How to achieve MC/DC? - Implement CBMCe - Experimental results

Automated Test Generation using CBMC CBMCe 57/61 program.c C.g CBMCe AST CLexer.java CParser.java ASTwalker ANTLRv3 CFGGenerator.java CFG.java PathGenerator.java Instrument.java path_1.c path_2.c... path_x- 1.c path_x.c

Automated Test Generation using CBMC CBMCe 58/61 CBMCe path_1.c path_2.c... path_x- 1.c path_x.c cbmc path_1.c - - xml- ui cbmc path_2.c - - xml- ui... XMLParser.java TEST CASES

Automated Test Generation using CBMC 59/61 Conclusion - Bounded model checking is useful for test generation - CBMC achieved good results when applied to critical software - CBMC effective method was proved to generate less number of test cases to the same MC/DC percentage (100%) than manual methods, in much less time (~4h to +100h)

Automated Test Generation using CBMC 60/61 References [1] John Rushby. Automated Test Generation and Verified Software, Springer- Verlag 2008. [2] Kelly J Hayhurst, Dan S Veerhusen, John J Chilenski, and Leanna K Rierson. A practical tutorial on modified condition/decision coverage. Management, NASA 2001. [3] Concolic Testing: http://srl.cs.berkeley.edu/~ksen/ (Dec 2012) [4] Damiano Angeletti, Enrico Giunchiglia, Massimo Narizzano, Alessandra Puddu, and Salvatore Sabina. Using bounded model checking for coverage analysis of safety-critical software in an industrial setting. J. Autom. Reason, December 2010. [5] Damiano Angeletti, Enrico Giunchiglia, Massimo Narizzano, Alessandra Puddu, Gabriele Palma, and Salvatore Sabina. Improving the automatic test generation process for cover- age analysis using cbmc. In Proceedings of the 16th International RCRA workshop, RCRA 2009, 2009.

Automated Test Generation using CBMC Rui Gonçalo CROSS Project Computer Science Department University of Minho December 2012