Summary
Knowing the order in which statements execute is key to bridging the gap between a static program and its dynamic behavior
Analyzing the flow within a single subprogram can help with local tasks like debugging
Understanding subprogram invocations can help with global tasks like performance enhancement
Directed graphs are used to represent control flow information
Abstraction techniques are required to manage large graphs