软件工程考纲 · 核心知识点问答速查🔍
📚 软件工程考纲 · 核心知识点问答速查
📝 第一部分:应用题核心知识点详解
🎯 问题1: 如何识别参与者和用例?
- 答案:
- 参与者 (Actor): 指与系统交互的人、外部设备或外部系统。在场景描述中,通常是名词。例如,在一个图书馆系统中,“读者”、“图书管理员”、“管理员”就是参与者。
- 用例 (Use Case): 指参与者希望系统执行的一个完整的功能。它描述了系统“做什么”,通常是动词+名词的短语。例如,“读者”可以“查询图书”、“借阅图书”;“图书管理员”可以“添加新书”。
🎯 问题2: 用例图中的包含 (<<include>>) 和扩展 (<<extend>>) 关系有何区别?
-
答案:
-
包含 (
<<include>>):- 含义: 强制性的、必须执行的关系。基础用例的执行必须包含被包含用例的功能。可以理解为代码中的函数调用。
- 例子: “借阅图书”和“归还图书”都必须进行“用户身份验证”。那么“用户身份验证”就是一个被包含的用例。
- 画法: 从基础用例画一条虚线箭头指向被包含的用例,并标注
<<include>>。
-
扩展 (
<<extend>>):- 含义: 可选的、在特定条件下才会触发的关系。它为基础用例增加了额外的、非必需的功能。
- 例子: 在“支付订单”这个基础用例中,可能会触发一个可选的扩展用例——“使用优惠券”。只有当用户有优惠券并选择使用时,这个扩展才会发生。
- 画法: 从扩展用例画一条虚线箭头指向基础用例,并标注
<<extend>>。
-
🎯 问题3: 类图中的五大关系是什么?
- 答案:
- 泛化 (Generalization):
- 含义: 即继承关系,表示 “is-a” 的关系。子类继承父类的属性和方法。
- 画法: 实线 + 空心三角箭头,箭头指向父类。
- 关联 (Association):
- 含义: 类与类之间的结构性联系,表示一个类的对象与另一个类的对象之间有连接。例如,
学生和课程之间的“选课”关系。 - 画法: 实线,可带箭头表示方向。
- 含义: 类与类之间的结构性联系,表示一个类的对象与另一个类的对象之间有连接。例如,
- 聚合 (Aggregation):
- 含义: 特殊的关联,表示 “has-a” 的关系,是整体与部分的关系,但部分可以独立于整体存在。
- 例子:
班级和学生。班级解散了,学生依然存在。 - 画法: 实线 + 空心菱形,菱形端连接整体。
- 组合 (Composition):
- 含义: 更强形式的聚合,表示 “contains-a” 的关系。部分不能独立于整体存在,生命周期一致。
- 例子:
公司和部门。公司注销了,部门也就不存在了。 - 画法: 实线 + 实心菱形,菱形端连接整体。
- 依赖 (Dependency):
- 含义: 一种使用关系。一个类的变化会影响到另一个类。通常是一个类的方法参数、返回值或局部变量使用了另一个类。
- 画法: 虚线 + 普通箭头,箭头指向被依赖的类。
- 泛化 (Generalization):
🎯 问题4: 如何使用等价类划分法为“登录功能”设计测试用例?
-
答案:
假设场景: 用户名要求为6-18个字符的字母或数字;密码要求为8-20个字符,必须包含字母和数字。
步骤:
- 识别输入条件: 用户名长度、用户名字符类型;密码长度、密码字符类型。
- 划分有效等价类 (做正确的事):
输入项 有效等价类 示例 用户名 长度在6-18之间,由字母和数字组成 testuser01密码 长度在8-20之间,由字母和数字组成 password123 - 划分无效等价类 (做错误的事):
输入项 无效等价类 示例 用户名 ① 长度小于6 ( <6)user1② 长度大于18 ( >18)thisisareallylongusername③ 包含特殊字符 ( !@#)test@user密码 ① 长度小于8 ( <8)pwd123② 长度大于20 ( >20)areallylongandsecurepassword123③ 只含字母 mypassword④ 只含数字 123456789⑤ 包含特殊字符 pwd!@#123 - 设计测试用例: 从每个等价类中选取一个代表值,组合成测试用例。至少保证每个无效等价类都被一次测试覆盖。
📚 第二部分:核心知识点问答
🔥 考点一:软件工程基础
-
问题: 简述瀑布模型、喷泉模型、敏捷模型、快速原型模型(原型模型)、增量模型、螺旋模型、统一软件开发过程模型的优缺点。
-
答案:
模型 优点 缺点 瀑布模型 管理简单,阶段清晰,每个阶段都有明确成果。适合需求稳定且明确的项目。 缺乏灵活性,无法适应需求变更,风险暴露晚(通常在后期测试阶段才发现),返工成本高。 喷泉模型 (面向对象) 迭代、无间隙,允许各阶段交叉并行,减少返工,效率高,有利于代码重用。 管理和控制复杂,需要经验丰富的开发人员和良好的沟通,可能导致项目失控或进度不明确。 敏捷模型 (敏捷思想) 适应性强,能快速响应需求变更,客户参与度高,客户满意度高,早期即可交付可用产品。 对文档要求低,可能导致后期维护困难;对团队成员要求高(需自组织、跨职能);项目范围可能不易控制。 快速原型模型(原型模型) 早期获取用户反馈,有效降低需求理解风险,满足用户需求,可作为需求规格说明书的补充。 可能导致项目范围蔓延(Scope Creep),用户可能误以为原型就是最终产品;原型可能不具备最终产品质量和效率。 增量模型 降低项目风险,每次增量交付可提高用户满意度;产品增量交付,用户可早期使用,并提供反馈;较好适应需求变更。 增量之间接口可能不清晰,系统结构可能随增量而恶化;需求难以完全分解成独立增量。 螺旋模型 风险驱动,高度强调风险分析,适合大型、复杂、高风险项目;将瀑布模型和原型模型的优点结合。 风险分析需要经验丰富的人员,投入大量时间和资金;管理复杂,对项目经理要求高;不适合小型或低风险项目。 统一软件开发过程模型 (UP) 迭代和增量,以用例为驱动,架构为中心,风险驱动;支持面向对象,适应需求变更;具有广泛工具支持。 过程复杂,学习曲线陡峭,对团队技术和管理能力要求高;文档和管理工作量较大。
-
-
问题: 敏捷开发的四个核心价值观是什么?
- 答案:
- 个体和交互 高于 流程和工具。
- 可以工作的软件 高于 详尽的文档。
- 客户合作 高于 合同谈判。
- 响应变化 高于 遵循计划。
- 答案:
🔥 考点二:结构化方法
-
问题: DFD的四个基本图符是什么?
- 答案:
- 正方形 (外部实体): 系统之外的人或组织,是数据的来源或终点。
- 圆角矩形/圆形 (加工): 对数据进行处理或变换的功能。
- 箭头 (数据流): 在处理过程之间流动的数据。
- 半开口矩形 (数据存储): 存储数据的地方,如文件或数据库。
- 答案:
-
问题: 什么是高内聚、低耦合?
- 答案:
- 内聚 (Cohesion): 指一个模块内部各个元素之间结合的紧密程度。
- 高内聚: 意味着模块只做一件事,且内部各部分都是为了做好这件事而存在。追求的目标是“功能内聚”。
- 耦合 (Coupling): 指模块与模块之间的依赖程度。
- 低耦合: 意味着模块之间相互独立,一个模块的修改不会对其他模块造成大的影响。追求的目标是“数据耦合”(通过参数传递数据)。
- 设计目标: 高内聚,低耦合,这使得软件更容易理解、修改和维护。
- 内聚 (Cohesion): 指一个模块内部各个元素之间结合的紧密程度。
- 答案:
🔥 考点三:面向对象与UML
- 问题: 面向对象的三大特征是什么?
- 答案:
- 封装 (Encapsulation): 将数据(属性)和操作数据的代码(方法)捆绑在一个单元(类)中,并对外部隐藏对象的内部实现细节。
- 继承 (Inheritance): 允许创建一个新类(子类),它能拥有另一个已存在类(父类)的属性和方法,并能添加自己的新特性。
- 多态 (Polymorphism): 不同的对象对同一个消息(方法调用)可以做出不同的响应。即“同一接口,多种实现”。
- 答案:
🔥 考点四:软件测试
-
问题: 黑盒测试与白盒测试的区别是什么?
- 答案:
特性 白盒测试 (White-Box) 黑盒测试 (Black-Box) 核心思想 检查程序的内部逻辑结构。 只关心程序的外部功能,不看内部实现。 测试依据 源代码、详细设计文档。 软件需求规格说明书。 优点 可以发现代码深处的逻辑错误,代码覆盖率高。 从用户视角出发,能发现功能性错误和未实现的需求。 缺点 无法发现未实现的需求;测试开销大。 无法测试到代码的特定分支,代码覆盖率低。
- 答案:
-
问题: 环路复杂度的两个计算公式中,字母代表什么?
- 答案: 环路复杂度用于衡量程序的逻辑复杂性,也等于程序中独立路径的数量。
-
E: 控制流图中边的数量 (Edges)。N: 控制流图中节点的数量 (Nodes)。
-
P: 控制流图中判定节点 (如if,while等) 的数量 (Predicate nodes)。
-
- 答案: 环路复杂度用于衡量程序的逻辑复杂性,也等于程序中独立路径的数量。
-
问题: 单元测试中,什么是驱动模块和桩模块?
- 答案:
- 驱动模块 (Driver): 一个“主程序”,用于调用被测试的模块,并向其传递测试数据。
- 桩模块 (Stub): 一个“虚拟的子程序”,用于代替被测试模块所调用的那些尚未开发的模块,它只返回一个预设的简单值。
- 答案: