A study of the principles and concepts used in the specification, design, implementation, testing, and maintenance of large software systems. Topics include requirements elicitation and analysis, formal specification, software architectures, object-oriented design, software measurement, software testing and analysis, and evolution of a program. Students practice the principles of software development by participating as group members in the creation of a significant software application. One laboratory per week. Prerequisites: Computer Science 210 and 220 or permission of the instructor. Offered in alternate years.