第12章 CBAM:构架设计决策制定的定量方法

正如我们在第11章所看到的.构架权衡分析方法(ATAM)为软件设汁师提供了种 在设计或维护软件系统时,对所面临的技术权衡进行评佔的手段„在ATAM中,我们主要 研究了系统的涉众认为重要的质量属性,其在实际或建议构架的设计中的实现程度。我们
 
还对构架权衡进行了分析-某个决策同时会对几个质量厲性产生影响的地方。
 
然而,ATAM遗漏了一个重要的考虑事项:在大型复杂系统中最大的权衡通常必须考 虑经济性。组织应如何对其资源进行投资,以使回报最高,风险最小?在过去,该主题主要关注的是成木,而且首先考虑的主要是构建系统的成本,而非包括维护和升级在内的长期成本。同样重要的是(有可能比成本还重要)构架决策可能为组织带来的“收益”。
 
因为用于构建和维护系统的资源是有限的,因此,在最初的设计阶段和随后的升级期 间.必须有•个合理的过程來帮助我们在不同的构架之间做出选择„这些构架的成本不同, 所消耗的资源数量不同,将实现不同的特性(其中每个特性都会给组织带來一些收益), 并且将有一些固有的风险或不确定性。为了获取这些内容,我们需要一个考虑成本、收益、 风险和进度的软件的“经济”模型。
 
为了经济地制定决策.我们开发了-个对软件系统进行经济建模的方法,主要是对其 构架进行分析..该方法即成本收益分析方法(CBAM),它在ATAM上构建,用来对构架 设计决策的成本和收益进行建模,是优化此类决策的一种手段。CBAM提供了对技术和经 济问题以及构架决策的评估。
 
12.1制定决策的上下文
 
软件设il•师或决策者希望用最低的成本实现设计方案.怛却能从该系统中获得最大的 收益。CBAM在ATAM结束时开始,它实际上使用了 ATAM评估的结果。图12.1描述了 CBAM的上下文。
 
因为构架策略具有技术和经济两个层面的含义,因此,软件系统的商业目标应该影响 软件设计师或设计人员使用的策略。直接的经济含义就是实现该系统的成本。技术含义就 是该系统的特性——也就是质量属性。反过来说,因为可以从中获得收益,因此质量厲性 具有经济含义。
 
回忆一下,当把ATAM应用到软件系统中时,在完成时我们会得到一组编成文档的制 品。它们足:
 
•    对系统的成功至关重要的商业目标的描述。
 
•    将现有的或建议的构架编成文档的一组构架视图。
 
•    农示涉众对该构架目标的分解的效用树.它从质敏属性的高层陈述开始,结柬于 具体的场景。
 
•   一组已经标识出的风险。
 
•    一组敏感点(影响所关注的某些质量属性度量的构架决策)。
 
•    一组权衡点(影响多个质量属性度量的构架决策;一些是积极的.一些是消极的)
 
ATAM确定了与从涉众那儿获取的质量属性场景相关的关键的构架决策集。这些决策 会导致一些具体的质量属性响应一也就是可用性、性能、安令性、易用性、可修改性等 的特定级别。但每个构架决策还有相关的成本。例如,使用冗余硬件来实现所期望级别的 可用性具有成本;检杳磁盘文件具有另外的成本。而且,这两个构架决策都将导致可用性 的可度量级别(大概是不同的),对开发该系统的组织来说,这将会有些价值。大概组 织认为其涉众将会为一个可用性极高的系统支付更多的资金(如电话交换机或医疗监视软 件),或者如果系统失败,组织将会受到起诉(如控制汽车中防锁刹车的软件)。
 
ATAM揭露了在系统中制定的构架决策,并将它们与商业目标和质量厲性响应度量联 系起来。CBAM通过获取与这些决策相关的成本和收益,在此基础上进行。给出CBAM 评估的结果后,涉众就可以决定是否使用冗余的硬件、检查点或其他战术来实现系统所期望的可用性。他们可能会选择把有限的资源用在实现其他质量属性上:——大概是因为他们相信更高的性能将会实现更好的收益成本比。对于系统创建或升级來说.预算总是有限的. 因此从某种意义上来说.我们是比较了各个构架的成本收益后来选择构架的。
 
CBAM并不为涉众制走决策,正如财务顾问并不告诉您如何投资一样。您只能借助它
获取成本、收益和一系列构架投资的不确定性信息并将其编成文档,然后为涉众提供一个 框架.涉众可以在此框架内应用个合理的决策制定过程,该过,程不仅满足了其需要,而 且所存在风险也是可以接受的。
 
