Recent years have seen great advances in software engineering and
programming languages, but unfortunately, software is still far from
bug-free. Static analysis is an effective approach to eliminating
numerous bugs, but its conservative nature of analysis unavoidably
constrains its capacity. Dynamic analysis, on the other hand, utilizes
program runtime execution data, and automatically infers about program
bugs. The two approaches essentially complement each other, and this
book focuses on dynamic techniques, and demonstrates how to leverage
program runtime data to improve software quality. The first part of this
book introduces statistical debugging algorithms, which aim at automated
localization of program bugs in the source code based on statistical
analysis of the runtime data. The second part then dives into the
discusion of automated program failure triage, exploring effective ways
to prioritize software development. For both parts, comprehensive
reviews of related studies are provided so that readers can easily grasp
the state of the art. This book is designed for both software
engineering researchers and practitioners, and can also supplement
course instruction.