type
status
date
slug
summary
tags
category
icon
password
前言:
软件工程,备考题库
一、基本概念题(共 10 分,每小题 2 分)
1. 什么是软件危机?
答: 软件危机是指在软件开发、维护过程中所存在的一系列严重、或致命的问题。
2. 什么是软件工程?
答: 共有 5 个答案,回答其中之一都算正确。
① 软件工程是开发、运行、维护和修复软件的系统方法。
② 建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法。
③ 所谓软件工程,提倡的是一种软件开发中的系统思想的具体实现,是一门科学,也被称为是软件产业中 的“软”科学。
④ IEEE:软件工程是开发、运行、维护和修复软件的系统方法,是一门工程学科,即采用工程的概念、原理、技术和方法来开发和维护软件。
⑤ 软件工程是把系统的、 有序的、 可量化的方法应用到软件的开发、 运营、和维护上的过程。
3. 什么是模块化?
答: 模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,既相对独立,又相互联系,把这些模块集成起来构成一个整体,可以完成软件系统所要求的功能。
4. 程序内部文档主要包括哪三部分?
答:
- 代码注释:解释逻辑(如
// 校验用户权限
)。
- 标识符命名:变量/函数名自描述(如
calculateTax()
)。
- 技术文档:API说明(如Javadoc)。
5. 什么是测试用例?
答: 从测试用例本身构成的角度来看,测试用例是测试执行的最小实体,是为特定的目的而设计的一组测 试输入、执行条件和预期结果。
6. 什么是统一过程?
答: 统一过程是一个软件开发过程——是一个将用户需求转化为软件系统所需的活动的集合。
7. 用例关系有哪三种?
答: 泛化、扩展、包含。
8. 什么是构架?
答: 构架(Architecture)是一个系统的组织结构,包括:系统分解的各个组成部分、各部分相互之间的连接 性、交互机制、以及指导系统设计的相关规则。
9. 什么是设计模式?
答: 针对常见问题的可重用解决方案模板(如单例模式确保全局唯一实例)。
10. 什么是软件实现?
答:在编码实现阶段,开发者根据设计模型中对数据结构、算法分析和模块实现等方面的设计要求,编写 具体的程序,分别实现各模块的功能,从而实现对目标系统的功能、性能、接口、界面等方面的要求。
11. 什么是软件工程环境?
答: 软件工程环境,是包括方法、工具和管理等多种技术的综合系统。其设计目标是简化软件开发过程, 提高软件开发质量和效率。
12. 什么是软件测试?
答:通过执行程序发现缺陷,验证功能/性能是否达标。
13. 静态结构的类图中,类与类之间的关系有哪 6 种关系?
答:依赖、关联、聚合、组合、泛化、实现。
14. 什么是面向对象?
答:
- 定义:以对象为核心,通过封装、继承、多态组织代码的编程范式。
- 基本概念:
- 类(模板,如
Animal
类)与对象(实例,如Dog
对象)。 - 封装(隐藏实现,如
private
属性+public
方法)。 - 继承(复用代码,如
Car extends Vehicle
)。 - 多态(同一接口不同行为,如
Animal.sound()
调用Dog
或Cat
的实现)。
15. 什么是用例图?用例与用例之间的关系有哪三种?
答:
第 1 问:用例图是由参与者,用例以及它们之间的关系构成的用于描述系统功能的图。
或:描述一组用例、参与者以及它们之间的相互关系。
第 2 问:扩展、包含、泛化。
<ins/>
16. 软件
答: 是能够完成预定功能和性能,并对相应数据进行加工的程序和描述程序及其操作的文档。
或回答: 程序+数据+文档+服务。
17. 软件可靠性
答:在规定的条件下和规定的时间间隔内,软件实现其规定功能的概率。
或:软件按照设计的要求,在规定时间和条件下达到不出故障,持续运行的要求的质量特性。
18. 软件配置
答: 由计算机程序(源代码和可执行程序)、描述计算机程序的文档、数据 3 个软件配置项组成的内容。
19. 类
答: 具有相同或相似性质的对象的抽象就是类。
20. 内聚性
答: 是模块独立性的衡量标准之一,它是指模块的功能强度的度量,即一个模块内部各个元素 彼此结合的紧密程度的度量。
21. 集成测试
答: 集成测试也称组装测试或联合测试。是指在单元测试的基础上,将所有模块按照设计要求组装成一 个完整的系统进行的测试。组装模块的方式有两种:渐增式测试和非渐增式测试。
22. 重用
答: 重用也叫再用或复用,是指同一事务不做修改或稍加修改就多次重复使用。
23. 多态性
答: 指相同的操作或函数、过程可作用于多种类型的对象上并获得不同结果。
24. CASE 的英文全称是?中文含义是?
答:英文全称是:Computer Aided Software Engineering ,中文含义是:计算机辅助软件工程。
25. 软件可用性?
答:是指在给定的时间点,按照规格说明书的规定,程序成功运行的概率。
26. 回归测试?
答:是指重新执行已经做过测试的某个程序,以保证所做的程序变化没有带来非预期的副作用。
27. RUP的中文含义
答:是由 IBM Rational提出的软件开发的统一过程,它是一种基于面向对象软件工程的软件过程模型。
28. UML的中文含义和英文全称
答:中文含义:统一建模语言;英文全称:Unified Modeling Language。
29. 单一职责原则
答:就一个类而言,应该仅有一个引起它变化的原因,即内聚性。
或:一个类只完成一个功能,或只有一个职责。
30. 持久性
答:是对象怎样永久被保存的问题。
<ins/>
二、简答题(共 24 分,每小题 3 分)
1. 软件工程师应该具备哪 4 项技能?请详细解释其含义。解释什么是“软件”?
答:
技能 | 含义解释 |
技术能力 | 掌握编程语言、算法、设计模式 |
问题解决 | 分析需求并设计解决方案 |
团队协作 | 与成员高效沟通(如代码评审) |
持续学习 | 跟进新技术(如云原生/AI) |
软件定义:计算机程序+数据+文档的集合体。
2. 简述文档的重要性?
答:
- 知识传递:避免人员离职导致项目停滞。
- 维护依据:快速定位代码逻辑(如API文档)。
- 合规要求:满足行业标准(如ISO 26262)。
3. 采用面向数据流建模时,对DFD的精化要精化到什么程度才停止精化工作?
答:对DFD的精化可以精化到每个加工处理过程只执行一个单一功能为止。
4. 请根据下图,来描述界面对象之间的关联的语义联系

