Catalog copy CS 116. Software Design Project Students in teams specify, design, construct, test, and document a complete software system in a specialized application domain. Class time is spent in technical discussions and ongoing design reviews. A formal presentation and demonstration of each project is required. An organizational meeting will be held during the preceding quarter. Projects may be drawn from industry and campus research groups. Prerequisite(s): courses 115, either 104A or 111, and Computer Engineering 185. Computer engineering majors are required to have completed the computer engineering core examination requirement. J. Whitehead, L. Werner Explanation of prerequisites CS115: Students need to have a understanding of the fundamental activities of Software Engineering. CS 104A or CS 111: Students need to have worked on a significant programming assignment, as well as have knowledge of either the internals of a compiler, or an operating system, to permit advanced project work. CE 185: Students need to have proficiency in technical expression in English. Required skills to pass the course. 1. Construct and evaluate an architectural representation of a software system. 2. Write simple specifications in a formal specification language. 3. Develop an appropriate software development process team(s) of developers can use in a given development context. 4. Use of automated testing tools. Core topics 1. Software architecture analysis a. Architecture description languages b. Architectural analysis techniques i. Analysis of technical aspects of architecture ii. Analysis of effectiveness as a stakeholder communication mechanism c. Component-based software development 2. Formal specification a. Styles of formal specification languages b. Use of one formal specification language 3. Software development processes for coordinating activities of team(s) of engineers and other project personnel 4. Software testing technology 5. Best practices for effective communication of requirements and design decisions in both written (project documents) and oral (project presentations) form. 6. Negotiation techniques used in requirements and cross-team interface definition Optional topics 1. Advanced topics in Software Engineering 2. Use of project-appropriate software tools 3. Formal proofs of correctness 4. Change impact analysis 5. Software slicing Core lab exercises 1. Working in a 3-5 person team to execute a substantial term-long software project. a. Project work is divided into phases, where each phase has one or more documents and/or source code as deliverables. Teams will be expected to specify the software development process and schedule they will follow during the course, however each team is expected to perform the following activities: i. Requirements elicitation, including scenario-oriented communication and negotiation with project customer. Production of a requirements specification document, including a series of use-case scenarios. ii. Design, including a software architecture diagram with descriptive text, and detailed design, typically a series of UML structure and sequence diagrams, and use of other UML diagrams as appropriate. Additional descriptive text concerning the design, as needed to clarify design decisions. Traceability matrix from design to requirements. iii. User manual and user interface prototype. A document describing how to operate the project, and a paper-based user interface prototype. iv. Formal specification of a limited set of high-risk portions of the project, along with descriptive text and specification annotations. Traceability matrix from specification to requirements. v. Risk analysis, identifying key technical and managerial risks inherent in the project, and steps being taken to mitigate these risks. vi. Test plans, describing testing strategies, as well as how advanced testing technology will be incorporated into the test activity. Development of a regression test capability. Traceability information correlating tests with specific requirements. Note there may be some variation due to the actual development process chosen (for example, an evolutionary prototyping approach might involve rapid cycles through a requirements-design-code-risk analysis cycle, with formal specification done as needed on tricky sections of code, and test plans produced later in the quarter). b. Project work will involve multiple teams working on different sets of components in a large system. Involves cross-team negotiation of component boundaries, interfaces, and protocols. c. Project status monitoring will involve multiple in-class presentations, involving on-the-spot design and requirements review, risk analysis, and project planning, based on the content (and missing content) in presentations. Optional lab exercises 1. Use of advanced software development tools Comments on follow-on courses CS 116 is terminal, but interested students could continue on into the graduate introduction to software engieering, CE 276. Texts Paul Clements, Rick Kazman, Mark Klein, "Evaluating Software Architectures: Methods and Case Studies", Addison-Wesley, 2002. Chapters 3 (The ATAM - A Method for Architecture Evaluation), 6 (A Case Study in Applying the ATAM), 7 (Using SAAM to Evaluate an Example Architecture), 8 (ARID - An Evaluation Method for Partial Architectures), and 9 (Comparing Software Architecture Evaluation Methods) Ince, D, "An introduction to discrete mathematics, formal system specification, and Z", 2nd edition, Oxford University Press, 1992. Additionally, the course uses a reader to cover advanced topics, as well as selection of appropriate software development processes, and automated software testing tools. Prepared by Jim Whitehead, 10/02