软件工程期末题库

📅 创建时间:2026-06-18 10:39

⏳ 最近更新:2026-06-28 10:00


第一章 (简答题)

为什么说软件工程的发展可以在一定程度上解决软件危机?

软件工程是以借鉴传统工程的原则、方法以提高质量、降低成本为目的,指导计算机软件开发

和维护的工程学科,其发展使对软件的特性和软件产品的开发的内在规律认识更加深刻。

简述软件工程的基本原则。

用分阶段的生命周期计划进行严格的管理

坚持进行阶段评审

执行严格的版本控制

采用现代程序设计技术

软将从结果应能清楚审查

开发小组的人员应少而精

承认不断改进软件工程时间的必要性

软件工程的三要素是什么?

过程、方法、工具。

简述软件工程的基本目标。

实现达到要求的软件功能

取得较好的软件性能

开发出高质量的软件

付出较低的开发成本

需要较低的维护费用

能按时完成开发工作,及时交付使用

通常有哪几种软件开发方法?

结构化方法

面向数据结构方法

面向对象方法

形式化方法

什么是开源软件开发方法?

由开源软件项目开发软件或类似原件的过程。

什么是群体化软件开发方法?

以众包和开源软件开发方法为代表的,融合工业化生产和开源软件的开发方式,连互联网开发

人员群体与企业/组织机构的开发团队,通过群体化协同、开放式共享和持续性评估等实现高效的软人

件开发。

ACM/IEEE道德准则包括哪几项原则?

公众。软件开发入员的行为应与公众的利益相一致。

客户和雇主。软件开发人员的行为应符合客户和雇主的最大利益,并与公共利益相一致。

产品。软件开发人员应确保其产品和相关的改进尽可能达到最高的专业标准

判断力。软件开发人员应保持其专业判断力的诚实性和独立性。

管理。软件开发经理和领导应认同并推广软件开发和维护管理的道德方法

职业。软件开发人员应在符合公众利益的情况下,提高其职业的诚信和声誉

同事。软件开发人员应公平对待并支持其同事。

自我。软件开发人员应参与有关其职业规范的终身学习,并应推广职业规范的道德方法。

请对比瀑布模型、快速原型模型、增量模型和螺旋模型。

软件过程是为了开发出软件产品,或者是为了完成软件工程项目而需要完成的有关软件工程的活动,每一项活动又可以分为一系列的工程任务。

  • 增量模型是把待开发的软件系统模块化,将每个模块作为一个增量组件,一个模块接一个模块地进行开发,直到开发完成。增量模型也体现了迭代思想,每增加一个模块,就进行一次迭代,执行一次瀑布模型,所以,增量模型本质上是迭代的。

  • 在开发每个模块时,通常都是采用瀑布模型,从分析、设计、编码和测试这几个阶段进行开发。所以,增量模型中有瀑布模型,即宏观上是增量模型,微观上是瀑布模型。

  • 快速原型的基本思想是快速建立一个能反映客户主要需求的原型系统,在此基础上,之后的每一次迭代都可能会用到瀑布模型。快速原型模型中不但包含了迭代模型的思想,而且包含了瀑布模型的思想。

  • 螺旋模型是瀑布模型和快速原型模型的结合,快速原型模型是原型模型的简化,原型模型又是迭代模型和瀑布模型的组合,这些模型是相互依存、彼此有关的。

螺旋模型每一次顺时针方向旋转,相当于顺时针方向迭代一次,都是走完一次瀑布模型的过程,这就是瀑布模型与螺旋模型之间的关系。

在RUP模型中,核心工作流程包含哪些?

先启、细化、构建、产品化。

当需求不能一次性搞清楚,且系统需求比较复杂时选用哪种开发模型比较适合?

增量模型开发模式

什么是软件过程?

软件过程是为了开发出软件产品,或者是为了完成软件工程项目而需要完成的有关软件工程的

活动,每一项活动又可以分为一系列的工程任务。

与计算机硬件相比,计算机软件有哪些特点?

软件是一种逻辑实体,而不是具体的物理实体,因而他有抽象性。 软件的生产与硬件不同,它没有明显的制造过程。要提高软件的质量,必须在软件开发方面下工夫。 在软件的运行和使用期间,不会出现硬件中所出现的机械磨损、老化问题。然而它存在退化问题,必须要对其进行多次修改与维护,直至其退役。 软件的开发与运行常常受到计算机系统的制约,它对计算机系统有着不同程度的依赖性。如有专门针对 Windows 操作系统的游戏,也有针对 macOS 的游戏。为了解除这种依赖性,软件开发者在软件开发中提出了软件移植的问题。 软件的开发至今尚未完全摆脱人工的开发方式。 软件本身是复杂的。软件的复杂性可能来自它所反映的实际问题的复杂性,也可能来自程序逻辑结构的复杂性。 软件成本相当高。软件的研制工作需要投入大量的、复杂的、高强度的脑力劳动。它的成本是比较高的。 相当多的软件工作涉及社会因素。许多软件的开发和运行涉及机构、体制及管理方式等因素,这些因素直接决定项目的成败。

第三章 可行性研究与项目开发计划

第三章,可行性研究,成本效率分析,计算题,课后习题,课堂例题,几年收回成本,赚了多少

1

题目

假设开发某个计算机应用系统的投资额为3000元,该计算机应用系统投人使用后,每

年可以节约1000元,5年内节约5000元。3000元是现在投资的钱,假定年利率为12%。请计算该系统的纯收入和投资回收期。

答案

详解见:\[计算计算机应用系统的纯收入与投资回收期(考虑资金时间价值)]

  • 该系统的纯收入约为604.78元(未来收益的现值总和超过初始投资的部分)。
  • 投资回收期约为3.94年(约3年零11个月,因0.94年≈11个月)。

第四章

1

题目

某学校图书管理系统有以下功能。

①借书:输人读者借书证号码。系统首先检查借书证是否有效,若有效,对于第一次借书的读者,在借书文件上建立档案;对非初次借书的读者,查阅借书文件,检查该读者所借图书是否超过10本,若已达10本则拒借,未达10本则办理借书(检查该读者目录并将借书情况录人借书文件)。

②还书:从借书文件中读出与读者有关的记录,查阅所借日期,如果超期(3个月)做罚款处理,否则,修改库存目录与借书文件。

③查询:可通过借书文件、库存目录文件查询读者情况、图书借阅情况及库存情况,打印

各种统计表。

用结构化分析方法画出0层数据流图、1层数据流图,并写出数据字典。(注:假设这里的读者都只是学生)

答案

① 顶层图:对于图书管理系统,外部用户有读者和管理工作人员。读者分为第一次借书的读者和多次借书的读者,第一次借书的读者需要在借书文件上建立档案才能借书。工作人员需要对借书文件、库存数目文件进行修改,也能查阅读者情况、图书借阅情况、库存情况。系统顶层图如图C-1所示。

②查询1层图:工作人员通过借书文件查询读者情况。通过库存目录文件查询库存情况。通过查询借书文件和库存目录文件查询图书借阅情况。最后打印统计表。查询1层图如图C-2所示。

③ 借书1层图:读者将借书证输入借书台,借书台在系统中查询借书证是否有效,若有效,通过借书文件查看借书次数。若第一次借书,则在借书文件中建立档案,办理借书,并将借书信息登入借书文件,检查读者目录;若为多次借书,则从借书文件中检查所借图书是否超过10本,若超过10本,拒借,并将信息反馈给读者,否则办理借书,并将借书信息登入借书文件,检查读者目录。借书1层图如图C-3所示。

④还书1层图:工作人员通过借书文件读取读者记录。通过读者记录查询所借日期。如果借书超期,反馈读者罚款信息并收取罚款,并修改库存目录与借书文件。还书1层图如图C-4所示。

⑤ 数据字典

A. 顶层图数据字典

首次借书读者 = 读者 + 借书证

多次借书读者 = 读者 + 借书证

借书证 = 姓名 + 学号

读者 = 姓名 + 学号 + 班号

工作人员 = 姓名 + 工作人员代号

姓名 = 2{汉字}4

学号 = 8{数字}8

班号 = 4{数字}4

工作人员代号 = 4{数字}4

读者情况 = 姓名 + 学号

图书借阅情况 = 图书名 + 图书编号 + 读者 + 库存数量

库存情况 = 图书名 + 图书编号 + 库存数量

图书名 = {汉字}

图书编号 = 6{数字}6

库存数量 = 1{数字}8

B. 借书1层图

借书证 = 姓名 + 学号

读者 = 姓名 + 学号 + 班号

借书次数 = {数字}

读者信息 = 姓名 + 学号

借书情况 = 读者 + 图书名 + 图书编号 + 所借日期

读者目录 = 读者 + 图书名 + 图书编号 + 所借日期

姓名 = 2{汉字}4

学号 = 8{数字}8

班号 = 4{数字}4

图书名 = {汉字}

图书编号 = 6{数字}6

所借日期 = 8{数字}8

C. 还书1层图

工作人员 = 姓名 + 工作人员代号

读者记录 = 读者 + 图书名 + 图书编号 + 所借日期

读者 = 姓名 + 学号 + 班号

罚款信息 = 读者 + 图书名 + 图书编号 + 罚金数额

库存目录 = 图书名 + 图书编号 + 库存数量

借书文件 = 读者 + 图书名 + 图书编号 + 所借日期

姓名 = 2{汉字}4

学号 = 8{数字}8

班号 = 4{数字}4

工作人员代号 = 4{数字}4

图书名 = {汉字}

图书编号 = 6{数字}6

所借日期 = 8{数字}8

罚金数额 = 1{数字}2

库存数量 = 1{数字}8

D. 查询1层图

工作人员 = 姓名 + 工作人员代号

库存目录 = 图书名 + 图书编号 + 库存数量

借书文件 = 读者 + 图书名 + 图书编号 + 所借日期

统计表 = 库存目录 + 读者记录

读者记录 = 读者 + 图书名 + 图书编号 + 所借日期

姓名 = 2{汉字}4

学号 = 8{数字}8

班号 = 4{数字}4

工作人员代号 = 4{数字}4

图书名 = {汉字}

图书编号 = 6{数字}6

所借日期 = 8{数字}8

库存数量 = 1{数字}8

2

根据以下描述画出相应的状态转换图。到ATM机前插人磁卡后输人密码,如果密码不正确则系统会要求再次输人密码,如3次输人不正确则退出服务;如果密码正确,系统会提示选择服务类型,如选择存款则进行存款操作,存款完后可选择继续服务,也可以选择退出服务;如选择取款则进行取款操作,取款完后可选择继续服务,也可以选择退出服务。

3

某企业集团有若干个工厂,每个工厂生产多种产品,且每一种产品可以在多个工厂生产,每个工厂按照固定的计划数量生产产品,计划数量不低于300;每个工厂聘用多名职工,且每名职工只能在一个工厂工作,工厂聘用职工有聘期和工资。工厂的属性有工厂编号、厂名、地址,产品的属性有产品编号、产品名、规格,职工的属性有职工号、姓名、技术等级。请画出E-R图。

第五章

1

题目

请将图5-44("查询图书"的事务中心)映射成结构图。

答案

2

请将图5-45(二维表格)用Jackson图来表示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3

如果要求两个正整数的最小公倍数,请用程序流程图、N-S图和PAD分别表示出求解该

问题的算法。

第六章(简答题)

在选择编程语言时,通常要考虑哪些因素?

  • 待开发系统的应用领域,即项目的应用范围。不同的应用领域一般需要不同的语言。
  • 用户的要求
  • 软件开发人员的喜好和能力
  • 系统的可移植性要求
  • 算法和数据结构的复杂性
  • 平台支持

简述编程风格的重要性。要形成良好的编程风格可以从哪些方面做起?

  • 阅读程序很重要,一致的编码风格将大量的减少人们阅读程序的时间
  • 良好的编码风格有助于编写出可靠又容易维护的程序
  • 风格很大程度上决定着编码的质量

良好的编码习惯可以通过简洁的命名变量,编写可预测、可重用的代码,进行单元测试等方式来养成。

编程语言主要有哪几类?总结每类语言的优缺点。

  • 机器语言:计算机可直接识别运行的二进制代码,执行速度快,占用资源少,但可读性不强,编程复杂;
  • 汇编语言:用于电子计算机,微处理器,微控制器或其他编程设备的低级语言,也称为符号语言。目标代码简短,占用内存少,执行速度快,但缺乏可移植性,目标编程复杂;
  • 高级编程语言:与机器语言和汇编语言相比,高级语言具有很强的可读性和可移植性。一般用事先编译好的机器语言程序编译成机器指令表示的目标程序。
  • 超高级语言:第四代语言是超高级语言,它是对数据处理和过程描述的更高级的抽象,一般由特定的知识库和方法库支持。

对标识符命名时,要注意哪些原则?

以 C 语言为例,规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。

通常好的命名习惯是长度最长 32 个字符,最好不要超过 8 个字符。

命名原则:

  • 见名知意,即选有含意的单词或缩写作标识符。
  • 不宜混淆。
  • 对于组合词变量名,通常第一个单词小写,后面每个单词第一个字母大写或用下划线分隔。

为什么要对源程序进行注释?

  • 让代码更容易理解。注释可以解释代码的作用,描述变量、函数等的用途,这样其他人阅读代码时就可以更快地理解代码的意图。
  • 方便代码的维护和升级。注释可以记录代码的修改历史,方便后续的维护和升级。
  • 避免代码的重复编写。通过注释,可以让其他程序员快速了解代码的功能和使用方法,避免重复编写代码。

为什么要进行代码复用?

软件重用是降低软件成本、提高软件效率和软件质量的非常合理、有效的途径。

简述分析和评价代码的质量时所要考虑的因素。

分析和评价代码的质量主要考虑可读性、可维护性、可扩展性、灵活性、简洁性、可复用性和可测试性。

第七章

第八章(简答题)

为什么要进行软件维护?软件维护的作用有哪些?

软件维护是指在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程。

作用:

  • 改正性维护:改正软件中潜伏的错误。
  • 适应性维护:当外部环境和数据环境改变时,为使软件适应这种变化而去修改软件。
  • 完善性维护:为了满足用户新功能与性能需求而修改或再开发软件,以扩充软件功能、增强软件性能、改进加工效率、提高软件的可维护性。
  • 预防性维护:为方便以后的维护而进行的维护。

软件维护的副作用有哪3类?

  • 修改编码:使编码更加混乱,程序结构更不清晰,可读性更差,而且有连锁反应。
  • 修改数据结构:数据结构是系统的骨架,修改数据结构是对系统伤筋动骨的大手术,在数据冗余与数据不一致方面,可能顾此失彼。
  • 修改文档:对非结构化维护不适应,对结构化维护要严防程序与文档的不匹配。

什么是软件部署?

简单地说,软件部署就是将开发的软件拿给用户去用,给用户配置环境(包括硬件、软件的安装、环境变量的设置等),让开发的软件能给用户正常使用的过程。

简述软件运维的过程。

自动化运维是指通过运维工具来解决生产中大量、繁杂的事务,监控生产环境变化、自动响应并处置事件等问题,从而提升运维效率、降低重大问题发生的概率、更全面的保障生产环境。

什么是重构?

软件重构是对源代码和(或)数据进行修改,使其易于理解或维护,以适应将来的变更。

什么是正向工程?

正向工程也称为改造,用从现存软件的设计恢复中得到的信息去重构现存系统,以改善其整体质量。

什么是逆向工程?

软件的逆向工程通过对程序的分析,导出更高抽象层次的表示,如从现存的程序中抽取数据、体系结构、过程的设计信息等,是一个设计恢复过程。

PPT习题

1

题目

某银行储蓄工作流程:储户填写的存款单或取款单,由业务员输入系统。若存款,则记录存款人的姓名、住址、电话号码、身份证号码、存款类型、存款日期、到期日期、利率及密码(可选)等存款信息,根据存款利息标准,打印存款单给储户:若取款,系统首先核对储户密码,若密码正确或存款时未留密码,则系统根据取款信息,计算利息并打印包含利息清单的取款单给储户。银行则包含名称、地址和电话等信息。要求:请用数据流图说明某银行的储蓄工作流程,并给出该流程涉及到的实体关系的E-R图。

答案

2

题目

某程序的流程图:

要求:

(1)计算它的环路复杂性。

