ABSTRACT

A software architecture is an organizational model for a moderate or large software system. Such a model divides the software into graphical user interface (GUI) forms, classes, modules, and database tables. A software architecture provides strong guidance on how modules interact with each other, how a test suite can be designed, how refactoring strategies can be exercised, and how program bugs can be detected and removed. This chapter focuses on four central ideas related to software architecture.

First, we introduce the concepts of architectural patterns and how they help developers organize software systems. Second, we introduce the ideas of layers, cohesion, and coupling and how they help designers organize individual classes and modules. Third, we introduce the idea of software security and discuss its relationship with software architecture. Fourth, we discuss the concepts of concurrency and synchronization, and their relationships with software architecture.