As software systems grow in size and complexity their design problem extends beyond algorithms and data structures to issues of system design. This area receives little or no treatment in existing computer science curricula. Although courses about specific systems are usually available, there is no systematic treatment of the organizations used to assemble components into systems. These issues -the software architecture level of software design -are the subject of a new course that we taught for the first time in Spring 1992. In this pair of reports, Part I presents the motivation for the course, the content and structure of the current version, and our plans for improving the next version. Part II consists of teaching materials from the first offering, including assignments and overheads for lectures. Experience With a Course on Architectures for Software Systems Part I: Course Description Abstract: As software systems grow in size and complexity their design problem extends beyond algorithms and data structures to issues of system design. This area receives little or no treatment in existing computer science curricula. Although courses about specific systems are usually available, there is no systematic treatment of the organizations used to assemble components into systems. These issues-the software architectume level of software design-are the subject of a new course that we taught for the first time in Spring 1992. In this pair of reports, Part I presents the motivation for the course, the content and structure of the current version, and our plans for improving the next version. Part II consists of teaching materials from the first offering, including assignments and overheads for lectures.
1
OverviewThe software component of the typical undergraduate curriculum emphasizes algorithms and data structures. Although courses on compilers, operating systems, or databases are usually offered, there is no systematic treatment of the organization of modules into systems, or of the concepts and techniques at an architectural level of software design. Thus, system issues are seriously underrepresented in current undergraduate programs. Further, students now face a large gap between lower-level courses, in which they learn programming techniques, and upper-level project courses, in which they are expected to design more significant systems. Without knowing the alternatives and criteria that distinguish good architectural choices, the already-challenging task of defining an appropriate architecture becomes formidable.We have developed a course that will help to bridge this gap: Architectures for Software Systems. Specifically, the course: "* Teaches how to understand and evaluate designs of existing software systems from an architectural perspective."* Provides the intellectual building blocks for designing new systems in principled ways using well-understood architectural paradigms."* Shows how formal notations and models can be used to characterize and reason about a system design."* Presents concrete exam...