当前位置: 首页 > news >正文

软考-系统架构设计师 基于架构的软件开发方法详细讲解

个人博客: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的核心特征与优势

  1. 架构驱动:架构是项目计划、成本估算、团队组织和产品开发的主要依据。
  2. 关注质量属性:将质量需求提升到与功能需求同等甚至更重要的地位,并通过架构设计来保证。
  3. 迭代与增量:架构设计本身是一个不断迭代和精化的过程。
  4. 基于场景的设计与评估:使用具体的场景(用例场景、质量场景)来指导和验证架构设计。
  5. 早期关注:在项目早期就重点关注重大决策和潜在风险。
  6. 基于复用:鼓励对架构模式、框架和现成组件的复用。

五、ABSD与传统开发方法的对比

方面传统方法(如瀑布模型)基于架构的方法(ABSD)
架构的角色是概要设计阶段的一个输出产物是贯穿全过程的驱动力和核心资产
关注重点功能实现为中心功能与质量属性并重,尤其强调通过架构保证质量
过程特点顺序、线性迭代、增量
风险控制风险在后期测试阶段才暴露通过早期架构复审(如ATAM)识别和缓解风险
复用层次代码级复用架构级、组件级的系统化复用

六、软考考点总结与应用

  1. 选择题

    • 考查ABSD的三大基础(功能分解、选择模板、实例化技术)。
    • 考查ABSD过程模型的各个阶段及其主要活动。
    • 考查ABSD的核心特征(如架构驱动、基于场景、关注质量属性)。
    • 区分ABSD与传统开发方法的不同点
  2. 案例分析题

    • 题目描述一个大型复杂项目的背景和需求。
    • 问题:请说明采用基于架构的软件开发方法的必要性,并简述其实施的主要步骤。
    • 答题要点
      1. 必要性:因项目复杂,需要明确的架构来管理复杂性、保证关键质量属性(如高性能、高可用)、协调大型团队并行开发。
      2. 步骤
        • 架构需求:识别利益相关者,量化质量需求。
        • 架构设计:选择微服务/分层架构风格,建立架构基准,迭代精化。
        • 架构文档化:使用4+1视图记录架构。
        • 架构复审:采用ATAM方法组织评审,识别风险。
        • 架构实现:根据架构划分团队,进行开发。
        • 架构演化:建立变更控制流程。
  3. 论文题

    • 可能围绕“论基于架构的软件开发方法在某项目中的应用”、“软件架构设计与软件质量保证”、“架构复审的方法与实践”等主题。
    • 写作时,必须清晰地以ABSD的过程为脉络:
      • 引言:介绍项目背景及为何选择ABSD。
      • 正文
        • 详述如何进行架构需求分析,特别是如何提取和量化非功能需求。
        • 重点描述架构设计的决策过程(为何选此风格?如何划分组件?)。
        • 论述如何组织架构复审(如ATAM),发现了哪些风险和权衡点,如何解决。
        • 说明在架构实现阶段,如何保证开发不偏离架构设计。
      • 总结:评价ABSD方法在项目中的效果,分享经验教训。

总结

对于软考架构师,掌握基于架构的软件开发方法,意味着:

  • 树立“架构先行”的思维:将架构作为项目成功的战略资产,而非战术产出。
  • 掌握系统化的过程:熟练运用从需求到演化的完整ABSD流程。
  • 精通核心技术与方法:特别是质量需求的量化、架构风格的选型、多视图文档化和ATAM评估。
  • 具备权衡与决策能力:理解架构决策对质量属性的影响,并能做出合理的权衡。
http://www.dtcms.com/a/461545.html

相关文章:

  • 电子电气架构 --- 操作系统的基本概念
  • 苏州做网站公司电话wordpress资源分享网
  • 手机能建设网站企业的做网站
  • Unity笔记(十一)——换装、Spine骨骼动画、3D动画相关
  • 面向汽车网络安全的轻量级加密技术
  • 《投资-114》价值投资者的认知升级与交易规则重构 - 从大规模分工的角度看,如何理解“做正确的事”,即满足下游正确的需求
  • 添加一路AXI总线对DDR进行读写时,XDMA测试不通过
  • 基于python的机器学习(十)—— 评估算法(三)
  • 男女做那个的的视频网站检察院门户网站建设成效
  • Oracle的SID是什么
  • Oracle大会临近,23ai 本地版会发布吗?
  • 【Python刷力扣hot100】11. Container With Most Water
  • 通信建设网站做网站主页上主要放哪些内容
  • 《常用 IDL(接口定义语言)详解与对比》
  • 做二手房产网站多少钱河南建设工程信息网站
  • K230基础-获取触摸坐标
  • Linux应用--网络编程
  • 鸟哥的Linux私房菜 第三部分: 学习shell与shell script
  • 鸿蒙中 UDP 数据包发不出去?一文教你从权限到代码彻底排查!
  • 前端小白学习路线(参考)
  • 大连工业大学图书馆网站建设优化培训班
  • 浅谈 富文本编辑器
  • 有手机网站了还要微网站吗设计平台兼职
  • **发散创新:状态函数在编程中的深度应用与实现**在编程领域,状态函数是一个核心概
  • 【OCR】PaddleX
  • Python 元组与集合详解
  • 微信小程序的页面生命周期 以及onShow的应用场景
  • 微信小程序入门学习教程,从入门到精通,微信小程序核心 API 详解与案例(13)
  • 企业建站系统知识库管理系统方案
  • 购物网站的排版wordpress个人主页