需求分析之——用例图

用例图(Use Case Diagram)是由软件需求分析到最终实现的第一步,它描述人们如何使用一个系统。用例视图显示谁是相关的用户、用户希望系统提供什么样的服务,以及用户需要为系统提供的服务,以便使系统的用户更容易理解这些元素的用途,也便于软件开发人员最终实现这些元素。用例图在各种开发活动中被广泛的应用,但是它最常用来描述系统及子系统。

当用例视图在外部用户出现以前出现时,它捕获到系统、子系统或类的行为。它将系统功能划分成对参与者(即系统的理想用户)有用的需求。而交互部分被称作用例。用例使用系统与一个或者多个参与者之间的一系列消息来描述系统中的交互。

用例图包含六个元素,分别是:参与者(Actor)、用例(Use Case)、关联关系(Association)、包含关系(Include)、扩展关系(Extend)以及泛化关系(Generalization)

用例图可一个包含注释和约束,还可一个包含包,用于将模型中的元素组合成更大的模块。有时,可以将用例的实例引入到图中。用例图模型如下所示,参与者用人形图标来标识,用例用椭圆来表示,连线表示它们之间的关系。

一.参与者(Actor

         1. 参与者的概念

         参与者是系统外部的一个实体,它以某种方式参与用例的执行过程。参与者通过向系统输入或请求系统输入某些事件来触发系统的执行。参与着由参与用例时所担当的角色来表示。在UML中,参与者用名字写在下面的人形图标表示。

         每个参与者可以参与一个或多个用例。它通过交换信息与用例发生交互(因此也与用例所在的系统或类发生了交互),而参与者的内部实现与用例是不相关的,可以用一组定义其状态的属性充分的描述参与者。

         参与者有三大类:系统用户、与所建造的系统交互的其它系统和一些可以运行的进程。

         第一类参与者是真实的人,即用户,是最常见的参与者,几乎存在于每个系统中。命名这类参与者时,应当按照业务而不是位置命名,因为一个人可能有很多业务。

         第二类参与者是其它的系统。这类位于程序边界之外的系统也是参与者。

         第三了参与者是一些可以运行的进程,如时间。当经过一定的时间触发系统中的某个事件时,时间就成了参与者。

         2.确定参与者

         在获取用例前首先要确定系统的参与者,开发人员可以通过回答以下的问题来寻找系统的参与者。

(1)         谁将使用该系统的主要功能。

(2)         谁将需要该系统的支持以完成其工作。

(3)         谁将需要维护、管理该系统,以及保持该系统处于工作状态。

(4)         系统需要处理哪些硬件设备。

(5)         与该系统那个交互的是什么系统。

(6)         谁或什么系统对本系统产生的结果感兴趣。

在对参与者建模的过程中,开发人员必须要牢记以下几点。

(1)         参与者对于系统而言总是外部的,因此它们可以处于人的控制之外。

(2)         参与者可以直接或间接的与系统交互,或使用系统提供的服务以完成某件事务。

(3)         参与者表示人和事物与系统发生交户时所扮演的角色,而不是特定的人或者特定的事物。

(4)         每个参与者需要一个具有业务一样的名字,在建模中不推荐使用类似“新参与者”的名字。

(5)         每一个参与者要必须有简短的描述,从业务角度描述参与者是什么。

(6)         一个人或事物在与系统发生交互时,可以同时或不同时扮演多个角色。

(7)         和类一样,参与者可以具有表示参与者的属性和可以接受的事件,但使用的不频繁。

3.参与者之间的关系

因为参与者是类,所以多个参与者之间可以具有与类相同的关系。在用例视图中,使用了泛化关系来描述多个参与者之间的公共行为。如果系统中存在几个参与者,它们既扮演自身的角色,同时也扮演更具一般化的角色,那么就用泛化关系来描述它们。这种情况往往发生在一般角色的行为在参与者超类中描述的场合。特殊化的参与者继承了该超类的行为,然后在某些方面扩展了此行为。参与者之间的泛化关系用一个三角箭头来表示,指向扮演一般角色的超类。这与UML中类之间的返还关系符号相同。

 

 用例(Use Case

         1.用例的概念

         用例是外部可见的系统功能单元,这些系统功能由系统单元所提供,并通过一系列系统单元与一个或多个参与者之间交换的消息所表达。用例的用途是,在不揭示系统内部构造的前提下定义连贯的行为。

         用例的定义包含它所必须的所有行为——执行用例的主线次序、标准行为的不同变形、一般行为下的所有异常情况及其预期反应。从用户的角度来看,上述情况很可能是异常情况;从系统的角度来看,它们是必须被描述和处理的附加情况。更确切地说,用例不是需求或功能的规格说明,但是也展示和体现其所描述的过程中的需求情况。在UML中,用例用一个椭圆表示。

         在模型中,每个用例的执行都独立与其它用例,尽管在执行一个用例时由于用例之间共享对象的原因可能会在用例之间产生隐含的依赖关系。每个用例都表示一个纵向的功能块,这个功能块的执行会和其它用例的执行混合在一起。

         用例的动态执行过程可以用UML的交互来说明,可用用状态图、时序图、协作图或非正式的文字描述来表示。用例功能的执行通过系统中类之间的协作来实现。一个类可以参与多个协作,因此也参与了多个用例。

         在系统层,用例表示整个系统对外部用户可见的行为。一个用例就像外部用户可以使用的系统操作。但是,它不又与操作不同,用例可以在执行过程中持续接受参与者的输入消息。用例也可以被像子系统和独立类这样的系统小单元所应用。一个内部用例表示了系统的一部分对其它部分呈现出的行为。例如,某个类的用例表示了一个连贯的功能块,这个功能块是该类提供给系统内其它有特定作用的类的。一个类可以有多个用例。

 

2.识别用例

         用例图对整个系统建模过程非常重要,在绘制系统用例图前,还有许多工作要做。系统分析者必须分析系统的参与者和用例,他们分别描述了“谁来做”和“做什么”这两个问题。

         识别用例最好的方法就是从分析系统的参与者开始,考虑每一个参与者是如何使用系统的。使用这种策略的过程中可能会发现新的参与者,这对完善整个系统的建模有很大的帮助。用例建模的过程是一个迭代和逐步精华的过程,系统分析者首先从用例的名称开始,然后添加用例的细节信息。这些信息由简短的描述组成,它们被精华成完整的规格说明。

         在识别用例的过程中,通过回答以下几个问题,系统分析者可以获得帮助。

(1)         特定参与者希望系统提供什么功能。

(2)         系统是否存储和检索信息,如果是,由哪个参与者触发。

(3)         当系统改变状态时,是否通知参与者。

(4)         是否存在影响系统的外部事件。

(5)         哪个参与者通知系统这些事件。

 

3.用例与事件流

用例分析处于系统的需求分析阶段,这个阶段应该尽量避免考虑系统实现的细节问题。但是要实际建立系统,则需要更加具体的细节,这些细节写在事件流文件中。事件流的目的是为用例的逻辑流程建立文档,这个文档详细描述系统用户的工作和系统本身的工作。

         虽说事件流很详细,但其仍然是独立于实现的方法的。换句话说,事件流描述的是一个系统“做什么”而不是“怎么做”。事件流通常包括:简要说明、前提条件、主事件流、其它事件流和事后事件流。

(1)         简要说明。每个用例应当有一个相关的说明,描述该用例的作用,说明应当简明扼要,但应包括执行用例的不同类型的用户和通过这个用例要达到的结果。

(2)         前提条件。用例的前提条件列出用例之间必须满足的条件。例如,前提条件是另一个用例已经执行或用户具有运行当前用例的权限。但并不是所有用例都有前提条件。

(3)         主事件流和其它事件流。用例的具体细节在主事件流和其它事件流中描述。事件流是从用户角度描述执行用例的具体步骤,关注系统“做什么”,而不是“怎么做”。主事件流和其它事件流包括:用例如何开始和结束、用例如何与参与者交互、用例的正常流程(主流程)、用例主事件流(其它事件流)的变体和错误流。

(4)         事后条件。事后条件是用例执行完毕后必须为真的条件。例如,可以在用例完成之后设置一个标识,这种信息就是事后条件。与前提条件一样,事后条件可以增加用例次序方面的信息,如果要求一个用例执行完后必须执行另一个用,那么就可以在事后条件中说明这一点。当然,并不是每个用例中都有事后条件。

 

 用例间的关系

         用例除了与参与者发生关系外,还可以具有系统中的多个关系,这些关系包括包含关系、扩展关系和泛化关系。应用这些关系的目的是为了从系统中抽取出公共行为和其变体。

         1.关联关系(Association

         关联关系描述参与者与用例之间的关系,它是用于表示类的挂系的关联元类的实例。在UML中,关联关系用箭头来表示。

         关联关系表示参与者与用例之间的通信。不同的参与者可以访问相同的用例,一般说来它们和该用例的交互是不一样的,如果一样的话,说明它们的角色可能是相同的。如果两中交互的目的也相同,说明它们的角色是相同的,就可以将它们合并。

 

         2.包含关系(Include

         虽然每个用例的实例都是独立的,但是一个用例可以用其它的更简单的用例来描述。这有点像通过继承父类并增加附加描述来定义一个类。一个用例可以简单地包含其它用例具有的行为,并把它所包含的用例行为作为自身行为的一部分,这被称作包含关系。在这种情况下,新用例不是初始用例的一个特殊例子,并且不能被初始用例所代替。爱UML中,包含关系表示为虚线箭头交<<include>>字样,箭头指向被包含的用例。

         包含关系把几个用例的公共步骤分离成一个单独的被包含用例。被包含用例称作提供者用例,包含用例称作客户用例,提供者用例提供功能给客户使用。用例间的包含关系允许包含提供者用例的行为到客户用例的事件中。

         包含关系使一个用例的功能可以在另一个用例中使用,如下所述。

(1)         如果两个以上用例有大量一致的功能,则可以将这个功能分解到另外一个用例中。其它用例可以和这两个用例建立包含关系。

(2)         一个用例的功能太多时,可以用包含关系建模两个小用例。

要使用包含关系,就必须在客户用例中说明提供者用例行为别包含的详细位置。这一点同功能调用有点类似。事实上,它们在某种程度上具有相似的语义。

 

3.扩展关系(Extend

一个用例也可以被定义为基础用例的增量扩展,这被称作扩展关系,扩展关系是把新的行为插入到已有的用例中的方法。同一个基础用例的几个扩展用例可以在一起应用。基础用例的扩展增加了原有的语义,此时基础用例而不是扩展用例被作为例子使用。在UML中,扩展关系表示为虚线箭头加<<extend>>字样,箭头指向被扩展展的用例。

基础用例提供了一组扩展点,在这些新的扩展点中可以添加新的行为,而扩展用例提供了一组插入片片段,这些片段能够被插入到基础用例的扩展点上。基础用例不必知道扩展用例的任何细节,它仅为其提供扩展点。事实上,基础用例即使没有扩展用例也是完整的,这点与包含关系有所不同。一个用例可能有多个扩展点,每个扩展点可以出现多次。但是一般情况下,基础用例的执行不和涉及到扩展用例,只有特定的条件发生,扩展用例才被执行。扩展关系为处理异常或构建灵活的系统框架提供了一种有效的方法。

 

4.泛化关系(Generalization

         一个用例可以被特别列举为一个或多个用例,这被称为用例泛化。当父用例能够被使用时,任何子用例也可以被使用。在UML中用例泛化与其它泛化关系的表示法相同,用一个三角箭头从子用例指向父用例。

         在用例泛化中,子用例表示父用例的特殊形式。子用例从父用例处继承行为和属性,还可以添加、覆盖或改变继承的行为。如果系统中一个或多个用例是某个一般用例的特殊化时,就需要使用用例的泛化关系。

 

 

 

用例建模技术

 

一.对语境建模

         对于一个系统,会有一些事物存在于其内部,而一些事物存在于其外部。存在于系统内部的事物的任务是完成系统外部事物所期望的系统行为,存在于系统外部并与其进行交互的事物构成了系统的语境,即系统存在的环境。在UML建模中,用例图对系统的语境进行建模,强调的是系统的外部参与者。对系统语境建模应当遵循以下的方法:

(1)         用以下几组事物来识别系统外部的参与者:需要从系统中得到帮助以完成其任务的组;执行系统功能时所必须的组;与外部硬件或其它软件系统进行交互的组;为了管理和维护而执行某些辅助功能的组。

(2)         将类似的参与者组织成泛化/特殊化的结构层次。

(3)         在需要加深理解的地方,为每个参与者提供一个构造型。

(4)         将参与者放入到用例图中,并说明参与者与用例之间的通信路径。

 

二.对需求建模

         需求就是根据用户对产品功能的期望,提出产品外部功能的描述。需要分析所要做的工作是获取系统的需求,归纳系统所要实现的功能,使最终的软件产品最大限度的贴近用户的要求。对系统需求建模可以参考以下的方法。

(1)         识别系统外部的参与者来建立系统的语境。

(2)         考虑每一个参与者期望的行为或需要系统提供的行为。

(3)         把公共的行为命名为用例

(4)         分解公共行为,放入到新的用例中以供其它的用例使用:分解异常行为,放入新用例中以延伸为主要的控制流。简而言之,就是确定提供者用例和扩展用例。

(5)         在用例视图中对用例、参与者和它们之间的关系进行建模。

  • 11
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
PART1 引入 因为刚刚沐浴完入学的洗礼晋级到新的级别不久,杂事挺多的,所以也没怎么逛论坛,距离上一篇 低多边形运动(LowPolyMotion)算法 的帖子发布至今也有挺长一段时间了没露面了。今天就再奉上一帖,和大家交流切磋。 刚正式接触线性代数这门学科不到两个月,觉得课堂上的线代实在枯燥。好在有幸遇见国外3Blue1Brown大神的线代解析,使得对线性变换的几何意义初有体会。在对这种美妙变换的感慨之余也不忘用自己动手,尝试独创算法实现这种变换的图形化渲染。 我将整个程序写成了可交互式的即时演算动画。 其实是个半半成品,嗯...主要原因是交互性还比较单一。 目前完成了基向量添加、自定义向量添加、矩阵×矩阵动画演算、矩阵×向量动画演算、两种副本网格模式、两种动画预览模式,上图演示的就是基向量和自定义向量的添加。其实单动画本身而言,除了好看和能够帮助更形象地理解线性变换以及明白低阶矩阵运算的几何本质之外也没啥别的意义了,但是这种交互式的编程动画还是挺有意思的,也有一定的学习价值,特此开源。 PART2 演示 ↑ 添加基向量与自定义向量 ↑ ↑ 观察基向量变换 ↑ PART3 简析 这一部分简单分析一下这个算法的内容,或者说解析一下源码吧,因为之前也有发一些这类的帖子,但是反应大多是看不太懂,因此我也打算在以后的帖子中都对源码做一下大致的剖析。要实现这种动画主要分成四大部分 来看,有兴趣的话就让我们就一起来看看吧。 一、坐标系部分 在这个项目中坐标系可以说是整个动画最有看点的部分了。所有变换的美感都在坐标系网格的拉伸中体现得淋漓尽致。 1 .1搭建一个可变换的坐标系,即要搭建一个可变换的网格,网格由许多条横纵线条组成,为了绘制这些线条,我们只需要确定每一根线条的左右端点的坐标 即可。此外我们还需要确定坐标轴的单位长度,以及坐标原点的位置,为此,程序中定义了两个数据类型,用于存放坐标系的基本参数,分别是CoordinateSystemParam和CoordinateGroup。 通过画板的宽高和单位长度,不难确定Line_X和Line_Y的值,再设定一下颜色,通过循环调用画板的画直线命令很容易画出动图中的坐标系。 二、缓动函数部分 2 .1为了让我们的坐标系动起来只需要让端点动起来即可,计算出运动的始末位置后利用循环的方法来达到缓动的目的。例如做一个循环n次使得点P0从(x1,y1)位置运动到(x2,y2)位置的动画,只需要在第i次循环的时候将点P0从x1位置移动到x1+(x2-x1)×k位置即可,其中k=i/n。 2 .2为了使得动画更加平滑,我们借助正弦函数对线性数据进行“软化”。 考虑到实际需求,我们仅截取正弦函数的[-π/2,π/2]区间。通过f(i)=π×i/n-π/2即可将i∈[0,1]映射到f(i)∈[-π/2,π/2],这样一来我们就可以得到sin(f(i))∈[-1,1],为了使得比例值k依旧从0开始到1结束,不难发现只需令k=[sin(f(i))+1]/2,即k=[sin(π×i/n-π/2)+1]/2 。这一技法贯穿整个程序动画,如果要实现更加复杂的缓动效果,可以参阅网上的其他资料,或调用现成的缓动函数。 三、向量箭头部分 3 .1两点确定一条直线,那么如何画出向量的矢量箭头?本程序中使用在原直线两侧再画两根短线段的方法来实现,为了达到目的,只需要确定直线倾斜角α、箭头开角β以及线段长度L即可。L在图中没有标出,L=|P0P1|或|P0P2|。 以计算点P1的坐标为例,首先α=arctan(y0/x0), 由几何关系不难发现∠EP0D=π/2-α-β,进而易得P1到直线DP0的距离d=Lcos(α-β),代入x1=x0-d得到P1的横坐标为x1=x0-Lcos[arctan(y0/x0)-β],同理y1=y0-Lsin[arctan(y0/x0)-β],考虑到L与β都是我们自定义的已知量,当P0确定后,P1与P2的坐标也就确定了。值得注意的是x=x0±d的正负号具体由箭头所处的象限来指定 ,具体规则见源码的CoordinateSystemDraw函数。 确定了箭头三点的坐标后(P0,1,2),结合第二节缓动部分即可完成向量箭头的生成和移动动画。 四、运算表达式部分 4 .1运算表达式部分即矩阵乘法算式的动态显示部分。略,详见源码。 ↑ 观察自定义向量的变换(Vector的坐标跟随箭头所在处渐显)↑ ↑ 伸缩变换及张成空间的"降维" ↑
课程设计(二) 需求分析报告 题 目 计算机通讯录系统的 设计与实现 学生姓名:    学  号:    系  别:  专  业:  指导教师:  起止日期: 2011.05.21——2011.05.25 2011年 5月 10 日 1 范围 1.1 标识 "文件状态: "文件标识: "需求分析报告 " "【 】草稿 " " " "【 】正式发布 " " " "【 】正在修改 " " " " "当前版本: "1.0 " " "作 者: " " " "完成日期: "2011-5-25 " 1.2 系统概述 1.软件名称:通讯录系统 2.软件功能:模拟通讯录的功能,设计一个系统,普通用户可在该系统中只能进行 查询操作,而管理员可以进行查询,删除,修改,增加等操作。 3.用户:该系统的普通用户不需要任何技术背景,而管理员必须具备基本的电脑操 作技能和简单的系统维护工作。 4.开发者: 1.3 文档概述 需求分析采用面向对象的方法,在文档中主要采用了用例图、E- R图等表示方法来描述需求。 2 引用文件 《数据结构》 (第二版本)清华大学出版社出版,严蔚敏,吴伟民 编著。 3 需求概述 3.1 系统目标 本系统的总体目标是通过该系统的实施,可以对班级基本通讯更加有效地进行管理 。系统设计实施过程中,力争做到以下几点: 1. 具有较高的可靠性和可用性; 2. 具有良好的时间特性; 3. 具有通用性,适应广大无任何技术背景的人群; 4. 系统易于管理维护; 5. 使用方便,易学易用; 6. 良好的性能价格比; 3.2 运行环境 1. 系统硬件需求 Pentium4 800MHz或更高主频CPU 512MB以上内存。 2. 系统软件需求 IIS5.0以上的WEB服务、安装有 Myeclipse8.5与Mysql5.1数据库等、Windows XP 以及更高版本的操作系统、IE5.0以上的版本浏览器。 3.3 用户的特点 管理员,具备基本的电脑操作技能和简单的系统维护工作;学生用户,不需要任 何技术背景。 4功能需求 【通过前期对通讯录领域实际业务需求的调研,经分析确定】系统功能主要分为 以下两个部分: 1.管理员操作:有学生信息管理、学生信息修改、学生信息删除,学生信息添加 等。 2. 学生用户操作:个人信息修改、个人信息的查询。 4.1 系统用例图 系统整体用例图,系统主要有两类用户包括:管理员用户、普通学生用户。 4.2 系统各项功能描述 系统具体功能模块划分如下 : (1)登陆退出模块: 实现用户的登陆,本系统采用统一的登陆入口,可以实现管理员和普通用户的登陆, 在系统通讯录登陆模块里,如果不输入管理员用户名和密码,系统将默认以普通用户身 份登陆,在普通用户里无法实现删除、添加用户等操作,而且只能对自己的信息进行修 改,而管理员具有修改、添加、删除、查询等权限。退出系统,只要输入"0"退出系统即 可。 (2)用户管理模块: 在通讯录管理模块中,我们可以修改通讯录,可以删除通讯录资料等。 (3)信息管理模块:包括对记录信息的浏览、添加、删除、修改等模块 *查询功能 (1)在通讯录查询模块中,用户可以通过查询尽快找到希望查找的联系人; (2)能给出查询该联系人所有记录的信息; (3)如果查询的信息不存在,输出提示信息。 *修改功能 (1)根据需要选择所需修改的信息进行修改,修改不得违反系统的格式要求,如编 号、姓名等不能置空; (2)能输出修改后记录的信息; *添加功能 (1)当有信息需要录入时,根据系统的输入要求添加各项信息,每次可以添加一个 或多个新的记录; (2)能给出新添加记录的信息; *删除功能 (1)根据特定信息选择所要删除的对象,如输入编号,姓名等删除 (一个或多个)记录并更新内存文件内容; (2)给出被删除记录的信息并提供确认机制; (3)如果没有要删除的信息,输出没有找到信息; (4)数据输出模块 该模块可以根据用户的选择输出相应的信息。 5数据 学生实体 包括学生学号、姓名、生日、性别、住址、联系方式、QQ号、邮箱,如图学生实 体E-R图1所示。 图1 学生实体E-R图 6拟采用的技术 采用的技术是数据结构中的链式表,数据的排序根据学号进行升序排序,数据存 放采用表的链式存储方式。 ----------------------- 数据结构通讯录系统需求分析报告全文共6页,当前为第1页。 数据结构通讯录系统需求分析报告全文共6页,当前为第2页。 数据结构通讯录系统需求分析报告全文共6页,当前为第3页。 结束 登陆模块 管理员 普通用户 修改 查询 删除 增加 个人信息修改 查询 开始 数据输出模块 退出 数据结构通讯录系统需求分析报告全文共6页,当前为第4页。 数据结构通讯录系统需求分析报告全文共6页,当前为第5页。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值