Computer Science 520
Theory and Practice of Software Engineering
Introduces students to the principal activities and state-of-the-art techniques involved in developing high-quality software systems. Topics include: requirements analysis, formal specification methods, software design, software testing and debugging, program analysis, and automated software engineering.
This course will cover the following high-level topics:
- Software architecture and design
- Software modelling and UML crash course
- Best practices and OO design principles
- Architecture and design patterns
- A brief introduction to functional programming (in Java)
- Program analysis and software testing
- Autmoated debugging and program repair
- Collaboration and teamwork
- Empirical/Experimental Software Engineering
Besides becoming familiar with Software Engineering principles and best practices, students will learn about cutting-edge research in a number of Software Egnineering areas. The lab sessions and the group project provide aditional hands-on experience in using state-of-the-art techniques.
Please read the general course policies.
LectureTuesday and Thursday 10:00am--11:15am
Office: CS 346
Office hours: By appointment
Office: CS 358
Office hours: Thursday 12:30am -- 1:30pm, and by appointment.
Office hours: TBD
AssignmentsAll assignments are provided through Moodle, and submissions must be uploaded to Moodle.
|30%||Homework and paper reviews|
|09/05/2017||Course introduction||Slides, Slides (4pages)|
|09/07/2017||Software architecture and design/UML crash course||Slides, Slides (4pages)|
|09/12/2017||Best and worst programming practices||Slides, Slides (4pages)|
|09/14/2017||OO design principles||Slides, Slides (4pages)
|09/19/2017||Version control systems/Git tutorial|
|09/21/2017||In-class exercise: Advanced uses of git|
|09/26/2017||OO design patterns|
|09/28/2017||OO design patterns||HW 1 online|
|10/03/2017||Functional programming in Java 8|
|10/05/2017||Intro to empirical software engineering||PR 1 is due (10am)|
|10/10/2017||No class: Monday class schedule will be followed!|
|10/12/2017||Experimental design and validity||PR 2 is due (10am)|
|10/17/2017||Intro to program analysis and software testing||HW 1 is due|
|10/19/2017||In-class exercise: Software testing|
|11/21/2017||No class: Thanksgiving recess|
|11/23/2017||No class: Thanksgiving recess|
|12/12/2017||Final project presentations|
Further readingThe following text books provide a more comprehensive discussion of the topics addressed in this class. Note that these text books are not a requirement for this class.
- Fundamentals of Software Engineering. Carlo Ghezzi et al.. Prentice Hall. 2002.
- Introduction to software testing. Paul Ammann and Jeff Offutt. Cambridge University Press, 2008.
- UML distilled: a brief guide to the standard object modeling language. Martin Fowler. Addison-Wesley Professional, 2004.
- Design patterns: elements of reusable object-oriented software. Erich Gamma et al.. Addison-Wesley Professional, 1994.
- Head first design patterns. Eric Freeman and Elisabeth Robson. O'Reilly, 2004.