难点讲解-业务用例与系统用例的区别以及include和extend的使用
业务用例和系统用例

业务用例和系统用例在软件开发中,业务用例和系统用例是两个关键概念。
本文将从不同的角度介绍这两个用例类别。
一、业务用例业务用例是指描述业务需求的用例。
业务用例通常与实际业务过程中的角色、事件和功能有关。
通俗地说,业务用例就是对于业务人员来说,软件需要做些什么事情。
具体而言,业务用例的特点如下:1.业务用例是面向业务人员的,其中的术语和业务流程需要清晰易懂。
2.业务用例描述的是“是什么”,而不是“怎么做”。
3.业务用例通常与现有业务流程紧密相关,与系统实现方式无关。
4.业务用例需要由业务人员参与编写和审查。
除了以上特点,业务用例还具有一些构成要素。
例如:用例名称、参与角色、前置条件、流程步骤、后置条件、异常流程等。
这些要素可以帮助编写人员更加清晰地描述业务需求。
二、系统用例系统用例是针对软件系统的用例。
系统用例描述的是对系统的输入、处理和输出。
通俗地说,系统用例就是对于软件开发人员来说,软件如何实现业务需求。
具体而言,系统用例的特点如下:1.系统用例是面向开发人员的,其中的术语和技术细节需要精准明确。
2.系统用例描述的是“如何做”,而不是“做什么”。
3.系统用例与现有的技术环境和开发方式密切相关,但不必考虑业务流程。
4.系统用例需要由开发人员参与编写和审查。
系统用例也有一些构成要素。
例如:用例名称、参与者、输入、处理、输出等。
这些要素可以帮助开发人员更好地实现业务需求。
三、业务用例与系统用例之间的关系业务用例和系统用例往往对应着同一个业务流程。
从业务人员的角度来看,他们需要的是一个能够高质量完成业务流程并达到业务目标的系统。
从技术人员的角度来看,他们需要用系统用例来说明如何实现业务流程。
因此,业务用例和系统用例可以说是互相依存的关系。
在实际软件开发中,业务用例往往是与用户需求相关的,它们通常是在需求分析阶段编写的。
通过编写业务用例,我们可以更好地理解用户需求和业务流程。
而系统用例则是在需求分析后,进入系统设计阶段才开始编写。
浅谈UML中常用的几种图

浅谈UML中常用的几种图1 UML简介2 UML常见图分类3 用况图(用例)4 类图简单类图使用举例5 其他辅助用图●时序图(顺序图)●协作图(Collaboration Diagram/communication Diagram)/通信图●状态图●活动图(Activity Diagram)6 组件图(ComponentDiagram)、配置图(Deployment Diagram)1 UML简介统一建模语言(Unified Modeling Language,UML)又称标准建模语言,是始于1997年的一个OMG标准,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到构造和配置。
‘UML感兴趣的可以阅读UML 1规范,包含了UML 的所有知识内容。
注:OMG, Object Management Group 对象管理组织2 UML常见图分类UML从考虑系统的不同角度出发,定义了用况图、类图、对象图、包图、状态图、活动图、序列图、通信图、构件图、部署图等10种图。
分类:面向对象动态建模,用于建立行为的实体间行为交互的四种图:状态图(Stage Diagram),序列图(Sequence Diagram),协作图(Communication Diagram),活动图(Activity Diagram) 。
“序列图”与“协作图”表述的是相似的消息,“活动图”是“状态图”的一种。
•静态结构图Static Structure Diagram•类图Class Diagram•对象图Object Diagram•用况图Use Case Diagram•交互图Interaction Diagram•顺序图Sequence Diagram•协作图Collaboration Diagram•状态图State chart Diagrams•活动图Activity Diagrams•实现图Implementation Diagrams•构件图Component Diagram•部署图Deployment Diagram3 用况图(用例)用例图,展现了一组用例、参与者(actor)以及它们之间的关系。
02-用例和用例图

