I. Introduction ------------------------------------------ COP 5021 PROGRAM ANALYSIS ------------------------------------------ A. Who B. what is program analysis? What's the different between static and dynamic properties? ------------------------------------------ WHAT IS PROGRAM ANALYSIS? Def: *program analysis* is predicting statically safe approximations to the set of configurations or behaviors that may occur dynamically. ------------------------------------------ How does this differ from (human) code inspection? How is it different than testing? Runtime assertion checking? C. why study program analysis (course spec) ------------------------------------------ WHY PROGRAM ANALYSIS? Automatic understanding of programs is - important + optimizing compilers + program development tools + formal verification: - safety critical systems - business critical systems + research in programming languages - impossible, in general + safe approximations e.g., read(x); (if x > 0 then y:= 1 else {y:= 2; f()}); z:=y -- can we say that z is 1 at the end? Basic ideas: - compute abstractions - use in transformations Goals: - little or no input from programmers ==> practical, usable - correctness ==> usable "under the covers" - efficient (at compile time): - time - space ------------------------------------------ 1. useful ideas ------------------------------------------ MAIN IDEAS OR THEMES - conservatism: "Err on the safe side!" - efficiency from approximation: "Trade precision for efficiency!" ------------------------------------------ What does safety mean? What does it mean to be conservative when taking money for a trip? What's an example of the first idea from type checking? Suppose we're interested in numerical precision (error estimation), what's an example of the second idea in this case? 2. practicality 3. widely used 4. other interest what about the material interests you? D. Plan of course (syllabus) Would you make any changes to the plan? E. Objectives 1. meta What kind of questions should you be asking? 2. normal ------------------------------------------ OBJECTIVES - [Ideas] Correctly understand and use terms for reading/writing papers when designing software tools - [ImproveTools] Effectively apply the concepts to design better software tools, programming languages, or specification languages and tools. ------------------------------------------ F. How I'll run the course 1. overview 2. red tape G. summary any other questions about the course?