軟體工程/架構簡介
當你建造你的房子時,你永遠不會想到在沒有建築師的情況下建造它,對吧?然而,許多中大型軟體專案都是在沒有軟體架構師的情況下建造的。這似乎有點可怕,你可能會想知道為什麼?嗯,軟體架構師的角色既沒有被廣泛理解,也沒有被認可其必要性。即使在今天,對於“軟體架構”一詞的確切定義仍然沒有達成一致。[1]
馬修·R·麥克布萊德寫道,“軟體架構師是一個技術精通的系統級思考者,他指導計劃和高效的設計過程,將系統帶入存在。他被客戶和開發人員都視為技術專家。架構師是解決方案的作者,對它的成功或失敗負責。”[2] “軟體架構”一詞也指系統軟體架構的文件。記錄軟體架構有助於利益相關者之間的溝通,記錄關於高階設計的早期決策,並允許在專案之間重用設計元件和模式。[3]
軟體架構,也稱為戰略設計,是一種活動,它關注支配解決方案如何實現的全域性需求,例如程式設計正規化、架構風格、基於元件的軟體工程標準、架構模式、安全、規模、整合和法律規定的規律。功能設計,也稱為戰術設計,是一種活動,它關注支配解決方案做什麼的區域性需求,例如演算法、設計模式、程式設計習慣用法、重構和低階實現。
架構是設計,但並非所有設計都是架構的。[4] 在實踐中,架構師是區分軟體架構(架構設計)和詳細設計(非架構設計)的人。沒有適合所有情況的規則或準則。架構師(或組織)在區分架構和詳細設計時可以建立的一些規則或啟發式示例包括
- 架構由非功能需求驅動,而功能設計由功能需求驅動。
- 虛擬碼屬於詳細設計文件。
- UML 元件、部署和包圖通常出現在軟體架構文件中;UML 類、物件和行為圖出現在詳細功能設計文件中。
計算機科學領域自其形成以來就遇到了與複雜性相關的挑戰。[5] 早期的複雜性問題透過開發者選擇正確的資料結構、開發演算法以及應用關注點分離的概念來解決。雖然“軟體架構”一詞在行業中相對較新,但該領域的根本原則自 1980 年代中期以來就被軟體工程先驅們零星地應用。早期嘗試捕獲和解釋系統軟體架構是 imprecise 和無組織的,通常以一組框圖和線圖來表徵。[6] 在 1990 年代,人們集中努力定義和編纂該學科的根本方面。在那段時間裡,開發了最初的設計模式、風格、最佳實踐、描述語言和形式邏輯集。
作為一個成熟的學科,沒有關於構建系統的正確方法的明確規則,設計軟體架構仍然是藝術和科學的結合。“藝術”方面的軟體架構是因為商業軟體系統支援業務或任務的某個方面。系統如何支援關鍵業務驅動因素透過場景描述,作為系統的非功能需求,也稱為質量屬性,決定系統將如何執行。[7] 每個系統都是獨特的,因為它支援的業務驅動因素的性質不同,因此,系統所表現出的質量屬性的程度,例如容錯性、向後相容性、可擴充套件性、可靠性、可維護性、可用性、安全性、可用性以及其他 -ilities 將隨著每種實現而有所不同。[7]
軟體架構作為一個概念的起源最早是在 Edsger Dijkstra 在 1968 年和 David Parnas 在 1970 年代初期的研究工作中被確定。這些科學家強調,軟體系統的結構很重要,並且使結構正確至關重要。該領域的學習自 1990 年代初期以來越來越受歡迎,研究工作集中在架構風格(模式)、架構描述語言、架構文件和形式方法。[8]。
儘管存在“架構描述語言”(見下文),但對於應該使用哪種符號集或語言沒有達成一致。然而,如上所述,UML 是架構師經常使用的標準。例如,UML 元件、部署和包圖通常出現在軟體架構文件中。因此,UML 是一種視覺化語言,通常被用來建立軟體架構檢視。
軟體架構檢視類似於建築架構中不同型別的藍圖。檢視是對一組系統元件及其之間關係的表示。[4] 一些可能的檢視是
- 功能/邏輯檢視
- 程式碼/模組檢視
- 開發/結構檢視
- 併發/程序/執行時/執行緒檢視
- 物理/部署/安裝檢視
- 使用者操作/反饋檢視
- 資料檢視/資料模型
與軟體架構領域相關的架構框架有幾個,最著名的框架是“4+1”模型。此外,開放式分佈處理參考模型 (RM-ODP) 和麵向服務的建模框架 (SOMF) 也被使用。其他架構,如 Zachman 框架、DODAF 和 TOGAF,與企業架構領域相關。
已經設計了幾種用於描述軟體架構的語言(ISO/IEC 42010/IEEE-1471 術語中的“架構描述語言” (ADL))。ADL 用於描述軟體架構。不同的組織開發了幾種不同的 ADL,包括 AADL(SAE 標準)、Wright(由卡內基梅隆大學開發)、Acme(由卡內基梅隆大學開發)、xADL(由加州大學歐文分校開發)、Darwin(由倫敦帝國理工學院開發)、DAOP-ADL(由馬拉加大學開發)以及 ByADL(義大利拉奎拉大學)。ADL 的常見元素是元件、聯結器和配置。
- ↑ SEI (2006). "如何定義軟體架構?". Retrieved 2006-09-23.
- ↑ McBride, Matthew R. (2004). 軟體架構師:本質、直覺和指導原則. 紐約:ACM. pp. 230–235. ISBN 1-58113-833-4.
- ↑ Bass, Len (2003). 軟體架構實踐,第二版. 波士頓:Addison-Wesley. pp. 21–24. ISBN 0-321-15495-9.
{{cite book}}: Unknown parameter|coauthors=ignored (|author=suggested) (help) - ↑ a b Clements, Paul (2010). 軟體架構文件:檢視及其他,第二版. 波士頓:Addison-Wesley. ISBN 0321552687.
{{cite book}}: Unknown parameter|coauthors=ignored (|author=suggested) (help) - ↑ 滑鐵盧大學 (2006). "計算機科學簡史". Retrieved 2006-09-23.
- ↑ IEEE 軟體工程學報 (2006). "軟體架構專刊介紹". Retrieved 2006-09-23.
- ↑ a b SoftwareArchitectures.com (2006). "軟體質量屬性簡介". Retrieved 2006-09-23.
- ↑ Garlan & Shaw (1994). "軟體架構入門" (PDF). Retrieved 2006-09-25.
進一步閱讀
[edit | edit source]- Paul Clements, Felix Bachmann, Len Bass, David Garlan, James Ivers, Reed Little, Paulo Merson, Robert Nord, Judith Stafford: 軟體架構文件:檢視及其他,第二版. Addison-Wesley, 2010, ISBN 0321552687. 這本書描述了什麼是軟體架構,並展示瞭如何使用 UML 和其他符號在多個檢視中記錄軟體架構。它還解釋瞭如何使用行為、軟體介面和基本原理文件來補充架構檢視。該書附帶一個 包含軟體架構文件示例的 wiki。
- Len Bass, Paul Clements, Rick Kazman: 軟體架構實踐,第二版. Addison Wesley, Reading 5/9/2003 ISBN 0-321-15495-9 (這本書現在已經出版了第二版,它雄辯地涵蓋了該學科的基本概念。主題圍繞著實現系統質量屬性展開。)
- Amnon H. Eden, Rick Kazman. 架構、設計、實現. 關於架構設計和詳細設計的區別。
- Garzás, Javier, and Piattini, Mario. 微架構設計知識本體,IEEE 軟體雜誌,卷:22,期:2,2005 年 3 月-4 月。pp. 28 – 33.
- Philippe Kruchten: 架構藍圖 - 軟體架構的 4+1 檢視模型. 在:IEEE 軟體。12 (6) 1995 年 11 月,pp. 42–50 (也可以在 Rational 網站(PDF) 上找到)
- Tony Shan 和 Winnie Hua (2006). 解決方案架構機制. 第 10 屆 IEEE 國際 EDOC 企業計算大會 (EDOC 2006) 論文集,2006 年 10 月,p23-32
- SOMF: Bell, Michael (2008). "面向服務的建模:服務分析、設計和架構". Wiley.
- IEEE 1471:ANSI/IEEE 1471-2000:軟體密集型系統架構描述的推薦實踐是軟體架構領域第一個正式標準,並於 2007 年被 ISO 採用為ISO/IEC 42010:2007 (IEEE 1471).
外部連結
[edit | edit source]- IBM Developerworks 上的精彩解釋
- 卡內基梅隆大學軟體工程研究所 (SEI) 收集的 軟體架構定義
- 軟體架構與軟體設計:意圖/區域性性假設
- 全球軟體架構師協會 (WWISA)
- 國際軟體架構師協會 (IASA)
- SoftwareArchitecturePortal.org — 國際資訊處理聯合會 (IFIP) 軟體架構工作組 2.10 網站
- 軟體架構 — 面向軟體架構師的實用資源
- SoftwareArchitectures.com — 關於該學科的獨立資訊資源
- 微軟架構期刊
- 架構模式
- 軟體架構,Roy Fielding 的 REST 論文第 1 章
- DiaSpec,一種從軟體架構生成分散式框架的方法和工具
- 當優秀架構變糟時
- 軟體架構及相關問題,什麼是軟體架構?以及軟體架構 *並非* 什麼
- 軟體架構手冊
- 螺旋式架構驅動開發 - 基於螺旋模型的 SDLC,旨在降低架構無效的風險
- 以理由為中心的軟體架構文件方法