软件工程试卷A卷考点全解析:从需求分析到基本路径测试
简介:这份资源是合肥工业大学计算机与信息学院2019~2020学年第二学期软件工程课程A卷的试卷原件,面向正在备考软件工程的学生及需要梳理知识框架的读者,可用于自测、对照复习与查漏补缺。试卷题型完整,涵盖判断题、选择题、填空题、名词解释与简答题,内容涉及需求分析、模块独立性与耦合、结构化程序设计、单元测试与验收测试、判定覆盖与条件覆盖、软件维护费用、迭代模型与瀑布模型、PDL伪码、包图建模及边界值分析法等核心考点,并附有标准答案页眉信息,便于还原真实考试场景。资源包共1个docx文件,约25KB,轻量易取,可直接打印或在线查阅。目前已有1800人学习下载,适合希望借助真题检验理论掌握程度、熟悉命题风格的软件工程学习者使用。
1. 软件工程试卷:从一张 A 卷看这场考试到底考什么
很多人拿到软件工程试卷的第一反应是背名词,结果判断题一上来就翻车。这张卷子的第一题就很典型:“有了对项目目标的大概了解,便足以开始编写程序”——答案是 F。命题人不是在考你记没记住某句话,而是在考你有没有建立起“需求先行”的工程直觉。整张卷子 100 分,判断题 10 分、选择题 10 分、填空题 10 分、名词解释 20 分、简答题 20 分、应用题 30 分,客观题只占三成,七十分压在名词解释、简答和应用题上。这意味着光靠刷选择题拿不了高分,真正拉开差距的是你能不能把“模块独立性”“基本路径测试”“软件结构图”这些东西讲清楚、画出来。这份 A 卷适合两类人:一是期末冲刺、想把考点一次捋顺的考生;二是面试前想快速回顾软件工程核心概念的人。下面按考点模块拆开讲,每块都落到怎么答、容易错在哪。
2. 基础概念与生命周期:判断题和选择题里的送分与送命题
2.1 生命周期各阶段与费用分布
软件生命周期是整张卷子的底层框架,判断题、选择题、简答题都在反复考它。卷子里简答题第一题直接问“软件生存周期可以划分为几个阶段?每个阶段的主要任务是什么?”,选择题第一题问“软件生命周期中所花费用最多的阶段”。这类题面试官也爱问,因为它能看出你有没有工程全局观。
标准划分是:问题定义与可行性研究、需求分析、总体设计(概要设计)、详细设计、编码、测试、维护。每个阶段的任务要能用一句话说清:可行性研究判断“做不做”,需求分析解决“做什么”,设计解决“怎么做”,编码是“做出来”,测试是“验证做对没有”,维护是“做完之后持续改”。选择题第一题答案是 D 软件维护,因为维护周期最长、改动最频繁,费用占比通常超过一半。这个点很多人凭感觉选测试,其实测试只是一次性投入,维护是长期消耗。
提示:答简答题时不要只列阶段名,每个阶段后面必须跟一句任务描述,否则 5 分题最多拿 2 分。
2.2 过程模型对比:瀑布、渐增、螺旋、RUP 与敏捷
选择题第二题问“下列哪个模型没有采用迭代的思想”,选项是瀑布、渐增、螺旋、RUP,答案是 A 瀑布模型。这道题背后是一整块高频考点:过程模型的区别。简答题第二题更进一步,要求“比较 Rational 统一过程和敏捷过程”。这类对比题在面试里也常出现,面试官想听的是你能不能说出适用场景,而不是背定义。
瀑布模型是线性顺序,阶段之间严格串行,优点是文档齐全、便于管理,缺点是需求一变就返工,适合需求稳定的小项目。渐增模型把系统分成多个增量逐步交付,螺旋模型在渐增基础上加入风险分析,每一圈都做风险识别,适合大型高风险项目。RUP 用用例驱动、以架构为中心、迭代增量,四个阶段(初始、细化、构造、移交)循环推进。敏捷过程强调个体交互、可工作软件、客户合作、响应变化,迭代周期短,文档轻量。
对比时抓住三个维度:对需求变化的态度、文档重量、适用项目规模。RUP 是“重过程但迭代”,敏捷是“轻过程快迭代”,瀑布是“重过程不迭代”。答题时先给一句总判断,再分维度展开,最后落到“选哪个取决于需求稳定性和团队规模”。
2.3 可行性研究与需求分析的三类模型
填空题第三题考“可行性研究从技术可行性、经济可行性、( )三方面进行分析”,答案是操作可行性(有的教材写社会可行性,按你所用教材填,答题时写“操作/社会可行性”更稳)。填空题第四题考“需求分析需要建立的三类模型:数据模型、功能模型、( )”,答案是行为模型。这两道题看着简单,但填空题没有选项提示,写错一个字就丢分。
需求分析这块判断题第三题“在进行需求分析时同时考虑维护问题”答案是 T,因为需求阶段就要考虑可维护性,比如模块划分是否清晰、接口是否稳定。判断题第一题“有了对项目目标的大概了解便足以开始编写程序”答案是 F,理由就是需求没澄清就编码,后期返工成本极高。选择题第三题“许多软件开发失败的主要原因是”,答案是 B 忽略了软件需求分析的重要性。这三道题其实在说同一件事:需求分析是软件工程里最不能省的一步。
答题时如果遇到“为什么需求分析重要”这类简答,按“需求不清→返工→成本放大”的逻辑链写,再补一句“需求阶段发现问题的修复成本是维护阶段的百分之一量级”,分数就稳了。
3. 结构化设计与模块化:耦合内聚、作用范围与软件结构图
3.1 耦合内聚与信息隐蔽
判断题第四题是个经典陷阱:“如果两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的,这就是非直接耦合。这种耦合的模块独立性最弱。”答案是 F。非直接耦合恰恰是耦合程度最弱、模块独立性最强的一种。很多人把“非直接”理解成“没关系所以弱”,其实耦合越少独立性越强,非直接耦合是理想状态。
选择题第五题“信息隐蔽概念与( )这一概念直接相关”,答案是 A 模块的独立性。信息隐蔽是指模块内部细节对外不可见,只暴露必要接口,这样修改一个模块不影响其他模块,直接提升独立性。判断题第五题“模块的作用范围包括它本身及其所有的从属模块”答案是 F,作用范围是指受该模块判定影响的所有模块,不等于从属模块,这个区分在简答和设计题里都会用到。
注意:耦合从弱到强依次是非直接耦合、数据耦合、标记耦合、控制耦合、外部耦合、公共耦合、内容耦合。答题时按这个顺序写,别只写“高内聚低耦合”六个字。
3.2 软件结构图设计:生产科与技术科的分解思路
应用题第二题要求根据生产科和技术科的任务描述,分别设计软件结构图。这是整张卷子里最能拉开差距的题之一,8 分,考的是你能不能把文字描述转成模块层次。
生产科的任务有四条:根据内部合同制定车间月生产计划、根据日报周报调整月计划、以月计划为依据制定产品设计和组装月计划、将组装计划传达到各科并分解为周计划下达车间。设计结构图时,顶层是“生产计划管理”,下面分三个子模块:月生产计划制定、月生产计划调整、组装计划分解与下达。月计划制定再往下分“读取内部合同”“生成车间月计划”;调整模块分“读取生产日报”“读取生产周报”“更新月计划”;分解下达模块分“生成产品设计月计划”“生成组装月计划”“分解周计划”“下达车间”。
技术科的任务是:根据组装计划做产品结构设计,产出装配图给生产科、外购需求计划给供应科、自制物料清单;根据组装计划做工艺设计,根据物料清单产出工艺流程图给零件厂。顶层是“技术设计管理”,下面分“产品结构设计”和“产品工艺设计”两个分支。结构设计下分“生成装配图”“生成外购需求计划”“生成自制物料清单”;工艺设计下分“读取自制物料清单”“生成工艺流程图”。
答题时注意两点:一是模块名用动宾结构,别写“合同”“计划”这种名词;二是箭头表示调用关系,数据流用带箭头的线标注,别把结构图和流程图混了。这类题面试里也常以“给你一段业务描述,画模块图”的形式出现,思路一样:先找顶层职责,再按任务条目拆子模块,最后检查每个叶子模块是否对应一条可执行的任务。
3.3 结构化分析与结构化设计的要求
填空题第五题“结构化分析方法的分析策略是( )”,答案是自顶向下、逐层分解。填空题第六题“从模块内外的联系来看,结构化设计的要求是( )”,答案是高内聚、低耦合。填空题第七题“( )根据输入数据的类型在若干动作序列中选择合适的操作执行,形成事务流”,答案是事务型分析(或事务中心)。这三道题是结构化方法的骨架,答名词解释和简答时可以直接调用。
判断题第六题“如果一个程序只有一个入口和一个出口,则称这个程序是结构化的”答案是 F。单入口单出口只是结构化程序的一个必要条件,不是充分条件,结构化还要求只用顺序、选择、循环三种基本控制结构。选择题第六题“程序的三种基本控制结构是”,答案是 B 顺序、选择和重复。这两道题经常一起考,记住“三种结构 + 单入口单出口”才是完整表述。
4. 软件测试与维护:覆盖准则、基本路径测试与维护分类
4.1 测试覆盖准则的包含关系
判断题第九题“判定覆盖不一定包含条件覆盖,条件覆盖也不一定包含判定覆盖”答案是 T。这是测试覆盖里最容易绕晕的点。判定覆盖要求每个判定的真、假分支至少各执行一次;条件覆盖要求每个判定中每个条件的真、假至少各出现一次。两者关注对象不同,判定覆盖管的是整个判定表达式的结果,条件覆盖管的是单个条件,所以互不包含。但条件组合覆盖能包含判定覆盖和条件覆盖。
选择题第十题给了一组测试用例 -1.001、-1.0、1.0、1.001,输入范围是 [-1.0, 1.0],问设计方法,答案是 C 边界值分析法。因为取的正是边界点和边界外侧的点,这是边界值的典型特征。等价分类法取的是等价类代表值,不会专门取 1.001 这种刚出界的值。
提示:覆盖准则的强弱顺序记成“语句 < 判定 < 条件 < 判定/条件 < 条件组合 < 路径”,答题时按这个链条解释包含关系,比背定义清楚。
4.2 基本路径测试:从 PDL 到程序图、环路复杂度和测试用例
应用题第三题是 18 分的大题,给了一段求平均值的 PDL,要求画程序图和 N-S 图、PAD 图,算 McCabe 环路复杂度,求独立路径,设计测试用例。这是软件工程试卷里最标准的综合题,也是面试中“你做过什么测试设计”的常见追问。
先把 PDL 里的标号对应成流图节点。1 是初始化,2 是循环判断(value[i] <> -999),3 是循环条件里的 total.input < 100,4 是计数递增,5 是值下界判断,6 是值上界判断,7 是有效计数与求和,8 是 i 递增,9 是循环结束,10 是 total.valid > 0 判断,11 是求平均,12 是赋 -999,13 是结束判断。画程序图时,2 和 3 是复合条件,按基本路径测试的要求要拆成独立判定节点,这样流图节点数大约 13 个,边数约 17 条。
McCabe 环路复杂度 V(G) = E - N + 2,也可以数判定节点数加 1。按拆分后的流图,判定节点包括 2、3、5、6、10 共 5 个,V(G) = 5 + 1 = 6。所以独立路径是 6 条。求独立路径时从入口到出口逐条走,保证每条路径至少引入一条新边。典型的一组是:
路径1:1-2-9-10-12-13 (输入直接为 -999,valid=0,走 else) 路径2:1-2-3-4-5-8-2-9-10-12-13 (值越下界,不计有效) 路径3:1-2-3-4-5-6-8-2-9-10-12-13 (值越上界,不计有效) 路径4:1-2-3-4-5-6-7-8-2-9-10-11-13 (有效值,valid>0) 路径5:1-2-3-4-5-6-7-8-2-3-4-5-8-2-9-10-11-13 (混合有效与无效) 路径6:1-2-3-4-5-6-7-8-2-3-4-5-6-7-8-2-9-10-11-13 (多次有效后结束)设计测试用例时,每条路径给一组输入。比如路径 1 输入 value[1] = -999;路径 2 输入 value[1] = -2(小于 minimum),value[2] = -999;路径 3 输入 value[1] = 2(大于 maximum),value[2] = -999;路径 4 输入 value[1] = 0.5,value[2] = -999;路径 5 输入 value[1] = -2,value[2] = 0.5,value[3] = -999;路径 6 输入 value[1] = 0.5,value[2] = 0.6,value[3] = -999。每组用例要写清输入值、预期 average、total.input、total.valid。
答题时容易丢分的地方:程序图节点编号必须和题目给的标号对应,题目明确要求“按照程序中附加的标号画”;N-S 图和 PAD 图要覆盖循环和分支结构,别只画流图;独立路径数量必须等于 V(G),多一条少一条都扣分。
4.3 单元测试、验收测试与维护分类
判断题第七题“单元测试能发现约 80% 的软件缺陷”答案是 F,这个数字是流传很广的误记,单元测试主要发现模块内部逻辑错误,不能给出精确比例。判断题第八题“验收测试是由最终用户来实施的”答案是 F,验收测试由用户参与,但通常由开发方和用户共同组织,不是用户单方面实施。填空题第八题“单元测试集中对用源代码实现的每一个程序单元进行测试,( )和详细设计说明书是与其相关的文档”,答案是概要设计说明书(有的教材写详细设计,按上下文填“概要设计说明书”更常见,因为单元测试对照的是详细设计,但题目问相关文档,概要设计和详细设计都相关,答题时写“概要设计说明书和详细设计说明书”最稳)。
简答题第三题“什么是软件维护?软件维护可以分为哪几类?”标准答法是:软件维护是软件交付使用后,为改正错误、适应环境、满足新需求而对软件进行的修改。分四类:改正性维护(修 bug)、适应性维护(适应环境变化)、完善性维护(增加功能、优化性能)、预防性维护(提高可维护性、为未来改动打基础)。四类里完善性维护占比通常最大,这个点常被追问。
选择题第九题“软件成分重用不包括”,答案是 C 方法标准重用。软件重用包括代码重用、设计结果重用、分析结果重用、测试信息重用等,方法标准属于过程规范,不算软件成分。判断题第十题“软件重用也叫再用或复用,是指同一事物不作修改或稍加改动就多次重复使用”答案是 T,这是标准定义。
5. 面向对象与建模:UML 图、主题划分与名词解释答题模板
5.1 UML 图与面向对象建模
选择题第八题“在面向对象建模中,主题划分提供了一种在更高抽象层次上描述系统的手段。表示主题划分的建模图形是”,答案是 A 包图(Package diagrams)。包图用来把模型元素分组,适合表达主题划分和高层结构。配置图描述物理部署,顺序图描述对象间按时间顺序的消息交互,合作图(通信图)强调对象间的链接关系。这四个图的区别是高频考点,面试里也常问“什么时候用顺序图什么时候用通信图”。
填空题第九题“依据抽象程度的不同通常将对象模型在五个层次上进行抽象:( )、类与对象层、结构层、属性层、服务层”,答案是主题层。这五层是对象建模的经典分层,主题层在最上面,负责划分子系统。
名词解释第五题考 UML。答题模板:UML 是统一建模语言,是一种用于对软件系统进行可视化、详述、构造和文档化的标准建模语言,它提供用例图、类图、对象图、包图、顺序图、通信图、状态图、活动图、构件图、配置图等图形,贯穿需求分析到设计实现各阶段。注意 UML 是语言不是方法,它不规定过程,这个区分写进去能加分。
5.2 名词解释的答题结构
名词解释 20 分,5 题各 4 分,是性价比很高的一块。卷子里考了软件工程、数据字典、需求分析、路径覆盖、UML。答题不要只写一句话,按“定义 + 关键特征 + 作用/分类”三段式写,4 分题写三到四行刚好。
软件工程:将系统化、规范化、可度量的方法应用于软件的开发、运行和维护,即将工程化应用于软件。三要素是方法、工具、过程。目标是提高质量、降低成本、保证进度。
数据字典:对数据流图中各元素进行定义的集合,包括数据项、数据结构、数据流、数据存储、处理过程五类条目,作用是保证数据定义的一致性,是需求分析阶段的重要文档。
需求分析:确定系统必须做什么的过程,任务是导出目标系统的逻辑模型,建立数据模型、功能模型、行为模型,输出需求规格说明书。关键是“做什么”而不是“怎么做”。
路径覆盖:白盒测试中设计足够多的测试用例,使程序中所有可能的执行路径至少被执行一次。它是覆盖准则中最强的一种,但路径数可能爆炸,实际中常与基本路径测试结合。
UML 按 5.1 的模板写。名词解释的通用技巧是:第一句给属加种差定义,第二句补关键特征或分类,第三句说作用或与其他概念的区别。别写成举例,举例占篇幅还拿不到定义分。
5.3 面向对象方法与结构化方法的比较
简答题第四题“从思维特点、方法特点、适用范围,对面向对象方法与结构化方法进行比较分析”,这是 5 分题,按三个维度列对比最稳。
思维特点:结构化方法自顶向下、逐步求精,以功能为中心;面向对象方法以对象为中心,把数据和操作封装在一起,更接近人类对现实世界的认知。方法特点:结构化方法强调模块化、高内聚低耦合,分析和设计阶段用数据流图和结构图;面向对象方法用 UML 建模,支持继承、多态、封装,分析和设计界限模糊,迭代推进。适用范围:结构化方法适合需求稳定、数据处理为主的中小型系统;面向对象方法适合需求复杂多变、交互性强的大型系统。
答题时每个维度写两到三行,最后加一句“两者不是替代关系,面向对象方法在局部仍可借用结构化思想”,显得有判断力。
6. 应用题拿分套路:状态转换图、结构图与测试题的答题顺序
应用题 30 分,4 分状态转换图、8 分软件结构图、18 分基本路径测试,分值分布决定了复习优先级:基本路径测试必须练到能默写,结构图要会拆,状态图保底拿分。
第一题画 GUI 状态转换图,界面有一个主菜单和一个带文件打开命令的文件菜单,每个菜单都有退出命令,每次只能打开一个文件。状态设计成:主菜单态、文件菜单态、文件已打开态、退出态。主菜单态下点文件菜单进入文件菜单态,点退出进入退出态;文件菜单态下点打开进入文件已打开态,点退出进入退出态;文件已打开态下点退出进入退出态,点返回回到主菜单态。画的时候状态用圆角矩形,转换用箭头标事件,别漏“每次只能打开一个文件”这个约束,它意味着文件已打开态不能再打开第二个文件。
第二题结构图按第 3.2 节的分解思路画,注意模块名动宾化、调用箭头从上到下、数据流标注在箭头旁。8 分题通常按“顶层模块 2 分、子模块划分 4 分、数据流标注 2 分”给分,别只画框不标数据。
第三题基本路径测试按“流图 → V(G) → 独立路径 → 测试用例”四步走,每步都写清楚。V(G) 算完写一句“因此需要 6 条独立路径”,独立路径编号列出,测试用例用表格给输入和预期输出。18 分题里画图占 6 分、复杂度 2 分、路径 4 分、用例 6 分,用例部分每组写全输入、预期 average、total.input、total.valid,别只写输入值。
我当年第一次做这类题,流图画完直接跳去写用例,结果独立路径数和 V(G) 对不上,回头重画花了二十分钟。从那以后我每次做基本路径测试都强制走一遍“先数判定节点、再算 V(G)、再逐条走路径、最后配用例”的顺序,路径数和复杂度对不上就停下來检查流图。希望帮到你。
本文还有配套的精品资源,点击获取