目录
编辑
一.体系结构设计过程
1.分析关键需求和项目约束
2.选择体系结构风格
3.体系结构逻辑设计
4.体系结构实现
5.完善体系结构设计
6.定义构件接口
二.体系结构原型构建
1.包的创建
2.重要文件的创建
3.定义构件之间的接口
4.关键需求的实现
三.体系结构的集成与测试
1.集成的策略
2.桩、驱动与集成测试用例
四.体系结构设计文档描述
五.体系结构评审
一.体系结构设计过程
1.分析关键需求和项目约束
- 需求规格说明:作为表述用户实际需求的制品,高速软件开发人员应该做什么,是得到用户认可的唯一条件~
- 关键需求:很少一部分影响到整体结构设计的需求才是关键性需求~
- 项目约束:项目本身还有很多环境约束会对体系结构设计的选择产生影响~
2.选择体系结构风格
体系结构风格封装了已经重复验证、可复用并语义内聚的一组设计机制,是成功软件设计经验的总结,所以如果能够选择到满足关键需求和项目约束的软件体系结构风格就能够充分复用前人的设计成果~
不同风格有不同的特点,选择的依据是风格的特点是否能与关键需求和项目约束相兼容~
3.体系结构逻辑设计
目的是建立能够满足概要功能需求、质量需求与项目约束的软件体系结构抽象设计方案~
- 依据概要功能需求与体系结构风格建立初始设计
- 使用非功能性需求与项目约束评价和改进初始设计
4.体系结构实现
逻辑视角描述的是一个概念上抽象的系统,并不是一个实实在在物理上的系统,需要将软件体系结构的逻辑设计从开发、发布、部署3个角度进行实现,建立软件体系结构的物理设计
- 开发包设计:逻辑情况下每一个包都可以转化为一个开发包
- 运行时的进程:进程图主要是表明运行时的进程,以及各进程间如何通信的~
- 物理部署:UML部署图描述了一个运行时的物理硬件节点,以及在这个节点上运行的软件构件的静态视图;部署图主要表明构建在物理节点上如何分布,同时也表明节点之间的物理连接~
5.完善体系结构设计
- 有时还需要为软件体系结构添加辅助构件以完成系统的特殊功能
- 结构设计方案如果仅仅停留在模块的层次,不利于验证其正确性,可以适当进行软件体系结构的细化
6.定义构件接口
定义构件之间的接口,这是进行软件体系结构文档化和交流的必要手段
二.体系结构原型构建
1.包的创建
包是用于将系统组织成层次结构的机制,可以根据构件的设计来创建项目的包
2.重要文件的创建
体系结构原型和一个完整项目类似,都包含类源文件,还包含接口源文件、数据文件、项目配置文件、构建配置文件等。我们需要根据前面的设计再对应的开发包和项目文件夹中创建相应的文件,创建之后还会产生类文件和可执行文件等~
3.定义构件之间的接口
包和文件定义之后,我们可以着力开始定义构件之间的接口~
4.关键需求的实现
创建好文件之后,我们需要实现一些关键功能需求
三.体系结构的集成与测试
1.集成的策略
当体系结构中原型各个模块的代码都编写完成并经过单元测试之后,需要将所有模块组合起来形成整个软件原型系统,这就是集成——目的是逐步让各个模块合成为一个系统来工作,从而验证整个系统的功能、性能、可靠性等需求~
常见的集成策略:
- 大爆炸集成 :将所有模块一次性组合在一起,优点是短时间内迅速完成集成测试,缺点是一般情况下一次成功的可能性不大,这就使问题的定位和修改比较困难,许多接口错误很容易躲过测试
- 自顶向下集成:先集成测试上层的模块,下层模块使用伪装的具有相同接口的桩,然后不断地加入下层的模块,再进行测试,直到所有的模块都被集成进来
- 自底向上集成:与前者相反,从最底层的模块集成测试起,测试的时候上层的模块使用伪装的相同接口的驱动来替换,优点是底层组件开发可以并行,缺点是驱动的开发工作量大
- 持续集成:提倡尽早集成和频繁集成,即不需要总是等待一个模块开发完才把他集成起来,而是在开发之初就利用桩集成起来;频繁集成式之开发者每次完成一些开发任务之后,就可以用开发结果替换桩中的相应组件,进行集成与测试~
2.桩、驱动与集成测试用例
桩是在软件测试中用来替换某些模块的,桩一般和所替代的模块有相同的接口,并且模拟地实现了模块的行为——相对于真实的实现要简单得多~
四.体系结构设计文档描述
描述软件整体结构,包含整个系统的逻辑组成等诸多内容~
五.体系结构评审
一方面是用户和所有开发人员再一次确认大家对软件功能理解是否一致,并确认一些细节分支情况的处理~