3.4.4 几种关系的比较
关系类型
说明
表示符号
关联
actor与use case之间
泛化
actor之间或use case之间
包含
use case之间
扩展
use case之间
用例图
用例图(use case diagram)是显示一组用例、角色以及它 们之间的关系的图.
在UML中, 一个用例模型若干个用例图描述.
角色
由于Actor实际上是一个特殊类, 因此它们之间可以 存在一定的关系,如:
脚本/场景
脚本(scenario)在UML中指贯穿用例的一条单一路径, 用 来显示用例中的某种特殊情况.
其它译名: 情景、情节、剧本.
每个用例有一系列脚本, 包括一个主要脚本, 以及几个 次要脚本. 相对于主要脚本, 次要脚本描述了执行路径 中的异常或可选择的情况.
实例分析:语音邮箱系统----用例脚本
用例3: 登录系统 1. 邮箱用户完成邮箱号输入操作. 2. 邮箱用户键入密码并后跟#键.(默认号码与邮箱号相同) 3. 语音邮件系统播放邮箱菜单: 按1键接收信息. 按2键更改密码. 按3键更改问候语.
实例分析:语音邮箱系统----用例脚本
用例4: 接收信息 1. 邮箱用户完成登录操作. 2. 邮箱用户选择 “接收信息”菜单选项. 3. 语音邮件系统播放信息菜单: 按1收听当前信息; 按2存储当前信息; 按3删除当前信息; 按4返回邮箱菜单. 4. 邮箱用户选择“收听当前信息”菜单选项. 5. 语音邮件系统播放当前新信息,若无新信息,播放当前已有信 息.(注意: 只播放,不删除) 6. 语音邮件系统播放信息菜单. 7. 用户选择”删除当前信息”,则信息被永久删除. 8. 继续执行第3步.
用例的概念

用例方法可以帮助我们:
1、capture system requirements
捕获系统的需求
2、communicate with the end users and domain experts
便于和最终用户、领域专家交流
3、test the system
测试系统
为什么用例方法可以在这些方 面帮助我们
概要级用例
概要级用例包含多个用户目标,主要有 以下作用: 1. 显示用户目标级用例运行的语境 2. 为低层用例提供一个目录表
子功能级用例
子功能级用例一般是在做用例分解和系 统分析的时候引入的。常见情况: 1. 在用户目标级用例中需要依赖的用例, 而这部分功能相对用户的目标而言,没 有什么直接的关系 2. 或者是多个用户目标级用例中需要使用 到的子功能
用例的类别
业务用例与系统用例
业务人员编写业务用例来描述业务操作 软硬件开发人员编写系统用例来描述系
统的需求
设计人员可以编写另外的系统用例来记
录设计结果,或用于分解子系统的需求
黑盒用例与白盒用例
黑盒用例:完全不关心系统内部如何实 现。如用于获取需求的用例 白盒用例:涉及到系统内部的实现,需 要描述系统中构件的行为。如说明系统 设计的用例。业务用例中描述部门和个 人之间的相互作用。
• Association:两个用例之间有交互
Use和Include
UML中没有预定义Use用例关系。但在很 多文章中看到使用
个人理解:以前一直使用Include。因为 Use和Include的关系一般是在用例分解的 时候引入的上层用例和下层用例的关系。 但后来,对于子功能级,且必须被包含 在某个用户目标级(或更低级)用例中 使用的用例,使用Use关系;其他的用例 分解使用Include关系。Use常用于系统设 计。Include可以用于需求中也可以用于 设计中
用例之间的关系

例子
一个汽车租赁系统用例图的部分内容。在此,基本
用例是“还车”,扩展用例是“交纳罚金”。如果 一切顺利汽车可以被归还,那么执行“还车”用例 即可。但是如果超过了还车的时间或汽车受损,按 照规定客户要交纳一定的罚金,这时就不能执行提 供的常规动作。若研讨修改用例“还车”,势必会 增加系统的复杂性,因此可以在用例“还车”中增 加扩展点,即特定条件为超时或损坏,如果满足条 件,将执行扩展用例“交纳罚金”,这样显然可以 使系统更容易被理解。
用例之间的关系
在画用例图的时候,理清用例之间的关系是重 点。用例的关系有泛化(generalization)、扩展 (extend)和包含(include)。其中include和 extend最易混淆。 使用关系uses(UML1.2以后已经不再使用此关 系) 下面我们结合实例彻底理清三者的关系。
基本概念
包含(include)
include为包含关系,当两个或多个用例中共用一组
相同的动作,这时可以将这组相同的动作抽出来作 为一个独立的子用例,供多个基用例所共享。因为 子用例被抽出,基用例并非一个完整的用例,所以 include关系中的基用例必须和子用例一起使用才 够完整,子用例也必然被执行。include关系在用例 图中使用带箭头的虚线表示(在线上标注 <<include>>),箭头从基用例指向子用例。
泛化关系是一种继承关系,子用例将继承基
用例的所有行为,关系和通信关系,也就是 说在任何使用基用例的地方都可以用子用例 来代替。泛化关系在用例图中使用空心的箭 头表示,箭头方向从子用例指向基用例。
在用例泛化中,子用例表示父用例的特殊形式,子用例继承了 父用例的行为和属性,也可以增加新的行为和属性或覆盖父用 例中的行为。
tarenaUML学习笔记详细

