☰
软件工程A卷真题拆解:从耦合到路径测试的复习要点
2026/10/15 6:25:14 网站建设 项目流程

简介:合肥工业大学计算机与信息学院2020年软件工程课程A卷,试卷原件,面向软件工程专业学生、期末备考者及需要真题自测的开发者。压缩包内仅含1个docx文档,约25KB,轻量便携,下载后即可查看或打印。试卷完整收录判断题、选择题、填空题、名词解释和简答题,考点覆盖需求分析中的目标理解与维护前瞻、模块独立性与耦合程度判断、结构化程序设计原则、软件测试中的判定/条件覆盖与边界值法、软件生命周期维护占比与迭代模型、面向对象建模包图及软件成分重用等核心内容,既能检验理论掌握程度,也能考察对软件工程全流程的实践理解,通过限时模拟可提前适应考试节奏,并借助判断题与选择题中的典型陷阱强化易混淆概念。作为2020年A卷,其题型布局和知识点分布对课程复习与考研复试均有典型参考价值,目前已有1800人学习下载,是一份高性价比的真题复习资料。

1. 软件工程试卷不只是背答案:从一份A卷看期末到底考什么

下载软件工程试卷的人,很多是想找一份能直接背的答案,但这套某高校2020年学期的软件工程A卷,恰恰是那种背了答案也容易翻车的卷子。它把复习资料里最容易被忽略的概念边界考了个遍:非直接耦合到底意味着独立性最强还是最弱、判定覆盖和条件覆盖有没有包含关系、基本路径测试的环路数怎么算才不漏。题型分布是判断10分、选择10分、填空10分、名词解释20分、简答20分、应用题30分,六个题型各考各的侧重点。

这份试卷原件适合三类人:期末前突击的软件工程在读生,考研复试要补软件工程基础的跨考生,以及写过代码但没系统学过这门课的在职开发者。第三类人最容易在判选题上吃亏——代码写得不少,但一问模块耦合、一问维护费用占比,反而答不上来。下面按题型一层层拆,每个位置怎么拿分、哪里容易白丢分都点到位。

2. 试卷结构与考点分布:用100分算出复习优先级

拿到一份真题,先别急着对答案。正确的打开方式是先把分值结构看清楚,知道出题人把重兵压在哪个题型上,再决定复习精力往哪放。这套A卷的100分分配得非常典型,也带着明显的软件工程课程印记。

2.1 题型与分值:100分的六块拼图

先看整体结构。判断和选择各10道,每题1分,合计20分,考的是概念的精确边界;填空题10空,每空1分,考的是术语记忆;名词解释5题共20分,简答4题共20分,这两块考的是一段一段的背诵输出;最后的应用题30分,由三个具体题目组成,分值分别是4分、8分和18分,考的是画图、结构分析和路径测试计算。

题型题量与分值小计考察重心
判断题10题×1分10分概念边界、定义是否完整
选择题10题×1分10分术语记忆、方法归类
填空题10空×1分10分关键术语、教材原话
名词解释5题×4分20分定义记忆与展开
简答题4题×5分20分框架对比、阶段划分
应用题3题(4+8+18)30分状态图、结构图、路径测试

这份分值表传递的第一个信息是:纯客观题只占20分,背诵题占40分,动手题占30分,剩下10分是填空。也就是说,软件工程这门课如果只靠刷判断和选择,最多拿下20分,真正拉分的地方在名词解释、简答和应用题。这跟很多学生「多刷选择题」的备考习惯是拧着的。

第二个信息藏在应用题的18分里。最后一道题要求对一段求平均值的PDL做程序图、N-S图、PAD图,再算环路复杂度和设计测试用例,这一道题的分值就顶得上判断加选择的总和。所以复习软件工程,画图和路径计算这类硬技能,必须实打实练,不能靠印象糊弄。

2.2 考点落点表:六类知识点分布在哪些题号上

把这份卷子的所有题按知识点归类,可以清晰看到出题人对各章节的偏好。下面这个表是把判断、选择、填空、简答、应用全部映射到六个知识主题上,按主题统计分值和出现位置。

