Department of Computer Science
CS 260 - Software Design

Fall 2007 Syllabus
COURSE OBJECTIVES: This course studies the process for designing complex software applications, with a special focus on the use of formal design and agile methods. Formal design includes the "Design by Contract" methodology, the Java Modeling Language (JML), and correctness-checking with ESC/Java2. Agile methods include unit testing, pair programming, patterns, and refactoring. The course allows you to learn about and evaluate these formal design and agile methods in the software development process. Software design projects will be used as case studies for working with these concepts and tools in a laboratory setting.

Course Web site:

Course e-mail address:
Class meeting time (attendance required): MW 2:30-3:55pm, Searles 224

PRIMARY TEXT (required): Horstmann, Object-Oriented Design and Patterns 2e, Wiley, 2006 ($64.95 new from Wiley, $47.00 new from Amazon, ? new/used from the Bowdoin Bookstore)

INSTRUCTOR: Allen Tucker, 82 Federal Street, campus phone: 725-3131
E-mail address:
Office Hours: in Searles 224 lab MW 4:00-5:00pm, or by arrangement

COURSE WORK: The course includes seven laboratory assignments, five projects, and a final exam. The lab assignments include experiments using various lab tools and techniques. The projects are interrelated, using a collection of well-known solitaire games, and so they build upon each other. The final exam unifies all the projects and will include a summary write-up and an oral presentation. The projects may be done individually or in teams of two; all labs must be done individually.

You are expected to follow the Bowdoin College Academic Honor Code in all your course work. In particular, your own authorship and the authorship of others whose work contributes yours must be explicitly acknowledged as comments in your Java code. This is facilitated by Javadoc, which we will use throughout the course.

The Honor Code extends to 2-person project teams in the following way: each person on the project must identify those parts of the code that he/she has authored, using Javadoc comments in the Java code. Help received from persons or sources outside the project team must be acknowledged in the same way.

Of course, "common knowledge" received during class meetings or other conversations with classmates or the instructor need not be acknowledged. So you should use your own judgment to determine whether or not to explicitly acknowledge a source -- if in doubt, err on the conservative side.

All laboratory work for the course will use the Eclipse Integrated Design Environment (IDE), which is installed on the Macs in Searles 224. Java, javadoc, junit, the Java Modeling Language (JML), and ESC/Java2 are all accessed through the Eclipse environment. These tools will be explained as they are needed. Also, these tools are freely downloadable for use on your own (Windows, Linux, or Mac) computers.



Week beginning Topics Lectures Labs and Projects

Sept 3

Motivation for software design; overview of agile programming and formal methods
Software process: requirements analysis

Chapter 1


Sept 10 Use cases, CRC cards; UML class, sequence, and state diagrams; Unit testing 2.6-2.12
junit; 3.7

Sept 17 Class design: Qualities of classes -- coupling, cohesion, completeness, convenience 3.1-3.5 Project 1 

Sept 24 The Java Modeling Language (JML); pre and postconditions, invariants, documentation 3.6

Oct 1
Class structure; inheritance, polymorphism, abstraction and interfaces, visibility
Chapter 4
javadoc; 1.2; 2.11


Oct 8 (1/2 week)

Design patterns; GUI design: the Model View Controller pattern

Chapter 5
Project 2

Oct 15 Quality measures: metrics and bad smells Chapter 6 metrics

Oct 22 Refactoring


Oct 29
Software architecture; frameworks Chapter 8
software architecture

Project 3

Nov 5
Threads: the client-server framework
Chapter 9

Nov 12

Databases and SQL: The Java/SQL connector



Nov 19 (1/2 week)
Team formation; introduction to final projects

Final Project 

Nov 26
System testing

Dec 3
Project Review

Dec 10
Final exam -- Dec 11 2:00pm
Final Project Presentations