Large software systems are crucial to the world around us: air traffic control, medical systems, and the Internet all depend upon complex software systems. Software failure has lead to several major network outages, the loss of unmanned rockets, and the death of patients using the Therac 25 X-Ray machine.

Large software systems are built by teams over a period of years. No team member can understand the entire system. How can be build software that will work in this setting?

We will study techniques and tools used to develop larger software projects. Students will improving their skills in designing, writing, debugging and testing software. Topics include design patterns, UML, designing for maintainability, software architecture, and testing.

Students will work together to design and implement a series of projects.


Prerequisites: CS 102 (or concurrently), CS 201
Suggested course(s) to take next: CS 313, CS 314