Rigorous Software Development

CSCI-GA 3033-011

NYU, Graduate Division, Computer Science Course - Spring 2016

Information

Class MeetingsMon 7:10-9:00pm in CIWW 317
First LectureJan 25, 2016
Last LectureMay 9, 2016
Final ExamMay 16, 2016, 7:10-9:00pm in CIWW 317
InstructorThomas Wies
OfficeCIWW 407
Office HoursTue 5:00-6:00pm, or by appointment.

Overview

Software is increasingly pervading our lives and is now routinely deployed in safety and security critical systems. While this technological progress benefits society greatly, it also creates a new threat: software errors with severe consequences including health hazards, financial repercussions, and security vulnerabilities. Today, reports about security threads caused by software errors hit the news almost daily. How can one ensure that software works reliably? Program Verification is the area of computer science that studies mathematical methods to answer this question. In the last decade, Program Verification has brought forth sophisticated tools that assist software engineers in building reliable software. These tools are now routinely used in the software industry including companies such as Facebook, Google, and Microsoft.

In this course, we will explore these tools. We will learn how they are used to enable rigorous software development, and we will study the algorithms that work under their hoods. The course will be accompanied by programming projects making use of these tools and that implement some of their core algorithms.

Topics

  • Design by Contract
  • Formal Verification
  • Program Semantics and Hoare Logic
  • Foundations of SAT and SMT solvers
  • Automated Testing
  • Static Analysis
  • Abstract Interpretation

Prerequisites

This course will be open to MS and PhD students. Participants should have basic understanding of mathematical concepts such as sets and relations and the ability to write simple mathematical proofs. Also, basic programming experience in Java is assumed.

Course Material

Recommended Reading

Dafny

Syllabus

You can find the syllabus and class notes on the course's NYU classes page.

Mailing List

All course-related announcements will be sent to the course mailing list. You may also use this list to ask questions and discuss issues related to the course. If you have enrolled before the start of the term, you are automatically subscribed to the list. Otherwise, use the above link to subscribe manually.

Grading

Homework (30%), term projects (30%), final exam (40%).

Academic Integrity

Please review the departmental academic integrity policy. In this course, you may discuss homework problems and assignments with other students, but the work you turn in must be your own. Do not copy another student's work. Also, you should consult the instructor before using materials or code other than that provided in class. Copying code or other work without giving appropriate acknowledgment is a serious offense with consequences ranging from no credit to potential expulsion.