## 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.eecs.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

Attendance is required. These meetings are on Tuesdays, and Thursdays 9:00-10:15 PM in ENG 1 286.

## 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, 1999, reprinted 2005). ISBN 3-540-65410-0.

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. The procedure is outlined in the following statement (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 accommodations in this course must contact the professor at the beginning of the semester to discuss needed accommodations. No accommodations will be provided until the student has met with the professor to request accommodations. Students who need accommodations must be registered with Student Disability Services, Student Resource Center Room 132, phone (407) 823-2371, TTY/TDD only phone (407) 823-2116, before requesting accommodations from the professor."

## 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 object-oriented programming. In particular we may look at how program analysis could be applied to JML, a behavioral interface specification language for Java. We will also try to explore counter-example guided abstraction refinement. You will also be encouraged to extend the techniques in other directions, for example, to component-based systems or to making computer systems more secure.

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 languages, or specification languages and tools.

### 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 or specfications [ImproveTools].**[Concepts]**Correctly explain the goals of program analysis, how program analysis can be used in tools for programming and specification languages, 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 or specification 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 Monday, January 6, 2014.

This web page is for the Spring 2014 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@eecs.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.