Course IC462: Software architecture and Design

July 1997

Course instructor: Dr. Stan Jarzabek, S16-6/21, ext. 2863, e-mail: stan@iscs.nus.sg

This course is an advanced course on software design. It is expected that students who take this course are familiar with basic software design problems and have participated in at least one medium-big software project, as software designers. Knowledge of C or C++ is also required. The objective of the course is to familiarize students with architecture-based software design, with reuse problems and with practicalities and latest trends in software architecture and design.

Conduct of the course and course requirements:

During first weeks of the course, the instructor will explain the need, provide motivation and background for studying software architectures. The main reason for classifying and building software architectures is to better facilitate software reuse. The initial part of the course will concentrate on reuse. In the second part of the course, we shall review the principles of good design and study various architectural styles. Finally, we shall concentrate on domain-specific software architectures that facilitate efficient reuse in application domains such as compiler construction, information systems, etc.

You will do analysis, design and programming projects to get working experience with various architectural styles and architecture descriptions. At the end of the course, you will write a report describing your project and what you have learnt in the course. Projects and report account for 30-40% of the final mark.

Depending on the number of students enrolled in the course, you may be requested to give short presentations. You are expected to participate in discussions by asking questions and sharing your views and design experiences with others.

Course grade

A final grade for the course will be derived as follows: continuous assessment - 40% and final exam - 60%.

Course materials

1. Shaw and D. Garlan "Software Architecture - Perspectives on an Emerging Discipline", Prentice Hall, 1996, ISBN 0-13-182957-2

2. Lecture Notes

3. Articles to be distributed in the class.

I. Motivation for studying software architectures: software reuse

In this part, we shall face the real-life problems that lead to the concept of a software architecture. Why is it difficult to reuse software? Why other engineering disciplines (electrical or civil engineering, for example) are so successful in reuse and software engineering is not?

Topics will include:

1. an overview of reuse issues: what can we reuse?

2. identifying, classifying and documenting reusable assets

3. searching for reusable assets

4. building a reuse framework in a company:

organizing a repository of reusable assets

managing reusable assets

reuse tools

5. a demo of a computerized reuse framework

6. putting reuse into practice: scenarios for implementing a reuse programme

7. designing software for ease of reuse: program families

8. integrating reusable components into the system

9. obstacles to effective reuse

10. reuse with and without OO

11. domain analysis: towards reuse of requirements and design

12. software architectures, frameworks, design patterns and application generators

II. Review of design principles

III. Domain-independent software architectural styles

1. an architectural mismatch problem

2. review of architectural styles

3. choosing and describing architectural styles for a give software system

4. standard solutions to design problems: design patterns

5. case studies

IV. Domain-specific software architectures (DSSA)

1. Why do DSSAs make it easier to reuse?

2. Stages of building an DSSA

3. Case studies

--- The End ---