New Course Proposal CS 441, Advanced Software Design (3 credits) Overview: 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 textbook. 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 UML. 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 diagrams. 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 Grading: 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 diagrams) C. Partial Implementation from design or prototypes.