A continuation of principles of software engineering and the design and implementation strategies appropriate for large software projects. Includes the use of CASE tools, extreme programming methods, software metrics, verification, validation, quality assurance, and a further exploration of the principles of human-computer interaction.

The focus of this class is theoretical software engineering and its application to large project development. Projects for this course are intended to introduce students to the complete software process from system conception through implementation.

Goals and Objectives of the Course

Students who complete the course will be able to:
1. Work as a part of a team to plan activities, choose leadership, delegate responsibility, and follow a large software development project from inception to completion.
2. Compare and contrast common software life cycle models (e.g., spiral, waterfall, agile processes, etc.)
3. Explain and apply the workflows and phases of an agile life cycle model.
4. Identify the need for design tradeoffs such as software design patterns, refactoring; abstract data types, encapsulation, and information hiding.
5. Effectively communicate technical matters (written and verbally) with programmers, managers, clients, and users.
6. Effectively use collaborative software development tools to assist in the documentation and development of a software product.
7. Explain and apply software engineering metrics (e.g., measures of product size, quality, and complexity).
8. Demonstrate the ability to apply software verification and validation techniques to software developed using an agile software development model.

Assessment Measures
Participation in the design of a large software project is crucial to the successful completion of this course. At least two exams will also be used in evaluating the student's level of material assimilation.