简而言之.CBAM的思想就是构架策略(构架战术的集合)影响系统的质量属性。反 过来这些质量属性又会为系统的涉众带来一些收益,我们把该收益称为“效用”。毎个构 架策略都为涉众提供了某一特定级别的效用。此外,每个构架策略都有成本.并需耍花时 间去部署。因此.CBAM可以协助涉众根据其投资回报(ROI)选择构架策略,投资回报 是收益和成本的比。
 
12.2 CBAM的基础
 
现在我们讨论•下形成CBAM基础的主要思想。12.3节将对CBAM的各步骤进行讨 论,在这甩,我们的目标是根据涉众选择的场景,逐步阐明对各种构架策略进行ROI度量 的理论。
 
我们首先考虑所生成的一个场景集合,它们或者是ATAM的•部分,或者是专门为 CBAM评估生成的。我们分析•下其预计的响应值有什么差别,然后为这些值分配效用。 该效用基于所考虑的每个场景的预期响应值的重要性。接下来我们考虑一下导致各个预计响应的构架策略。每个策略都有成本,而且每个策略都会影响多个质量属性。也就是说可以通过实现某个构架策略来获得预计的响应,但获得该响应的同时也会影响其他质量属性。在考虑某个策略的总体效用时,必须把这些“副”效用考虑在内。在计算最终的ROI度量时.我们使用的是这一总体效用和构架策略的预计成本。
 
12.2.1效用
 
我们是通过考虑以下各小节中描述的问题来确定效用的
 
1.场景的变体
 
CBAM使用场景来表示和表达具体的质量属性,这与ATAM中的做法相同。与ATAM 评估的另.个相同点是,我们把场景的结构分为3个部分:刺激(与系统的交互)、环境 (系统此时的状态)、响应(所导致的可度量的质量属性)。然而,这两个方法之间还是有 差别的:CBAM实际上使用的是一组场景(通过改变响应值来生成),而在ATAM中使用 的则是单个场景。这导致了效用响应曲线的概念。
 
2.效用响应曲线„
 
场景中的每对刺激-响应值都为涉众提供了某个效用,可以对该响应的不同可能值 的效用进行比较。例如,在对故障的响应中,相对于中等可用性而言,涉众可能仅稍微看重极高的可用性。但与中度等待时间相比,涉众可能会非常看重极低的等待时间。我们可以把一组效用度量和相应的一组响应度量之间的关系描绘为一个图——效用-响应曲线。 图12.2给出了效用-响应曲线的一些示例。在每个曲线图中,标记为a, b或c的点代表不 同的响应值。因此,在效用-响应曲线中,效用是响应值的函数。
效用-响应曲线描述了从某个特定响应中得出的效用如何随着响应的变化而变化。从 图12.2中可以看出,效用可以以非线性、线性甚至阶梯函数的方式随响应的变化而改变. 例如,在图(c)中,当质量属性响应仅发生微小变化时,效用就出现了很大变化.如上面所陈述的性能示例.。图(a)更好地刻画了可用性示例。对用户来说,中度的响应变化仅会导致 很小的效用变化。
 
从涉众那儿获取效用特性可能是一个漫长乏味的过程。为了在实呩中可行.我们使用 该场景的5个质量属性响应值,从涉众那儿获取近似曲线,现在,我们对其中4个值进行 解释。这些值不用考虑任何构架策略就可以得到。第5个值取决于所使用的构架策略.稍 后将对其进行讨论。
 
为了建立效用-响应曲线,我们首先确定最好情况和最坏情况下的质量属性级別。最 好情况的质量属性级别就是涉众在该级别上没有预见进一步的效用。例如.系统在0.1秒 内对用户做出的响应被认为是瞬时发生的,因此将响应时间提高为0.03秒就没有效用。同 样,最坏情况下的质量厲性级别是-个最低的阈值。在此阈值上,系统必须执行,否则它 对涉众来说就没有用。最好情况和最坏情况的效用值分别为100和0。
 
然后,我们确定该场景当前的效用级别和期望的效用级别。当前情况和期望情况的效 用值(0〜100)是使用最好情况和最坏情况的值作为参考点,从涉众那里获取的(例如,现在我们达到了所期望状况的-半,但如果我们达到了所期塑的质量属性级别,就会有90 %的最大效用:因此.当前的效用级别被设为50,所期望的效用级别被设为90)。我们用 这种方式生成了所有场景的曲线。
 
3.场景的优先级
 
一个给定系统中的不同场景对涉众具有不同的重要性级別,因此也具有不同的效用。 为了刻画毎个场景的相对重要性,我们通过•个两步投票机制为每个场景分配•个权值。 在第I步中.涉众对场景进行投票,以确定这些场景的优先级顺序。投栗基于每个场景“所 期望的"响应值。然后,涉众为得票最多的场景分配权值1,对于其他场景,根据其相对 重要性为其分配一个小数。
 
