{"abstract":[{"lang":"eng","text":"The enormous cost and ubiquity of software errors necessitates the need for techniques and tools that can precisely analyze large systems and prove that they meet given specifications, or if they don't, return counterexample behaviors showing how the system fails. Recent advances in model checking, decision procedures, program analysis and type systems, and a shift of focus to partial specifications common to several systems (e.g., memory safety and race freedom) have resulted in several practical verification methods. However, these methods are either precise or they are scalable, depending on whether they track the values of variables or only a fixed small set of dataflow facts (e.g., types), and are usually insufficient for precisely verifying large programs.\r\n\r\nWe describe a new technique called Lazy Abstraction (LA) which achieves both precision and scalability by localizing the use of precise information. LA automatically builds, explores and refines a single abstract model of the program in a way that different parts of the model exhibit different degrees of precision, namely just enough to verify the desired property. The algorithm automatically mines the information required by partitioning mechanical proofs of unsatisfiability of spurious counterexamples into Craig Interpolants. For multithreaded systems, we give a new technique based on analyzing the behavior of a single thread executing in a context which is an abstraction of the other (arbitrarily many) threads. We define novel context models and show how to automatically infer them and analyze the full system (thread + context) using LA.\r\n\r\nLA is implemented in BLAST. We have run BLAST on Windows and Linux Device Drivers to verify API conformance properties, and have used it to find (or guarantee the absence of) data races in multithreaded Networked Embedded Systems (NESC) applications. BLAST is able to prove the absence of races in several cases where earlier methods, which depend on lock-based synchronization, fail."}],"language":[{"iso":"eng"}],"day":"01","page":"1 - 165","month":"12","year":"2004","date_published":"2004-12-01T00:00:00Z","extern":"1","author":[{"last_name":"Jhala","first_name":"Ranjit","full_name":"Jhala, Ranjit"}],"article_processing_charge":"No","date_created":"2018-12-11T12:08:47Z","type":"dissertation","supervisor":[{"orcid":"0000-0002-2985-7724","last_name":"Henzinger","full_name":"Henzinger, Thomas A","first_name":"Thomas A","id":"40876CD8-F248-11E8-B48F-1D18A9856A87"}],"publication_status":"published","citation":{"short":"R. Jhala, Program Verification by Lazy Abstraction, University of California, Berkeley, 2004.","apa":"Jhala, R. (2004). Program verification by lazy abstraction. University of California, Berkeley.","chicago":"Jhala, Ranjit. “Program Verification by Lazy Abstraction.” University of California, Berkeley, 2004.","ama":"Jhala R. Program verification by lazy abstraction. 2004:1-165.","ieee":"R. Jhala, “Program verification by lazy abstraction,” University of California, Berkeley, 2004.","ista":"Jhala R. 2004. Program verification by lazy abstraction. University of California, Berkeley.","mla":"Jhala, Ranjit. Program Verification by Lazy Abstraction. University of California, Berkeley, 2004, pp. 1–165."},"user_id":"2DF688A6-F248-11E8-B48F-1D18A9856A87","title":"Program verification by lazy abstraction","status":"public","publisher":"University of California, Berkeley","publist_id":"307","_id":"4424","date_updated":"2021-01-12T07:56:52Z","oa_version":"None"}