答: 一个工具条包含多个按钮,而每个按钮对应一个对话框。
5. 在面向对象的软件集成中,有哪几种集成方式?在哪一种方式下可以较早的发现设计错误?
答:
第 1 问:自顶向下集成、自底向上集成、三明治集成。
第 2 问:自底向上先测底层模块(如数据库访问),提前暴露接口设计缺陷。
6. 月收入<=800 元者免税,现用输入数 800 元和 801 元测试程序,请问这是采用黑盒测试法中的哪种方法?请解释其理由?
答:
第 1 问:是边界值分析方法。
第 2 问:题目中输入的 800 元是采用的刚好等于边界的数据,而 801 选择的是大于边界的数据,因此采用 的测试方法是黑盒测试法中的边界值分析方法。
7. 若有一个计算类型的程序,它的输入量只有一个X,其范围是[-2.0,2.0],现从输入的角度考虑一组 测试用例:-2.001,-2.0,2.0,2.001。请问这是采用黑盒测试法中的哪种方法?请解释其理由?
答:
- 方法:边界值分析法。
- 理由:测试数据覆盖边界(-2.0/2.0)及越界值(-2.001/2.001)。
8. 现有一个计算类型的程序,它的输入只有一个 Y,其范围是-50≤Y≤50。现从输入的角度考虑设计了一 组测试用例:-100,100,0。请问设计这组测试用例的方法是黑盒测试法中的什么方法?并解释其理由?
答:
第 1 问:是等价类划分方法。
第 2 问:在给定的一组测试用例-100、100、0 中,数据-100 因为小于 Y 的最小值-50,故是无效数据;数 据 100 因为大于Y的最大值,故也是无效数据;数据 0 应为介于-50 到 50 之间,故数据 0 则是有效数据。 因此该方法是黑盒测试法中的等价类划分方法。
9. 软件测试时应该追求的目标是什么?软件测试有哪 5 种测试策略?
答:
第 1 问:以最少的测试数据、时间和人力,最大可能的发现更多的错误。
第 2 问:
- 单元测试
- 集成测试
- 系统测试
- 回归测试
- 验收测试
10. UML中类与类之间的关系主要包含哪 6 种关系?请标出下列每个图示是哪种关系?
答:分别是:依赖、泛化、关联、实现、聚合、组合。

