软件工程/架构简介
当你建造你的房子时,你永远不会想到在没有建筑师的情况下建造它,对吧?然而,许多中大型软件项目都是在没有软件架构师的情况下建造的。这似乎有点可怕,你可能会想知道为什么?嗯,软件架构师的角色既没有被广泛理解,也没有被认可其必要性。即使在今天,对于“软件架构”一词的确切定义仍然没有达成一致。[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,旨在降低架构无效的风险
- 以理由为中心的软件架构文档方法