知识主题涉及题号大致分值
软件过程、生命周期模型判2、选1、选2、填2、简1、简2约15分
需求分析、可行性研究判1、判3、选3、填3、填4、名解3约13分
模块化与结构化设计判4、判5、选4、选5、选6、填5、填6、填7、选8约15分
软件测试与质量判7、判9、选10、填8、名解4、应用3约25分
维护、重用与软件配置判10、选1、选9、简3约9分
面向对象建模与UML选8、填9、名解5、应用1约10分

从表里能看出两层信息。第一层,测试相关的分值最高,大约25分,其中18分全压在后面对PDL做基本路径测试的大题上,这说明该课程的测试章节不是泛泛而过,而是要求学生真能上手算。第二层,结构化设计相关的题横跨判断、选择、填空三个题型,考点集中在耦合度排序、作用范围、三种基本控制结构、高内聚低耦合这些概念上,属于典型的「概念精确记忆」型考点。

还有一个容易被忽略的点:名词解释和简答虽然写在卷面上是各自独立的题型,但从知识主题看,它们跟判断、选择、填空里的知识点高度重叠。比如名词解释里的「数据字典」,对应的就是需求分析章节;「路径覆盖」对应的就是测试覆盖那一节。这意味着同一份知识点,客观题考的是正误判断,主观题考的是完整表述,复习时按主题打包记忆效率更高。

2.3 由分值得出的复习顺序:先练大题再磨概念

基于上面的分值分布,我的建议是反着卷面顺序复习。绝大多数学生会从判断题第一题开始往下做,但复习计划的顺序应该是先拿下应用题30分,再攻名词解释和简答40分,最后才回头磨判断、选择、填空30分。

原因很简单。应用题的状态图、软件结构图、路径测试,这三类题型有规范画法和固定计算套路,属于投入时间就能稳定拿分的项目。一道环路复杂度的计算题,只要把控制流图画对、公式用对,4分就到手。而判断题里的绝对化表述、选择题里的干扰项,往往分布在多个章节的犄角旮旯,短期记忆很难覆盖全。

所以我会给自己排一个三阶段计划。第一阶段花两天专门练最后一题:拿到一段PDL,先画控制流图,再算环路复杂度,再挑独立路径,最后设计测试用例,流程走三遍就熟了。第二阶段整理名词解释和简答的答题模板,重点是把「生命周期几个阶段」「RUP和敏捷区别」「维护分几类」「面向对象和结构化对比」这四个框架背熟。第三阶段才回到判选题,用错题本把判断里的「绝对化表述」和选择里的「同类方法辨析」集中击破。

提示:这套卷子的标准答案是按出题课程的口径写的。遇到「单元测试能发现约80%缺陷」这类经验数据,不同教材说法略有出入,以自己课程PPT和指定教材为准。

3. 判断选择里的概念边界:耦合、覆盖与边值分析

判断和选择各10分,分值不高,但出题质量不低。这两类题最大的特点是专挑概念的边界考,而不是考定义本身。很多学生在这丢掉的分,往往不是因为不知道定义,而是因为把定义的外延理解宽了或窄了。

3.1 耦合度排序:非直接耦合为什么独立性最强

判断题第4题是整份卷子里最具迷惑性的一道:「如果两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的,这就是非直接耦合。这种耦合的模块独立性最弱。」这句话前半段定义正确,后半段结论错误。

非直接耦合指的是两个模块之间没有任何直接的数据传递或控制传递,一切联系都经由上层模块中转。按耦合度从强到弱排序,依次是内容耦合、公共耦合、控制耦合、标记耦合、数据耦合、非直接耦合。非直接耦合处在耦合度最弱的一端,耦合越弱模块独立性越强,所以非直接耦合的模块独立性最强,而不是最弱。

这道题真正考察的是「耦合度」和「独立性」的反向关系。耦合是模块之间相互依赖的程度,独立性是模块对外部的依赖程度,二者是此消彼长的关系。很多学生把「非直接」理解成「间接联系多所以依赖多」,顺着字面意思往反方向推,就掉进坑里了。选择题第5题说信息隐蔽与模块的独立性直接相关,正是同一个知识点的正向考法。

