您的位置:首页 > 运维架构 > 网站架构

应对质量属性的架构设计过程

2009-02-13 22:40 459 查看
在上一章我们已经构建了软件架构设计总体过程,为了强调针对质量属性的架构设计策
略,我们还应该在每个节点加入如下子过程。
一、以核心功能为主进行架构设计
对于任何一个基础架构,我们都需要回答如下一些问题:
这个系统有哪些核心功能?
这些核心功能分布在哪些系统级的框架之内?
是什么样的质量要求才使我们这样分配功能分布?
这些系统功能互相交互的时候考虑了哪些质量要求?
事实上,我们总是倾向于使用一些我们熟悉的架构,但是通用的架构很难让我们回答上
述问题。为了确保设计的清晰,在我们已经存在一些熟悉的架构的基础上,需要按照下属步
骤来考虑问题:
清晰的界定核心功能,例如工作流、业务处理单元等。
清晰的界定那些为了实现这些核心功能而必须提供的基础框架,例如通信、安全、
并发等框架。
清晰的界定那些功能与功能,以及功能与框架之间的交互关系。
仔细考虑系统质量要求,根据质量要求合理分配核心功能的分布、基础框架的分布,
是核心功能的协作与交互能够满足系统质量要求。
利用这些步骤,我们就可能在一定程度上,把一个系统架构构建成核心功能与基础框架
规划清楚,特别是把核心功能与其他功能的交互关系,或者与基础框架的交互关系更加清楚
的表达出来,这样也有利于进一步重构的体系。
二、以质量属性为依据进行重构和优化
通过上面这个步骤,实现了所谓的架构战略性的设计,但这还不够。一个好的架构总是
经历从粗到精、逐步分解、逐步稳定的过程。仅仅从核心功能上划分并不一定能达到所要求
的质量标准,我们还需要根据质量需求对架构重新拆分、合并、功能再分配等,这就重新构
造了新的体系结构。例如,在以核心功能为主进行架构设计的时候,我们得到如下图所示的
基本框架。
但是这个框架具有很大的危险性,因为各个功能块之间有很强的缠绕性,系统的可维护
性、可实现性都很差。这样的系统从功能上可能已经达了要求,但是,它既无法维护,也无
法扩展,当客户流量比较大的时候,性能可能也是个问题。为此,我们需要更加细致地从战
术上考虑问题,仔细对整个架构进行重构和优化,整个优化过程可以依据两个方向:
自底向上,逐步合并各个功能,清理一些设计不合理的构造快,保证以一条清晰的
核心功能为主线,这样我们才可以从目前的架构设计中,清晰的表达先前的所谓战
略设计是什么。
自上而下,把系统的质量要求逐步分解,考虑这些分解出来的质量要求,选择最佳
的解决方案,在适当的地方添加这些内容,确保系统既满足核心功能的需求,又满
足了分解的质量要求。
这样两个方向反复思考和重构的结果,保证系统既有一条清晰的功能主线,更能满足质
量要求,而且更着重以质量为主线考虑问题。
三、增量式的完善架构设计
一次性的完成高水平架构几乎没有可能性,因此,增量式迭代的完善架构几乎是一个普
遍采用的方法。通过迭代,我们可以通过多次的提炼、重构和优化来使架构达到要求。我们
建议采取如下步骤来实现:
把功能需求与质量需求按优先级排序。
估算完成每个需求和质量需求在架构阶段需要完成的时间。
决定迭代周期。
决定迭代次数。
把排定的功能需求与质量需求分配给每个迭代周期。
实施每次架构增量,以系统核心功能为主要线索完成任务。
重构和优化,以质量属性为核心优化架构。
四、以测试驱动架构设计
测试驱动的设计是保证设计质量的良好方法,我们可以通过下面的步骤来完成它。
首先,在进行每一次架构的增量、提炼与重构之前,需要进行初步的测试准备工作,
也就是明确如何进行质量的测试。在系统重构完成之后,根据已有的系统核心功能,
接口分布、协作以及系统质量要求,由测试人员帮助建立测试规约。
其次,所建立的测试规约,会被后来的设计、编码人员参考和执行。架构和设计人
员必须保证后续人员完全遵循这些测试规约,也就是说架构人员还附带有监督职
能。
在编码过程中的测试,将会发现许多初期没有考虑到的设计缺陷,架构人员需要根
据这些测试报告中检测出来的缺陷,重构自己的架构。
所以,测试驱动的开发是迭代过程中优化架构的重要手段。上述三个步骤第一项是最困
难也是最重要的,因为系统的质量完全在于你如何测量它。这就要求需求分析过程中,对于
非功能性需求一定要定义测试条件,而测试条件的定义并不容易。
下面,我们进一步讨论对于不同的质量需求,应该采取什么样的策略来满足这些需求。
注意,这些讨论会有一些实例,它们都来自于国外公开发表的资料,主要是为了表达问题方
便,并不牵涉到任何具体的设计。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: