The software model checker BlastApplications to software engineering

被引:237
作者
Dirk Beyer
Thomas A. Henzinger
Ranjit Jhala
Rupak Majumdar
机构
[1] Simon Fraser University,
[2] EPFL,undefined
[3] University of California,undefined
[4] University of California,undefined
关键词
Model checking; Software verification; Software specification; Memory safety; Test-case generation;
D O I
10.1007/s10009-007-0044-z
中图分类号
学科分类号
摘要
Blast is an automatic verification tool for checking temporal safety properties of C programs. Given a C program and a temporal safety property, Blast either statically proves that the program satisfies the safety property, or provides an execution path that exhibits a violation of the property (or, since the problem is undecidable, does not terminate). Blast constructs, explores, and refines abstractions of the program state space based on lazy predicate abstraction and interpolation-based predicate discovery. This paper gives an introduction to Blast and demonstrates, through two case studies, how it can be applied to program verification and test-case generation. In the first case study, we use Blast to statically prove memory safety for C programs. We use CCured, a type-based memory-safety analyzer, to annotate a program with run-time assertions that check for safe memory operations. Then, we use Blast to remove as many of the run-time checks as possible (by proving that these checks never fail), and to generate execution scenarios that violate the assertions for the remaining run-time checks. In our second case study, we use Blast to automatically generate test suites that guarantee full coverage with respect to a given predicate. Given a C program and a target predicate p, Blast determines the program locations q for which there exists a program execution that reaches q with p true, and automatically generates a set of test vectors that cause such executions. Our experiments show that Blast can provide automated, precise, and scalable analysis for C programs.
引用
收藏
页码:505 / 525
页数:20
相关论文
共 29 条
[1]  
Alur R.(1995)Timing verification by successive approximation Inf. Comput. 118 142-157
[2]  
Itai A.(2004)Modular verification of software components in C IEEE Trans. Softw. Eng. 30 388-402
[3]  
Kurshan R.P.(1976)A system to generate test data and symbolically execute programs IEEE Trans. Softw. Eng. 2 215-222
[4]  
Yannakakis M.(1957)Linear reasoning A new form of the Herbrand-Gentzen theorem. Symbolic Logic 22 250-268
[5]  
Chaki S.(1991)Efficiently computing static single-assignment form and the program dependence graph ACM Trans. Program. Languages Systems 13 451-490
[6]  
Clarke E.M.(2005)Simplify: A theorem prover for program checking J. ACM 52 365-473
[7]  
Groce A.(2000)Model checking Java programs using Java STTT 2 366-381
[8]  
Jha S.(1969)An axiomatic basis for computer programming Commun. ACM 12 576-580
[9]  
Veith H.(2003)The verifying compiler: a grand challenge for computing research J. ACM 50 63-69
[10]  
Clarke L.A.(1997)The IEEE Trans. Softw. Eng. 23 279-295