ADMEMS是Architecture Design Method has been Extended to Method System的简称,是由CSAI顾问团架构设计专家组于2009年11月在第六届中国软件大会上公开发布的一个软件架构设计方法。作为方法体系,ADMEMS通过3个阶段和1个贯穿环节,来覆盖“需求进,架构出”的架构设计完整工作内容。其中“3个阶段”是指预备架构阶段(PA阶段:把握需求特点,确定架构驱动力)、概念架构阶段(CA阶段:根据重大需求,确定概念架构)、细化架构阶段(RA阶段:细化架构设计,关注不同视图),“1个贯穿环节”是指对非功能目标的考虑。

《一线架构师实践》一书详细的介绍了ADMEMS体系。它将软件架构的过程分为三个阶段和一个贯穿环节,进而覆盖“需求进,架构出”的架构设计的完整工作内容。基中Pre-Architecture阶段,意在全面理解需求,从而把握需求特点,进而确定架构设计驱动力。而Conceptual Architecture阶段所关注的是如何通过关键功能、关键质量及业务需求和约束来塑造概念架构。Refined Architecture阶段,则主要通过5视图方法进行细化架构的设计。而非功能需求不可能“速战速决”,因此,对于非功能需求的关注会贯穿架构设计的整个过程。

Pre-Architecture,是架构设计的最前期阶段,其工作目标包括:理解需求、建议需求大局观、确认架构设计方向等。其对于整个架构设计的意义在于,着眼于全局把握需求、降低架构失败的风险、尽早地开始架构设计、明确架构设计的驱动力。需要注意的是,不同需求影响架构的不同原理,关键需求决定架构,而其他需求用来来验证架构。ADMEMS将Pre-Architecture阶段分为四个步骤,即需求结构化、分析约束影响、确定关键质量、确定关键功能。

“ADMEMS矩阵”是Pre-Architecture阶段的核心方法。 “ADMEMS矩阵”又称为“需求层次-需求方面矩阵”,帮助架构师告别需求列表的陈旧方式,顺利过渡到二维需求观,借此避免遗漏需求、并进一步理清需求间关系和发现衍生需求。

Conceptual Architecture,即概念架构。概念架构不是理想架构,同样概念架构也不是概念视图,概念架构作为架构设计的一个阶段,必须在细化架构设计阶段之前,针对重大需求、特色需求、高风险需求的要求,给出高层的解决方案,形成稳定的高层架构设计成果。ADMEMS将Conceptual Architecture阶段分为三个步骤,即:

初步设计:基于关键功能,借助鲁棒图进行以发现职责为目的的初步设计;

高层分割:对系统这个黑盒进行高层切分,如切分复杂系统为多个二级系统,或者直接切分系统为具体子系统;实践中最常用的系统切分方式为分层,有Layer(逻辑层)、Tier(物理层)、按通用性分层生技术堆叠等流派。

考虑非功能需求:概念架构并非理想化架构,因此不仅要考虑功能,也必须考虑非功能,通常采用的方法为,目标-场景-决策表。

Refined Architecture是相对于Conceptual Architecture而言的,即细化架构。ADMEMS主要通过5视图法对细化架构阶段进行实践。5视图法的主要思想为:错落有致地将众多技术关注点划分“群落”,“群落”内高聚合,“群落”间松耦合。应用5视图方法,便于架构师设计思维的“有序”展开。不同视图源于不同的思维角度及不同的技术关注点,即:

逻辑架构:关注如何划分子系统、如何定义接口、如何运用质疑驱动的思维套路等;

物理架构:关注硬件选择与物理拓扑、软件到硬件的映射关系、方案优化;

运行架构:关注确定引入哪些控制流、确定每条控制流的任务、处理相关问题、进一步考虑控制流之间的同步关系等;

开发架构:关注将“逻辑职责”映射为“程序单元”、开发技术选型、“程序单元”间的关系等;

数据架构:关键是确定数据分布方案。数据分布的6种策略:独立、集中、分区、复制、子集、重组;

非功能目标的设计环节。非功能目标的设计是以场景技术为核心手段、以目标-场景-决策表为思维工具致力于支撑非功能目标的理性设计过程。经过非功能目标的设计,将使得架构设计更有针对性、可操作性更强、避免过度设计,同时便于系统升级时参考。

目标-场景-决策表方法,可以帮助架构师快速建议非功能目标的设计思维,更理性地应对架构师普遍感到棘手的非功能支持问题,提升自己的核心竞争力。