(2)为了完成基本路径测试,求它的一组独立的路径。

详细解答见:\[环路复杂性与基本路径测试]

答案

本题中共 6 个 判断节点,因此:

V(G)=6+1=7V(G) = 6 + 1 = \boxed{7}V(G)=6+1=7

一组7条独立路径:

编号 经过的判断(T/F) 路径
1 全 False 0-2-4-6-8-10-12-19
2 D1=T,其余F 0-1-13-19
3 D2=T,其余F 0-2-3-14-19
4 D3=T,其余F 0-2-4-5-15-19
5 D4=T,其余F 0-2-4-6-16-19
6 D5=T,其余F 0-2-4-6-8-9-17-19
7 D6=T,其余F 0-2-4-6-8-10-11-18-19

3

题目

设计下列伪码程序的语句覆盖和路径覆盖的测试用例:

复制代码
Start
Input(x,y,z)
If(x>0) and (y>0)   
Then m=x+y   
Else n=x-y 
End if 
If (z>x) or (z<y)   
Then m=z-a   
Else n=z+a 
End if 
Print(m,n) 
Stop 

\[伪码程序测试用例设计:语句覆盖与路径覆盖\]

答案

语句覆盖测试用例:

测试用例 输入 (x, y, z) 覆盖的语句 说明
用例1 x=1, y=3, z=2 m=x+y(C1-T)、n=z+a(C2-F) 第一个if走T分支,第二个if走F分支
用例2 x=-1, y=2, z=0 n=x-y(C1-F)、m=z-a(C2-T) 第一个if走F分支,第二个if走T分支

以上两个用例共同覆盖了所有可执行语句(InputPrint、四个赋值语句各执行一次)。

路径覆盖测试用例:

路径 输入 (x, y, z) 条件验证
T→T x=1, y=2, z=0 C1: 1>0且2>0 → T;C2: 0<2 → T
T→F x=1, y=3, z=2 C1: 1>0且3>0 → T;C2: 2≥1且2≤3 → F
F→T x=-1, y=2, z=0 C1: -1≤0 → F;C2: 0>-1 → T
F→F x=-1, y=2, z=1 C1: -1≤0 → F;C2: 1≥-1且1≤2 → F

四个用例分别覆盖了全部四条可能的执行路径(第一个if分支×第二个if分支的组合)。

4 数据字典类型题

题目

某旅馆的电话服务如下:可以拨分机号或外线号码。分机号是从8000至8999。外线号码先拨0,然后是市话号码或长话号码。长话号码是以区号和市话号码组成。区号是从100到999中任意的数字串。市话号码是以局号和分局号组成。局号可以是866,766,566,466中任意一个号码。分局号是任意长度为4的数字串。

要求:写出在数据字典中,电话号码的数据条目的定义。

答案

详解见:\[软件工程数据字典------电话号码的数据条目定义]

复制代码
电话号码 = 分机号 | 外线号码
分机号   = 8000 ... 8999
外线号码 = 0 + [ 市话号码 | 长话号码 ]
长话号码 = 区号 + 市话号码
区号     = 100 ... 999
市话号码 = 局号 + 分局号
局号     = [ 866 | 766 | 566 | 466 ]
分局号   = 4 { 数字 } 4

5

题目

某航空公司规定,乘客可以免费托运重量不超过30公斤的行李。当行李重量超过30公斤时,对头等舱的国内乘客超重部分每公斤收费4元,对其他舱的国内乘客超重部分每公斤收费6元,对外国乘客超重部分每公斤收费比国内乘客多一倍。

(1)绘出原始决策表。

(2)绘出优化后的决策树

答案

详解见:\[决策表与决策树:航空公司行李收费]

6 n的阶乘流程图

题目

计算n的阶乘,n=5。

(1)请画出程序流程图

(2)请画出该算法的N-S图

(3)请用PAD图来表示该算法

7 图书管理系统类图

题目

图书管理系统功能性需求说明如下:

①图书管理系统能够为一定数量的借阅者提供服务。每个借阅者能够拥有唯一标识其存在的编号。图书馆向每一个借阅者发放图书证,其中包含每一个借阅者的编号和个人信息。提供的服务包括:提供查询图书信息、查询个人信息服务和预定图书服务等。

