CPSC 329 Software Development Fall 2012

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, the use of 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.

Course Web Page

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


There is no required textbook. Material will be handed out or posted on the course webpage.


CPSC 225 is required.
Programming in this course will be done in Java, and students are expected to be comfortable with Java syntax, the concepts of object-oriented programming (including classes, objects, interfaces, inheritance, and abstract classes), and writing programs to solve problems. Also expected is some familiarity with basic data structures (arrays, linked lists), abstract data types (lists, stacks, queues, maps/dictionaries), the realization of those abstract data types in the Java Collections Framework (List, Stack, Queue, Map and their concrete implementations), and efficiency; the notion of abstract data types and the separation of interface and implementation; how to use the Java API documentation; and coding standards.

Rationale, Aims, & Objectives

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 the process of creating good software.

This course's primary goal is to increase each student's comfort and success when tackling large programming projects. More specific objectives for students include:

  • an organized approach to software development;
  • an understanding of the core principles of object-oriented design, and the ability to apply those principles to create flexible and maintainable software;
  • a habit of good software, which includes coding standards, documentation, appreciation of the value of good design (and the willpower to refactor as needed to improve the design), and testing;
  • experience with a substantial project, working in teams, and working with someone else's code;
  • skills for life-long learning, specifically learning from examples and APIs;
  • technical skills relevant to software development, including the use of integrated development environments, version control, and unit testing; and
  • a basic technical understanding of some aspects of modern software, including GUIs, event-driven programming, human-computer interaction, client-server networking, and threads.

Course Content Overview

The course material can be roughly divided into three areas:

An Organized Development Process: One major topic of the course is how to make the process of creating a large program smoother and more successful. We will study both an approach to help guide the process and strategies for dealing with particular phases of the development process. Specific topics include:

  • requirements gathering
  • use cases and use case diagrams
  • basic UML diagrams and notation
  • implementation strategies

Creating Good Software: There's more to software development that just getting a program that works. A well-designed and well-written program is easier to create and easier to extend with new features, and careful testing raises confidence that the program works correctly. Specific topics include:

  • determining classes, state, and behaviors
  • object-oriented design principles
  • design patterns
  • good coding practices and code quality
  • testing

Modern Software Development Techniques: We will also look at several topics that come up frequently in modern software, including:

  • GUIs and event-driven programming
  • human-computer interaction and user interface design
  • 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!