Catalog copy CS 115. Software Methodology Emphasizes the characteristics of well-engineered software systems. Topics include requirements analysis and specification, design, programming, verification and validation, maintenance, and project management. Practical and research methods are studied. Imparts an understanding of the steps used to effectively develop computer software. Prerequisite(s): course 104A or 111 or 180. Enrollment limited to 25. Enrollment limited to senior computer science, computer engineering, and information systems management majors. L. Werner, J. Whitehead Explanation of prerequisites The prerequisites ensure students have successfully completed a substantial programming assignment prior to taking CS 115. This gives students better insight into the issues surrounding large-scale software development. Required skills to pass the course. 1. Understanding of software development processes used to coordinate the activities of team(s) working to develop large software projects 2. Specification of software system requirements 3. User interface prototyping 4. Software design activities and representation 5. Software Verification and Validation 6. Project management fundamentals Core topics (must be taught) 1. Software development processes a. Waterfall software development process 2. Requirements specification, elicitation, analysis, and validation a. Techniques for writing precise requirements in natural language. 3. Software Architecture a. Software architectural styles b. Analysis of software architectures 4. Design a. Abstraction, modularity, separation of concerns b. Representation of designs using Unified Modeling Lanugage 5. Verification and Validation a. Black box and white box definitions and techniques b. Control flow diagrams, and all-paths test coverage c. Unit test, integration test d. System test plans e. Software Inspections theory and practice f. Software qualities 6. Software development environments a. Software configuration management tools 7. Introduction to project management a. Time estimation techniques b. Use of group meetings and email to coordinate team activities c. Monitoring and control of team activities to meet deadlines Optional topics 1. Software development environments a. Automated testing tools b. Communication and coordination tools c. Static code analysis d. Literate programming 2. Reverse engineering 3. Software Reuse a. Product line architectures b. Organizational technques to foster reuse 4. Software evolution 5. Extreme Programming/Pair Programming 6. Formal specification and modeling a. Specification languages and tools Core lab exercises 1. Working over the entire quarter as a member of a 3-6 person team to develop a software project. The project uses a fixed, Waterfall-like process divided into major phases: a. Requirements specification - using scenarios to identify project requirements, and then writing requirements in natural language. b. User manual and user interface prototype - writing a description of how a person uses the softare, and a paper-based description of the project's user interface. Traceability data correlating user capabilities with the architecture. c. Design - software architecture and detailed design, including architecture and UML diagrams, with associated descriptive text. Traceability data linking design to requirements. d. Risk analysis - description of key project risks, and actions taken to mitigate these risks. Time estimate for remaining project phases. e. Code and unit test - development of the executable software, and fine-grain testing. f. Test plan - description of a test plan used to validate the software against its requirements. A traceability matrix linking tests with specific requirements. g. Software inspections - execution of a formal software inspection of a portion of the project source code. Project work involves multiple face-to-face meetings of team members to discuss and coordinate work activities. In-class team presentations are used to review progress, and provide design and requirements feedback. 2. Use of Software Configuration Management technology a. Use of SCM to coordinate group work activities, including use of workspaces, and checkout/checkin Optional lab exercises 1. Reverse engineering - instead of developing a project from scratch, student teams pick an existing open source software project, reverse engineer its design, and then modify it. Comments on follow-on courses CS 116, Software Design Project, builds on CS 115 by offering a course on advanced software engineering concepts and techniques. Text Traditionally, the textbook for the course has been: Roger S. Pressman, "Software Engineering: A Practitioner's Approach", Fifth Edition, McGraw-Hill, New York, 2001. In Fall, 2002, the course switched to using a reader, containing a selection of research papers and selections from textbooks. Prepared by Jim Whitehead, 10/02; revised 5/03