简介安徽大学软件工程期末试卷A卷是一份面向高校软件工程课程期末复习与自测的典型试题资料适合计算机相关专业学生、考研复试备考生及任课教师参考。试卷围绕软件生命周期、可行性研究、耦合类型、CMM成熟度等级、面向对象分析与设计、白盒测试等核心考点展开包含单选题、简答题、应用题和设计题四大部分并附有参考答案与知识点解析能够帮助使用者快速梳理重点难点。压缩包共1个doc文件大小仅38KB内容精炼、易于打印或导入笔记软件使用。目前已有373人浏览学习说明其在同类复习资料中具备一定参考价值。通过整套试卷的练习读者可系统检验自己对软件工程基本概念、结构化分析工具、测试用例设计及数据流程图/对象图绘制等知识的掌握程度也可作为期末冲刺或平时章节测验的题源。1. 一份软件工程期末试卷A为什么值得逐题拆解这份安徽大学《软件工程》考试试卷A卷120分钟四个大题单选20分、简答30分、应用20分、设计30分。表面看只是期末周的复习资料实际把软件工程的核心考点压缩成了一张知识图谱从软件危机、可行性研究、耦合内聚到结构化分析、面向对象建模、白盒黑盒测试再到判定表和数据流图这些工程工具。对正在复习软件工程导论的人它是最直接的查漏补缺清单对准备软件工程课程设计、毕业设计的人它用一道考务系统题目演示了“理论如何落地到系统建模”。拆这套试卷不是为了背答案而是理解出题人为什么把这些点放在一起。2. 单选题背后的概念辨析三要素、耦合强度与可行性研究2.1 软件工程三要素过程、方法、工具的边界第一题问软件工程的三要素过程、工具已经有了缺的是方法。很多教材把三者并列实际项目里它们的边界经常被混淆过程是活动序列比如需求、设计、编码、测试方法是完成活动的技术手段比如结构化分析、面向对象设计工具是让方法可执行的载体比如 IDE、建模工具、持续集成流水线。一个常见的误区是把“文档”也当成要素文档只是过程产出物不是要素本身。这类概念题反复出现是因为软件工程本身不像编程语言有标准答案。三个人分别做同一个模块选择的“方法”决定了设计文档长什么样选择的“工具”决定了代码能不能被自动化验证。理解三要素的边界比记住答案更有用当你和别人协作时争议往往出在“这是过程问题还是工具问题”。2.2 经济可行性净收益计算才是真正的考点第二题表面是选择实际是净现值计算。题干说修改库存系统需要 3000 元每年节省 2500 元年利率 12%生命周期 2 年求纯收入。这里最大的陷阱是直接用 2500×2-30002000 当作答案把第二年的节省当成今年就能花的钱。正确的做法是把未来现金流按利率折现到今天。时间点现金流折现因子折现值现在-30001-3000第一年末25001/(10.12)2232.14第二年末25001/(10.12)²1992.98合计——1225.12用代码算一遍更直观cost 3000 annual_saving 2500 rate 0.12 npv annual_saving / (1 rate) ** 1 annual_saving / (1 rate) ** 2 net_income npv - cost print(round(net_income, 2))这段代码的逻辑是第一年节省的 2500 元除以 1.12得到当前价值 2232.14第二年节省的 2500 元除以 1.12 的平方得到 1992.98两者相加再减去初期投入。**表示幂运算round(..., 2)保留两位小数。结果 1225.12 对应选项 B。做这类题要养成习惯年利率超过 10% 时只看静态回收期会严重高估收益。2.3 耦合类型与强度一套可以照着判断的规则第十题考耦合从强到弱排序答案是内容耦合、公共环境耦合、控制耦合、数据耦合。这意味着设计模块时要尽量避免最右侧的强耦合。下面的表是我平时评审代码时用来对照的耦合类型模块之间怎么联系强度典型例子内容耦合一个模块直接修改另一个模块内部数据最强访问别人的私有变量公共耦合多个模块共享同一个全局数据结构强多个模块读写全局配置表控制耦合传递控制标志影响对方执行逻辑中传一个flag让函数走不同分支数据耦合传递简单参数弱传姓名、数值等基本数据第三题问“传递姓名、住址、电话号码、生日和身份证号码等五个变量”属于什么耦合答案归为标记耦合。这个题有争议如果五个变量是独立参数严格说应该算数据耦合但如果它们被封装成一个“个人信息”结构体再传递就是标记耦合。国内软工教材倾向于把这类多个相关数据项的传递看作标记耦合实际编码里遇到参数超过三四个也应该封装成对象否则可读性会迅速下降。2.4 可行性研究、CMM与阶段归属的记法第四题可行性研究三个方面答案是技术可行性、经济可行性、操作可行性。干扰项“系统可行性”看起来合理但操作可行性强调的是用户是否愿意用、流程是否跑得通这在国内软件工程教材里是固定组合。第五题 CMM 考的是关键过程域。除第一级外每个成熟度等级都包含若干关键过程域KPA选择 B。要区分“关键实践”和“关键过程域”KPA 是组织要达到该等级必须解决的一组目标关键实践是具体活动。第六题“国家—中国”是类与实例的关系选择 D。第七题面向对象分析是对系统进行需求建模选择 A。第八题数据流程图属于功能模型选择 B。第九题 Jackson 图用于详细设计阶段选择 C。这几题连在一起出题人其实在考你“用什么工具描述系统的哪个侧面”DFD 管功能状态图管行为类图管对象结构。3. 判定表与黑盒测试用例两道应用题的可复现解法3.1 用判定表建模教师课时津贴规则第一道应用题要求绘制判定表。规则不复杂课程性质分为讲座和一般授课讲座时无论什么职称都是 50 元一般授课时教授 30、副教授 25、讲师 20、助教 15。拖垮很多人的不是规则本身而是判定表的合并逻辑。先把所有条件组合穷举出来会有 8 条规则但讲座时职称是无条件项可以用“—”表示合并后只剩 5 条规则。条件/规则12345课程性质是讲座YNNNN职称为教授—YNNN职称为副教授—NYNN职称为讲师—NNYN职称为助教—NNNY每课时津贴5030252015判定表的本质是把带条件的决策逻辑表格化。在软件工程实训里这种表格常用于促销折扣、审批流程、规则引擎配置。画表时先写条件桩和动作桩再穷举条件组合最后合并动作相同的列。这里的“—”表示该条件对结果没有影响这是判定表最重要的简化手段也是阅卷时的采分点。提示如果职称之间存在互斥关系是教授就不可能同时是副教授不要画成两个独立条件否则表格会出现无法满足的规则。3.2 黑盒测试二次方程 Ax²BxC0第二道应用题要求用黑盒方法设计测试用例。题干里提到五类输出相等实根、不等实根、两个大小相等符号相反的实根、仅有一个实根、两个虚根。这里最容易漏掉的是“两个大小相等符号相反的实根”它对应的是二次项系数 A 不为 0、B0 且 D0 的情况而“仅有一个实根”对应 A0 且 B≠0方程退化成一次方程。黑盒测试的立足点是输入和输出之间的关系不需要先看代码实现。先用 Python 写一个参考求解器再对照它验证测试用例import math def solve_quadratic(a, b, c): if abs(a) 1e-12: if abs(b) 1e-12: return 无解或无穷解 return f仅有一个实根: {-c / b:.4f} d b * b - 4 * a * c if abs(d) 1e-12: return f相等实根: {-b / (2 * a):.4f} if d 0: r1 (-b math.sqrt(d)) / (2 * a) r2 (-b - math.sqrt(d)) / (2 * a) if abs(r1 r2) 1e-12: return f大小相等符号相反实根: {r1:.4f}, {r2:.4f} return f不等实根: {r1:.4f}, {r2:.4f} real -b / (2 * a) imag math.sqrt(-d) / (2 * a) return f两个虚根: {real:.4f}{imag:.4f}i, {real:.4f}-{imag:.4f}i代码里abs(a) 1e-12用来判断 A 是否约等于 0因为浮点数不能直接比较相等。d是判别式d 0时有两个实根r1 r2约等于 0 说明两根互为相反数。测试用例可以分成等价类判别式大于 0、等于 0、小于 0再加上一次方程退化场景。用例ABC期望输出覆盖类型11-21相等实根 1.0D021-32不等实根 2.0, 1.0D0310-4大小相等符号相反实根 ±2.0B0, D04024仅有一个实根 -2.0一次方程退化5104两个虚根 ±2iD0设计黑盒测试用例时先列有效等价类和无效等价类再补边界值。这道题里A0 是边界B0 是边界D0 也是边界。很多学生只写了 A0 和 D0漏掉 B0导致“大小相等符号相反”这一类没有被覆盖。用 Python 写一个求解器比对期望结果是软件工程中“可执行规格说明”的雏形既能在考场上验算也能用在正式项目的测试夹具里。4. 考务系统建模实战从数据流图到结构图的推导4.1 数据流图分层与数据字典第三题考务系统是典型的“功能分解”建模题。功能有五个检查报名单、编准考证、检查成绩清单、审定合格者、制作考生通知单。先确定外部实体考生、阅卷站、考试中心。再确定数据存储报名单、考生名单、成绩清单、合格标准。顶层图只有一个处理框“考务处理系统”外部实体通过数据流和它交互0 层图把五个处理画出来数据流必须闭合不能出现没有来源或没有去向的数据流。数据字典要与数据流图配套否则图上的线条缺少精确含义。常见格式是“名字 组成成分”报名单 考生姓名 身份证号 报考专业 准考证 准考证号 考试地点 考试时间 成绩清单 准考证号 各科成绩 总分 合格标准 单科最低分 总分最低分 考生通知单 准考证号 各科成绩 合格标志写数据字典时要确保每个数据项都能在图中找到对应数据流。比如“合格标准”来自考试中心但题目里没有明说它是一条输入流很多人在画图时把它画成了处理内部数据这就丢了数据流完整性。我的做法是先列出所有外部输入和输出再反推哪些数据需要存储最后补处理之间的中间流。数据字典词条里的“”表示组合“|”表示选择。4.2 从 DFD 到结构图的变换分析从数据流图推导结构图最实用的是变换分析。先找中心变换这个考务系统的中心是“审定合格者”它前面是输入流后面是输出流。对应的初始结构图是一棵调用树考务处理系统 ├── 输入处理 │ ├── 检查报名单 │ ├── 编准考证 │ └── 检查成绩清单 ├── 中心变换 │ └── 审定合格者 └── 输出处理 ├── 制作准考证 └── 制作考生通知单需要注意的是结构图里的上下层连线是调用关系不是数据流向。很多人在考试里把 DFD 的箭头直接搬到结构图上导致“检查报名单”连到“编准考证”也画一条线这在结构图里没有意义。结构图只表达模块分解上层模块调用下层模块。数据流和调用关系要分开画分得越清楚越不容易丢分。数字上这个结构图和题目功能一一对应考生报名单进入“检查报名单”通过的报名单进入“编准考证”编好的准考证交给考生汇总名单给阅卷站成绩清单回来以后“检查成绩清单”进入“审定合格者”最终生成“考生通知单”。把这张表对照结构图检查能快速发现漏掉的处理或多余的连线。处理名输入数据流输出数据流检查报名单报名单合格报名单编准考证合格报名单准考证、考生名单检查成绩清单成绩清单合格成绩清单审定合格者合格成绩清单、合格标准合格标志制作考生通知单合格标志、成绩清单考生通知单4.3 常见错误把控制流和存储画乱软件工程毕业设计里的数据流图最常见的错误是出现“箭头”带条件。比如“如果成绩合格则发送通知单”这条线在 DFD 里不应该直接画成一条带判断的线。判定条件应该放在处理说明中数据流只负责传递数据。合格与否是审定模块传出的一个数据项不是控制信号。另一个容易错的地方是数据存储的边界。成绩清单来自阅卷站阅卷站是外部实体成绩清单先进入系统系统检查后再存起来不能直接从外部实体连到存储。考试时如果时间紧张至少保证数据字典里出现的每个名字都能在图中找到对应的数据流或存储。5. 对象图与信息隐蔽设计题最后 10 分的答法5.1 从考务系统提取对象和属性第四题的第二问要求画出对象图并给出每个对象的属性。从题目描述里可以直接抽出候选对象考生、报名单、准考证、成绩清单、合格标准、考生通知单。属性设计的原则是“谁的数据归谁管”不要把考生信息重复塞进成绩清单里而应该用准考证号关联。对象属性考生姓名、身份证号、联系方式报名单报名单编号、报考专业、审核状态准考证准考证号、考试地点、考试时间成绩清单准考证号、各科成绩、总分合格标准单科最低分、总分最低分考生通知单准考证号、成绩、合格标志对象图里要画实例之间的链比如“考生 张明”对应一张报名单再对应一张准考证。这里和类图的区别在于对象图是运行时的具体实例关系类图是静态类型结构。单选题里“国家—中国”就是类与实例的关系放到对象图里就是一个名为“国家”的类实例化出“中国”这个对象。5.2 信息隐蔽在考务系统里的落点信息隐蔽是简答题考点也是设计题的加分点。它的含义是模块内部细节不让外部看到外部只能通过规定接口访问。放在考务系统里合格标准应该封装在“审定合格者”模块内部考生通知单模块只需要调用“是否合格”的接口而不用直接读合格标准的数据结构。这样做的好处是修改规则时只动一个模块测试时也可以单独验证判定逻辑。实际代码可以用一个简单类表达这个思想public class QualifyChecker { private int minSubjectScore; private int minTotalScore; public boolean isQualified(ScoreSheet sheet) { return sheet.getMinSubject() minSubjectScore sheet.getTotal() minTotalScore; } }这段 Java 代码里minSubjectScore和minTotalScore是私有字段外部只能通过创建对象、调用isQualified方法拿到结果。修改合格标准时只需要调整这两个私有字段不用动其他模块。答辩时把这个类的结构画在白板上比空背“可维护性提高”更有说服力。5.3 这 10 分的提分技巧先列表格再画关系考场上画对象图最忌一上来就画线和箭头。我的习惯是先用表格列出对象和属性再根据表格里出现的引用关系画对象之间的链。画完以后回头对照第一问的数据流图确认每个处理涉及的数据项都能在对象图里找到对应对象。比如 DFD 里有“合格标准”这条数据流对象图里就必须有“合格标准”这个对象如果漏了前后不一致阅卷老师一眼就能看出来。这个对照检查是这 10 分里最容易被忽略的隐藏得分点。本文还有配套的精品资源点击获取