About Computer Science 5021
This page provides general information about this offering of Computer Science 5021 at the University of Central Florida. The course's home page is http://www.cs.ucf.edu/~leavens/COP5021/.
This page is organized as follows:
- Meetings
- Course Textbooks
- Accommodations for Disabilities
- Course Description and Credit Hours
- Course Learning Objectives
- Course Learning Outcomes
- Prerequisites
- Acknowledgments
The course grading policy and syllabus are on separate web pages.
I also maintain Information about previous offerings of this course.
Meetings
Lectures
Face-to-face lecture meetings are on Tuesdays from 10:30-1:15pm in BA1 216A. There are also online video streaming sections available, with tests at various UCF regional campuses.
Course Textbooks
There is one required text for the course.
- Principles of Program Analysis, by Flemming Nielson, Hanne Riis Nielson, and Chris Hankin (Springer-Verlag, 2010). ISBN 9783642084744.
Note that there is a second, corrected printing of this text published in 2005. It would be better to get this second printing. However, you can also get a list of corrections if you have the 1999 printing.
We will supplement the text with other material as described in the syllabus.
Accommodations for Disabilities
We are happy to help with reasonable accommodations for disabilities. We encourage you to work with us according to the following procedure (quoted from the faculty center for teaching and learning's web site):
"The University of Central Florida is committed to providing reasonable accommodations for all persons with disabilities. This syllabus is available in alternate formats upon request. Students with disabilities who need specific access in this course, such as accommodations, should contact the professor as soon as possible to discuss various access options. Students should also connect with Student Accessibility Services (Ferrell Commons, 7F, Room 185, sas@ucf.edu, phone (407) 823-2371). Through Student Accessibility Services, a Course Accessibility Letter may be created and sent to professors, which informs faculty of potential access and accommodations that might be reasonable."
Course Description and Credit Hours
This 3 credit course is titled "Program Analysis."
From the University of Central Florida Catalog: "PR: COP 4020 and COT 4210. Static analysis of programs. Theoretical and practical limitations, data flow analysis, abstract interpretation, type and effect systems. Tools to automate program analysis. "
Program analysis is an exciting area in programming language semantics that intersects with formal methods and software engineering. The textbook we will be using emphasizes the commonality between the different kinds of analysis, which include: data flow analysis, constraint-based analysis, abstract interpretation, and type and effect systems.
Time permitting, we will also try to extend the ideas discussed in the class to cyber security and privacy. You will also be encouraged to extend the techniques in other directions, for example, to component-based systems.
This offering of the course will blend both working with tools and using static analysis techniques as well as theory.
Course Learning Objectives
The objectives for this course are divided into two parts: a set of essential objectives, and a set of enrichment objectives. The essential objectives will be helpful for your career as a computer scientist or software engineer; hence they lead to the course's essential outcomes that we want to help you master. The enrichment objectives are less important, but lead to enrichment outcomes that you are encouraged to explore both for their own sake and because learning more about those will help deepen your understanding of the essential objectives.
Essential Objectives
In one sentence, this course's main objective is that you will be able to use and apply the principles of program analysis in the construction of software tools. In more detail the essential objectives for this course are that you will be able to:
- [Ideas] Correctly understand and use the concepts from program analysis (including the subfields of data flow analysis, abstract interpretation, and type systems) when reading and writing (research) papers, and when using and designing software tools (such as compilers, generators, and checkers).
- [ImproveTools] Effectively apply the concepts from program analysis to design and implement better software tools, programming language tools, or languages and tools for somme application area.
Enrichment Objectives
Enrichment objectives could be multiplied without limit, but the following seem most important.
The course's enrichment objectives are that you will be able to:
- [WriteForEval] Convincingly write about or orally communicate about the advantages and disadvantages of various analyses, including their tradeoffs between efficiency and precision.
- [CriticalEval] Critically evaluate research in programming program analysis.
- [Apply] Apply the concepts, techniques, and methods of programming analysis in other areas of computer science
Course Learning Outcomes
This course's learning outcomes are divided into two parts: a set of essential outcomes, and a set of enrichment outcomes. The essential outcomes are designed to support this course's essential learning objectives, and thus to be helpful for your career as a computer scientist or software engineer; hence we want to help you to master them. They also form the basis for grading and assessment of your learning. The enrichment outcomes are not used directly for assessment. However, you are encouraged to explore topics related to the enrichment outcomes both for their own sake and because learning more about those will help your performance relative to the essential outcomes.
The course's outcomes are linked to the course's objectives. The links to this course's objectives are shown in references that look like this: [Ideas].
Essential Outcomes
In one sentence, the main outcome is that you will be able to correctly explain the terms and concepts of program analysis [Ideas] and usefully apply them to improving software tools [ImproveTools] In more detail the essential outcomes for this course are that you will be able to:
- [BuildTools] Design and implement a program analysis in a practical tool for analysis of programs [ImproveTools].
- [Concepts] Correctly explain the goals of program analysis, how program analysis can be used in tools for programming as well as its advantages, disadvantages, and limits, and the mathematical ideas that are used in various program analysis techniques [Ideas].
- [Calculate] Apply program analysis techniques to calculate various properties of small programs [Ideas].
- [Semantics] Use and explain operational semantic descriptions of programming languages [Ideas].
You will be permitted to use the textbook and course notes for both homework and tests.
Enrichment Outcomes
Enrichment outcomes could be multiplied without limit, but the following seem most important or most easily taught using the course text.
- [Soundness] Prove the soundness of an analysis with respect to the operational semantics of a language so that your proofs are convincing [Ideas].
- [Quality] Improve the quality of various kinds of program analyses (including data flow analysis, abstract interpretation, and type and effect systems), so that at least 75% of the time you correctly identify and fix problems with such analyses [ImproveTools].
- [Denotational] Use and explain denotational descriptions of programming languages, so that your conclusions and explanations are convincing at least 75% of the time [Ideas].
- [ApplyTools] Apply program analysis tools, such as TVLA so that you can correctly encode a given analysis at least 75% of the time [ImproveTools].
- [Algebraic] Use algebraic or calculational techniques to modify, derive, and prove analyses correct, so that your proofs are convincing at least 75% of the time [Ideas].
- [LanguageDesign] Explain why some programming language features are harder to analyze than others, in a way that is convincing at least 75% of the time [ImproveTools].
- [Research] Explain the research and scientific questions that are open in the area of program analysis, in a way that is convincing at least 75% of the time [Ideas] [ImproveTools] [WriteForEval] [CriticalEval] [Apply].
- [Writing] Convincingly write about the advantages and disadvantages of various analyses or critically evaluate research on program analysis, in a way that is correct and clear at least 75% of the time [WriteForEval] [CriticalEval].
Prerequisites
The formal prerequisites in the UCF catalog are COP 4020 and COT 4210. See Gary if you have questions about the prerequisites.
Acknowledgments
Thanks to Samik Basu and John Hatcliff who suggested the textbook we are using this semester.
Many thanks to Curtis Clifton for his initial work on the HTML for these web pages, which I have adapted from another course.
Last modified Thursday, January 4, 2018.
This web page is for the Spring 2018 offering of COP 5021 at the University of Central Florida. The details of this course are subject to change as experience dictates. You will be informed of any changes. Please direct any comments or questions to Gary T. Leavens at Leavens@ucf.edu. Some of the policies and web pages for this course are quoted or adapted from other courses I have taught, in particular, COP 4020 and Com S 641.