E0 257 - Software Architecture

Y. Narahari

Department of Computer Science and Automation
Indian Institute of Science
Bangalore - 560 012


Software architecture has emerged as an active area pursued with intense interest by researchers and practitioners alike from the disciplines of software engineering and software design. A number of architecture modeling notations and tools as well as architectural styles have been proposed to provide the foundation for developing robust, scalable, and reliable software. Explicit focus on architecture in conjunction with emerging best practices in analysis and design has shown great potential to improve the current state-of-the-art in software product development.

The objective of the course is to provide a sound technical exposure to the concepts, principles, methods, and best practices in software architecture and software design. Principal topics that will be covered include object oriented analysis and design, UML (Unified Modeling Language) modeling, architectural patterns, analysis of architectures, formal descriptions of software architectures, design patterns, extreme programming, refactoring, distributed objects, component technology, and object oriented frameworks. Case studies and programming assignmnents will be an integral part of the course.

The vision of the course is to produce "software architects" with sound knowledge and superior competence in building robust, scalable, and reliable software intensive systems in an extremely effective way. They would have a clear appreciation of the role of abstraction, modeling, architecture, and design patterns in the development of a software product. They would be able to make optimal architectual choices and employ the most relevant methods, best practices, and technologies for architecting and implementing a software product, regardless of its complexity and scale.

Topics that will be covered

Software process and the role of modeling and analysis, software architecture, and software design.
Analysis modeling and best practices, traditional best practice diagrams such as DFDs and ERDs, UML diagrams and UML analysis modeling, analysis case studies, analysis tools, analysis patterns.
Architectural styles, architectural patterns, analysis of architectures, formal descriptions of software architectures, architectural description languages and tools, scalability and interoperability issues, web application architectures, case studies.
Design best practices, design patterns, extreme programming, refactoring, design case studies, component technology, object oriented frameworks, distributed objects, object request brokers, case studies.
Programming Assignment
Each project team (consisting of two students each) is expected to carry out several "small" but "interesting" analysis/design/programming assignments of building "interesting" software components.

In addition, each team will architect, design, and develop a product (such as, say, a web search engine) which will have three "releases", using best practices in object oriented software engineering. Each release will build upon the previous one and will be reviewed independently.
It is desirable the students have sound programming skills in C and a sound first level exposure to data structures. Clear understanding of the concept of object oriented programming would help. Familiarity with C++ or Java is helpful but not mandatory. Students with excellent aptitude in the course but with little prior exposure to prerequisites may also take the course but they will have to put in substantial extra effort during the first one month or so.
Assessment Problem sets will be provided at regular intervals. The solutions need not be submitted. However a subset of the problems will appear in the quizzes, midterm, and final exam.


 Modified by: Sandhya G & Shijesta Victor on 03.11.2003