3.2 作用范围与控制范围:判断题第五题的常见误读

判断题第5题说「模块的作用范围包括它本身及其所有的从属模块」,这个说法错在把作用范围等同于控制范围。控制范围是一个模块本身加上它所有从属模块的集合,属于结构图上的静态领地;作用范围则是模块内部某个判断语句所影响的那些模块的集合,强调的是「这个判断的结果影响到谁」。

两者之间的关系有一条重要设计原则:模块的作用范围应该控制在它的控制范围之内。也就是说,一个模块里的判断最好只影响它自己或它管辖的下属模块,不能跳到别的分支去影响无关模块,否则模块之间的依赖关系会变得隐晦,维护时很难追踪。

选择题第4题问总体设计阶段的结果是什么,答案是模块结构图,这跟作用范围、控制范围的概念同属一个章节。总体设计要解决的是「系统由哪些模块组成、模块之间怎么调用」的问题,产出的交付物就是模块结构图,而不是模块算法,也不是数据流图。

3.3 覆盖与结构化:判定覆盖、条件覆盖之间没有包含关系

判断题第9题说「判定覆盖不一定包含条件覆盖,条件覆盖也不一定包含判定覆盖」,这个说法是正确的,但它是覆盖类概念里最容易被误判的一题。直观上很多人觉得「判定」比「条件」大,判定覆盖应该覆盖条件覆盖,实际上两者是交叉关系。

可以从两个角度区分。判定覆盖关注的是每个判定的真假分支都被执行过,比如一个判定有真和假两个出口,判定覆盖要求这两个出口都至少走一次。条件覆盖关注的是判定里每个条件的各种取值都出现过,比如判定是 A AND B,条件覆盖要求 A 取真、A 取假、B 取真、B 取假四种情况都覆盖到。一个测试集可能满足判定覆盖但不满足条件覆盖,也可能满足条件覆盖但不满足判定覆盖,因为判定覆盖看分支、条件覆盖看单个条件取值,实现的路径可能完全不同。

判断题第6题也是同一类陷阱:「如果一个程序只有一个入口和一个出口,则称这个程序是结构化的。」结构化程序的完整定义包含三层意思:只由顺序、选择、循环三种基本控制结构组成;采用自顶向下逐步求精的设计方法;满足单入口单出口。题面只给了单入口单出口这一个条件,漏掉了最核心的「三种基本控制结构」,所以判断题干不正确。选择题第6题问三种基本控制结构是什么,答案是顺序、选择、重复,正好把题目缺的那块补上了。

3.4 剩下的小题:边界值、包图与重用范围的速记

选择题第10题给了一个很具体的计算程序:输入量只有一个 X,范围是[-1.0, 1.0],测试用例选了 -1.001、-1.0、1.0、1.001。这四个输入分别覆盖了略低于下边界、下边界、上边界、略高于上边界,正是边界值分析法的典型取点方式。边界值分析法和等价分类法的区别在于:等价分类是把输入域划分成有效和无效的区间,每个区间取一个代表值;边界值分析则专门盯住区间的边界值和边界两侧的值。这题一眼就能认出边界值法,因为选点几乎全部落在边界及其邻域。

选择题第8题问面向对象建模中用于表示主题划分的图形,答案是包图。主题划分是在很高的抽象层次上把系统分割成几个主题域,UML里用包图来表达这种划分。配置图描述物理部署,顺序图和合作图描述交互,都不是主题划分的工具。

选择题第9题问软件成分重用不包括哪一项,答案是方法标准重用。软件重用的层次一般包括代码重用、设计结果重用、分析结果重用,这几个属于「软件成分」的重用;方法和标准的重用属于过程层面的复用,不算软件成分本身。判断题第10题对软件重用的定义描述是正确的,可以跟这道选择题一起记忆。

剩下的判断第8题「验收测试是由最终用户来实施的」通常按教材说法判断为正确;判断第7题「单元测试能发现约80%的软件缺陷」是软件工程里流传很广的经验数据,按该课程口径判断为正确。判断第2题「向已经延晚的项目追加开发人员,可能使它完成得更晚」对应的是人员与进度关系的经典结论,判断为正确。判断第1题说有了大概了解就足以写程序,这是需求工程的反面典型,判断为错误;判断第3题说需求分析时就要考虑维护问题,这是正确说法,维护不是编码之后才想的。

4. 填空、名词解释与简答:把背诵变成答题模板

客观题之后的30分主观题,表面看全是背诵,实际考的是两件事:术语能不能写对字,定义能不能按框架展开。很多学生名词解释背得很熟,落笔时写到一半卡住,就是因为只背了第一句话,没有准备展开内容。

4.1 填空题十空:按表格背不容易写反

这套填空题的十个空分散在软件工程三个基本要素、面向对象开发模型、可行性研究、需求分析模型、结构化分析策略、结构化设计要求、事务分析、单元测试相关文档、对象模型抽象层次这些位置。下面把每个空的应填内容和容易写错的版本列成表。

题号关键题干应填内容常见错填
1软件工程方法学的三个基本要素:方法、( )、( )工具、过程管理、规范
2面向对象软件工程通常采用( )模型演化(喷泉)模型瀑布模型
3可行性研究:技术可行性、经济可行性、( )社会可行性操作可行性
4需求分析三类模型:数据模型、功能模型、( )行为模型对象模型
5结构化分析方法的分析策略是( )自顶向下逐步分解自底向上
6结构化设计的要求是( )高内聚、低耦合高耦合、低内聚
7( )根据输入数据的类型在若干动作序列中选择执行事务分析变换分析
8单元测试相关的文档:( )和详细设计说明书需求规格说明书概要设计说明书
9对象模型五个层次:( )、类与对象层、结构层等主题层对象层

第一空最容易把「工具」写成「管理」,软件工程方法学的三要素在很多教材里固定表述为方法、工具、过程,少一个都算错。第二空要注意面向对象开发通常用喷泉模型这类迭代型模型,瀑布模型是传统结构化方法引用的,填上去方向就反了。第五空的结构化分析策略强调「自顶向下」,这是结构化方法的方法论核心,跟自底向上的测试策略正好相反,记忆时把「分析」和「测试」的策略分开记,不容易串。

4.2 五个名词解释:一条定义加两条展开

名词解释的评分通常看三点:定义核心句是否准确,是否包含了关键要素,是否写了适用范围或目的。只写一句话往往只能拿一半分,需要额外补一到两句展开。

软件工程的定义核心是「将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程」。展开部分可以补两点:软件工程包含方法、工具、过程三个基本要素;目标是提高软件生产率和质量,控制成本与进度。数据字典的定义核心是「对数据流图中所有数据元素、数据结构、数据存储和处理逻辑进行定义的集合」。展开时说清楚它在需求分析阶段起统一命名、消除二义性的作用即可。

需求分析的定义核心是「在可行性研究之后,确定系统必须做什么」,展开时列出需求分析要建立数据模型、功能模型、行为模型,最终产出需求规格说明书。路径覆盖的定义核心是「设计足够的测试用例,覆盖程序中所有可能的路径」,展开时对比语句覆盖、判定覆盖、条件覆盖,说明路径覆盖是最强的覆盖标准,但路径数可能随程序复杂度爆炸。UML的定义核心是「统一建模语言,一种可视化建模语言」,展开时提一句它用图形符号描述系统的静态结构和动态行为,支持用例图、类图、顺序图、状态图等多种模型。

4.3 简答题四题:生命周期、RUP/敏捷、维护分类、OO与结构化

简答题的答题策略是「先列骨架,再填血肉」。四道题里有两道是纯框架背诵,两道是对比分析,对比分析题尤其要写成表格式的分点回答,不能整段糊在一起。

生命周期划分题按教材常见版本分为七个阶段:问题定义、可行性研究、需求分析、概要设计、详细设计、编码与单元测试、综合测试与维护。如果教材写六阶段,通常是合并了问题定义和可行性研究。答题时每个阶段的任务各用一句话说明,比如概要设计阶段确定模块结构和接口,详细设计阶段设计模块内部算法和数据结构。

