This article talks about Static Program Analysis, which is the art of reasoning about the behavior of computer programs without actually running them. In most cases the analysis is performed on some version of the source code, and in the other cases, some form of the object code. In contrast, it can – with the right kind of approximations – check all possible executions of the programs and provide guarantees about their properties. Static program analyses are algorithms that do their best to defy the undecidability of the halting problem: they attempt to predict program behavior.