软考-系统架构设计师 基于架构的软件开发方法详细讲解
个人博客:blogs.wurp.top
一、核心思想:从“架构后于设计”到“架构驱动开发”
传统开发方法中,架构设计常被视为概要设计中的一个环节。而ABSD的核心革新在于:软件架构是项目的首要产物,是后续所有开发、管理和复用活动的基石。
- 核心目标:通过明确的、文档化的架构,来指导、约束和协调整个软件开发过程,确保最终系统能够满足功能需求,尤其是关键的非功能需求(质量属性)。
- 基本假设:系统的质量(如性能、安全、可修改性)主要由其架构决定。
二、ABSD的三大基础
ABSD方法的有效实施,依赖于三个关键的输入或基础:
1. 功能的分解
- 内容:基于需求分析阶段产生的用例(Use Case) 或功能列表,从用户视角理解系统必须完成的功能。
- 作用:功能是架构中组件划分的重要依据之一。架构必须能够支持所有这些功能的实现。
2. 软件架构模板的选择与复用
- 内容:选择或定义一套标准的架构风格、模式和框架。这相当于为项目选择一个“设计蓝图”的模板。
- 作用:
- 提高起点:基于成熟的、经过验证的架构模板(如分层架构、微服务架构),可以避免从零开始,降低风险。
- 促进复用:模板本身和基于模板创建的组件都具有很高的可复用性。
- 规范开发:为组件的功能和交互方式提供了约束和指导。
3. 软件模板的处理与生成技术
- 内容:指用于实例化架构模板的工具和技术。例如,通过领域特定语言(DSL)、代码生成器或配置,将抽象的架构模板转化为具体的、可运行的系统骨架。
- 作用:将架构设计自动化地转化为实现,保证实现与架构设计的一致性,提高开发效率。
三、ABSD的开发过程模型
ABSD强调将架构设计作为一个有计划的、迭代的、受控的过程。其典型过程模型如下,它完美地体现了 “架构驱动” 的思想:
1. 架构需求(或需求分析)
- 目标:明确架构必须满足的需求,特别是质量需求。
- 核心活动:
- 识别利益相关者:找出所有与系统相关的人或组织(用户、客户、开发、运维等)。
- 捕获质量需求:与利益相关者沟通,确定关键的质量属性(如性能、安全性、可用性),并将其量化(例如,“系统首页在1000并发用户下,95%的请求响应时间小于2秒”)。
- 生成质量场景:将量化的质量需求转化为具体的场景,用于后续的架构设计决策和评估。
2. 架构设计
- 目标:创建一个满足所有需求的架构。
- 核心活动:
- 建立架构基准:这是一个初步的、高层次的架构设计。它确定了系统的核心组件、关键交互以及所采用的架构风格。这是后续迭代和细化的基础。
- 迭代设计:架构不是一步到位的。需要围绕不同的用例场景和质量场景,对架构基准进行多次迭代和精化,不断增加细节。
- 实例化架构模板:将选定的架构模板应用于当前系统,定义出具体的组件、连接件和约束。
3. 架构文档化
- 目标:生成描述架构的文档。
- 核心活动:使用多视图模型(如4+1视图模型) 来完整地描述架构。
- 逻辑视图:面向功能的静态结构(类图)。
- 进程视图:面向运行时行为的动态结构(序列图、活动图)。
- 开发视图:面向程序员的静态组织结构(组件图、包图)。
- 物理视图:面向系统工程师的部署结构(部署图)。
- 场景:将上述视图串联起来,验证其有效性。
4. 架构复审
- 目标:评估架构设计是否能够满足需求,尤其是质量需求。
- 核心活动:采用正式的架构复审方法,最著名的是ATAM(架构权衡分析方法)。
- ATAM通过分析架构决策对质量属性的影响,来识别潜在的风险、敏感点和权衡点。
5. 架构实现
- 目标:根据架构设计来组织开发,生成最终系统。
- 核心活动:
- 架构与组织的对齐:将开发团队的结构与架构中的组件结构对应起来(即康威定律的应用),减少沟通成本。
- 细化设计:在架构的约束下,进行各组件的详细设计。
- 编码与测试:遵循架构规范进行编码,并进行基于组件的测试和集成测试。
6. 架构演化
- 目标:在系统的整个生命周期中,维护架构的完整性并使其适应变化。
- 核心活动:
- 架构变更管理:建立正式的流程来评估、批准和实施对架构的变更请求。
- 架构重构:在不改变系统外部行为的前提下,调整系统内部结构,以改善某些质量属性。
四、ABSD的核心特征与优势
- 架构驱动:架构是项目计划、成本估算、团队组织和产品开发的主要依据。
- 关注质量属性:将质量需求提升到与功能需求同等甚至更重要的地位,并通过架构设计来保证。
- 迭代与增量:架构设计本身是一个不断迭代和精化的过程。
- 基于场景的设计与评估:使用具体的场景(用例场景、质量场景)来指导和验证架构设计。
- 早期关注:在项目早期就重点关注重大决策和潜在风险。
- 基于复用:鼓励对架构模式、框架和现成组件的复用。
五、ABSD与传统开发方法的对比
方面 | 传统方法(如瀑布模型) | 基于架构的方法(ABSD) |
---|---|---|
架构的角色 | 是概要设计阶段的一个输出产物 | 是贯穿全过程的驱动力和核心资产 |
关注重点 | 以功能实现为中心 | 功能与质量属性并重,尤其强调通过架构保证质量 |
过程特点 | 顺序、线性 | 迭代、增量 |
风险控制 | 风险在后期测试阶段才暴露 | 通过早期架构复审(如ATAM)识别和缓解风险 |
复用层次 | 代码级复用 | 架构级、组件级的系统化复用 |
六、软考考点总结与应用
-
选择题:
- 考查ABSD的三大基础(功能分解、选择模板、实例化技术)。
- 考查ABSD过程模型的各个阶段及其主要活动。
- 考查ABSD的核心特征(如架构驱动、基于场景、关注质量属性)。
- 区分ABSD与传统开发方法的不同点。
-
案例分析题:
- 题目描述一个大型复杂项目的背景和需求。
- 问题:请说明采用基于架构的软件开发方法的必要性,并简述其实施的主要步骤。
- 答题要点:
- 必要性:因项目复杂,需要明确的架构来管理复杂性、保证关键质量属性(如高性能、高可用)、协调大型团队并行开发。
- 步骤:
- 架构需求:识别利益相关者,量化质量需求。
- 架构设计:选择微服务/分层架构风格,建立架构基准,迭代精化。
- 架构文档化:使用4+1视图记录架构。
- 架构复审:采用ATAM方法组织评审,识别风险。
- 架构实现:根据架构划分团队,进行开发。
- 架构演化:建立变更控制流程。
-
论文题:
- 可能围绕“论基于架构的软件开发方法在某项目中的应用”、“软件架构设计与软件质量保证”、“架构复审的方法与实践”等主题。
- 写作时,必须清晰地以ABSD的过程为脉络:
- 引言:介绍项目背景及为何选择ABSD。
- 正文:
- 详述如何进行架构需求分析,特别是如何提取和量化非功能需求。
- 重点描述架构设计的决策过程(为何选此风格?如何划分组件?)。
- 论述如何组织架构复审(如ATAM),发现了哪些风险和权衡点,如何解决。
- 说明在架构实现阶段,如何保证开发不偏离架构设计。
- 总结:评价ABSD方法在项目中的效果,分享经验教训。
总结
对于软考架构师,掌握基于架构的软件开发方法,意味着:
- 树立“架构先行”的思维:将架构作为项目成功的战略资产,而非战术产出。
- 掌握系统化的过程:熟练运用从需求到演化的完整ABSD流程。
- 精通核心技术与方法:特别是质量需求的量化、架构风格的选型、多视图文档化和ATAM评估。
- 具备权衡与决策能力:理解架构决策对质量属性的影响,并能做出合理的权衡。