Program analysis concerns static techniques for computing reliable approximate information about the dynamic behaviour of programs. This book is unique in giving an overview of the four major approaches to program analysis: data flow analysis, constraint based analysis, abstract interpretation, and type and effect systems.