11. 在面向对象方法中,设计子系统对外必须提供接口。请问,接口中的操作主要来源于子系统内的什么 设计元素?
答: 接口的操作与子系统中某个设计类的方法有对应关系,即操作来自于子系统中的某个设计类的操作。
12. 在无法做到穷尽测试时,你如何选择你的测试用例?
答:
- 高风险优先:核心功能(如支付模块)。
- 边界值:输入域的极值(如年龄=0/150)。
- 错误推测:基于经验测易错点(如空指针)。
13. RUP的核心思想是什么? RUP“4+1”视图指的是哪些视图?
答:
- 用例(use case)驱动、以构架为中心、迭代(iteration)和增量的开发过程。
- “4+1”视图的“4”指的是逻辑视图、进程视图、实现视图和部署视图,“1”指的是“用例视图”。
14. 软件的维护一般分为哪几类?
答:
- 纠正性:修复缺陷(如登录BUG)。
- 适应性:适配新环境(如操作系统升级)。
- 完善性:优化性能(如数据库索引调整)。
- 预防性:减少未来风险(如代码重构)。
15. 映射数据流到软件结构时,对高层和中低层模块的设计应分别采用什么样的设计策略?
答:对高层模块采用以事务为中心的设计策略,对低层模块采用以变换为中心的设计策略。
<ins/>
16. 在进行包的设计中,有一条原则是“避免循环依赖”,如果设计时出现循环依赖,会有什么现象发生?
答: 若出现循环依赖则使得任何一个包都不能独立的重用,修改任何一个包都会引起所有包的变化。
17. 为什么需要构架?
答:
- 复杂度控制:分解模块(如分层架构)。
- 变更隔离:替换数据库不影响业务层。
- 质量保障:通过设计满足性能/安全。
18. 软件的表现形式有哪两种?并对其分别进行解释其含义。
答:
第 1 问:软件表现为有形部分和无形部分。
第 2 问:软件的有形部分:是软件的各种具体表现形式,包括软件文档、程序源码、可执行文件、用户界面、输出报表等。软件的无形部分:是软件的内部逻辑,是软件本身所包含的设计思想——具有抽象性。
19. 实体类建模主要做什么工作?对实体类建模可采用UML建模语言的什么图来表示?并给出该图的图形符号表示?
答:
第 1 问:确定实体类、属性、实体类之间的联系和交互行为,并画出类图来表示这些信息。
第 2 问:对实体类建模可采用UML类图来表示。
第 3 问:

