AT 70.18 Software Architecture Design Semester: January Rationale: Designing, developing, and evolving complex software systems requires a mastery of analytical and technical skills, as well as a knowledge of appropriate processes, architectures and design patterns. Software architects building complex systems must create the illusion of simplicity through decomposition, abstraction, and encapsulation of functionality. This course teaches the fundamentals of software architecture, drawn from research and best practice on large software projects. Students will learn techniques and tools for modeling, analyzing, evaluating, and controlling the development of complex software systems. Real-world case studies will be used throughout the course. A major component of the course will be the design of a significant open-source software 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. Catalog description: Software engineering, Software architecture, Software frameworks, Enterprise application architecture Credits: 3(3-0) Prerequisite: Experience programming in a high-level programming language, e.g. C or Java, or by permission of the instructor. Course Outline: 1. Architectural design principles 1. Abstraction 2. Encapsulation 3. Cross-cutting concerns 2. The unified modeling language (UML) 1. Types of diagrams 2. UML tools 3. Architectural views 1. Use case view 2. Logical view 3. Process view 4. Implementation view 5. Deployment view 4. Object-oriented analysis and design 1. Problem domain modeling 2. Classes, interfaces, and roles 3. Design patterns 4. Model-driven architecture 5. Attribute-driven design 1. Quality attribute scenarios 2. Achieving quality goals 3. Attribute-driven architecture evaluation 6. Architectural patterns and anti-patterns 7. Enterprise application integration 8. Service-oriented architecture 9. Business process modeling 10. Enterprise application architecture middleware 1. Java EE 2. .NET 11. Architecture and agile development processes 12. Architectural reconstruction of legacy code bases Textbook: Lecture notes provided by instructor References (books): Bass, L., Clements, P., and Kazman, R. (2003). Software Architecture in Practice. Addison-Wesley, 2nd edition. Booch (2006), Handbook of Software Architecture, http://www.booch.com/architecture/index.jsp Booch, Rumbaugh, and Jacobson (2005), The Unified Modeling Language User Guide, 2nd Edition, Addison-Wesley. Brooks (1995), The Mythical Man-Month: Essays on Software Engineering, 2nd Edition, Addison-Wesley, ISBN 0-201-83595-9. Fowler (2003) UML Distilled: A Brief Guide to the Standard Object Modeling Language, Third Edition. Addison-Wesley. Fowler et al. (2002), Patterns of Enterprise Application Architecture. Addison-Wesley. Garland and Anthony (2002), Large-Scale Software Architecture: A practical guide using UML, Wiley. Maier and Rechtin (2000), The Art of Systems Architecting, 2nd Edition, ISBN 0-8493-0440-7. Pilone and Pitman (2005), UML 2.0 in a Nutshell, O'Reilly. Sommerville (2005), Software Engineering, 7th Edition, Addison-Wesley, ISBN 0-321-21026-3. Stevens (2006), Using UML: Software Engineering with Objects and Components, 2nd Edition, Addison-Wesley, ISBN 0-321-26967-5. Journals and articles: Bach, J., What Software Reality is Really About. Computer (December 1999): 148-149. Brooks, F.P., No Silver Bullet: Essence and Accidents of Software Engineering. IEEE Computer, April 1987. Davis, A., Fifteen principles of software engineering IEEE Software, 11(6): 94-96, 101 (1994) Davis, A., Software Lemmingineering. IEEE Magazine (September 1993): 79-82. Ewusi-Mensah, K., Critical Issues in Abandoned Information Systems Development Projects. Communications of the ACM 50, no. 9 (September 1997). Garlan, D., and Shaw, M., (1993). An Introduction to Software Architecture, In V. Ambriola and G. Tortora (ed.), Advances in Software Engineering and Knowledge Engineering, Series on Software Engineering and Knowledge Engineering, Vol 2, pp. 1-39. Kruchten, The 4+1 View Model of Architecture, IEEE Software 12(6), November 1995. Ledgard, H.F., The Emperor with No Clothes, Communications of the ACM 44(10), 2001. Leveson, N., Software Engineering: A Look Back and A Path to the Future, December 14, 1996 Meyer, B., A Really Good Idea. Computer (December 1999): 144-147. Miller, S.K., Aspect-oriented programming takes aim at software complexity. IEEE Computer, 34(4), pp. 18-21, 2001. Wirth, N., A Plea for Lean Software. Computer (February 1995): 64-68. Coursework and Grading: Homework (20%), open-source project plan (30%), midterm exam (20%), final exam (30%) Instructor: Dr. Matthew Dailey