软件体系结构设计
体系结构设计的过程 重点
- 分析项目需求和项目约束;
- 选择体系结构风格;
- 进行软件体系结构抽象设计;
- 进行软件体系结构实现设计;
- 包(构件)的设计
- 确定运行时的进程
- 确定物理部署环境
- 完善软件体系结构设计;
- 定义构件接口;
- 迭代过程 3 ~ 6。
包的原则 重点
共同封闭原则
- 共同变化的类应该放在同一个包内。
- 一个变化影响一个包,便影响了包中所有的类,而对于其他的包不造成任何影响。
- 减少软件的发布、重新验证、重新发行的工作量。
- 延伸了开闭原则
的“关闭”概念。
共同重用原则
- 在同一包内的类应当被一起重用。
- 如果重用了包中的一个类,那么也就相当于重用了包中的所有类。
- 核心观念是包中的类应当聚焦在一起,而不是在包中放入很多互不相干的类。
共同重用原则和共同封闭原则间的博弈
和 原则是互斥的,即它们不能同时满足。 使重用者的工作更轻松,而 则使维护者的工作更轻松。 力求使包尽可能大,而 则试图使包尽可能小。在项目早期,架构师可能会设置包结构,使
占主导地位,以便于开发和维护。随着架构的稳定,架构师可能会重构包结构,以最大化 ,从而方便外部重用者。
重用-发布等价原则
- 重用的粒度就是发布的粒度。
- 简单的编写一个类,然后声称它是可重用的做法是不现实的。只有在建立一个跟踪系统,为潜在的使用者提供所需要的变更通知、安全性以及支持后,重用才有可能。
- 减少重用者的工作。
无环依赖原则
- 包之间的依赖结构必须是一个无环图。
- 按照从高到低的结构组织包,增加项目的稳定性。
- 很可能在面向对象式风格中出现。
如果出现了环……
- 第一种方法是创建新的包。如果
和 相互依赖,那么就把共同的类抽取出来放在 中,这样就变成了 和 共同依赖 ; - 第二种方法是使用
(依赖倒置原则)和 (接口分隔原则)设计原则。如下图所示
稳定依赖原则
- 包的依赖关系总是朝着稳定的方向进行依赖。
- 被许多其他的软件包依赖的包应该是稳定的,反之亦然。
- 稳定性度量:
,越大越不稳定。
稳定抽象原则
- 稳定的包应该是抽象的,反之亦然。
- 延伸了开闭原则
的“开放”概念。 - 抽象性度量:
包设计的过程
先
原则对把可能一同变化的类组织成包进行发布;随着系统的不断增长,我们开始关注创建可重用的元素,于是开始使用
和 来指导包的组合。最后使用
、 、 对包图进行度量,去掉不好的依赖。
体系结构构建之间接口的定义 重点
软件体系结构构建
体系结构的原型构建
TODO
体系结构的集成与测试 重点
集成的策略
- 大爆炸集成。将模块一股脑组合在一起。
- 自顶向下集成。
- 自底向上集成。
- 持续集成。尽早集成并频繁集成,强调桩的应用。可以防止软件开发中出现无法集成和发布的情况,也有利于检查和发现集成中的缺陷。
桩和驱动
桩是在软件测试中用来替换某些模块的。桩一般和所替代的模块有相同的接口,并且模拟地实现了模块的行为。由于是模拟实现,所以相对于真实的实现要简单得多。
驱动代码中执行的是用于测试模块接口的集成测试用例。可以根据该模块的接口定义,使用基于规格的测试技术设计集成测试用例或者进行随机测试。
桩模仿的是下层模块,用来测试上层。而驱动则模仿的是上层模块,用来测试下层。