Brown University
Spring 2000
Software System Design
CS 190
CS 190 is a course in which students working in teams implement significant software applications. Students learn and practice techniques of project management, specification, presentation, analysis, design, coding, documentation, testing, and maintenance. This class is one of the last in the undergraduate curriculum and it can tie together many of the earlier classes very practically. In addition to the focus on a group programming project, we will discuss, debate, and think about the group software development process. Groups introduce a non-determinism that can be refreshing but can also make a project more challenging that you might first imagine.
I have three aims for people taking CS190. First, learn enough of the issues about creating software in groups to successfully implement future software systems. Second, become one of the team members on future projects to whom others turn for advice on software engineering and development. Third, continue to think clearly about the issues, articulate your conclusions, and adapt to changes.
When you finish the course, you will have implemented a moderately large software systems as a group. That is the primary objective of the course. Along the way, you will need to determine requirements and specifications for a project and present it to the class. In a larger group, you'll design the overall project, design the pieces, implement the pieces, integrate them, and demo the result. Throughout, we'll discuss the problems that crop up and see what we can learn from them. We'll also try out a few in-class and homework programming experiments to evaluate some different software engineering strategies.
Classes will be divided between lectures, student presentations, discussions, and group meetings. See the project handout and the course schedule for more details.
The required texts are:
We'll also read a few pages from A Practical Introduction to Software Design with C++ by Steve Reiss (from CS 32).