软件架构设计 ADMEMS方法体系的更多相关文章

  1. SoC嵌入式软件架构设计II:没有MMU的CPU虚拟内存管理的设计和实现方法

    大多数的程序代码是必要的时,它可以被加载到内存中运行.手术后,可直接丢弃或覆盖其它代码. 我们PC然在同一时间大量的应用,地址空间差点儿能够整个线性地址空间(除了部分留给操作系统或者预留它用).能够觉 ...

  2. SoC嵌入式软件架构设计II:否MMU的CPU虚拟内存管理的设计与实现方法

    大多数的程序代码是必要的时,它可以被加载到内存中运行.手术后,可直接丢弃或覆盖其他代码.我们PC然在同一时间大量的应用,能够整个线性地址空间(除了部分留给操作系统或者预留它用),能够觉得每一个应用程序 ...

  3. SoC嵌入式软件架构设计之六:API设计方法

    在嵌入式系统中,驱动都是以API的方式提供给应用进行调用.这里介绍嵌入式系统的API设计和管理方法. 驱动在系统中会按模块进行分类,比如按键驱动.LCD驱动.文件系统.card驱动.I2C驱动等等:每 ...

  4. SoC嵌入式软件架构设计

    内存是SoC(System on Chip,片上系统)集成设计的重要模块,是SoC中成本比重较大的部分.内存管理的软硬件设计是SoC软件架构设计的重要一环,架构设计师必须要在成本和效率中取得平衡,做到 ...

  5. SoC嵌入式软件架构设计之三:代码分块(Bank)设计原则

    上一节讲述了在没有MMU的CPU(如80251.MIPS M控制器系列.ARM cortex m系列)上实现虚拟内存管理的集成硬件设计方法.新设计的内存管理管理单元要实现虚拟内存管理还须要操作系统.代 ...

  6. 大型Java进阶专题(三) 软件架构设计原则(下)

    前言 ​ 今天开始我们专题的第二课了,本章节继续分享软件架构设计原则的下篇,将介绍:接口隔离原则.迪米特原则.里氏替换原则和合成复用原则.本章节参考资料书籍<Spring 5核心原理>中的 ...

  7. PowerDotNet平台化软件架构设计与实现系列(03):系统应用平台

    为了复用和解耦,快速开发更多的系统和应用,我们对自己经常说的"系统"和"应用"进行更高级的提取和抽象. 十多年前入行,辗转至今,写过很多很多应用,个人喜欢分门别 ...

  8. [开发笔记usbTOcan]软件需求分析和软件架构设计

    前面文章进行了系统分析和系统架构设计,手工焊接了一个板子,集合EK-TMC123GXL开发板(请忽略焊接技术) SWE.1 | 软件需求分析 软件需求分析过程的目的是将系统需求的软件相关部分转化为一组 ...

  9. 使用java泛型设计通用方法

    泛型是Java SE 1.5的新特性, 泛型的本质是参数化类型, 也就是说所操作的数据类型被指定为一个参数. 因此我们可以利用泛型和反射来设计一些通用方法. 现在有2张表, 一张user表和一张stu ...

随机推荐

  1. 1.python基本数据类型

    1.数值类型(4种) 数值类型都是不可变的 1)整型(int) example: a = 0 b = -1 诸如此类,都为整型 2)浮点型(float) example: f = 1.1 f = -1 ...

  2. Windows Server 2008 IIS的备份和还原

    Windows Server 2008 IIS的备份和还原 当我们服务器系统有大量的站点和虚拟目录的时候,因为种种原因需要重做系统,那么重装系统后这些站点我们是否只能一个一个的添加,如果有成百上千个站 ...

  3. ubuntu 查看系统版本

    在终端中执行下列指令:cat /etc/issue可以查看当前正在运行的 Ubuntu 的版本号: 使用 lsb_release 命令也可以查看 Ubuntu 的版本号,与方法一相比,内容更为详细:

  4. 如何检查BioPerl是否正确安装

    如果是Linux系统,随意打开一个终端:如果用的是Windows系统,那么打开命令提示符. 输入以下命令: perldoc Bio::SeqIO 以上命令的作用是查看Bio::SeqIO模块的文档是否 ...

  5. 【bzoj3240 && 洛谷P1397】矩阵游戏[NOI2013](矩阵乘法+卡常)

    题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3240 这道题其实有普通快速幂+费马小定理的解法……然而我太弱了,一开始只想到了矩阵乘法的 ...

  6. Java 关于final那些事

    先说结论:对于引用类型的变量,Java本身会创建两个东西,一个是对象本身,另一个是记录对象地址的一个int值,将引用类型的对象声明为final实际上是固定记录地址的那个int的值不能改变,如果通过某种 ...

  7. MapReduce-计数器

    计数器 计数器是收集作业统计信息的有效手段之一,用于质量控制或应用级统计.计数器还可辅助诊断系统故障.根据计数器值来记录某一特定事件的发生比分析一堆日志文件容易得多.内置计数器Hadoop为每个作业维 ...

  8. myEclipse 导入maven项目时报错

    1.先右击项目,build Path 查看是否是某个JAR出了错.去掉无用的JAR 以及修改对应的JDK版本 2.检查src源文件,查看是否是源文件出了错.发现,还真的是 导入的包上面,报错:The ...

  9. mssql 函数STUFF 的用法

    DECLARE @limitDay INT;SET @limitDay = 92;IF DATEDIFF(DAY, '2017-12-13 00:00:00', '2017-12-13 18:00:0 ...

  10. Java -- JDBC 操作mysql数据库

    1. Demo1 导包时 不要导具体的mysql包, 为了兼容性,导JDBC 中 sql的包既可以了. public class Demo1 { /** * @param args * @throws ...