一、业务用例与系统用例的区别系统用例是从使用者的角度定义“软件系统”需求。
而业务用例不研究“软件系统”需求,它更关心一个“业务组织”对外提供哪些服务。
系统用例研究软件系统,借助用例定义软件系统需求。
而业务用例是以业务组织外部业务参与者的角度定义业务组织提供的服务。
业务用例研究一个目标组织,借助业务用例定义目标组织应该具有哪些业务流程,以及这些流程应该是什么样子的。
业务用例是用来捕获功能性需求的,功能性需求是由actor的业务目标来体现的。
也就是对于actor 来说,他所负责的业务需要由一系列的业务目标组成。
比如一个档案管理员,他的业务目标就是维护档案。
比如论坛管理员,他的业务目标有维护用户、维护帖子等。
这些业务目标构成actor职责的全部。
业务用例体现了需求。
而需求的实现有多种方式。
如何实现它,是由系统用例来体现的。
系统用例和业务用例并不是一个简单的细分关系。
就说维护档案吧,这样一个业务目标,会有多种不同的用例场景去完成它,这些场景包括如何增加档案,如何修改档案,如何删除档案……对于系统用例来说,就是通过分析这些场景,来决定哪些场景中的哪些部分是要纳入系统建设范围的。
比如维护档案业务用例中,假设由于某个原因,修改档案很困难,只能通过先删除,再全部重建的方式来实现,那么系统用例就有增加档案,删除档案,而没有修改档案。
业务用例和系统用例是分别站在客户的业务视角和系统建设视角来规划的。
业务用例不是接近,而是完全的直接需求,系统用例是系统对需求的实现方式,它只是说,要建设的系统功能性需求由这些系统用例构成。
业务用例是仅从系统业务角度关注的用例,而不是具体系统的用例。
它描述的是“该实现什么业务”,而不是“系统该提供什么操作”。
业务用例仅包含客户“感兴趣”的内容。
二、业务活动图1.为什么要画业务活动图?完成了业务用例图后,需要为每个业务用例绘制一个活动图。
业务活动图描述了在这个业务用例中,用户可能会进行的操作序列。
用例间的三种关系

⽤例间的三种关系⽤例间的三种关系:(1)扩展(extends):⽤例B extends ⽤例A,表⽰⽤例B是⽤例A在某种特定情况下可能会出现的扩展⽤例。
例如:⽼王进城办事,2⼩时就可以回去,在这2⼩时内内急时就会去上厕所。
上厕所⽤例是进城⽤例的扩展,因为不上厕所⽼王进城办事也可完成。
(2)包含(includes):⽤例A includes ⽤例B,表⽰没有了⽤例B,⽤例A本⾝也就不完整了。
例如:还是⽼王进城,他从海南来北京办事,3天才能回去,那么这种情况下进城⽤例与上厕所⽤例的关系就应该是包含关系了。
(3)泛化:泛化关系指的是同⼀业务⽬的的不同技术实现。
例如:⽼王进城,他可以坐飞机,可以坐⽕车,还可以⾛路,那么进城⽤例就泛化为坐飞机、坐⽕车和⾛路三个⽤例了,它们之间存在层级关系。
总的来看,扩展可以“冻结”基本⽤例以保持稳定(因为扩展⽤例通常是不确定的);包含可以提供公共交互,提⾼“复⽤”;泛化是同⼀业务⽬的的不同技术实现。
⽤例之间除了上述三种关系不再有其他关系,⽤例之间不能通讯。
======================================================下⾯是另外⼀种解释,⽤例⼦来描述。
⽤例描述的是系统外部可见的⾏为,是系统为某⼀个或⼏个参与者提供的⼀段完整的服务。
从原则上来讲,⽤例之间都是并列的,它们之间并不存在着包含从属关系。
但是从保证⽤例模型的可维护性和⼀致性⾓度来看,我们可以在⽤例之间抽象出包含(include)、扩展(extend)和泛化 (generalization)这⼏种关系。
这⼏种关系都是从现有的⽤例中抽取出公共的那部分信息,然后通后过不同的⽅法来重⽤这部公共信息,以减少模型维护的⼯作量。
4.2.1 包含(include)包含关系是通过在关联关系上应⽤<<include>>构造型来表⽰的,如下图所⽰。
它所表⽰的语义是指基础⽤例(Base)会⽤到被包含⽤例(Inclusion),具体地讲,就是将被包含⽤例的事件流插⼊到基础⽤例的事件流中。
《软件工程》实验指导书

