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
Always program as if the person who will be maintaining your program is a violent psychopath that knows where you live.
-- Martin Golding
There are two ways of constructing a software design; one way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.
-- C. A. R. Hoare


