目录
3.The Attribute-Driven Design Method
0.前言
本系列文章旨在软件设计与体系结构的知识点,资料来源四川大学授课内容,可用于期末复习,笔者理解尚浅,文中不正之处静待批正。加粗部分为重点。
1.Introduction
设计软件架构的过程:①定位具有重要架构意义的需求(ASR)②捕捉质量属性需求③选择、生成、调整和分析实现这些需求的设计决策。
设计过程中缺少的是一种将各个部分整合在一起的方法。
这种方法应包括:设计架构的设计策略;属性驱动设计(ADD)方法:设计策略思想的包装
2.Design Strategy
设计策略三个理念:分解;根据架构重大需求(ASR)进行设计;生成和测试
2.1 Decomposition Strategy
分解是设计的起点;随着设计的分解,质量属性要求(包括约束条件)也可以分解并分配给分解的元素
2.2 Designing to ASR
ASR 驱动架构设计;具有重要架构意义的需求(ASR)是指会对架构产生深远影响的需求
未满足ASR的三个选择:如果快达到要求了,可以看看是否可以放宽要求;可以重新安排需求的优先级,并重新审视设计;可以报告无法满足需求
2.3 Generate and Test
将设计视为生成和测试过程的一种方法;这种方法将特定的设计视为一种假设:设计满足了需求
三个来源提供了对假设进行的测试:质量属性分析技术;质量属性设计检查表;具有建筑意义的需求 (ASR)。当设计满足 ASR 时,当您耗尽设计预算时就完成生成和测试流程
设计解决方案是利用项目可用的辅助材料创建的,辅助材料可包括:现有系统;项目可用的框架;已知的架构模式;设计清单;领域分解
3.The Attribute-Driven Design Method
属性驱动设计(ADD)方法是架构设计策略的一个组合
ADD 是一种迭代方法,在每次迭代时,都会帮助架构师完成以下工作:选择系统的一部分进行设计;汇集该部分的所有ASR;创建并测试该部分的设计
ADD原则:以质量属性为基础进行分解的软件架构
3.2 ADD的输入
当已知一组 ASR 时,即可开始 ADD;如果 ASR 开始后发生变化,则很可能需要重新设计;除 ASR 外,ADD 的输入还应包括上下文描述
Context:背景描述提供了两个重要信息:①所设计系统的边界是什么;②设计中的系统必须与哪些外部系统、设备、用户和环境条件进行交互
3.3 ADD的输出
ADD 的输出是一组建筑视图草图;这些视图将共同确定一系列建筑元素及其关系或互动关系;分解视图、C&C 视图和分配视图
4.The Steps of ADD
ADD方法分为五个步骤:①选择要设计的系统元素②确定所选元素的ASR③为所选元素生成设计方案④清点剩余需求,为下一次迭代选择输入内容⑤重复步骤1-4,直至完成
①ADD从尚未设计的系统部分开始工作;对于 "新领域 "设计,要从整个系统的元素入手;通过ADD步骤的第一次旅行,将产生一个广泛而浅显的设计,产生一组新确定的架构元素。
ADD 的第一次迭代将创建一个元素集合,共同构成整个系统;第二次迭代将获取一个元素并对其进行设计,从而产生更细粒度的元素;第三次迭代将提取另一个元素,即整个系统的后代之一,以此类推。
影响迭代的因素:人员可用性可能决定改进策略;降低风险可能决定了改进策略;对某些功能或质量属性的关注可能会要求采用混合方法。
ADD有两种主要的细化策略:广度优先、深度优先
例子:
②使用效用树Utility Tree
质量属性构成中间层
情景构成效用树的树叶
用于确定效用树中ASR优先级的两个因素是业务价值和架构影响,我们关心(H,H)(H,M)或(M,H)
③是生成和测试策略的应用。它是 ADD 的核心
④ADD 的第四步是一个测试步骤,将应用于您在本次迭代的第一步中选择的元素的设计中;第四步的可能结果之一是回溯,这意味着一个重要的要求没有得到满足
未满足的 ASR 可能与以下内容有关:分配给父元素的质量属性要求;父元素的功能责任;父元素上的一个或多个限制条件
为实现功能性责任,可在现有模块或新创建的模块中添加责任:将责任分配给包含类似责任的模块;当模块过于复杂时,将其分成若干部分;将责任分配给包含具有类似质量属性特征的责任的模块
针对约束,修改设计或尝试放宽约束:修改设计以适应约束;放宽限制
⑤如果所有要求都得到了满足,那么 ADD 流程就结束了;终止 ADD 的另一个条件是项目的设计预算已经用完;团队之间信任度较高的项目中,可以在仅有架构草图的情况下终止 ADD 流程