咖啡小驻
===========================================================
===========================================================

上一篇确定了业务用例,以及业务场景。该场景只描述了业务框架,接下来要对业务用例进行场景分析。用例场景分析要用到三种视图,业务用例实现视图、业务用例场景、业务实体模型(领域模型),每个业务用例还应当写一份用例文档,也称为用例规约(UseCase Specification)。若有非功能性需求,例如性能要求,吞吐量要求等,还应当写一份补充用例规约。


上一篇说到我们经过初步的业务分析,得到了用户、业务用例以及业务场景模型。这三项工作成果形成了基本的需求框架,并圈定了业务范围。这时应当做一份基线。

当然,第一份基线所包括的内容是非常粗的,要达到完整的需求说明还有更多工作要做。这一篇就来说说详细的需求过程和产出物,以及这些成果对需求的贡献。在开始之前,还是提醒读者下载实例,本文下面只会从实例中挑选很少一部分来说明,对照实例读者将能更好的理解。

上一篇确定了业务用例,以及业务场景。该场景只描述了业务框架,接下来要对业务用例进行场景分析。用例场景分析要用到三种视图,业务用例实现视图、业务用例场景、业务实体模型(领域模型),每个业务用例还应当写一份用例文档,也称为用例规约(UseCase Specification)。若有非功能性需求,例如性能要求,吞吐量要求等,还应当写一份补充用例规约。用例规约将在下一篇描述。

  • 首先是业务用例实现视图。并非所有的业务用例都一定要最终在系统中实现,因此,这个视图的含义是表达由需求范围到系统范围的映射关系。这个视图没什么技巧,也可以省略,不过笔者建议不要省略。需求应当保持过程的连续和可追溯性,这是软件过程可控的重要保证。

    业务用例实现视图:
    业务用例实现视图

  • 针对每个业务用例实现,应当对用例的实现过程进行场景模拟。上一篇是业务场景,而用例实现既然已经谈到“实现”,则应当将计算机包括进来,从人-机交互的视角来模拟业务场景。这是概念模型的一种,表达用户的实际业务在计算机环境下是如何实现的,给用户一个初步印象,告诉他们将来他们将怎样来做业务。请注意,虽然计算机已经参与需求描述,但是要尽量避免使用计算机术语,因为这时的文档仍然属于需求文档,是要与用户交流的,太多的计算机术语会大大降低用户对需求的理解能力。霍金在写时间简史时曾经说过,在书中加入哪怕一个数学公式,都会让书的销量减半。业务用例场景是概念模型的一种,但不是概念模型的全部。概念模型本篇不打算讨论,简单说一下,概念模型主要包括业务架构和系统原型。
    应当在业务用例实现里添加活动图用以描述用例场景,下图为示例,用活动图绘制。如果有多个场景,则应当绘制多个场景图。

    业务用例场景(借书过程):
    业务用例场景

  • 用例场景有另一个重要意义,是帮助系统分析员发现和定义业务实体。业务实体一般来说就是调研时用户所提供的各类表单或报表,但在很多情况下,并非每一份表单就是一个业务实体,所有业务表单也不一定涵盖全了所有业务实体。很多系统分析员声称业务实体的发现过程是全凭经验的,到底有哪些业务实体,靠经验进行提取。笔者要说,经验固然重要,但经验有一个最大的缺陷---不能重复和验证。即,这些实体是怎么从业务中提取出来的?它们是怎样参与业务的?这些实体已经足够支持业务了吗?凭经验分析者无法通过文档将这个提取过程记录下来,而脑子里的东西是无法共享和传承的,越大的团队,越复杂的项目,尤其是横向结构的项目组结构下,这个缺陷越严重。很多人觉得用UML和RUP描述的需求总是一块块分离的,不知道是怎么出来的,觉得很乱,原因就在于此。实际上,RUP做需求,每一步都是可验证和回溯的。用例实现视图是一个例子,这里也是一个例子。
    让我们看看上面的业务场景视图,每一个活动都有类似的命名:出示借阅证、查找需要的图书、放入借书栏.....看出什么来了吗?每个活动都是一个动作加上一个动作的受体。受体正是我们要寻找的业务实体,这些名词就是实体的来源。在需求阶段,系统分析员不要去考虑什么抽象,什么模式,别急,那是系统模型做的事情。抽象了,还弄一堆什么Factory模式,Builder模式之类的出来,用户能看懂吗?别忘了我们正在做的是需求文档,是做给用户看的。
    观察上面的用例场景,分析出现的名词,我们得到一个个业务实体,再根据场景分析这些业务实体之间的关系。实际上就是大家都熟悉的ER模型,但是与数据库建模的视角还是有所差别的。数据库ER模型要受到数据关系范式的限制,而业务实体ER模型则不必理会这种限制。只要与现实物体符合就OK。好了,罗嗦了一大堆,我们终于得到了我们的成果。

    借阅图书过程业务实体视图:
    借阅图书过程业务实体视图

    上图中画那么多虚线连接到业务用例实现是用来表示业务实体与业务用例实现之间的追溯关系的,这些线虽然麻烦,但是笔者强烈建议不要图省事。因为业务实体通过它们可以追溯到原始需求,再次重申,软件过程要可控,需求可追溯是需要时时谨记的。当然,如果嫌麻烦,您也可以用下面的这种形式,是不是简洁得多呢?
    借阅图书过程业务实体视图

    经过以上的过程,我们得到了什么呢?往下看之前笔者建议您回想一下,总结一下。

    第一、我们通用用例实现视图,从业务用例中找出了那些我们将在系统中实现的用例,并且记录了要在系统中实现的用例是如何映射到原始需求的。这提供了需求可追溯的验证。

    第二、针对每个用例实现,我们引入了计算机,将实际的业务从人-机交互的角度模拟了执行过程。不仅得到了一个业务怎样在计算机环境下执行的概念模型,同时也给用户描述了他们将怎么和计算机交互以达到他们的目标。笔者提醒大家,用例场景非常非常的重要,后续工作就得靠它们了!!绝对要认真对待,深入调研,不可漏掉一个场景,也不可模糊不清。

    第三、通过对场景的分析,给了我们重要的线索去发现业务实体。而我们发现了业务实体之后,又通过用例场景来验证这些实体是否支持了用例的实现。

    现在请读者思考一下,如果记不清了,可以翻翻之前的文章。到现在为止,我们的需求是不是一步一步推出来的?从粗到细,从模糊到清晰,从原始需求到计算机的引入,是不是每一步都是可以追溯的呢?每一步的分析结果是不是都有方法来验证正确性和完备性呢?如果您之前迷惑于需求的各个阶段无法关联,也说不清分析结果是否是正确的,那么建议您再从头看看笔者目前已经完成的文章,找出这些线索来,相信您会对UML和RUP的理解提高一个层次的。

    这篇文章该结束了。可是等等,到目前为止,虽然我们已经得到了不少产品,或可交付物,或成果,或deliverable...不管叫什么吧,我们已经做了很多工作了。不过作为需求来说,好象还缺点什么吧?对了,我们还缺少业务规则和业务实体的详细属性,这两个需求必不可少的内容,将在下一篇中讨论。敬请期待。

    *********************************************************

    作者coffeewoo 欢迎您访问文章原始出处 : http://coffeewoo.itpub.net ,阅读中有任何问题可以在BLOG上留言或发邮件到 coffeewoo@263.net,我将尽力为您解答。具有代表性的问题我会以 Q &A的形式收录到对应的文章之后。希望本系列文章对您有帮助。欢迎转载,敬请注明,谢谢 ^_^

  • coffeewoo 发表于:2006.08.22 23:45 ::分类: ( 系统分析、设计,UML及OO , ) ::阅读:(7607次) :: 评论 (27)
    re: OO系统分析员之路--用例分析系列(6)--用例实现、用例场景和领域模型 [回复]

    smile感谢楼主!!

    Huananan 评论于: 2006.08.28 09:30
    re: OO系统分析员之路--用例分析系列(6)--用例实现、用例场景和领域模型 [回复]

    真的十分感谢!
    一口气读完了你所以的文章!
    真的俄了!
    呵呵
    期待您的下一篇文章!

    mengfeixue 评论于: 2006.08.31 18:37
    :-) [回复]

    tongue 俺写它的目的就是对大家有些帮助,目的达到了,最高兴的是俺呀。谢谢喜欢,下一篇会尽快出来的

    coffeewoo 评论于: 2006.08.31 19:29
    re: OO系统分析员之路--用例分析系列(6)--用例实现、用例场景和领域模型 [回复]

    太有帮助啦!

    cloud 评论于: 2006.09.06 13:46
    :)谢谢肯定! [回复]

    wink.gif大家的肯定是我继续写下去的动力,老实说写得挺累的,写一篇半天就没了...多宣传宣传就是对我最大的鼓励了,谢谢

    coffeewoo 评论于: 2006.09.06 16:00
    re: OO系统分析员之路--用例分析系列(6)--用例实现、用例场景和领域模型 [回复]

    太棒了,楼主加油

    写称呼好麻烦 评论于: 2006.09.14 22:57
    re: OO系统分析员之路--用例分析系列(6)--用例实现、用例场景和领域模型 [回复]

    这一个应该是分析模型吧,状态图类图时序图用例图只用其中一个就可以了^_^

    rwyx 评论于: 2006.09.28 16:23
    re: rwyx [回复]

    smile我觉得这不是分析模型, 分析模型的特征是借助分析类,一般是边界,实体和控制类来“实现”用例的。这里用活动图只是一个场景模拟,表达人机交互的情况。还是应当属于需求范畴的。

    coffeewoo 评论于: 2006.09.28 18:17
    re: OO系统分析员之路--用例分析系列(6)--用例实现、用例场景和领域模型 [回复]

    没有真家伙,写不出来这么清晰的文章来。
    让我回到了初中时,证明几何题的推理过程。每个步骤都有论据,都有原因,都有起源。

    很佩服 楼主。

    w8u 评论于: 2006.11.13 15:06
    re: w8u [回复]

    呵呵,我花了几年时间思考这些问题,这些应该说是实践与思考的结果。我跟大家一样走过一段很痛苦的路,UML概念很多,每个独立对象都有其定义,但就是没办法说清一个完整过程应该怎么把这些东西串起来。我写这些文章就是把我自己的思考表述出来,比掌握UML每个定义更重要的是知道它们应该怎样发挥作用,怎么用。软件工程知识的积累帮了我很大的忙,我发现只有当这些UML元素与软件工程有机结合起来才有意义。

    coffeewoo 评论于: 2006.11.13 23:16
    re: OO系统分析员之路--用例分析系列(6)--用例实现、用例场景和领域模型 [回复]

    吁,一口气看到这里,受益非浅,另外针对这篇文章,想听听coffeewoo对业务实体和领域模型这两个概念的见解

    spiritj 评论于: 2006.12.12 17:32
    re: spiritj [回复]

    在我看来,业务实体模型基本上就等于领域模型了。虽然它们是两个名词。
    领域模型的目的,是用一些事物,来表达或说建立起该问题领域,行业领域,业务领域...的构成。是一种逻辑化了的结构模型。
    任何一个领域,都有两个方面的描述,结构性的和功能性的。并且大部分时候结构决定功能。在UML中,功能性的描述是由用例来承担的。而结构性的描述则是由领域模型来承担的。实际上在UML中结构性的东西是由实体这一元素来代表的。所以我认为领域模型基本上就等于业务实体模型。只是在这时,业务实体之间的关系不能纯粹理解为是计算机逻辑关系,而是其代表的问题领域内事物的结构化描述。

    coffeewoo 评论于: 2006.12.14 10:13
    re: OO系统分析员之路--用例分析系列(6)--用例实现、用例场景和领域模型 [回复]

    我对领域模型一直搞不明白,看了你上面写的“业务实体模型(领域模型)”,立刻大爽,可GOOGLE了一下,又出来另一种解释,你瞧:http://www.itisedu.com/phrase/200604231350225.html,在这里领域模型被解释为业务对象模型,业务对象模型又被描述为“从业务角色内部的观点定义了业务用例”,又把我给看糊涂了。咖老兄能不能给拨开迷雾咛,太感激了tongue

    qcrsoft 评论于: 2006.12.18 18:36
    re: qcrsoft [回复]

    laughing你给的链接我看了,基本观点是一样的。不过是我所不喜欢的表述方式,晦涩难懂。
    我的表述是功能+结构,所谓功能,也就是由用例表达的东西,也就是你给的文章中所说的"业务用例实现显示了协作的业务角色和业务实体如何执行某个工作流程。"中的工作流程。
    所谓的结构,就是业务角色和业务实体。
    业务角色也是一种特殊的业务实体。所以你看我例子中角色是和业务实体在同一张图里的。
    工作流程由业务场景图表达了,就在本文中。而所谓的“从业务角色内部的观点定义了业务用例”,请看本文的最后一张图,可不就是从内部观点去定义业务用例的么?最后一张图完全可以解释为用例是由XX角色操作XX实体....来完成的。与你所给文章中的观点并不冲突。"在UML中,功能性的描述是由用例来承担的。而结构性的描述则是由领域模型来承担的。"由于我把功能性的,动态部分划分到用例视图里了(实际上我觉得这样更合适),"所以我认为领域模型基本上就等于业务实体模型"。
    这么解释不知清楚了否

    coffeewoo 评论于: 2006.12.18 19:08
    re: qcrsoft [回复]

    补充一点,我原话是这么说的,"任何一个领域,都有两个方面的描述,结构性的和功能性的"。因为我认为功能性的归到用例模型中更合适,所以剩下就只有结构性的,也就是实体模型了。应该这样来理解,功能性的被用例模型取代,不需再次描述,"所以我认为领域模型基本上就等于业务实体模型"。

    coffeewoo 评论于: 2006.12.18 19:19
    re: OO系统分析员之路--用例分析系列(6)--用例实现、用例场景和领域模型 [回复]

    大多数的书和文章只有懂的人才看的明白,咖兄弟的文章是写给不懂的人看的

    qcrsoft 评论于: 2006.12.19 11:16
    re: OO系统分析员之路--用例分析系列(6)--用例实现、用例场景和领域模型 [回复]

    如果说CS游戏里的前进、后退、开火是actor,那用例在CS游戏中是什么呢?

    Neo 评论于: 2007.04.02 16:17
    re: Neo [回复]

    这不很简单么,按下W想干嘛?人物前进呗。其它的,人物开火,人物跳...

    coffeewoo 评论于: 2007.04.02 18:00
    re: OO系统分析员之路--用例分析系列(6)--用例实现、用例场景和领域模型 [回复]

    “业务用例实现视图”是否可以理解为是业务用例与系统用例一个分界线?或者说是一个转换关系说明?

    在这之前的业务用例着重的是围绕着“某项业务”不同的人所做的事(即业务用例)。这之后的系统用例着重的就是为了做好某件事,用户需要与“预期系统”进行哪些交互活动。

    例如:常见的“管理员工档案”,这应该算是业务级别的用例,细化到系统级用例的时候是否就应该分成“添加员工资料”、“修改员工资料”等等。否则就不好描述成与“预期系统”的交互活动了。

    不知道这样理解是否正确?我这所以这样认为是因为我看到您给的例子中在business use case包中的出现的活动图中都是人和人之间的交互,而在business use case realize包中出现的活动开始出现了“计算机”(有的图有,有的没有)。

    anpater 评论于: 2007.04.12 14:56
    re: anpater [回复]

    基本上是正确的。系统用例其实在我看来它的作用就是决定系统开发的范围,即决定业务用例分析下来的结果当中的哪一些会放在系统中实现,所以用系统用例去“实现”那些业务用例的含义是这些业务将是系统建设的一个部分。
    另一方面,的确业务用例是从业务角度来讲的,有没有计算机业务照样运转,只是效率高低的问题。而系统用例则需要加入计算机这一因素,告诉参与者,如果有了计算机,你的业务将是这样,这样,这样做的。

    coffeewoo 评论于: 2007.04.12 15:21
    re: OO系统分析员之路--用例分析系列(6)--用例实现、用例场景和领域模型 [回复]

    路过,看过,收益过!! 不顶不行!!!

    不仅仅对楼主的知识佩服,更对楼主的精神和人品赞扬。
    楼主给我们做了榜样,向楼主学习!!

    --------------------------
    附带:现在很多人都恃才自傲,不可否认他们的知识令人折
    服,但他们的人品却大打折扣。

    狼道 评论于: 2007.06.29 10:36
    re: OO系统分析员之路--用例分析系列(6)--用例实现、用例场景和领域模型 [回复]

    几乎一口气看到这里,真可以说是津津有味,意犹未尽laughing
    非常感谢咖啡兄能把这么好的经营拿出来给大家共享!~
    就像楼上说的,如今有如此人品的人实在不多啊!

    本人初学者,附带问个问题:
    不太明白《放弃订单》和《提交订单》这里为什么不是使用Decision而是使用了Synchonization呢?Synchonization不应该表示的是分流的概念吗?放弃或者提交订单是否应该是个选择的概念?也是说如果选择了放弃订单整个借书过程就结束了。如果使用Synchonization是否则表示选择放弃和选择提交可以同时进行?还望咖啡兄指点指点。

    knightz 评论于: 2007.07.24 21:01
    re: knightz [回复]

    sad.gif 不知道当初是怎么想的了,现在回想,怎么都应当用decision才对……

    你是对的,这是个二选一的过程。

    coffeewoo 评论于: 2007.07.30 00:45
    re: OO系统分析员之路--用例分析系列(6)--用例实现、用例场景和领域模型 [回复]

    laughing谢谢

    黄 评论于: 2007.08.02 15:02
    如何反向建模呢? [回复]

    请教楼主,如何打开Rational Rose,边看代码,边把代码反向建模呢?tongue

    shawn 评论于: 2008.03.07 10:27
    re: shawn [回复]

    首先要安装j2ee的插件,然后tools->j2ee->syntax check,如果语法没错的话,就可以右键选择模型,然后j2ee->generate code了。
    生成完成之后,再右键,j2ee->edit code,就可以在rose中打开code了。

    coffeewoo 评论于: 2008.03.08 19:41
    re: OO系统分析员之路--用例分析系列(6)--用例实现、用例场景和领域模型 [回复]

    tongue俺想让您帮助俺写一份留言板的系统用例和测试用例tongue谢谢了

    dyp 评论于: 2008.05.31 14:01

    发表评论
    标题

    在此添加评论
    表情符号: smile laughing tongue angry crying sad wassat wink

    称呼

    邮箱地址(可选)

    个人主页(可选)

     authimage


    自我介绍
    切换风格
    新闻聚合
    博客日历
    文章归档...
    最新发表...
    最新评论...
    最多阅读文章...
    最多评论文章...
    博客统计...
    Blog信息
    网站链接...