ISO/IEC 26554:2018 概述
ISO/IEC 26554:2018 专注于软件产品族工程中的设计管理——这可以说是 ProdFab 系列标准中最具技术挑战性的方面。需求管理(26552)定义了产品族应该做什么,而设计管理则定义了平台及其衍生版本如何架构,以实现系统性复用同时不影响产品特定的优化。
该标准涉及参考架构的创建和演进、可变性机制的设计、平台设计,以及从共享平台衍生产品特定设计的过程。它认识到设计决策是产品族成功的主要决定因素:精心设计的平台可以支持数十年的产品演进,而设计不良的平台可能使产品衍生比构建单一系统更加昂贵。
ISO/IEC 26554 强调,在产品族工程中,设计是两层次的活动:你设计平台(领域设计)和设计单个产品(应用设计),并且在它们之间建立显式的可追溯性。
参考架构与平台设计
该标准的核心贡献是其在产品族环境中的参考架构开发框架。参考架构捕捉了产品族中所有产品共有的基本结构、组件类型、交互模式和可变性点。
参考架构的关键要素
| 架构要素 |
描述 |
可变性方面 |
| 组件框架 |
定义组件类型、接口和通信模式 |
组件可以是可选的、可替代的或可配置的 |
| 变体点 |
显式指定的产品特定变化发生的位置 |
绑定机制、解析策略 |
| 连接器架构 |
定义组件如何交互和交换数据 |
可配置数据流、协议选择 |
| 平台层次 |
共享元素和产品特定元素的分层组织 |
层次边界定义复用范围 |
| 设计规则 |
产品特定扩展的约束和指南 |
扩展点、允许的修改 |
可变性设计机制
ISO/IEC 26554 编纂了一套架构师可以使用的全面可变性实现技术:
- 继承和特化:使用面向对象继承创建产品特定的子类。
- 组件替换:根据产品需求替换整个组件。
- 配置参数:运行时配置文件和环境变量。
- 条件编译:预处理指令和构建时功能开关。
- 插件和扩展架构:动态加载的扩展平台功能的模块。
- 代码生成:从模型和模板生成产品特定代码。
- 面向方面技术:织入横切关注点的可变性。
可变性机制的选择对测试、性能和可维护性有着深远的影响。ISO/IEC 26554 建议不仅记录机制本身,还要记录每个可变性决策的原理和权衡。
领域工程与应用工程的设计流程
该标准定义了两种相互关联的设计流程:
领域设计流程
在领域设计过程中,工程团队创建和维护平台的参考架构、可复用组件和可变性机制。这包括建立设计规则、定义带有绑定时间的变体点,以及创建平台基线。
应用设计流程
应用设计涉及从参考架构衍生产品特定的设计。这包括选择特征、在适当的绑定时间解析可变性,以及在平台设计规则定义的约束内做出产品特定的设计决策。
遵循 ISO/IEC 26554 设计管理实践的组织报告,跨产品的设计返工减少 40-55%,随着产品族扩展到数十个产品,架构一致性显著提高。
工程设计见解
面向软件架构师和技术负责人的关键架构见解:
- 从一开始就为可扩展性设计:将可变性改造到单一产品架构中极其昂贵。该标准建议在定义参考架构之前至少识别产品族范围内的 3-5 个产品。
- 分离稳定元素与易变元素:参考架构应将跨产品变化的元素(变体点)与稳定核心隔离开来。这一原则驱动了分层和模块化策略。
- 显式记录设计原理:产品族中的设计决策具有长期影响。该标准强调捕获架构选择的原理,特别是与可变性相关的决策。
- 建立架构符合性检查:产品特定的设计必须符合参考架构。强烈建议对产品族使用自动化的架构符合性检查工具。
避免过度设计平台。该标准警告不要为可能永远不会使用的可变性进行设计——这种现象称为’可变性投机’。从已知的变体点开始,随着新产品加入产品族而逐步演进架构。
常见问题解答
Q: ISO/IEC 26554 中的参考架构与标准软件架构有何不同?
标准架构描述单个系统。ISO/IEC 26554 中的参考架构描述一个系统族,显式建模变体点、绑定时间和产品衍生规则。它更抽象,并包含了单一系统架构中不存在的系统性可变性机制。
Q: ISO/IEC 26554 与模型驱动架构(MDA)有何关系?
该标准的设计管理方法与 MDA 概念高度一致。平台无关模型(PIM)对应于领域级设计,而平台特定模型(PSM)对应于应用特定设计。标准的可变性机制可以通过模型转换来实现。
Q: 微服务架构能否从 ISO/IEC 26554 设计管理中受益?
当然。微服务架构本身非常适合产品族设计。每个微服务都可以设计为可配置资产,服务组合模式映射到产品衍生规则,API 版本控制支持平台演进。该标准关于接口设计和组件替换的指导直接适用。
Q: 如何处理跨产品族的非功能性需求(性能、安全性)设计?
ISO/IEC 26554 建议将非功能性需求建模为影响变体点的架构驱动因素。例如,需要高安全性的产品可能使用不同的认证组件,而需要高性能的产品可能使用优化的数据访问组件。参考架构应明确地容纳这些权衡。