面向对象系统设计与分析专题<4>__业务事件分析
PS;这部分内容第一次接触.但是依照前面专题<3>所讲.它是设计用例图的基础.位于需求获取之后.做需求分析时用的方法.
1 事件分析相关概念
事件分析启动了面向对象开发过程并作为后续模型开发的基础,是确定用户所需系统功能的强大技术。事件分析包含一些基本概念:事件、事件流、数据流。
1.事件
事件是在特定的时间发生的事情,并且启动或触发了系统的预置响应。事件分为外部、内部和定时三类。外部事件是发生在系统边界外的事件。如读者借书、顾客取款、学生选课等。
内部事件是发生在系统边界内的事件。例如,当库存商品的数量低于设定点时发出报警属于内部事件。在涉及各对象动态行为的实时系统和协调系统中,内部事件很重要。
定时事件是发生在预定时间的事件。最常见的定时事件是触发周期性的输出的事件。例如,每个月的第三天为雇员发薪,每周一上午九点之前给经理呈报每周销售报表。
2.事件流
事件流是指不包含与应用相关的细节特征值的信息流。它仅仅通知系统特定事件的发生并触发系统响应,系统响应所需的所有必要数据都已经被保存在系统内部了。
定时事件总是伴随事件流。例如,定时事件“到了生成客户消费账单的时候了”,生成客户消费账单所需的数据已经在系统内部,不需要外部输入。
3.数据流
数据流包含与应用程序相关的具有描述事件细节特征值的数据元素。
例如,客户从银行取款,取款请求包括:账户、取款日前、取款额等数据。航空订票请求包括:乘客姓名、乘坐日期、航班号、座位号、服务级别、航线里程等数据。
数据流在事件分析中有两个作用:它的到来触发系统响应;它包含的数据是系统产生所需响应所必需的。系统响应所产生的数据流可以只包含一两条数据项,也可以是包含详细数据项的复杂报告。
PS: 数据流和结构化设计中数据流图比较相似.
2 业务事件分析原理
1.事件驱动原理
以事件的方式来理解系统行为采用的是“刺激-响应”方式。事件驱动系统的基本行为模式如下:
(1)系统空闲等待,直到有事件来触发系统行为;
(2)事件发生时系统做出完整响应;
(3)响应完成后,系统继续等待其他事件发生。
以提供馆藏文献查询的图书馆自助查询终端为例。查询终端在图书馆预置位置等待读者输入查询条件;读者通过查询条件进行查询;查询终端输出查询结果。
从事件分析的角度来看,系统就像自助查询终端,等待输入查询条件或者触发以执行预置动作。为了响应事件,系统或系统中的一些对象必须能够识别发生的事件。事件的发生生成事件流,以信号形式通知系统发生了特定事件。对于外部事件,进入系统的消息必须同时包含特定数据以使系统正确响应。
根据分析人员的目的和系统开发阶段不同,事件可以以不同规模和不同的细节程度来描述。例如,“客户取款”是系统级的高级、大范围事件,“输入取款金额”(客户在ATM上按键)是低级、小范围事件。系统级的高级事件一般包含多个低级事件。研究系统需求时主要研究在系统整体级别上的事件,这些系统级事件被称为业务事件。
2.“刺激-响应” 观点
业务事件分析考察信息处理系统所采用的是“刺激-响应”观点。刺激就是系统的输入,通报系统环境中事件发生的消息或信号。有些响应是包含预置消息或信号的系统输出,另一些响应则在系统内部存储器中保存数据。图1是从“刺激-响应”观点来看的外部事件。
图1 外部事件及其组件
系统输入和输出是系统与其环境交流的惟一方式。这里把系统想象成黑盒子,隐藏其内部发生的事情。系统获知其环境发生事情的惟一方式就是通过接收到的包含所发生事件必要信息的消息来感知。外部事件获知系统响应的惟一方式是来自黑盒子内部的消息。具有消息功能的刺激和响应的价值在于其传播的信息,这些消息可以被归入事件流或数据流。
事件是一个整体,事件分析时要着重于整体而非各部分。事件不同于事件的组件,系统输入、系统的动作或行为、系统输出作为事件的组件,自身都不是事件。
基于“刺激-响应”观点,为获得对用户需求的精确理解,需要通过确定以下信息来进行业务事件分析:
(1)系统需要响应的所有事件;
(2)与每个事件相关联的刺激(系统输入,事件流或数据流);
(3)所需的响应(系统输出);
(4)对每个刺激进行响应所需的动作或行为。
3 业务事件分析方法
1.描述业务事件
进行事件分析时,需要用精确地语言来确定和描述业务事件。用短语进行事件描述,可以获得清晰地理解。下面提供每种类型事件(主要关注外部事件和定时事件)描述的特定样式。
(1)描述外部业务事件
外部事件描述采用一个完整的主动语态句子。
例如:学生查询成绩;客户从银行账户中取款;顾客购买商品。
当指定外部事件时,句子的主语表示人、组织或环境中的系统,句子的谓语通常表示系统输入——通知系统事件发生的消息。
(2)描述定时业务事件
定时事件的描述采用短语“到……的时间了”或者“该……了”的样式。
例如:到生成学校公修课程表的时间了。这和“生成学校公修课程表”不一样,“生成学校公修课程表”表述了系统的动作(当事件发生时系统应该做的事情)而不是事件。
这里,当指定定时事件时,句子的谓语通常表示系统的输出——描述系统对事件响应的消息。
2.确定参与者
参与者是提供系统输入或接收系统输出的人、组织或者其它系统。
确定参与者需要:
(1)找到提供系统输入或者接收系统输出的人、组织或环境中的系统;
(2)为参与者命名。
参与者的名字是描述该参与者的名词或名词短语。事件“学生查询成绩”中发出查询请求的参与者是学生。
3.确定系统的输入和输出
系统输入是通知系统需要了解的事件内容的消息,是系统必须响应的刺激。系统输出是系统为了响应事件而产生的消息。
确定系统的输入和输出需要:
(1)找到与事件相关联的进入或离开系统的信息;
(2)为系统的输入和输出命名。
输入和输出的名字采用能描述包含在输入或输出中信息的名词(或名词短语)。主要着重于输入和输出的信息,而不强调动作。成绩管理系统中,查询请求包含了学号和课程信息。
一般来说,输入和输出都被当作数据流。在面向对象系统中,输入用消息来表示;输出可以用消息或输出对象来表示。需要注意,有时候外部事件只是在系统中存储数据而不产生相应的输出。
4.确定系统的动作
系统的动作是对事件作出响应时必须执行的一个动作或行为。
确定系统的动作需要:
(1)找到对事件作出响应时必须执行的动作或行为;
(2)为系统的动作命名。
动作的名字是该事件描述中包含的动词短语。事件“学生借书”中系统的动作是借书。
当确定了事件、参与者、系统输入和输出、系统动作后,用事件表列出它们对于理解是很有帮助的。
4 业务事件分析示例
为了深入理解使用事件分析方法建立事件模型的过程,下面以一个高校公修课选课系统为例来进行事件分析。
1.高校公修课选课的背景
根据教务处的时间期限,每个学期的高校公修课班级计划列表都在学生选课日期之前制定出来。根据这个时间期限,大学里的每个系必须向教务处提交该学期的本系公修课班级计划列表。这些列表中信息综合在一起形成最终的学校公修课班级计划列表。学校公修课班级计划列表被分发给各个系办公室和每位教授,而学生可以在学校布告栏看到。
在预选课期间,学生对自己要选的班级提出请求(通过选课单方式)。每个班级请求包含学生的学号以及学生要选择的公修课的班级号(注:一门课程可分多个班级)。如果该班级不能选,学生可以尝试选择同类课程的其他班级。当学生选择了尽可能多(达到最大允许值)的班级后,学生获得一份打印出来的班级列表。该列表显示了学生成功选定的所有班级。
列出了所含学生的名字和学号的每个班级花名册被打印出来后送给每位任课教授。
2.高校公修课选课系统的事件模型
根据背景描述,需要进行业务事件分析生成事件表。
(1)确定业务事件
高校公修课选课过程包含几项活动:首先院系需要制定并向学校教务处本系公修课程开课计划列表(开多少门课,每门课程分几个班,每个班计划人数、上课时间、地点、任课教师等信息);然后学校教务处统计汇总、检查审批并发布学校公修课班级计划列表,院系、教授、学生可以看到;学生根据学校公修课程选课规则选择班级,并获得自己成功选定的所有班级列表;最后,教务处根据选课情况,打印出每个班级的花名册送给相应的任课教授。总体分析后,我们确定四个必须的业务事件,并用推荐格式来描述:
1)系提交公修课班级计划列表。这是一个外部事件,系统直到收到系提交的包含在班级计划中的信息后才作出响应。各系单独上交系公修课班级计划,系统将保存信息以备将来使用。
2)到生成学校公修课班级计划列表的时间了。这是一个定时事件,当所有系都提交了所需要的信息后学校公修课班级计划列表才能生成 。
3)学生选择班级。这是一个外部事件,系统完成每个学生选择最大允许班级的请求并生成每个学生的班级列表,系统内部将这些信息记录下来。系统在学生完成班级选择后可立即为其生成班级列表,并不需要等到所有学生都选择完毕。
4)到生成班级花名册的时间了。这是一个定时事件,当所有学生都完成班级选择后系统用保存的数据生成班级花名册。事实上班级花名册可以再某个班级被选满后立即产生,这并不妨碍事件类型的确定。
(2)确定参与者
这个过程中需要知道谁提供系统输入或从系统获得输出。
在外部事件“系提交公修课班级计划列表”中,可以看出系向高校公修课选课系统提供了各系打算提供的各班级计划信息。系是这个事件的一个参与者。这个事件描述的句子主语是“系”。如果外部事件的描述恰当,那么主语一般就是提供系统输入的参与者。在“学生选择班级”事件中,学生就是提供班级选择信息的参与者。“到生成学校公修课班级计划列表的时间了”、“到生成班级花名册的时间了”两个定时事件由时间来触发,认为不需要参与者提供外部输入。
分析接收系统输出的参与者,事件“系提交公修课班级计划列表”只保存信息没有输出;事件“到生成学校公修课班级计划列表的时间了”中,系、教授和学生收到了学校公修课班级计划列表;“学生选择班级” 事件中,学生收到了班级列表;“到生成班级花名册的时间了”事件中,班级花名册发到了各任课教授手中。
四个事件中,识别出系、学生和教授三个参与者。
(3)确定系统输入和输出
根据业务事件描述,在这里确定并命名系统的输入和输出。在高校公修课选课系统中有两个输入:系公修课班级计划列表(事件“系提交公修课班级计划列表”),选择班级请求(事件“学生选择班级”)。三个输出:学校公修课班级计划列表(事件“到生成学校公修课班级计划列表的时间了”),学生班级列表(事件“学生选择班级”),班级花名册(事件“到生成班级花名册的时间了”)。
(4)确定系统动作
高校公修课选课系统中有四个业务事件,系统必须执行的一个动作或行为对这四个事件作出响应。这四个动作是:提交公修课班级计划列表(事件“系提交公修课班级计划列表”),生成学校公修课班级计划列表(事件“到生成学校公修课班级计划列表的时间了”),选择班级(事件“学生选择班级”),生成班级花名册(事件“到生成班级花名册的时间了”)。
通过业务事件分析结果,用事件表来表示事件模型。对于每个事件,事件表包含了相关的参与者、输入和输出、系统动作。表1所示的是高校公修课选课系统的事件表。
事件编号 |
事件描述 |
系统输入 |
提供输入的参与者 |
系统动作 |
系统输出 |
接收输出的参与者 |
1. |
系提交公修课班级计划列表 |
系公修课班级计划列表 |
系 |
提交公修课班级计划列表 |
||
2. |
到生成学校公修课班级计划列表的时间了 |
生成学校公修课班级计划列表 |
学校公修课班级计划列表 |
学生 |
||
3. |
学生选择班级 |
选择班级请求 |
学生 |
选择班级 |
学生班级列表 |
学生 |
4. |
到生成班级花名册的时间了 |
生成班级花名册 |
班级花名册 |
教授 |
业务事件分析中建立的是忽略了系统实现技术的基本模型,分析人员不能假设设计人员选择何种实现技术,必须以能够容许多种实现方式的方法来陈述需求。业务事件分析中,系统具有完美的内部技术,消息在系统中即时流动,系统能立即且无误地作出响应,存储的数据没有意外发生,这些假设帮助分析人员进行事件建模,专注本质而忽略一些次要细节。