RUP与敏捷的对比可以从六个维度展开:过程是否可裁剪、迭代周期长度、文档要求、角色分工、需求变更响应、适用项目规模。RUP的特点是迭代式开发、以架构为中心、用例驱动,有完整的角色定义和工件清单,适合中型以上、需求相对稳定的项目。敏捷过程强调短迭代、轻文档、拥抱变化,适合需求不明确、小团队快速交付的场景。答题时按维度对比,每条写一行,比长篇大论得分稳。

软件维护分类题按四类回答即可:纠错性维护修正运行中出现的错误,适应性维护适应环境变化,完善性维护增加新功能或改进性能,预防性维护为未来维护做准备。面向对象与结构化方法的比较题从三个维度写:思维特点上结构化以数据流为中心、自顶向下分解,面向对象以对象和类为中心、封装继承多态;方法特点上结构化用数据流图和结构图,面向对象用UML用例图和类图;适用范围上结构化适合流程清晰、规模中等的系统,面向对象适合需求易变、复杂度高的系统。

5. 避坑清单:四种高频失分方式与应对次序

主观题背了就有分,真正拉开差距的是客观题里那些「看着对实际错」的说法和大题里的计算书写细节。这里把最容易让考生丢分的四类情况集中列出来,每条都按「现象、原因、解决」的顺序拆开,考前对照自查。

5.1 判选题的绝对化表述:三种最容易断错的句子

现象:判断题里出现「如果两个模块之间没有直接关系……这种耦合的模块独立性最弱」被判成正确;「单入口单出口就是结构化」判成正确;「判定覆盖不一定包含条件覆盖」判成错误。这三个答案全部踩反。

原因:第一类是把「非直接耦合」字面理解成「没有直接关系=没有依赖=独立性弱」,实际耦合最弱恰恰代表独立性最强。第二类是拿必要条件当充要条件,单入口单出口只是结构化程序的特征之一,核心的三种基本控制结构没提到,结论不成立。第三类是被直觉带偏,以为判定覆盖覆盖范围更大,应该包含条件覆盖,实际上判定看分支、条件看取值,二者是交叉关系。

解决:所有判断题先把绝对化词找出来。题干出现「只要……就」「……就是……」时,回定义里找有没有漏条件;出现「不一定」「可能」时,往往反而是正确说法。这套卷子两道判断题都是在这个位置设伏,考前可以把所有「定义+特例」型表述集中抄一页,反复看两遍就能免疫。

5.2 填空题:四个被写反的空

现象:软件工程三要素填成「方法、过程、管理」;需求分析三类模型填成「数据模型、功能模型、对象模型」;结构化设计要求填成「高耦合、低内聚」;对象模型五层次第一空填成「对象层」。

原因:前两个是教材版本差异造成的混乱。有的讲义把三要素写成「方法、工具、过程」,有的写成「方法、工具、过程」但顺序不同;需求分析的第三类模型有的叫行为模型,有的叫动态模型,于是学生凭印象混填。后两个是对规律没理解,结构设计当然是高内聚低耦合,对象模型五层次里「主题层」是最顶层的抽象,不可能是一开始就出现的对象层。

解决:填空不要按单题背,按「同一组术语」背。把三要素、三类模型、五层次这种带数字的组合整理成一个小表,每个数字对应哪些术语,填的时候先数数有几个空,再对照组合表选词,基本能避免写反。

5.3 路径测试三连坑:环路计算、独立路径与测试用例

现象:环路复杂度用 E-N+2 和判定节点数+1 两种方法算出不同结果;独立路径列了一堆,数量远远超过环路复杂度;测试用例只设计正常输入,没覆盖负数和提前结束的情况。

原因:第一种是画控制流图时漏边或漏节点,V(G) 算出来自然对不上。常见漏项是循环回边和最后出口节点。第二种是把「独立路径」理解成「所有可能路径」,实际上独立路径要求每条路径至少引入一条程序图中没有出现过的新边,路径数量等于环路复杂度。第三种是没有结合 PDL 里的循环条件,value 数组遇到 -999 就提前退出,输入数量超过 100 也要退出,这些边界条件才是测试用例设计的重点。