20. 用例实现指的是什么?
答:用例实现即用交互图(顺序图、通信图)来实现参与某用例的对象间的交互和协作建模——即每个用例的每个事件流(场景)都需要建立一个顺序图,每个用例都需要建立一个与之对应的类图。
21. 常用的需求分析其他图形工具有哪些?
答:常用的需求分析其他图形工具有:层次方框图 ,Warnier 图 IPO 图 ,IPO 表,状态转换(变迁)图等。
22. 衡量软件结构好坏的指标有哪几种?
答:衡量软件结构好坏的指标有: 深度,宽度,扇出数,扇入数。
23. E-R图中的“联系”主要有哪几种方式?请分别针对每一种方式进行举例说明。
答:主要有如下三种方式:
(1)一对一联系:如:班主任和班级
(2)一对多联系:如:教师与课程
(3)多对多联系:如:学生与课程
24. 需求分析的任务是什么?
答:软件系统的需求分为用户需求和系统需求两类。软件需求阶段的任务就是要将客户等提出的用户需求转换为系统需求。
25. 面向对象方法中,设计类间关系时为什么要尽量少用“继承”关系?
答:因为继承关系限制了设计类的灵活性——耦合程度高,并最终限制了可复用性。因此,设计时要多用聚合和组合,而少用继承。
26. 一个完整的软件生命周期主要包含哪三个阶段?
答:主要包括软件定义、开发和运行三个阶段,每个阶段又可进—步划分成若干个子阶段。
27. 系统流程图与程序流程图有什么区别?
答: 系统流程图表达的是信息在系统中各个部件之间流动的情况;程序流程图表达的是对信息进行加工处理的控制过程。
28. 软件工程的目的是为了什么?
答: 高效、低成本生产高质量、可维护的软件。
29. 黑盒测试、白盒测试分别主要采用的技术有哪些?
答: 白盒测试:逻辑覆盖、基本路径测试等,主要用于软件验证。
黑盒测试:等价类划分、边界值分析、错误推测法、状态测试法等;注重测试软件的功能性需求,而不是内部逻辑结构。
30. 什么是软件调试?软件调试的目的是什么?常用的调试技术有哪些?
答:
- 定义:定位并修复代码中的缺陷。
- 目的:确保程序行为符合预期。
- 调试技术:
- 断点调试(IDE工具)
- 日志追踪(如
log.debug()
) - 代码审查(人工检查)
<ins/>
31. 顺序图和通信图有什么区别?提示:可从两者的概念定义上加以区分。
答:顺序图强调多个对象按时间顺序的交互图。而通信图强调两个对象间协作的交互图,侧重说明哪两个对象之间有消息传递。
32. 包的设计原则是什么?
答:避免循环依赖。避免分支依赖。
33. 用例是干什么用的?
答:用例除了用于捕获系统的需求外,还能驱动系统设计、实现和测试的进行。
34. 设计子系统时,为什么要遵循面向接口编程的思想?
答:采用大量的接口来解耦子系统与外部的耦合,才可以保证子系统的独立性和可替换性,从而提高系统的稳定性。
35. 系统设计包括哪两个阶段?总体设计的主要任务是什么?
答:
第 1 问:
结构设计:确定程序由哪些模块组成,以及这些模块之间的关系;
过程设计:确定每个模块的处理过程。
第 2 问:总体设计的主要任务是:设计软件的结构——也即确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系(如何组成?如何调用?)
36. 人机交互界面设计时须遵守哪 3 个黄金规则?
答:
- 用户控制:允许撤销操作(如返回按钮)。
- 一致性:界面风格统一(如全平台相同图标)。
- 减少记忆:直观提示(如输入框占位符)。
37. 如何确定边界类?如何确定控制类?
答:边界类:在用例模型中,每一对“参与者/用例”之间可定义一个边界类;
控制类:在用例模型中,通常,每个用例至少定义一个控制类,业务复杂的可能要分解为多个控制类。
38. 进行分包时,包与包之间的关系只能是“依赖关系”。请问,定义依赖关系的目标是什么?
答:定义依赖关系的目标是确定相对独立、易于维护、低耦合和高内聚的包。
39. 调试和测试有何区别?
答:
测试 | 调试 |
发现缺陷(What is wrong?) | 定位修复缺陷(Fix it!) |
执行预先设计的用例 | 依赖开发人员经验 |
40. 面向对象方法学包含哪 4 个要点?
答:对象 + 类 + 继承 + 用消息通信。
41. 使用基本路径测试法进行软件测试时主要包括哪三个关键步骤?
答:第 1 步:根据程序代码、或程序流程图、或PDL伪代码,画出相应的程序图(流图)。
第 2 步:计算流图的环形复杂度V(G)= 路径数目?
第 3 步:确定只包含独立路径的基本路径集合。
42. 利用什么图来描述对象间的交互过程?如何创建交互图?
答:第 1 问:利用顺序图和通信图来描述对象间的交互过程。
第 2 问:创建交互图是从用例工作流的初期开始的,逐步分析每个用例工作流,决定实现该步骤需要哪些分析对象与参与者实例进行交互。
43. 在一个宾馆中,每个客房部经理(HouseKeeper)都有一个主管(Manager)负责,有的Manager 可能负责多个 HouseKeeper,有的 Manger 可能一个 HouseKeeper 都没有,请画出适合描述类 HouseKeeper 和类Manger 的关系的类图?
答:

