善意谎言辩论会作文600:OOA&D实践之路——真实案例解析OO理论与实践(四、通览全局:避免过早陷入细节的泥沼) ...

来源:百度文库 编辑:偶看新闻 时间:2024/04/27 16:27:47

OOA&D实践之路——真实案例解析OO理论与实践(四、通览全局:避免过早陷入细节的泥沼)

查看本系列全部文章:
《OOA&D实践之路——真实案例解析OO理论与实践》索引贴

细节的泥沼
      现在我们再次将特性列表贴过来:

      1.可以将各种原料信息发布到系统上
      2.加盟商和连锁店可以使用购物车功能在线定料
      3.加盟商和连锁店通过网络进行注册,管理员审核后才可以正式使用系统
      4.系统需要一个管理员,可以对系统进行管理
      5.定料完成后生成定料单,并可以打印
      6.直属连锁店按原价定料,加盟商按照等级分为5级,每级折扣不同

      我们已经和这则列表折腾很久了,相信很多朋友已经厌倦了,肯定在想:不要在折腾这该死的特性列表了,赶快开始吧。这点我同意。但是要开始做什么?很多朋友可能会说:开始用例分析吧。说实话,用例是好东西,它让我们清晰认识到系统的工作流程,正式因为过于清晰,所以很容易让我们陷入一个细节的泥沼。
      应该说,从“特性列表”直接到“用例分析”不是一个好注意,因为特性列表关注于功能(Function),而用例关注于系统的业务流(Business Flow),我们从功能直接开始分析系统的细节业务流,这个跨越太大,不利于软件质量的保证。特性是相对分散独立的功能描述,而用例是系统细节,很明显,在这之间应该有一个过渡,而这个过渡,就是一个高层次的,从全局角度对系统的一个概观认识。这个概观认识起到承上启下的作用,既将特性列表映射为一个系统的大概模型,又给系统细节的分析奠定了基础。所以,在系统特性基本确定后,我们首先要从全局给出一个系统的概览,避免落入用例分析这样细节的泥沼。

概览系统的有力工具——用例图
      既然我们要给出一个全局的系统概览,自然就需要有一种方式将其表达出来。显然,仅仅通过说是不理想的,我们需要一种能用于书面表达的工具,而这个工具,就是我们非常熟悉的UML图之一的用例图。
      很多朋友可能有疑问,上面不是说不进行用例分析吗?怎么这里又画用例图了?因为用例和用例图表述的信息层面完全不同,用例更倾向于细节和业务流的描述,而用例图倾向于整体的描述。下面给出两种工具要表述的信息:

      用例——表述某个交互操作的动作执行者、用例名称、具体流程过程、例外情况等。
      用例图——表述系统有哪些执行者、有哪些用例以及执行者于用例、用例于用例之间的关系。

      很明显,用例更关注于某一个操作的具体流程,所以适合在需求分析中使用;而用例图更关注于整个系统的使用和交互情况,因此能给我们一个系统的概览。
      下面,我们就使用用例图,从高层次角度看看系统的样子。在这里还要说明的是,随着UML和用例分析技术的发展,提出了业务用例和系统用例的区别,而且用例存在不同的粒度。在进行高层次概览的时候,我们是使用的是一种粒度比较粗的用例图。也许在以后的需求分析中,我们还会使用粒度更细的用例图。
      通过简要对特性列表的分析,可以画出一张如下的用例图:

      可以看到,这个用例图并没有太多细节的东西,而仅仅描述了三个信息:1.系统有哪些用户 2.系统有哪些操作 3.系统和用户有哪些交互。这些,就是我们要的一个系统概观。

用例图的验证
      画完用例图,我们并不是就完事了。因为,要使得用例图真的是全局概观,就一定要保证一点:图中用例覆盖了所有特性。如果不能覆盖所有特性,说明我们的用例图中缺少用例甚至缺少动作执行者。现在我们来验证一下:
      特性1覆盖于“原料管理”。
      特性2覆盖于“在线定料”。
      特性3覆盖于“注册”和“加盟商和连锁店管理”。
      特性4覆盖于“原料管理”和“加盟商和连锁店管理”。
      特性5覆盖于“打印定料单”。
      特性6覆盖于...???
      我们忽然发现一点,这里并没有和折扣有关的东西,那么这个特性没有被用例覆盖。我们知道,如果要实现这个特性,系统中一定要有一定的折扣机制,而一定是有管理员设置的。于是我们增加一个“折扣管理”用例。注意,这里我们可以先不陷入细节,仅仅知道系统有这么一个折扣机制,至于具体怎么实现,到分析设计阶段再讨论。于是,修改后的用例图如下:

      现在我们可以说:特性6覆盖于“折扣管理”和“在线定料”。
      好了,这样我们已经确认,用例图的用例覆盖所有特性。

重点总结
      1.不要过早陷入细节
      2.在特性列表到用例分析之间,用该先有一个系统概览,让我们从高层次上审视系统全貌。
      3.用例图是实现这种概览的有效方式。
      4.用例不要粒度过细,要能反应系统粗粒度操作。
      5.最后不要忘了检查图中用例是否覆盖了所有特性。

作者:T2噬菌体
出处:http://leoo2sk.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。Tag标签: 面向对象,OOposted @ 2008-12-12 11:12 EricZhang(T2噬菌体) 阅读(2034) 评论(12)  编辑 收藏 网摘 所属分类: 面向对象技术
发表评论  回复  引用  查看     #1楼 2008-12-12 11:26 | West       这也上首页?
  回复  引用  查看     #2楼 2008-12-12 12:17 | 球球       @West
为啥不能上首页......园子里像我这样的菜鸟要比高手人数多N倍。
  回复  引用     #3楼 2008-12-12 13:17 | geruger [未注册用户] 图好画,画好图难,本文应该叫uml实例讲解
  回复  引用  查看     #4楼 [楼主]2008-12-12 13:39 | T2噬菌体       @geruger
本系列文章重点不在UML的应用,而在OO实践,当然UML是实践过程中的重要工具之一
  回复  引用     #5楼 2008-12-12 17:20 | haha1 [未注册用户] 写的很好
  回复  引用  查看     #6楼 2008-12-12 22:04 | 金色海洋(jyk)       lz是以人为主线,而我是以无为主线。我也想依据lz给出来的条件,说一下我的分析。不知道lz是否同意。
  回复  引用  查看     #7楼 [楼主]2008-12-12 22:18 | T2噬菌体       @金色海洋(jyk)
当然可以
  回复  引用  查看     #8楼 2008-12-13 01:12 | 极地雪狼       软件工程里面有讲。
不会是你的毕业设计吧?
  回复  引用  查看     #9楼 [楼主]2008-12-13 09:51 | T2噬菌体       @极地雪狼
……当然不是毕业设计,我毕业设计已经在blog上挂出来了。这是我曾经参与的一个实际项目
  回复  引用  查看     #10楼 2008-12-13 10:42 | o﹎箜絔┌↘       这个系列一直在关注,学到了不少东西,谢谢楼主喽^_^
  回复  引用     #11楼 2008-12-15 00:45 | Dylan.S.Ma [未注册用户] 怎么你还用UML,我以前也用, 是几个韩国人写的,,不过前几天听同事说这个东西好像已经没有进行升级了哦,

正规点的都用microsoft自己的一套东西来画!!

个人观点哈,我不是做架构师的
  回复  引用  查看     #12楼 [楼主]2008-12-15 09:45 | T2噬菌体       @Dylan.S.Ma
StarUML吧,很多年了用习惯了。这个没什么正规不正规的。用Visio或Rose的不一定就比StarUML正规,习惯而已。