Two main approaches in program analysis are static program analysis and dynamic program analysis.
Main applications of program analysis are program optimization and program correctness.
Techniques related to program analysis include: type systems, program verification, model checking.