CPSC 329 Software Development Fall 2008

CPSC 329 Course Information

Course Description

This course continues the study of programming by focusing on software design, development, and verification - the skills beyond fluency in a particular language which are necessary for developing large, reliable programs. Topics include object-oriented design, using APIs, and testing and verification. Techniques common in modern software development will also be studied. Specific techniques may include GUIs and event-driven programming, multi-threading, client-server networking, fault tolerant computing, stream programming, and security. This course is required for the major in computer science. It includes a required lab component.


Stina Bridgeman
Lansing 312, x3614

Course Web Page


You are expected to regularly consult the course web page for announcements, assignments, and most handouts.


Required: Head First Object-Oriented Analysis and Design
McLaughlin, Pollice, & West
O'Reilly, 2006

Required: Head First Design Patterns
Freeman & Freeman
O'Reilly, 2004

Recommended: Object-Oriented Design and Patterns, 2nd ed.
Wiley, 2006

We will make limited use of the third text (Horstmann). A copy is on reserve if the library if you wish to avoid purchasing it.

Additional material will be handed out or posted on the course webpage.


CPSC 225

Rationale & Aims

This course completes the programming sequence begun by CPSC 124 and 225 - CPSC 124 introduces the basic ideas of programming along with the syntax and semantics of the Java programming language, CPSC 225 focuses on common data structures as the organizational building blocks of programs, and this course addresses program design, testing, and specific topics relevant to modern software.

By the end of the course, the successful student should be able to:

  • produce a list of features and requirements for a software project
  • develop a set of use cases
  • develop and carry out a plan for implementing the software
  • create and implement a thorough set of test cases for the software
  • define and correctly use key object-oriented design principles
  • define and correctly use common design patterns
  • create a basic GUI-driven program
  • create a basic multi-threaded program
  • create a basic client-server system

Course Content Overview

The course material can be roughly divided into three areas: object-oriented design, implementation and testing, and modern software development techniques.

Object-Oriented Design: Object-oriented design is the main theme of this course. Design is what comes before you start writing tons of code, and thinking carefully about the design is crucial for creating good software. Specific topics include:

  • requirements gathering
  • use cases
  • determining classes, state, and behaviors
  • basic UML diagrams and notation
  • object-oriented design principles
  • design patterns

Implementation and Testing: A good design greatly simplifies the task of implementing the program - but you still have to start somewhere, and this can be daunting in a large project. In addition, code must be thoroughly tested to ensure to that it works correctly in both expected and unexpected situations. Specific topics include:

  • feature driven, use case driven, and test case driven implementation
  • programming by contract and defensive programming
  • unit and systems testing
  • white-box, black-box, and gray-box testing
  • test coverage

Modern Software Development Techniques: The remainder of the course will look at several topics that come up frequently in modern software, including:

  • GUIs and event-driven programming
  • threads
  • the client-server model of networking

The emphasis will be on using the Java API for these tasks, though some general concepts will be considered. These topics will also serve as illustrations for some of the design patterns discussed.

Valid HTML 4.01!