如果将来需要添加额外的场景,可以为其分配•个权值。涉众可以通过达成•致来确 保所分配的场景权值与其直觉一致。
 
4.构架策略
 
由设计师或设计小组负贵确定从当前的质量属性响应级别移到所期望的级别或最佳情况级别的构架策略。CBAM的一部分工作就是完成此任务。对每个策略來说,我们可以 得到:
 
•    每个场景中所期望的晌应值。根据己经从涉众那儿获取的4个值,使用内插法来 计算所期望值的效用。
 
•    构架策略对所感兴趣的其他质量厲性的影响
 
•    对实现该构架策略的成本估计。
副作用——梅个构架策略不仅会影响当前正在考虑的场景的质量厲性,而且•般还会 影响其他质量厲性(这就是进行构架权衡的原因)。应用构架策略后.会出现其他“副作 用”质量厲性响应,确定这些响应的效用也很重要。在最坏的情况下.我们必须为副作用质量厲性创建一个新的场景.并确定其效用-响应曲线。然而,在实践中,如果该质量厲性对涉众非常重要,那么,它应该已经出现在其他的一个场景中.并且已经针对该响应绘 制出了效用-响应曲线。在这种情况下,惟一需要确定的就是对给定的构架策略来说,与该质量厲性相关的所期望的效用.请注意,如果设计的构架策略所强凋的属性与我们目前正在计算其效用的属性冲突的话,则这个属性所期望的效用可能为负值。
 
获取了这一额外的信息后,我们就可以计箅应用某个构架策略的收益了.这是通过计 算其对所有相关质量属性的收益和来实现的.
 
确定收益并将其标准化——我们根据效用-响应曲线.通过计算与每个场景相关的效 用,计箅某个构架策略在各个场景中的总效用(根据场景的重要性进行加权)。对于每个 构架策略.我们用下式计算收益Bi:
 
其中,bi,j是由于策略i对场景j的影响所产生的收益,Wj是场景j的权值。从图12.2中可 以看出,毎个就是与该场景相关的构架策略所产生的效用上的变化:bi,j=Uexpected-Ucurrent,也就是说,用构架策略期望值的效用减去与该场景相关的当前系统的效用。将bi,j乘上权值就是根据各个场景的相对重要性对该效用值进行标准化。
 
12.2.2 计算 ROI
 
每个构架策略的ROI就是总收益Bi与实现该策略的成本Ci的比。我们使用适合所开 发的系统和环境的模型计算成本。
 
 
可以使用计算得到的ROI划分构架策略的等级,然后可以使用所得到的等级确定使用 各个策略的极佳顺序。
 
下面分析•下图12.2中的曲线(a)和曲线(b)。随着质量属性响应的改进,曲线(a)逐渐 变得平坦了。在这种情况下,很可能到达了某个点后,随着质量属性响应的改进.R0I开始下降,换句话说就是,投入更多的钱并不会产生巨大的效用改进。我们再分析一下曲线(b).当质摄属性响应有•个小的改进时,效用便会有很大的提高。可能有•个R0I很低的构架策略,其质量属性响应有一个适度的改进。
 
到目前为止我们已经介绍了许多实现特定质量属性的技巧,但我们还没有介绍使管理 期望在控制之中的任何方法,,我们假定所构造的系统已经有了商业情况.商业情况引起了 特定的需求,设计师的工作就是尽可能地满足这些需求.当该假设是错误的,而且对于系统的商业目标来说需求有些过分时,设计师应该怎么做呢?
 
进行了一番思考后,我认为对这位设计师来说,最好的方法就是向他的老板说明过高 设计需求所带来的成本.、我驾驶的不是豪华的小汽车,因为我不想支付那么多钱来买一辆小汽车。
维持高可用性要求具有滚动能力的高级冗余,,开发这种能力需要时间并投入人力。人 员需要花费资金,这正如购买可用性极高的软件并对其进行修改以满足特定的需要一样.
 
在软件工程中,成本是使用成本模型来估计的.成表模型对所构造系统的特征、环境 参数.人员的专业技能做了某些假设,然后产生了一个基于历史教据的估计.
 
成本模型是有缺点的(尤其是在生命期的早期),其原因有很多,但它们是限制需求 唯一可用的工具•就这一点而论' 它们对设计师来说是非常宝责的.
 
12.3 实现 CBAM
将CBAM变为一系列步骤需要利用在上一节讨论的内容,并以•种能够最小化所需做的工作的方式执行这些步骤。“实际”步骤的一部分内容包括限制决策空间的规模。
 
步骤
阁12.3给出了 CBAM的过程流程图。最上面的4个步骤标注了每个歩骤中所考虑的 场景数。该场景数稳步减少,以确保能使涉众把时间用在能够产生最大投资回报的场景上。