44. 详细描述程序算法处理过程的常用哪三种类型的描述工具?
答:图形工具,如:程序流程图、盒图、PAD图;
表格工具,如:判定表;
语言工具,如:过程设计语言PDL。
45. 结构化软件开发中,需求分析的原则有哪四条?
答:
1)建立数据模型:必须理解并描述问题的信息域;
2)建立功能模型:必须定义软件应完成的功能域;
3)建立行为模型:必须描述作为外部事件结果的软件行为;
4)系统分解准则:必须对上述模型进行分解,用层次的方式展示具体处理细节。
<ins/>
46. 某教学设备销售部门制定一项销售优惠政策,一次购买 100 台或 100 台以上者按八五折优惠,若购买者是教师、学生按九折优惠。设 C1表示购买的台数,C2为 1、2、0 分别表示教师、学生和其他人员,请分别列出符合九折、八五折优惠的判定条件?
答:
九折:(C1<100)AND NOT(C2=0)
八五折:C>=100 AND C2>=0
47. 面向对象分析时为什么要进行统一分析类?
答:统一分析类的目的是确保类图中的每个分析类表示一个单一的、明确定义的概念,而不会出现职责重叠或重复。
48. 获取真实的需求非常难,表现为难捕获、易变特性,请问下述描述的“真实需求”是什么?
需求捕获过程如下描述:
初次需求:我要一块石头…
再需求:差不多,但我要小一点的…
再需求:很好,不过我要蓝色的…
再需求:啊,没有那么小…
再需求:咳,还是原来那个好了…
答:
1. 真实需求的定义:
用户未明确表达的核心目标(而非表面描述),即:
"我需要一个尺寸适中、颜色悦目且能装饰环境的物品"
而非字面的"一块石头"。
2. 需求变更根源:
- 认知迭代:用户通过反馈逐步明确模糊需求(如"小一点→蓝色→尺寸回调")。
- 解决方案探索:用户将需求与实现混淆(如用石头特性代替装饰目标)。
3. 应对策略(架构师视角):
- 深挖背景:追问 "用途"(如装饰?镇纸?),而非局限于属性调整。
- 原型验证:提供多选项(石头/摆件)快速收敛真实需求。
- 抽象需求:归纳为 "装饰性物品需满足尺寸X、颜色Y、功能Z"。
三、叙述分析题(共 18 分,每小题 3 分)
1. 在下列用例图中,哪些是系统的参与者?系统的用例有哪几个?

答: 系统的参与者有3个:Bank network、Manager、Clerk。因Customer与用例没有交互,故不是;系统的用例有5个:Authorize purchase、Open store、Log onto redister、Sell goods、
Restock inventory。
2. 请根据下列用过程设计语言(Procedure Design Language, PDL)描述的业务,画出判定树。
答:

3. 请根据下图回答问题:① 列出用例模型中的参与者与用例,② 哪些用例之间存在扩展关系?

答:① 参与者: cellular、User
② 用例:Place phone call、Place conference call、Receive phone call、Receive additional call、Use scheduler
用例之间存在扩展关系的有:Place phone call 与 Place conference call、Receive phone call 与 Receive additional call
4. 什么是实体类、边界类和控制类?请分别给出这三个类用UML表示的图符?
答:
- 实体类(Entity Class):
- 定义:表示业务数据(如
User
、Order
),与数据库表对应 。 - 表示:UML类图中用普通类表示,标注属性(
username
、balance
) 。
- 边界类(Boundary Class):
- 定义:系统与外界交互的接口(如登录界面、API) 。
- 表示:UML中用构造型
<<boundary>>
标记 。
- 控制类(Control Class):
- 定义:处理业务逻辑(如
LoginController
),管理流程 。 - 表示:UML中用构造型
<<control>>
标记 。
示例:
- 登录场景:
- 边界类:
LoginPage
(界面) - 控制类:
LoginController
(验证逻辑) - 实体类:
User
(存储用户信息)

