架構(gòu)的定義
架構(gòu)(Architecture)一詞源于建筑領(lǐng)域,其本身就是建筑的意思,也有體系結(jié)構(gòu)的意思。維基百科英文版里對(duì)Architecture的解釋是:規(guī)劃、設(shè)計(jì)和建造建筑物的過(guò)程及產(chǎn)物。鑒于軟件工程與建筑工程一樣是一項(xiàng)系統(tǒng)的工程性工作,在引入計(jì)算機(jī)領(lǐng)域后,軟件架構(gòu)就成為描述軟件規(guī)劃設(shè)計(jì)技術(shù)的專(zhuān)有名詞。特別地,軟件架構(gòu)師一詞在英文里和建筑師也是同一個(gè)詞(Architect)。
1972年圖靈獎(jiǎng)獲得者、荷蘭計(jì)算機(jī)科學(xué)家Edsger Wybe Dijkstra(就是大名鼎鼎的Dijkstra最短路徑算法的發(fā)明者)早在二十世紀(jì)六十年代就已經(jīng)涉及軟件架構(gòu)這個(gè)概念了。到了二十世紀(jì)九十年代,Rational Software Corporation和Microsoft、卡內(nèi)基梅隆大學(xué)和加州大學(xué)埃爾文分校在這個(gè)領(lǐng)域做了很多研究和實(shí)踐,提出了軟件架構(gòu)中的很多概念。
維基百科里對(duì)軟件架構(gòu)的定義:
軟件架構(gòu)是有關(guān)軟件整體結(jié)構(gòu)與組件的抽象描述,用于指導(dǎo)大型軟件系統(tǒng)各個(gè)方面的設(shè)計(jì)。軟件架構(gòu)師定義和設(shè)計(jì)軟件的模塊化、模塊之間的交互、用戶界面風(fēng)格、對(duì)外接口方法、創(chuàng)新的設(shè)計(jì)特性,以及高層事物的對(duì)象操作、邏輯和流程。軟件架構(gòu)是一個(gè)系統(tǒng)的草圖。軟件架構(gòu)描述的對(duì)象是直接構(gòu)成系統(tǒng)的抽象組件。各個(gè)組件之間的連接則明確和相對(duì)細(xì)致地描述組件之間的通信。在實(shí)現(xiàn)階段,這些抽象組件被細(xì)化為實(shí)際的組件,比如具體某個(gè)類(lèi)或?qū)ο?。在面向?qū)ο箢I(lǐng)域中,組件之間的連接通常用接口來(lái)實(shí)現(xiàn)。
Kruchten認(rèn)為:
架構(gòu)是對(duì)軟件系統(tǒng)組織、結(jié)構(gòu)部分和系統(tǒng)包含接口的選擇,滿足功能和性能需求的一系列架構(gòu)元素的集合。軟件架構(gòu)設(shè)計(jì)與軟件高層次結(jié)構(gòu)的實(shí)現(xiàn)能夠抽象、分解、組合等。
Bass等人認(rèn)為:
系統(tǒng)或計(jì)算系統(tǒng)的軟件架構(gòu)是包含軟件部分、外部可見(jiàn)特性部分,以及它們之間關(guān)系的系統(tǒng)結(jié)構(gòu)。
McGovern則認(rèn)為:
軟件架構(gòu)或系統(tǒng)由組成系統(tǒng)的結(jié)構(gòu)的相互作用和軟件結(jié)構(gòu)的重要設(shè)計(jì)決定組成。設(shè)計(jì)決定應(yīng)成功實(shí)現(xiàn)所期望支持的質(zhì)量。設(shè)計(jì)決定為系統(tǒng)開(kāi)發(fā)、支持和維護(hù)提供概念上的基礎(chǔ)。
比較公認(rèn)的軟件架構(gòu)定義是在2000年的ANSI/IEEE 1471標(biāo)準(zhǔn)《軟件增強(qiáng)系統(tǒng)的體系結(jié)構(gòu)描述推薦實(shí)施規(guī)程(Recommended Practice for Architectural Description for Software-Intensive Systems Description)》、2011年的ISO/IEC/IEEE 42010標(biāo)準(zhǔn)《系統(tǒng)和軟件工程——架構(gòu)描述(Systems and software engineering — Architecture description)》中定義的。
(1)架構(gòu)過(guò)程:在系統(tǒng)整個(gè)生命周期中構(gòu)思、定義、表達(dá)、記錄、交流,驗(yàn)證合適實(shí)現(xiàn),維護(hù)和改進(jìn)架構(gòu)的過(guò)程,也就是設(shè)計(jì)過(guò)程。
(2)架構(gòu):一個(gè)系統(tǒng)體現(xiàn)在其環(huán)境中的元素、關(guān)系的基本概念或?qū)傩?,以及其設(shè)計(jì)和進(jìn)化原則。
(3)架構(gòu)描述:表達(dá)一個(gè)架構(gòu)的工作產(chǎn)出物(通常指的是各種架構(gòu)圖和設(shè)計(jì)文檔)。
(4)架構(gòu)視圖:通過(guò)系統(tǒng)的某些關(guān)注點(diǎn)的視角,表達(dá)一個(gè)系統(tǒng)的工作產(chǎn)出物(例如部署視圖、開(kāi)發(fā)視圖等)。
(5)系統(tǒng):包含一個(gè)或多個(gè)進(jìn)程,硬件、軟件、工具與可以滿足需求的人的集合。
(6)環(huán)境:決定開(kāi)發(fā)、操作、策略和其他影響系統(tǒng)的設(shè)置和條件。
總結(jié):軟件架構(gòu)是一個(gè)用于指導(dǎo)系統(tǒng)實(shí)現(xiàn)的草圖。這個(gè)草圖越詳細(xì),對(duì)系統(tǒng)實(shí)現(xiàn)的指導(dǎo)意義就越重要,且貫穿于軟件的整個(gè)生命周期