软考-系统架构设计师 软件架构复用详细讲解
个人博客:blogs.wurp.top
一、核心概念:什么是软件架构复用?
1. 定义
软件架构复用是指在多个系统中,系统地、大规模地复用先前项目中定义、设计、验证过的软件架构、架构片段及其相关工作产物(如设计决策、文档、代码组件等)。
- 核心思想:“不要重复发明轮子”。通过复用经过验证的架构资产,避免从零开始设计,从而降低成本和风险,提高质量和开发速度。
- 与代码复用的区别:架构复用是更高层次、更粗粒度的复用。它复用的不仅是代码,更是结构、决策、模式和质量属性。代码复用是战术性的,而架构复用是战略性的。
2. 复用的三个层次
架构复用通常发生在三个层次上,从抽象到具体:
- 架构风格与模式的复用:复用最高层的设计思想。例如,决定新系统采用 “微服务架构风格” 或使用 “MVC模式” 。这是最抽象、但影响最深远的一层。
- 参考架构的复用:复用为特定领域定义的、通用的、高层级的架构模板。它定义了系统的标准结构、组件类型和交互方式。例如,为“电商系统”定义一个包含用户中心、商品中心、订单中心、支付中心的标准参考架构。
- 软件产品线的复用:这是架构复用的最高级形式。它基于一个核心资产库(包括共通的架构、组件、工具等),通过系统化的配置和定制,快速生成该产品线下的多个具体产品。
二、软件架构复用的对象(复用什么?)
架构师领导复用的不仅仅是代码,而是一个完整的可复用资产库,包括:
- 架构设计与决策:
- 架构风格:如分层、微服务等。
- 架构模式:如代理模式、门面模式等。
- 架构决策本身:特别是那些与关键质量属性(性能、安全)相关的决策及其决策依据(Rationale)。
- 架构文档:需求规格说明书、架构设计文档(如4+1视图)、接口规范等。
- 可复用组件:
- 架构级组件:如认证授权中心、API网关、配置中心、消息队列等。
- 业务级组件:如工作流引擎、规则引擎、报表生成器等。
- 测试用例与测试框架:与架构和组件相关的自动化测试脚本和测试环境。
- 工具与环境:代码生成器、持续集成/持续部署(CI/CD)流水线、监控工具等。
三、实现架构复用的主要方法与技术
1. 软件构件技术
这是实现组件复用的基础。
- 核心思想:将功能封装为独立部署、接口明确的构件,通过组装而非编码来构建应用。
- 技术标准:CORBA, COM/DCOM, EJB, .NET Assemblies。
- 现代实践:以 Docker容器 为载体,将组件及其依赖打包成一个标准化的、可复用的单元。
2. 架构风格与模式
- 方法:通过教育和培训,让团队掌握并习惯于使用成熟的架构风格(如分层、事件驱动)和设计模式(如工厂、观察者)。
- 价值:这是一种“思维复用”,确保不同项目在高层设计上保持一致性和高质量。
3. 框架
- 定义:框架是一个半成品的应用程序,它提供了某个领域内应用的整体结构和默认行为。
- 工作原理:控制反转(IoC)。框架定义了程序的控制流,开发人员只需在框架预留的“插槽”(如继承父类、实现接口、添加注解)中填充特定业务的代码。
- 例子:Spring Framework(Java企业应用)、Ruby on Rails(Web应用)、Angular/React(前端应用)。
- 价值:框架强制开发者遵循其预设的架构,是实现架构复用最有效、最普遍的技术之一。
4. 领域特定软件架构与软件产品线工程
这是最系统化、组织级的复用方法。
- DSSA:针对一个特定应用领域(如航空电子、电子商务),构建一套通用的参考架构、标准组件和开发工具。
- 软件产品线工程:
- 双生命周期模型:
- 领域工程:核心资产开发。构建和维护一个包含共性架构、共性组件、工具等在内的核心资产库。这是架构师的核心职责。
- 应用工程:产品开发。利用核心资产库,通过配置、定制和扩展,快速组装出特定的产品。
- 过程:
需求 -> [领域工程] -> 核心资产库 -> [应用工程] -> 产品家族
- 成功关键:需要识别出产品家族中高度共性的部分,并将其设计到可复用的核心架构中。
- 双生命周期模型:
5. 面向服务的架构
- 方法:将业务功能封装为粗粒度的、松耦合的服务。这些服务通过标准接口(如Web Service)发布,可以被多个不同的应用系统复用和组合。
- 价值:实现了企业级的业务功能复用和系统集成。
四、架构复用的过程
将复用从一个美好的愿望变为可执行的工程实践,需要系统化的过程管理:
- 识别与规划:在项目初期,识别哪些部分可以复用现有资产,并制定具体的复用计划。
- 领域分析:(针对产品线)分析产品家族的共同点和变化点,为设计可复用的架构奠定基础。
- 资产开发/获取:创建或购买可复用的资产(构件、框架、模式)。此时必须高度重视资产的质量和文档。
- 资产管理:建立可复用资产库,对资产进行分类、存储、版本控制和检索,方便开发者查找和使用。
- 资产复用:开发者在开发新系统时,从资产库中检索、选择、评估并集成合适的资产。
- 维护与演化:根据使用反馈和新技术发展,持续维护和演进可复用资产。
五、架构复用的优势与挑战(软考高频考点)
1. 优势
- 提高开发效率,缩短上市时间:减少重复设计和编码的工作量。
- 提高软件质量与可靠性:复用的资产经过多个项目的验证,比新开发的代码更稳定可靠。
- 降低开发成本与风险:减少了人月投入,并降低了在自有代码中引入新缺陷的风险。
- 提高系统间的一致性:复用共同的架构和组件,使得系统在结构、行为和用户体验上保持一致。
- 促进技术传承:将优秀的设计和经验固化在可复用资产中,降低了对特定人员的依赖。
2. 挑战与代价
- 创建可复用资产的成本高:设计通用、灵活、文档齐全的资产比完成特定功能需要更多的投入。
- “非我发明”综合症:开发者倾向于相信自己编写的代码,抗拒使用他人开发的组件。
- 发现与评估困难:在庞大的资产库中快速找到并准确评估一个合适的组件并非易事。
- 集成与适配成本:复用的组件可能不完全符合需求,需要编写适配器(Adapter) 或进行配置,这可能抵消部分复用收益。
- 维护与演化的复杂性:当复用的资产需要升级时,所有使用它的系统都可能需要同步测试和更新,管理复杂度高。
六、软考考点总结与应用
-
选择题:
- 直接考查架构复用的定义、层次和对象。
- 考查实现复用的主要方法与技术(构件、框架、模式、产品线)。
- 考查架构复用的主要优点和挑战。
- 区分领域工程和应用工程。
-
案例分析题:
- 题目描述一个组织希望提升开发效率和质量,要求提出改进方案。
- 问题:请为你设计一套推行软件架构复用的方案。
- 答题要点:
- 建立复用文化:解决“非我发明”问题,建立激励机制。
- 构建核心资产库:
- 提炼参考架构和通用架构模式。
- 将通用功能(如用户认证、日志记录)抽象为可复用构件。
- 引入或开发统一的技术框架(如Spring Cloud)。
- 建立管理流程:制定资产的创建、认证、入库、检索和维护流程。
- 试点项目:选择合适项目进行试点,积累经验。
-
论文题:
- 可能围绕“论软件复用技术在系统开发中的应用”、“企业级构件库的规划与设计”、“软件产品线工程实践”等主题。
- 写作时,可以详细论述:
- 你如何识别和规划复用机会。
- 你如何领导团队设计和开发可复用的架构资产(如一个统一的微服务治理平台)。
- 你如何建立和管理可复用资产库。
- 在推行复用过程中遇到的阻力与挑战(技术、管理、文化)以及你的应对策略。
- 复用为项目带来的量化收益(如开发周期缩短百分比、缺陷率下降)。
总结
对于软考架构师,掌握软件架构复用的关键在于:
- 树立战略性思维:将复用视为一项长期的、需要投入的战略性工程,而非临时技巧。
- 掌握系统性方法:精通从资产识别、开发、管理到使用的全过程。
- 精通核心技术:深刻理解构件、框架、产品线等核心复用技术的原理和实施要点。
- 具备权衡与管理能力:能够评估复用的成本与收益,并管理其带来的复杂性。