Semester Offering: August

Designing, developing, and improving complex software systems requires a mastery of analytical and technical skills, as well as a knowledge of appropriate processes, architectures and design patterns. This course teaches the fundamental skills of software engineering, drawn from research and best-practice on large open source and commercial software projects. Students will learn techniques and tools for modeling, analyzing, developing and evaluating complex software systems. The emphasis will be on rapid implementation of complex systems through agile development processes, visual development tools, software frameworks, and integration of open source and commercial components.

The course will also improve students' practical software engineering skills by having them plan and execute a significant open-source software development project. Students may make a specific contribution to an existing large open source project or start a new project of their own choice. Projects with the potential to play a role in development of the Asian region will be strongly encouraged.

This is the second course in a two course sequence, focusing on prototyping and software construction, project management, and testing. Students taking this course will execute the open-source software development project they planned in Software Architecture and Design.


Software engineering, Software development, Software testing, CASE Tools, Software project management, Software quality and improvement, Open source software.


AT 70.18 (Software Architecture Design)


I.      Iterative Development: Design, Construction, Testing and Evaluation
1.  Rational Unified Process
2.  Prototyping
3.  Testing and Quality in development
4.  Refinement, refactoring, and reuse
5.  Review and evaluation
II.     Tools and Methods
1.  Programming methodologies
2.  CASE Tools
3.  Build control, version control, integration
4.  Visual analysis tools
III.   Software Configuration Management
1.  Monitoring and Auditing
2.  Release Management
IV.    Testing and Quality
1.  Testing fundamentals and Techniques
2.  Debugging
3.  Quality Assurance
4.  Verification and Validation
5.  Software Improvement
6.  Dynamic Analysis
7.  Issue Tracking


 Lecture notes provided by instructor


P. Stevens:
Using UML: Software Engineering with Objects and Components, 2nd edition. Addison-Wesley, 2006. ISBN 0-321-26967-5 (Recommended).

I. Sommerville, I. (2005).
Software Engineering, 7th edition. Addison-Wesley, 2005. ISBN 0-321-21026-3 (Recommended).

C. Larman:
Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development. Prentice-Hall, 2005.

R. S. Pressman:
Software Engineering: A Practitioner's Approach, 6th edition. McGraw-Hill, 2004. 

B. Bruegge and A. H.Dutoit:
Object-Oriented Software Engineering: Using UML, Patterns, and Java. 2nd edition, Prentice-Hall, 2004. ISBN 0-13-1911791.

UML Distilled: A Brief Guide to the Standard Object Modeling Language, Third Edition. Addison-Wesley, 2003.

Brown, Malveau, McCormick and Mowbray:
AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis. Wiley, 1998.

F. P. Brooks:
The Mythical Man-Month: Essays on Software Engineering. Addison-Wesley, 1995. ISBN 0-201-83595-9.

E. Gamma, R. Helm, R. Johnson and J. Vlissides:
Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley, 1995. ISBN 0201633612.


The final grade will be computed from the following constituent parts:

Homework    (30%)
Project           (30%)
Final exam   (40%)