解决:算环路复杂度时强制走一遍「先数边、再数节点、最后用判定节点数验证」的流程。以这套卷子的求平均值 PDL 为例,控制流图可以简化出 9 个左右节点、11 条左右边,V(G)=E-N+2=4,用判定节点数验证:图中合计有 3 个判定节点,V(G)=3+1=4,两种方法互相印证。独立路径按四条设计,覆盖有效计算、首输入即 -999、全部输入无效、有效与无效混合这四种情况。测试用例可以按这个思路设计。

用例输入 value 数组minimummaximum期望 average覆盖路径
T1[5, 8, 3]01016/3 ≈ 5.33循环正常结束,total.valid>0
T2[-999]-100100-999首输入即退出,total.valid=0
T3[-5, -3]010-999循环正常结束,全部无效
T4[5, -3]0105有效与无效混合,total.valid>0

5.4 状态图与结构图:数据流混入模块调用的典型错误

现象:应用第一题画 GUI 状态转换图,状态只画了主菜单和文件菜单,少了文件已经打开的状态;应用第二题画软件结构图,把数据流图里的「销售公司」「车间」也画进结构图,模块之间画成了带箭头的加工顺序。

原因:状态图漏状态是因为没把「用户打开一个文件后界面处于什么状态」想清楚。主菜单、文件菜单、文件打开是三个不同状态,退出命令只是触发跳转的事件,不是状态本身。结构图画错是因为没分清数据流图和结构图的本质区别,数据流图表达「数据怎么流动和处理」,结构图表达「模块之间谁调用谁」,结构图的顶层是系统的控制模块,数据源和数据终点应该留在数据流图里。

解决:画状态图时先列状态清单,把界面能停住的每一种情况都列出来,再画状态之间的迁移事件。画结构图时记住一句话:结构图里的箭头只表示调用关系,被调模块必须从属于调用模块,不能出现独立的数据源实体。按照这个原则,生产科的结构图顶层是生产科处理模块,下层分别是接收合同、制定月计划、调整月计划、制定设计及组装月计划、分解周计划这几个功能模块;技术科的结构图下层是产品结构设计和产品工艺设计两个主要分支,结构设计再分产品装配图、外购需求计划、自制物料清单三个子模块,工艺设计再分工艺流程图和物料清单处理。

6. 把一套真题用到三遍:限时自测、错题重做、改造题目

一套真题如果只做一遍对一遍答案,利用率大概只有三成。比较高效的做法是把它拆成三轮,每轮带着不同目的,把一张卷子吃透到能把题目改写的程度。

第一轮是限时自测。找一个完整时间段,按考试标准90分钟把整张卷子做一遍。判断题要求全部给出T或F,不允许空着,不会的也先猜一个,猜完在题号旁边做个记号。对答案时把题分成三类:做对的、做错但看懂解析的、完全不知道在讲什么的。第三类题是复习重点,大概率集中在路径测试的环路计算和结构图的模块划分上。

第二轮隔48小时再做一遍,只做错题和第一轮标过记号的题。这一轮的目标不是记住答案,而是能说出理由。判断第4题如果错的是「非直接耦合独立性最弱」,就要能说出耦合度从强到弱的完整排序;填空第4题如果错的是「需求分析三类模型」,就要能答出数据模型、功能模型、行为模型。能用自己的话把理由讲清楚,才算真正拿下了这道题。

第三轮是改造题目。把判断题从「判对错」改成「判断并改错」,题干写F的,在旁边补一句正确说法;把选择题的干扰项找出来,逐个说明为什么错;把路径测试的输入数据换成自己的数据,重新算一遍环路复杂度并设计一套新测试用例。这个环节相当于自己出题,比反复做原题更能暴露知识漏洞。

做这套真题之前,我也习惯先翻标准答案,结果到第二遍还会被同一道判断题绊倒。从那以后每次复习都强制走一遍「先做、隔天重做、再改题」的流程,改完再上考场,面对原题变体基本不会翻车。这套试卷的完整文字整理版可以下载后按这三轮使用,希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询