②当借阅者需要借阅图书、归还书籍时需要通过图书管理员进行,即借阅者不直接与系统交互,而是通过图书管理员充当借阅者的代理和系统交互。

③系统管理员主要负责系统的管理维护工作,包括对图书、书目、借阅者的添加、删除和修改。并且能够查询借阅者、图书和图书管理员的信息。

④可以通过图书的名称或图书的ISBN/ISSN号对图书进行查找。

回答下面问题:

(1)该系统中有哪些参与者?

(2)确定该系统中的类,找出类之间的关系并画出类图。

答案

(1)该系统中的参与者:借阅者,图书管理员,系统管理员

(2)确定该系统中的类有:用户类、用户角色类、图书类、预定类、借阅类、书目类

8 图书管理系统时序图

题目

图书管理系统功能性需求说明如下:

① 图书管理系统能够为一定数量的借阅者提供服务。每个借阅者能够拥有唯一标识其存在的编号。图书馆向每一个借阅者发放图书证,其中包含每一个借阅者的编号和个人信息。提供的服务包括:提供查询图书信息、查询个人信息服务和预定图书服务等。

② 当借阅者需要借阅图书、归还书籍时需要通过图书管理员进行,即借阅者不直接与系统交互,而是通过图书管理员充当借阅者的代理和系统交互。

③ 系统管理员主要负责系统的管理维护工作,包括对图书、数目、借阅者的添加、删除和修改。并且能够查询借阅者、图书和图书管理员的信息。

④ 可以通过图书的名称或图书的ISBN/ISSN号对图书进行查找。

回答下面问题:

(1)该系统中有哪些参与者?

(2)画出系统"借阅者预定图书"的时序图。

答案

(1)该系统中的参与者:借阅者,图书管理员,系统管理员

(2)时序图:"借阅者预定图书"的时序图如下

绘图要点

程序流程图

PAD图

N-S图

类图

状态转换图

数据流图

符号规范

必须牢记教材第60页的软件工程图形符号。其中最关键的是数据交换(数据处理)的表示:

  • 若采用Yourdon/DeMarco方法,变换用圆圈(泡泡) 表示
  • 若采用Gane/Sarson方法,则用圆角矩形表示
  • 外部实体(数据的源点或终点)用矩形表示,表示数据的源点或终点,它是系统之外的实体,可以是人、物或者其他系统。
  • 数据流用带箭头的线段表示,表示数据的流动方向。数据可以从加工流向加工,从加工流向文件,从文件流向加工。加工是对数据进行处理的单元,接收一定的数据输人,然后对其进行处理,再进行输出。数据流和数据存储是不同状态的数据。数据流是流动状态的数据,而数据存储是指处于静止状态的数据。
  • 数据变换:表示对数据进行加工或处理,例如对数据的算法分析和科学计算。
  • 数据存储用开口矩形或两条平行线表示,是指输人或输出文件。这些文件可以是计算机系统中的外部或者内部文件,也可以是表、账单等。但它不仅可以是文件,还可以是数据项或用来组织数据的中间数据。应根据题目要求选择正确的形状,形状不准则视为错误。

顶层图与分层

顶层数据流图将整个系统抽象为一个处理泡泡,标明所有外部实体及其与系统的数据流,结构基本固定。底层图由顶层图逐步细分得到。

教材第73页习题要求绘制一层数据流图(顶层之下的第一层)。原答案直接分解为查询、借书、还书三个处理。建议参考第61页考务系统实例------先绘制一个代表"图书管理系统"的总泡泡,再将其分解为查询、借书、还书三个子功能模块,使层次结构更加完整清晰。理解原理后,可按答案掌握具体的数据流向。

可以对"登记报名表"和"统计成绩"分别细化,得到两张该系统2层数据流图,如

识别变换模块的关键原则

识别处理(变换模块)的核心依据是动宾结构

  • 主语通常是外部实体或参与者,即为动作的发出者
  • 动词或动词短语构成变换模块(功能/加工处理)
  • 名词对应数据存储
  • 图中绝对不能缺失动词,只有动作才能作为处理