《软件工程》实验指导书计算机学院2017年2月软件工程实验指导前言软件工程实验是为计算机相关专业本科《软件工程》课程配套设置的,是《软件工程》课程讲授中一个重要的、不可或缺的实践环节。
其目的是使学生能够针对具体软件工程项目,全面掌握软件工程管理、软件需求分析、软件初步设计、软件详细设计、软件测试等阶段的方法和技术,通过该课程设计使学生进一步理解和掌握软件开发模型、软件生命周期、软件过程等理论在软件项目开发过程中的意义和作用,培养学生按照软件工程的原理、方法、技术、标准和规范,进行软件开发的能力,培养学生的合作意识和团队精神,培养学生对技术文档的编写能力,从而使学生提高软件工程的综合能力,提高软件项目的管理能力。
按该课程的特点,实验内容包括软件开发的两大方法学的专题训练,即结构化(生命周期学)的方法学和面向对象的方法学,通过对一个简单项目,要求学生利用结构化软件开发技术或面向对象的软件开发技术完成对该项目的开发。
因此设置五个实验项目,从项目发的准备工作,系统分析过程,系统设计过程,软件测试到系统实施,覆盖软件开发的整个过程,此外又引入我国国家《计算机开发规范》,以规范技术文档的书写标准,提高实验教学质量。
通过实验训练,达到如下目的:使学生进一步了解和掌握软件工程原理,提高对实际项目的分析和设计能力,通过实验课程,熟悉和基本掌握软件工程方法学、软件开发的过程,文档资料的编写格式及规范,全面领会和贯通所学习的理论知识,从而培养学生综合运用所学课程知识,分析解决问题的能力,培养学生理论联系实际作风,实事求是,严肃认真的科学态度和良好的工作作风,为今后从事科学研究工作打下基础。
实验要求软件工程实验具体要求如下:每个项目小组必须按照《软件工程实验指导书》附录中给定的文档规范标准提供项目文档;题目自定或采用附录二中的题目;软件开发的方法自定(结构化或面向对象的方法学)。
实验一用Visio进行功能分析和建模1. 实验目的掌握结构化分析的方法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
业务用例与系统用例的区别所谓的“业务用例”和“系统用例”有什么区别呢?
首先,业务用例和系统用例是相对而言的。
其次,业务用例和系统用例的研究对象不同。
以经典的银行为例。
我去银行开户:我在柜台前拿张空白的开户申请单,填写好我的信息,然后把我的身份证和填写好的申请单递给柜员(此处省去排队数十分钟等巨不爽事…)。
柜员接个单子,啪嗒啪嗒的把我的信息录入他们的系统。
一番折腾后,我面前的密码输入器提示我设置帐号的密码两次。
接着,他递出打印了信息的单子,让我签字确认。
我签字后递给他,他使劲敲上几个印章,然后把我的存折、身份证以及手续单递给我,并且告诉我办好了。
这是银行很简单很常见的服务,也可以说是银行的功能。
其实银行还有很多其它“功能”,比如存钱、取钱、挂失等等。
此时,我们其实是在把银行看作一个能提供很多“功能”的“系统”。
同时,在这个过程中,柜员一直在操作银行的软件系统,过程可能是这样的:
柜员首选选择开户功能;软件系统要求柜员将我的信息录入,并选择开户类型(我在申请单上写的是活期);软件系统可能会检查我的身份证号是否合法;软件系统为我生成一个银行帐号;软件系统会问柜员我是否要密码(我在开户申请单上注明了需
要),所以软件系统提示我设定密码;软件系统将我的存折打印出来。
银行的软件系统给柜员提供了很多功能,除了开户当然也会有存钱、取钱、挂失等。
但这些功能是银行的软件系统提供给银行职员的。
这样我们综合上述两个过程来看,其实我们在研究两个层次的“功能”。
第一层次是银行提供给银行的客户的功能;第二层次是软件系统提供给银行职员的功能。
如下图所示:
当我们对银行的业务进行建模时,我们会把银行看作一个整体,去研究银行会提供给客户哪些服务。
此时我们的研究对象是银行。
当我们对银行的软件系统进行建模时,我们把软件系统当作一个整体,去研究它需要提供哪些功能给银行的职员使用。
此时我们的研究对象是银行的软件系统。
这样我们为了区分起见,把前者称作“业务用例模型”;相对的,把后者称作“系统用例模型”。
业务用例和系统用例在用例技术的使用上没什么差别,如用例的关系、用例的描述等。
在业务模型中还有一个概念,即“业务工人(Business Worker)”。
业务工作表示实现业务的人、软件或硬件等角色。
比如银行的“开户”业务用例中,银行柜员、软件系统、打印存折的打印机等都可看作是“业务工人”。
用例间的关系:include和extend
通常来说,用例之间有两种关系:包含(include),扩展(extend)。
这也是UML 2.2官方规范中说明的两种关系。
包含(include)关系为用例建模提供了从两个或更多的Use Case的描述中抽取通用部分的能力。
所以,在描述Use Case之前就开始抽取包含用例是不可取的;再有,如果没有两个以上的Use Case来包含这个Use Case,那么这个抽取是毫无意义的。
扩展(extend)关系提供了使用另外的可选流程来补充或插入到一个已存在的Use Case中的能力。
因此,这是一种能够扩展原Use Case却不用对原来的Use Case进行重新描述的方法。
这两种关系在实际应用中究竟应如何区别有时会很难把握,建议可以根据如下特征来区分。
包含关系:
1.对基用例来说,如果缺少了被包含用例则是不完整的。
即,被包含用例是基用例不可缺少的一部分。
2.被包含用例对基用例是可见的,即基用例知道被包含
用例的存在。
3.被包含的用例通常应被两个以上的其他用例所包含,
否则应该考虑一下是否应该使用包含。
例子:校内网()中,“查找好友”可能为“发送消息”和“删除好友”所包含。
扩展关系:
1.如果去掉扩展关系,基用例仍然完整。
2.扩展用例本身具有独立的功能,而非从其他用例抽取
出来的。
3.基用例对扩展用例是可见的,而扩展用例对基用例不
可见。
也即,基用例不知道有扩展用例的存在。
Kurt Bittner等在《Use Case Modeling》给出了可能需要使用扩展用例的几种情况:
●∙描述一些对系统的基本功能来说是可选的特性。
例如,
可能是一些由系统提供甚至可从第三方购买的一些可
选的系统特性。
●∙描述一些可能使主流程变得很晦涩难懂的、十分复杂
的错误或异常处理过程。
例如,有些分支流程巨长,
尤其是比主流程还长。
●∙为一些特殊顾客定制的需求。
●∙由于范围管理和发布管理的需要。
例如,有些系统特
性或行为在后来的发布中才会包括,那么在后来的项
目中可以用扩展用例来对系统功能进行扩展。
例子:收邮件时,忘记密码了,需要找回密码。
“找回密码”对“收邮件”来说是个扩展用例。
如果在有些情况下你仍然觉得很难决定应该使用
<<include>>还是<<extend>>,那么停止纠结,就用
<<include>>吧(因为包含比扩展更容易让人懂,而扩展比包含更容易让人懵,:-))!“错”就“错”了,总比无谓的浪费时间好。
另外,你可能偶尔还会看到<<uses>>关系,这见于较早版本的UML中,以前的<<uses>>和<<includes>>被现在的<<include>>取代,可以将之理解为
<<include>>关系。
还有Generalization,虽然在官方规范中未明确说明,但是偶尔会有人讨论Use Case之间的Generalization关系。
我对此不欲多说,因为在我几年的Use Case Modeling 经历中,我真的没有觉得我需要在Use Case间使用Generalization关系的场景。
本着“简单”和“沟通”的原则,忘记它吧!
虽然前面说了这么多,可是最后我想说,Use Case之间不要随便搞“关系”。
很多人喜欢把Use Case图画得很玄乎,关系搞得很复杂!很不幸,方向错了。
Kurt Bittner等的《Use Case Modeling》中说:If there is one thing that sets teams down the wrong path, it is the misuse of the use-case relationships include,extend and generalization. Alistair在《编写有效用例》中也十分强调,Use Case真正有价值的是Use Case描述,所谓的用例间的关系往往价值不大还会适得其反。