Brown University

Spring 2000

Software System Design


CS 190


$\textstyle \parbox{2.1in}{
Instructor:
\par David Laidlaw
\par Office: CIT 449
\par Hours: by appt.
\par Phone: x7647
\par e-mail: dhl@cs.brown.edu
}$$\textstyle \parbox{2.1in}{
Grad TA:
\par Don Carney
\par Office: CIT 547
\par Hours: W 3-4 or by appt.
\par Office phone: x37686
\par e-mail: dpc@cs.brown.edu
}$$\textstyle \parbox{2.1in}{
Head TA:
\par Mike Boilen
\par Office hours: TBA
\par Office: 2nd floor TA room
\par e-mail: mgb@cs.brown.edu
}$


Course Description

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.

Aims

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.

Objectives

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.

Assessment

Course Content Overview

Classes will be divided between lectures, student presentations, discussions, and group meetings. See the project handout and the course schedule for more details.

Textbooks

The required texts are:

1.
The Mythical Man-Month: Essays on Software Engineering, by Fredrick P. Brooks, Jr. (Addison-Wesley, 1995).
2.
Debugging the Development Process: Practical Strategies for Staying Focused, Hitting Ship Dates, and Building Solid Teams, by Steve Maguire (Microsoft Press, 1994).
3.
Large Scale C++ Software Design, by John S. Lakos (Addison-Wesley 1996).
4.
Writing Solid Code, by Steve Maguire (Microsoft Press, 1993).

We'll also read a few pages from A Practical Introduction to Software Design with C++ by Steve Reiss (from CS 32).



David Laidlaw, dhl@cs.brown.edu