Data flow analysis is a technique for deriving information from a program. The applications of this technique range from compiler optimization to software engineering to software verification. Modern compilers use this technique to produce code that maximize performance. In software engineering, the technique is used to re-engineer or reverse engineer programs. Finally, this technique is used in software verification to prove soundness of programs.