5. 请理解下图(图中有学生、书、课程、教师)业务,请用文字语言描述该实体类图所反映的业务的语义联系。注意对关系重数的理解。

答:一个学生可以选修多门课程,也可能没有任何课程;一门课程可以被多个学生选修;一个老师可以教多门课程或者不教课;每门课程至少有一个老师,也可以有多个老师任教;每门课程可以有0或1本教材,每本教材只能用于一门课程。
<ins/>
6. 业务描述:旅行但汽车的油不足以应付全部路程。那么为汽车加油的动作在旅行的每个场景(事件流)中必然都会出现,不加油就不会完成旅行。吃饭则可以由司机决定是否进行,不吃饭不会影响旅行的完成。用例图如何画?
答:

7. 从给出的构件图中判断此构件所设计的软件系统名称是什么?根据图示分别说明图中 ① 有哪些是构件? ② 图中有哪几种关系? ④ 图中的两个接口分别由什么构件实现的?

答:
第1问:网络购物系统;
第2问:商品资料库、结账系统、购物车、商品导览系统;
第3问:有两种关系:实现关系、依赖关系;
第4问:图中的两个接口“结账”和“购买商品”分别由“结账系统”和“购物车”来实现。
8. 有两个软件系统A和B,A系统每个月出错一次,而B系统每年出错一次,请问这两个系统哪个软件
可靠性比较高?并解释其原因
答:B系统可靠性高,可靠性是一个持续状态,从题目中可以看到,若同样运行一年,B系统的出错率小于A系统,故B系统可靠性较高。
9. 网络购物系统业务中,哪一个用例级别是最高的,也即离开这个用例系统就没法开展后续的工作?请解释其级别高的原因。
答:因为在“购买商品”中就包含了浏览商品、加入购物车、下订单支付等步骤,因此“购买商品”是用例级别最高的,它代表了网络购物系统的最核心的业务。如果没有人购买商品,其他业务则无从谈起。
10. 如下图所示的程序流程图,请给出其环形复杂度V(G)=?根据计算得到的V(G)罗列出该图的单独路径集合。

答:
第1问:环形复杂度:V(G)=2**2=4
第2问:程序路径集合为:
path1 : a-b-d
path2 : a-b-e
path3 : a-c-e
path4 : a-c-d
<ins/>
11.普通聚集和共享聚集有什么区别?QQ群和微信群应该是哪一种聚集关系?请画出微信群对应的类图表示。
答:
第1问:如果在聚集关系中处于部分方的对象可同时参与多个处于整体方对象的构成,则该聚集称为共享聚集。普通聚集部分方对象和整体方对象是一对多的关系。
第2问:QQ群和微信群属于共享聚集,因为部分方的对象(群成员)可同时参与多个处于整体方对象(群)的构成。
第3问:

12.在顺序图中,如何描述对象间的交互?
答:首先,需要通过从一个参与者实例向一个边界对象发送一个消息来引入用例,然后再引入用例控制类。最后再引入用例的实体类,即以A-B-C-E备选架构方式来描述交互。
13.衡量模块独立性的两个标准是什么?它们各表示什么含义?
答:
- 耦合性(Coupling)
- 含义:模块间相互依赖的程度。
- 评判标准:
- 低耦合:模块间通过简单接口通信(如参数传递),彼此独立(✅ 目标)。
- 高耦合:模块直接访问内部数据或依赖实现细节(如全局变量),易引发连锁错误(❌ 避免)。
- 内聚性(Cohesion)
- 含义:模块内各元素彼此关联的紧密程度。
- 评判标准:
- 高内聚:模块内元素共同完成单一功能(如
FileParser
只负责解析文件)(✅ 目标)。 - 低内聚:模块包含无关功能(如
Utils
类混合日志、加密、计算)(❌ 避免)。
四、后续完整内容见文档
- 作者:EageYren
- 链接:https://eageyren.edu.deal/learning/software
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。