简化的酒店系统有顾客屏幕,职员屏幕,订房,入住,离店,订单和房间7个组件,箭头标示了组件间的依赖关系.这是软件开发中用组件化来划分复杂系统,隔离复杂度到各个组件里的标准姿势.
1. 简化的酒店系统姑且把系统外对系统的关注点(Concern)称为痛点,下图2显示订房间,登记入住和结单离店3个痛点分别缠绕若干个组件,同时有些组件内部也同时分散着多个痛点的部分.
2. 痛点和组件间的聚散离合倘若渴望的目标是清楚地分离各个痛点,从用例,需求,分析,到设计,实现,再到测试都是严格的分开,软件开发要来得容易多了.
3. 痛点与组件(类)矩阵示意在痛点与组件实现类之间架一座桥,叫做用例.这里所说的用例是用来对系统行为建模,一个用例的定义是某个系统进行的一系列活动,产出可观测到的结果,并且这个结果对一个或者多个系统相关的人或物是有价值的.
4. 用例作为痛点和组件类之间的桥梁用例与类清单如下所示,订房,入住和离店3个用例,顾客屏幕,职员屏幕,订房,入住,离店,订单和房间7个类.
5. 简化酒店系统的用例和类清单以类为横坐标,用例作纵坐标,模块化设计系统的可选方式有两种,OO(Object-Oriented)为代表的纵向切割系统,每个组件一个类,另一种是横向切割,AO(Aspect-Oriented)是代表,每一组横向切片打包合称为用例片断(Use Case Slice).
6. 用例-类坐标图任何一个用例,如订房,在软件开发过程中用例,分析,设计,实现,测试阶段都分别有对应的用例片断.把一个用例对应的所有用例片断合在一起,称为用例模块(Use Case Module).比如分析建模或设计建模的用例片断会囊括该用例的所有类,一些类里相关的部分成员(变量或方法)称为Aspect,还包括交互图,通讯图和类图这些描述用例实现的协作.
用例的表示有3个场景:最简洁的是一个椭圆+名字,矩形同时显示用例名和它所含的活动序列(基本序列,备选序列,和子序列),还有一种就是在系统中和其它用例的关系结构.订房用例的图示,在系统关系图中,为订房用例归纳抽象出设施预定的用例,订房用例继承它,同时抽取3个用例共同部分检查房间情况的子用例,然后分别包含,在没有合适的房间时,为订房扩展新的排队列表用例.用例间的关系就这3种:归纳抽象,包含和扩展.
7. 订房用例椭圆简图 8. 订房用例矩形图 9. 订房用例及其所在系统示意关于用例间的归纳,包含关系和OO里类间继承,包含类似,扩展的概念不是很好对应,这个主题也内容也比较多,可参阅"Aspect-Oriented Software Development with Use Cases"一书.此文有意回避这部分,可简单粗暴地理解为订房用例把排队完全外包给另一个用例了.
用例就像硬币,从系统外部看有一个相关方actor连着一个命名的实线椭圆就够了,从系统内部看去,用一个命名的虚线椭圆再连上与它关联的所有类或类的部分,这两个视角分别称为用例和用例的实现.
10. 外部看用例和actor 11. 用例和它的实现示意 12. 订房用例的实现描述订房用例实现的交互图,用例片断图,以及用例片断间的抽象归纳,包含和扩展关系.
13. 用例交互图 14. 订房用例片断图 15. 从订房用例归纳抽象出设施预订用例 16. 订房用例包含检查房间情况用例 17. 订房用例与酒店管理用例的扩展关系开发过程中用例的迭代建模过程如下:细化用例阶段更新用例模型,分析阶段更新分析模型,设计阶段更新设计模型,实现阶段更新实现模型.而测试设计片段覆盖前3个,测试实现片断覆盖测试设计和用例的实现
18. 软件开发阶段及对应的迭代更新 19. 用例模块和它所含用例片断 20. 用例间关系及其在用例模块图里的表示 21. 用例模块的打包编译配置
网友评论