架构设计对系统成败非常关键,功能需求、质量属性及约束共同决定了架构,对这三类需求的把握是否到位、设计决策是否对路,是架构设计成败的关键所在!
在Pre-architecture阶段,应以ADMEMS矩阵为核心的四步法:
- 需求结构化
- 分析约束影响
- 确定关键质量
- 确定关键功能
Pre-architecture阶段能够帮助架构师建立需求理解的大局观,任何需求都可定位于业务级需求、用户级需求、开发级需求这3个需求层次的某一层,同时也必属于功能、质量、约束这3类需求的某一类。如此一来,就便于梳脉理络、把握关系。
对需求理解不透、遗漏需求往往是架构设计失败的重要原因,我们无法回避一个事实:架构师在需求的理解、权衡、取舍和补充这几方面能力严重不足是失败的主要原因。
从需求转入设计时,因为制定方案过程的复杂性,会激增出大量的衍生需求,设计需求是原始需求的五十倍之多。ADMEMS方法的Pre-architecture阶段将告诉一线架构师,如何告别拙劣的“需求列表”方式,取而代之以ADMEMS矩阵方法。由于ADMEMS的“二维需求观”体现了更复杂的、更本质的需求结构,所以可以帮助架构师更全面地看待需求、避免遗漏重要的非功能需求,大大降低架构失败的风险。
灵活运用Pre-architecture阶段的方法,有一个额外的好处:能够在需求没有“全面完成”的情况下就开始架构设计,具体而言,为了尽早开始架构设计,软件企业必须做好以下两点:让架构师参与需求分析工作,不能被动地等待完善的《软件需求规格说明书》出现的那一刻。建议架构师在参与需求分析工作时,不断运用ADMEMS矩阵等工具对需求进行大局的梳理,只要满足3个条件,就可以尽早开始架构设计工作:有明确的业务需求、了解全面的用户需求和有了典型的行为需求,如果不具备以上三种“最基本条件”就开始架构设计架构设计是盲目的。
需求 |
基本原理 |
对架构设计的影响 |
功能 |
功能是发现职责的依据 |
每个功能都是由一条“职责协作链”完成的,架构师通过为功能规划职责协作链、将职责分配到子系统、为子系统界定接口、确定基于接口的交互机制、来推动架构设计的进行 |
质量 |
质量是完善架构设计的动力 |
(必须)基于当前的架构设计中间成果,进一步考虑具体质量要求,对架构设计中间成果进行细化、调整、甚至推倒重来,一步步地使架构设计完善起来 质量和功能共同影响着架构设计,抛开功能、单依据质量要求设计架构是不可能的 |
约束 |
约束对架构设计的影响分为几类 |
直接制约设计决策的约束(例如“系统运行于Unix平台之上”) 转化为功能需求的约柬(例如“本银行系统执行现行利率”引出“利率调整”功能) 转化为质量属性需求的约束(例如“柜员计算机平均水平不高”引出易用性需求) |