tailieunhanh - Lecture Software testing and analysis - Chapter 19: Program analysis

In this chapter you will: Understand how automated program analysis complements testing and manual inspection; understand fundamental approaches of a few representative techniques (Lockset analysis, pointer analysis, symbolic testing, dynamic model extraction; recognize the same basic approaches and design trade-offs in other program analysis techniques). | Program Analysis Learning objectives c 2007 Mauro Pezzè Michal Young Ch 19 slide 1 Understand how automated program analysis complements testing and manual inspection - Most useful for properties that are difficult to test Understand fundamental approaches of a few representative techniques - Lockset analysis pointer analysis symbolic testing dynamic model extraction A sample of contemporary techniques across a broad spectrum - Recognize the same basic approaches and design trade-offs in other program analysis techniques SOFTWARE TESTING ANO ANALYSIS c 2007 Mauro Pezzè Michal Young Ch 19 slide 2 Why Analysis Why automated analysis Exhaustively check properties that are difficult to test - Faults that cause failures rarely under conditions difficult to control - Examples race conditions faulty memory accesses Extract and summarize information for inspection and test design Manual program inspection - effective in finding faults difficult to detect with testing - But humans are not good at repetitive and tedious tasks maintaining large amounts of detail Automated analysis - replace human inspection for some class of faults - support inspection by automating extracting and summarizing information navigating through relevant information Ch 19 slide 4 c 2007 Mauro Pezzè Michal Young c 2007 Mauro Pezzè Michal Young Ch 19 slide 3 Static vs dynamic analysis Static analysis - examine program source code examine the complete execution space but may lead to false alarms Dynamic analysis - examine program execution traces no infeasible path problem but cannot examine the execution space exhaustively Concurrency faults Concurrency faults - deadlocks threads blocked waiting each other on a lock - data races concurrent access to modify shared resources Difficult to reveal and reproduce - nondeterministic nature does not guarantee repeatibility Prevention - Programming styles eliminate concurrency faults by restricting program constructs examples - do not allow more than one .