New Course Proposal

New Course Proposal
CS 441, Advanced Software Design (3 credits)
The proposed course would serve as an elective for computing majors (CS, CpE, and
BACS students, CS minors) to be taken in the 3rd or 4th year. The course has been taught
as a special topics course a number of times by Tom Horton and once by Aaron
Bloomfield. Other professors (e.g. Sullivan, Evans, Knight) in the CS department also
could teach the course. We anticipate that each instructor would tailor the course to suit
his or her interests and also to reflect advances in best-practices in software design. The
course has proved popular with students and meets the needs of a number of employers
that hire computing students. It would likely be taught at least once every two years.
Undergraduate Record Description:
CS441: Advanced Software Design
Pre-requisite: CS216 with a C- or better
This course focuses on techniques for software design in the development of large
and complex software systems. Topics will include software architecture,
modeling (including UML), object-oriented design patterns, and processes for
carrying out analysis and design. More advanced or recent developments may be
included at the instructor's discretion. The course will balance an emphasis on
design principles with an understanding of how to apply techniques and methods
to create successful software systems.
Possible Textbooks:
 Software Design: From Programming to Architecture. (Eric Baude, 2004)
 Applying UML and Patterns. (Craig Larman, 2001)
 The Object Primer: Agile Model-Driven Development with UML 2.0. (Scott W.
Ambler, 2004)
 Tom Horton has also taught the course from a set of readings instead of using a
Degree Objectives and Course Outcomes:
This elective in software design will help meet several of the BSCS degree program’s
outcomes (which support higher-level degree objectives and ABET a-k objectives). The
relevant BSCS program outcomes are:
#2) Have demonstrated comprehension in fundamental topics of computing,
including the intellectual core of computing, software design and development,
algorithms, computer organization and architecture, and software systems.
[BSCS Degree Objective A. ABET a, k]
#3) Have applied knowledge of areas of computing to analyze and evaluate
algorithms, designs, implementations, systems, or other computing artifacts or
work-products. Application of this knowledge includes the ability to design,
conduct and evaluate the results of experiments and testing activity.
[BSCS Degree Objective A. ABET a, b, c, e]
#4) Have applied knowledge of areas of computing to create solutions to
challenging problems, including specifying, designing, implementing and
validating solutions for new problems.
[BSCS Degree Objective B. ABET a, e, k]
#9) Have demonstrated a self-directed ability to acquire new knowledge in
computing, including the ability to learn about new ideas and advances,
techniques, tools, and languages, and to use them effectively; and to be motivated
to engage in life-long learning.
[BSCS Degree Objective D. ABET i, j]
Course objectives:
Because this course is an upper-division elective in the general area of software design
that can be tailored by each instructor, a specific set of course objectives for each offering
might vary as long as they meet the degree outcomes listed above. (No other course in
the program has this course as a pre-requisite, and this is unlikely to change.)
Here are the instructor's course objectives from the Spring 2003 version of the course.
That semester the course had emphasized OO analysis and design and modeling using
Students should be able to:
1. Create a requirements model using UML class notations and use-cases based
on statements of user requirements, and to analyze requirements models given to
them for correctness and quality.
2. Create the OO design of a system from the requirements model in terms of a
high-level architecture description, and low-level models of structural
organization and dynamic behavior using UML class, object, and sequence
3. Use an OO programming language to create software the implements the OO
designs modeled using UML.
4. Comprehend the nature of design patterns by understanding a examples from
different pattern categories, and to be able to apply these patterns in creating an
OO design.
5. Given OO design heuristics, patterns or recommendations written in the
literature, evaluate these for applicability, reasonableness, and relation to other
design criteria.
Other information from this particular offering of the course is presented here.
Major Topics Covered in the Course:
Class Introduction
OO design case study: Java Collections Framework (JCF).
Requirements and Uses Cases.
Basic principles of software design and OO design
Creating and evaluating class designs
Introduction to Design Patterns
Behavioral and interaction design: sequence diagrams
Design for event-driven systems, e.g. Java Swing
Advanced design princples and heuristics
Refactoring Designs
 Midterm Exam -- 20%.
 Final Exam -- 25%.
 Small homework assignments (individual) -- 25% total
 Group project work -- 30%
Homework: There will be about 4 relatively small homework assignments, probably all
to be done individually. One or two of these may require you to explore a new topic
outside the mainstream of the class focus.
Project Work: Complete details about the project will be supplied. It will likely be
submitted in stages. It will involve groups of two or three students. Projects will involve
using OO methods, UML, and Java to create:
A. Requirements models of a system (e.g. use-cases, class diagrams)
B. Design models of a system (e.g. class diagrams, state diagrams, sequence
C. Partial Implementation from design or prototypes.