正确示例:"借书"中的"检查"、"查阅记录"、"超期罚款"等均属动词短语,可作为处理。错误示例:"个人中心"等纯名词结构不具备主谓宾关系,不能作为变换模块。

考试时需根据题干明确要画的是借书、还书还是查询部分,并弄清所处的层次。

ER图

E-R图以实体、关系和属性3个基本要素概括数据的基本结构。

  • 实体就是现实世界中的事物,多用矩形框来表示,框内含有相应的实体名称。
  • 属性多用椭圆形表示,并用无向边与相应的实体联系起来,表示该属性归某实体所有。
  • 实体是由若干个属性组成的,每个属性都代表了实体的某些特征。

关系用菱形表示,并用无向边分别与有关实体连接起来,以此描述实体之间的关系。实体之间存在着3种关系类型,分别是一对一、一对多、多对多。

用例图

绘制依据与规范

用例图依据教材第202页相关内容。参与者(如管理员、读者)必须用标准火柴人符号表示,不得以其他图标替代。

用例提取原则

从题干中找出所有动词短语,形成主谓宾结构:

  • 主语(动作发出者)即为参与者
  • 中间动词短语对应用例(功能模块)

用例是一个完整的功能模块,而非单一简单操作。例如"建立书目"可能包含分类、命名、设定属性等一系列操作,必须聚合为一个用例,不能将单个操作直接当成用例。

正确示例:"管理员建立图书目录"、"记录借出日期"、"办理图书出入库"。错误示例:"商户个人资料"、"管理员首页"、"通知公告"等纯名词或非动词结构均不可作为用例。

用例之间的关系

用例之间的关系包括"包含"(include)"扩展"(extend)和"泛化"(generalization)3种。

根据3种用例关系,用例之间连线也有3种,"包含"关系使用带箭头的虚线表示,虚线上标有<<include>>方向由基用例指向包含用例;"扩展"关系也使用带箭头的虚线表示,虚线上标有<<extend>>,方向由扩展用例指向基用例;"泛化"关系使用带空心三角形箭头的实线表示,方向由子用例指向父用例。

扩展关系

在用例的执行过程中,可能出现一些异常行为,也可能会在不同的分支行为中选择执行,这时可将异常行为与可选分支抽象成一个单独的扩展用例,这样扩展用例与基用例之间就构成了扩展关系。一个用例可以有多个扩展用例。例如,在图9-2中,用例"超期罚款"与"还书"之间就是扩展关系。

泛化关系

用例之间的泛化关系描述用例的一般与特殊关系,不同的子用例代表了父用例的不同实现。用例之间的泛化关系往往令人困惑。由于在用例图中很难显式地表达子用例到底"继承"了父用例的哪些部分,并且子用例继承父用例的动作序列很有可能会导致高耦合的产生,因此本书建议读者尽量不使用用例的泛化关系,更不应该使用多层的泛化。

参与者之间可以存在泛化关系,类似的参与者可以组成一个层级结构。在"机票预定系统"的例子中,"用户"是"游客"和"注册用户"的泛化,"游客"有"注册"的用例,"注册用户"有"登录"的用例,而"用户"不仅包含"游客"和"注册用户"的全部用例,还具有自己特有的"查询航班"的用例(注:用例的名称可放在用例的椭圆的内部,也可放在椭圆的外部)

图书管理员指向"信息查询"的箭头是闭合的实心箭头,说明"信息查询"是一个需要系统返回结果的交互过程,而"预约图书"等更侧重于读者发起的动作指令,所以是开放箭头。

顺序图

基本列结构

顺序图左侧第一列为参与者 ,随后依次为边界类控制类实体类。可根据需要扩展,如增加设备层、数据层或多用户参与列,但任何扩展都必须符合基本规范。

参与者表示

参与者可以是人,也可以是外部系统。在用例图中必须使用火柴人表示;在顺序图中,通常用生命线符号(矩形加虚线)表示,并标注参与者名称。

各类的规范

边界类、控制类、实体类的画法遵循UML标准:顶部为矩形内含类名,下方延伸生命线。边界类负责用户界面或系统接口交互,控制类负责业务流程协调,实体类负责持久化数据。考试按基本结构表达,交互顺序清晰合理即可,不必苛求与标准答案完全一致。