致面向对象技术初学者的一封公开信
作者:网络转载 发布时间:[ 2013/6/25 14:06:17 ] 推荐标签:
从上面的这些经验可以看到,使用CRC 进行OO 建模得到的模型和概念数据建模得到的结果非常相似。另外,根据经验,基于逻辑(存储的信息)的关系建模和OO 建模是不同的。大多数情况下,区别是由于技术的不同导致的,例如,在OO 模型中可以自由地使用继承和多对多的关系。由于技术上的差异,两种建模人员之间不能很好地交流,这是大的困难。
数据建模部分的问题说这么多吧。
对流程建模而言, 情况却不一样了。90 年代初, 涌现出各种方法、计划、会议和项目,试图将数据流图的模型转变为对象模型。曾经有几个项目声称获得了成功,但都是后续无音,业界一致的结论是: 这个转变太困难了。大多数使用数据流图的建模人员终都抛弃了这项技术, 投入了对象设计的怀抱(Martin-Odell 和Ptech 小组是的例外)。对于流程建模,现阶段我的回答是:其模型无法与OO 模型相比较。但这并不是终的回答,OO 建模人员正在开始进行本质上的流程建模,下一步的发展将会怎样,我也并不清楚,流程将变成过程那样(过程编程复活?), 或者变成数据流图那样,还是类似于封装的对象?
业务结构建模中为什么要用use case 和场景(scenario)?
use case 和场景……
……为讨论提供范围和内容,
……预示内容,包括什么,不包括什么,讨论多广,多深入,什么时候停止,
……为设计的压力测试提供参数。
我见过一些不使用“场景”的小组,他们建模的时候实际上是在问题域内作随机的探险。负责人根本不知道下一个该问什么问题?经常都是凭直觉。一般说来,他们也不知道现在捕获的信息后是否真正需要,算知道也是凭直觉或者瞎蒙。
在一个寂静的深夜,几个真正专家级的OO 设计师向我说了心里话:根本没有一个有效的规则来指导漂亮的对象设计。其中一位说,“我们有时真的是在毫无目的地讨论”, 另一位也相当赞同,“有时候我们象没头的苍蝇一样到处乱撞,直到突然把一些好的对象给撞出来。”
使用场景也不能防止盲目的讨论和到处撞墙,只是可以为讨论提供内容和边界。我曾经见过有的小组不用场景,长时间在很大的建模范围内四处乱撞,失去控制。因此,使用场景和use case 的第一个理由是为建模的努力提供一个范围。
使用场景的第二个理由是决定需求获取到什么程度算足够。
假设现在让你为一家货运公司建模。你建模的内容是什么?卡车的购买价值……实际价值……转售价值……车内颜色……快送单据的数目……旅途的数目和目的地?如果你想要把所有的内容都包括进来,那你将永远无法结束。除此之外,还有其它的问题:从何处开始,何时结束,包括什么,不包括什么,需要多少细节? 场景可以回答关于内容的问题,答案是:你需要足以回答场景中所有问题的信息。在结构化模型或完全的对象模型中,如果用一个方框来对应一个场景。然后在浏览场景的过程中将涉及到的元素(译者注:这里的元素, 是比如在OO 的类或对象) 涂成红色, 会发现后所有的元素都按某种顺序连接起来了(不会有遗漏的元素)。如果对所有的场景都执行这个操作,后所有的元素都会被涂成红色。在建模过程中,讨论会经常离题,用这种方法可以保证针对当前的需要制定一个边界,这样不会跑题太远。
后,场景还提供了压力测试的参数以保证质量。
怎样比较两个模型的优劣? “和业务相符”,这是必要的,但肯定不够,可能有很多模型都可以“和业务相符”,怎样来度量这些模型的质量呢?
软件变更的成本很高,另外,变更越靠后,变更的成本也越高。(变更成本曲线)。软件设计的一个目的是将变更隔离开来,每次变更只需改变一个模块。这并不是什么时候都能做到的,正如Kent Beck 所说,“如果你可以只改变一个类, 那软件的质量将得到显著的提高”。和软件相比, 业务模型的成本函数并不是很清楚,但将变更影响的范围降低到低肯定是应该的。
为了测试变更曲线,需要参数,而场景可以提供这些参数。如果用户想要“something-or-the-other”,怎么办?模型中到底需要多少元素?像CRC(class-responsibility-collaborator )这样的技术鼓励用户在现场快速得到场景, 揭示可能的未来变更。后,检查这些可能的变更,检查需要为之改动多少元素。对于两个都“和业务相符”的模型,哪个模型受场景影响的点少一些,哪个模型要好一些。其它很多地方也可以找到压力测试的参数。例如相关产品的结构,变更时是不是可以只改一点可以了?在评价模型时,这些参数都应该用上。
场景还可以用在很多地方,例如:同用户一起检查需求,为系统提供功能测试的用例。以上所说,是在建模活动中采用场景的三个理由。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11