Definition: Software Architecture
? the set of significant decisions about the organisation of a software system
? the selection of the structural elements and the interfaces by which the system is composed
? their behaviour as specified in the collaborations among those elements
? the composition of these structural and behavioural elements into progressively larger subsystems
? the architectural style that guides this organisation
軟件架構(gòu)是一個系統(tǒng)的草圖。軟件架構(gòu)描述的對象是直接構(gòu)成系統(tǒng)的抽象組件。各個組件之間的連接則明確和相對細致地描述組件之間的通訊。在實現(xiàn)階段,這些抽象組件被細化為實際的組件,比如具體某個類或者對象。在面向?qū)ο箢I(lǐng)域中,組件之間的連接通常用接口來實現(xiàn)。
??????? 沒蓋過房子,我想,大家都看過蓋房子吧,特別是樓房。首先,選一片地方,然后打地基,搭建樓房的架子,再慢慢刷墻,貼瓷磚等等。這個過程跟軟件架構(gòu)師是一樣的,先做出一個軟件的框架來,然后不斷完善軟件代碼。
Significant Non-Functional Requirements
Capturing Architectural Requirements
? Usability
o e.g. aesthetics and consistency in the UI.
? Reliability
o e.g. availability (the amount of system "up time"), accuracy of system calculations, and the system's ability to recover from failure.
? Performance
o e.g. throughput, response time, recovery time, start-up time, and shutdown time.
? Supportability
o e.g. testability, adaptability, maintainability, compatibility, configurability, installability, scalability, and localizability.
Common Steps in Architectural Analysis
Steps (occurs in early elaboration):
1. Identify/analyse architectural factors: requirements with impact on the architecture (esp. non-functional)
o overlaps with requirements analysis
o some identified/recorded during inception, now investigated in more detail
2. For the architectural factors, analyse alternatives and create solutions: architectural decisions
o e.g. remove requirement; custom solution; stop project; hire expert

Logical Architecture:
? The large-scale organisation of the software classes into packages, subsystems and layers.
? Logical: not concerned with networking, physical computers, or operating system processes (cf. deployment architecture)
Layer:
? Coarse-grained grouping of classes, packages, or subsystems that has cohesive responsibility for a major aspect of the system
Strict:
? Layer only calls upon the services of the layer directly below it
o e.g. a network protocol stack
Relaxed:
? A layer calls upon the services in several lower layers
o e.g. information systems




