大牛:“小白,这节课,我们做几个习题,巩固前面学过的模型与事件相关知识”。
随即大牛将一张图片投影到屏幕上。

图 2-9 小博士关于定义系统需求概念的问题
大牛:“小白,图中的小博士已经提出问题来了。要求你回答出用于定义系统需求的两个关键概念是什么?”
小白:“五选二的题啊,我选择模式和事件”。
大牛:“说说你选择的理由”。
小白:“第一课、第二课和第三课讲的都是模型,可见模型对定义系统需求的重要性,而且前面也讲到了模型是对需求的描述”。
大牛:“对,那再说说前面对模型的定义是什么?”
小白:“模型是采用文字、图形、表格、公式等方式,对系统需求情况进行可视化描述,模型又分为数学模型、描述模型和图形模型”。
大牛:“回答的不错!模型是定义系统需求关键概念之一”。
大牛:“另外一个关键概念就是事件,事件对定义系统需求的重要性不言而喻,因为所有的系统开发方法都是以事件开始建模的,事件发生在某一特点的时间和地点、可描述并且系统应该记录下来”。
大牛:“小白,还记得事件有哪些类型吗?”
小白:“当然记得,事件有外部事件、临时事件和状态事件三种类型”。
大牛:“对。外部事件是在系统之外发生的事件,通常是由外部实体或动作参与者触发的;临时事件是系统到达某一时间点后,由系统自身触发的事件;状态事件是当系统内部发生了需要处理的情况时,由系统自身触发的事件”。
大牛:“小白,回答不错,说明你已经初步掌握了模型和事件的概念。我们再来看小博士出的下一道题”。
随即大牛将一张图片投影到屏幕上。

图 2-10 小博士关于物理模型和逻辑模型的问题
小白:“定义系统需求用下面的那种模型?物理模型还是逻辑模型?”。
大牛:“小白,你先说说逻辑模型和物理模型的区别”。
小白:“逻辑模型仅是定义了系统需求,并没有局限于某一具体技术,而物理模型用于描述系统的实现过程,需要描述采用了什么样的技术和硬件,系统的部署与安全防护等要求”。
大牛:“回答的非常好!”。
大牛:“技术实现、硬件配置、系统部署等情况属于物理模型,物理模型主要用在设计阶段。在定义系统需求阶段采用逻辑模型,可以抛开技术、硬件配置等情况的影响,专注于系统的逻辑结构和功能要求”。
大牛将另一张图片投影到屏幕上。

图 2-11 小博士要求分析记账系统
大牛:“小白,小博士给出一个家庭记账的项目,要我们分析出记账系统的相关事件?”。
小白:“牛老师,虽然前面听了您讲的如何识别系统事件,也很明白,但要真正地分析一个项目,还真有点手足无措呢”。
大牛:“还是缺乏经验的缘故,学到了知识不知道如何运用”。
小白:“是啊,不知道从哪里下手?”。
大牛:“我们一起来调查这个项目需求,调查项目需求也是要遵循一定过程的”。
大牛将一张图片投影到屏幕上。

图 2-12 调查项目需求过程
大牛:“调查项目需求首先要识别项目干系人,项目干系人就是与项目有关的人,包括项目出资方、项目使用者等相关人员;然后针对识别出的项目干系人进行调查,调查内容主要是对项目的期望、功能要求、使用方式等,调查方式包括问卷、谈话、会议等方式;最后根据调查结果列出项目功能需求”。
小白:“需要先识别 出家庭记账项目的干系人”。
大牛:“家庭记账项目有哪些干系人呢,或者说谁用家庭记账系统?”。
小白:“爸爸、妈妈、孩子都会使用这个记账系统吧?”。
大牛:“爸爸、妈妈、孩子是项目干系人,还有吗?”
小白:“没有了,我只能想到这些项目干系人”。
大牛:“其实项目干系人除了使用者,还有项目发起者、出资方、项目研发的负责人、与项目利益相关的人或组织等。不过针对这个基于练习的记账系统,调查项目使用者就完全满足项目要求了”。
大牛把已识别的项目干系人投影到屏幕上。

图 2-13 记账系统项目干系人
大牛:“虽然列出了爸爸、妈妈、孩子三个项目干系人,调查项目需求时可只调研爸爸和妈妈就可以了,主要考虑到项目的主要使用者还是父母,孩子成家后就另外成立家庭了”。
大牛:“调研可以采用走访谈话的方式,准备好提问的问题,并做好记录”。
大牛在黑板上写下了准备调研时提问的内容。
调研提问的问题—
(1)在生活中有哪些支出项目?
(2)收入来源有哪些?
(3)有没有月底对账的要求?
(4)消费时用手机支付还是用现金支付?
(5)网上的消费是否需要记录下来?一般通过那个电商购买?
(6)希望用手机记账还是打开电脑记账?
于是,大牛和小白开始了调研工作,奔波了几天后,通过对调研结果的整理和汇总形成了项目功能需求列表。
记账系统功能需求列表—
(1)能够对支出分类记账
(2)能够对收入分类记账
(3)在淘宝消费时能够自动记账
(4)用支付宝和微信支付时能够自动记账
(5)用手机进行记账
(6)按月形成对账单,可以在手机浏览,
大牛:“小白,家庭记帐系统的功能需求列表已经有了,外部实体也已识别完成,把爸爸和妈妈合并为家庭成员。下一步就是识别事件了”。
小白:“记得在第五课如何识别影响系统的事件中,您提到跟踪针对某一外部实体或参与者而发生的一系列事件通常是很有用的”。
小白:“我就尝试用这个方法来识别一下外部实体影响记账系统的事件。我画了一个识别事件的图,可以看图”。
小白把一个识别事件的图投影到屏幕上。

图 2-14 家庭成员关于记账的一系列事件
小白:“通过跟踪外部实体(家庭成员)有关记账的事物处理过程,识别出手机记账、查看帐目、修改账目、查看月对账单、删除帐目、分享帐目事件”。
大牛:“分享帐目这个事件在系统中不是必须的,不是所有人都喜欢把自己的帐目分享出去”。
大牛:“再就是忽略掉了月底自动形成对账单的临时事件”。
大牛:“功能列表的第3条,要求在淘宝消费时能够自动记帐。在这里,可以把淘宝看作一个外部实体,当消费者在淘宝购买物品并支付物品费用时触发记账事件,这就要求在技术上记账系统能够和淘宝系统对接,需求分析可以暂时不用考虑技术上的问题,这些问题会在设计阶段考虑”。
大牛:“功能列表的第4条,要求用支付宝和微信支付时能够自动记账,也可以把支付宝和微信看作外部实体,当消费者用支付宝和微信支付费用时触发记账事件,这就要求在技术上记账系统能够同支付宝和微信对接”。
小白:“哦,还有这么多事件没有考虑到”。
大牛:“你能识别出外部实体家庭成员的事件已经很不错了”。
大牛把识别出的事件写到了黑板上。
● 家庭成员打开手机记账
● 家庭成员打开手机查看帐目
● 家庭成员打开手机修改账目
● 家庭成员打开手机查看月对账单
● 家庭成员打开手机删除帐目
● 系统月底汇总形成对账单
● 家庭成员使用淘宝购物并支付费用时自动记账
● 家庭成员使用支付宝支付费用时自动记账
● 家庭成员使用微信支付费用时自动记账