UniMate AI

COMP3111

软件测试

6 学分难度 中等

课程定位 COMP3111/9111 是软件工程专业在‘质量保证 (QA)’维度的进阶必修课。它解决了开发者最头疼的问题:如何证明你的代码是没 Bug 的?如何防止修改旧功能导致新 Bug(回归)?这门课教你不仅是‘找 Bug’,而是‘构建测试架构’。它是通往高级 QA 工程师、SRE(站点可靠性工程师)、及首席开发岗位的必经之路。它将测试从感性的手工点点点拉升到基于覆盖准则、控制流图及变异测试的理性科学。 技术栈与学习内容 课程围绕‘全自动化测试生命周期’展开。核心技术栈包括:Java JUnit 5 框架、Mockito 模拟对象、Selenium Web 自动化、以及 JaCoCo 覆盖率分析。学习内容涵盖:黑盒测试(等价类划分、边界值分析)、白盒测试(路径覆盖、条件覆盖)、变异测试 (Mutation Testing)——这是全课的理论巅峰、以及集成测试策略。此外,课程引入了基于统计的可靠性分析。学生将学习如何设计能‘杀掉’人为注入 Bug 的强力测试用例。课程强调‘测试效率与覆盖率的平衡’。 课程结构 10 周理论与编程 Lab 结合。评估体系严谨:包含针对覆盖率指标的在线机考、一个要求职业化水准的开源代码库‘漏洞挖掘与测试’项目(Major Assignment)、以及一场强调测试逻辑设计与形式化分析的期末考试。该课极其强调‘证据驱动的代码信心’。 适合人群 计算机专业大三学生。如果你想在面试中展现出极其稳健的代码风格、或者渴望在大型互联网公司掌控质量红线,这门课是你的神功。建议每周投入 12-15 小时进行用例编写与覆盖率打磨。

Course decision

选课先看

先看考核重心、截止节奏和入门要求,再决定这门课是否适合你的学期安排。

考核总权重

100%

3 项考核

最高单项

40%

Final Examination

期末考试

以官方 outline 为准

Hurdle

1 项

需要单独满足

Deadline map

考核时间线

按截止周排列作业节点;持续考核会保留在下方完整考核结构中。

Week 6

Practical Testing Audit

25%

限时现场机考,要求在 60 分钟内为一个逻辑复杂的 Java 类编写满足 100% 分支覆盖的测试用例。

Week 9

Open Source Testing Project

35%

选取一个真实的开源 Java 项目,利用变异测试找出其原始用例的不足,并提交改进后的测试架构报告。

Week 11

Final Examination

40%

综合考察测试理论推导、CFG 路径分析及测试决策能力的笔试。

Syllabus

每周大纲

默认只展示每周独有的知识重点;节奏、考核、Tutorial 和避坑信息按需展开。

  1. 1

    软件测试导论与质量模型

    📖核心知识点:软件测试基本概念与V模型(验证vs确认);测试层级体系——单元测试、集成测试、系统测试、验收测试的定义与适用场景;质量属性(可靠性、可维护性、可用性)与ISO 25010标准概览;Error/Defect/Failure三者的本质区别与因果链。⏰本周节奏:第一周以概念建立为主,lecture密度不高但定义精确度要求极高,建议边听边建术语卡片。🎯考试关联:期末必考「测试层级定义与区分「简答题,V模型对应关系是高频选择题。🧪Tutorial/Lab:配置JUnit 5与JaCoCo环境,完成第一个断言驱动的单元测试用例。📌作业关联:Assignment中代码覆盖率报告需要JaCoCo,本周务必跑通工具链。⚠️易错点:混淆Verification与Validation;将Testing等同于Debugging——测试是发现缺陷,调试是定位修复。

  2. 2

    黑盒测试:等价类划分

    📖核心知识点:等价类划分(Equivalence Partitioning)原理——将输入域划分为有限个等价类,每类中任一值代表整类行为;弱等价类测试(单缺陷假设)vs强等价类测试(多缺陷假设);有效等价类与无效等价类的识别方法;最小测试用例集的构造策略。⏰本周节奏:本周开始进入系统化测试设计,lecture会给出多个划分示例,tutorial需要独立完成3-4道等价类划分练习。🎯考试关联:期末大题必考——给定函数规格说明,要求画出等价类表并设计最小用例集,分值通常15-20分。🧪Tutorial/Lab:针对一个多参数输入的Java方法,手动划分等价类并用JUnit实现自动化验证。📌作业关联:Assignment第一阶段要求对目标模块进行黑盒等价类测试,覆盖有效与无效输入。⚠️易错点:遗漏无效等价类(如null、空字符串、超界值);混淆等价类划分与边界值分析的适用场景。

  3. 3

    黑盒测试:边界值分析与决策表

    📖核心知识点:边界值分析(BVA)——在等价类边界及其邻域(min, min+1, nom, max-1, max)取值;健壮性边界值(加入min-1和max+1);多变量边界值的组合爆炸问题与最坏情况测试;决策表测试——条件桩/动作桩的构造,规则合并与简化技巧。⏰本周节奏:BVA与决策表是黑盒技术的收尾,练习量较大,建议周中完成BVA专题,周末攻决策表。🎯考试关联:决策表是期末计算题高频考点,要求从需求文档中提取条件并构造完整决策表。🧪Tutorial/Lab:为一个日期验证函数设计完整BVA测试集;用决策表方法测试一个保险费率计算模块。📌作业关联:Assignment要求综合运用EP+BVA+决策表三种黑盒方法,需在报告中对比三种方法的缺陷发现能力。⚠️易错点:边界值取点时off-by-one错误;决策表中遗漏「don't care「条件导致规则数膨胀。

  4. 4

    白盒测试:控制流与逻辑覆盖

    📖核心知识点:控制流图(CFG)的绘制规则——基本块、判定节点、汇合节点;语句覆盖(SC)、分支覆盖(DC/BC)、条件覆盖(CC)的定义与层级蕴含关系(DC⊃SC但DC⊄CC);条件/判定覆盖(C/DC)与修正条件/判定覆盖(MC/DC)的区别——MC/DC要求每个原子条件独立影响判定结果。⏰本周节奏:白盒测试是全课理论核心,本周CFG绘制必须练到手熟,建议至少画5个不同结构的CFG。🎯考试关联:期末必考大题——给定代码画CFG、标注覆盖率、设计满足指定覆盖准则的测试用例,通常占20+分。🧪Tutorial/Lab:手动绘制嵌套if-else和循环结构的CFG,用JaCoCo验证分支覆盖率是否达标。📌作业关联:Assignment核心评分维度之一——JaCoCo覆盖率报告需达到指定分支覆盖阈值。⚠️易错点:混淆分支覆盖与条件覆盖;CFG中遗漏隐式分支(如switch的default、try-catch路径)。

  5. 5

    白盒测试:路径覆盖与圈复杂度

    📖核心知识点:路径覆盖(Path Coverage)与基础路径测试法;圈复杂度(McCabe Cyclomatic Complexity)计算——V(G)=E-N+2P,三种等价计算方式;线性无关路径集合的构造方法;路径覆盖的不可行路径(Infeasible Path)问题及处理策略。⏰本周节奏:圈复杂度计算是必须掌握的硬技能,建议本周做8-10道CFG→V(G)→基础路径集的完整练习。🎯考试关联:圈复杂度计算几乎每年必考,常与CFG绘制联合出题;不可行路径的识别是区分D和HD的关键。🧪Tutorial/Lab:对一个包含多层循环和条件的排序算法计算圈复杂度,导出基础路径集并编写对应测试用例。📌作业关联:Assignment报告中需分析目标模块的圈复杂度并论证测试充分性。⚠️易错点:V(G)公式中P值(连通分量数)搞错;将不可行路径强行设计测试用例导致用例无意义。

  6. 6

    灵活周:阶段复习与实践审计

    📖核心知识点:黑盒与白盒技术的综合对比——适用场景、优缺点与互补关系;测试充分性准则的层级关系总结(SC⊂DC⊂Path Coverage);Practical Skills Audit准备——限时60分钟为陌生Java类编写满足100%分支覆盖的测试用例。⏰本周节奏:Flex Week是冲刺Practical Audit的关键窗口,建议每天限时练习一个陌生类的测试编写,训练「看规格→画CFG→写用例「的流水线速度。🎯考试关联:Practical Audit本身占25%且考察形式接近期末实操题,本周的练习直接提升期末应试能力。🧪Tutorial/Lab:模拟Audit环境,在限时条件下对一个复杂业务逻辑类完成测试编写与覆盖率验证。📌作业关联:Audit的代码质量标准与Assignment一致,本周打磨的测试代码风格可直接迁移到Assignment。⚠️易错点:Audit时只追求覆盖率而忽略断言质量——空断言会被判定为无效测试。

  7. 7

    变异测试与测试有效性评估

    📖核心知识点:变异测试(Mutation Testing)核心思想——通过注入人为缺陷(变异体)评估测试套件的缺陷检测能力;变异算子分类(算术替换AOR、关系替换ROR、条件替换COR等);变异得分(Mutation Score)计算=被杀变异体/(总变异体-等价变异体);等价变异体问题及其不可判定性。⏰本周节奏:变异测试是全课理论巅峰,概念密度极高,建议lecture后立即做手算练习巩固。🎯考试关联:期末必考——给定代码和测试套件,判断哪些变异体能被杀死、计算变异得分,分值15-20分。🧪Tutorial/Lab:使用PIT(PITest)框架对Java项目执行变异测试,分析存活变异体并改进测试套件以提升变异得分。📌作业关联:Assignment核心要求——对开源项目执行变异测试,找出原始测试套件的不足并提交改进方案。⚠️易错点:忽略等价变异体导致变异得分计算偏低;混淆「测试杀死变异体「与「测试检测到变异体「的判定条件。

  8. 8

    模拟对象、存根与集成测试策略

    📖核心知识点:测试替身(Test Doubles)体系——Dummy、Stub、Spy、Mock、Fake的定义与适用场景;Mockito框架核心API——when/thenReturn、verify、ArgumentCaptor;集成测试策略——自顶向下(需Stub)、自底向上(需Driver)、三明治(Sandwich)、大爆炸(Big Bang)各策略的优缺点与适用场景。⏰本周节奏:Mockito实战量大,建议先看官方文档Quick Start,再做Lab练习,最后将Mock技巧应用到Assignment中。🎯考试关联:集成测试策略对比是期末简答/论述题常客;Mock vs Stub的区别是高频选择题。🧪Tutorial/Lab:使用Mockito为一个依赖数据库和外部API的服务类编写隔离单元测试,练习模拟异常返回与超时场景。📌作业关联:Assignment中对外部依赖的测试必须使用Mock隔离,HD标准要求覆盖正常路径+异常路径+边界情况。⚠️易错点:过度Mock导致测试与实现强耦合——Mock应聚焦行为验证而非实现细节。

  9. 9

    Web自动化测试与Selenium

    📖核心知识点:Selenium WebDriver架构——浏览器驱动、元素定位策略(ID、CSS Selector、XPath);Page Object Model(POM)设计模式——将页面元素与测试逻辑分离,提升可维护性;显式等待(WebDriverWait)vs隐式等待的区别与最佳实践;模拟用户交互——表单填写、下拉选择、文件上传、多窗口切换。⏰本周节奏:Selenium上手需要环境配置时间,建议周初完成ChromeDriver配置与第一个脚本,周中练习POM模式,周末将POM应用到Assignment。🎯考试关联:POM设计模式的原理与优势是期末论述题考点;元素定位策略的选择依据可能出现在选择题中。🧪Tutorial/Lab:使用Selenium对一个示例Web应用完成注册→登录→搜索→验证结果的端到端自动化测试脚本。📌作业关联:Assignment可能要求提交包含Selenium测试的完整测试架构,POM结构是加分项。⚠️易错点:使用Thread.sleep替代显式等待导致测试不稳定(Flaky Test);XPath过于绝对化导致DOM微调后测试全部失败。

  10. 10

    测试管理、TDD与全课总结

    📖核心知识点:测试驱动开发(TDD)红-绿-重构循环——先写失败测试→写最小实现→重构优化;行为驱动开发(BDD)与Given-When-Then模式;缺陷管理生命周期——New→Open→Fixed→Verified→Closed;测试计划与测试报告的工业标准结构;全课知识图谱回顾——黑盒→白盒→变异→集成→自动化的完整测试体系。⏰本周节奏:最后一周以复习整合为主,建议绘制全课思维导图,将10周内容串联成「测试金字塔「体系。🎯考试关联:期末综合题可能要求为一个给定系统设计完整测试策略(选择黑盒/白盒/集成方法并论证),TDD流程是简答题常客。🧪Tutorial/Lab:用TDD方式从零实现一个小型计算器模块,体验「先测试后实现「的开发节奏与心理转变。📌作业关联:Assignment最终提交需包含测试策略选择的论证报告,本周的全课回顾直接支撑报告写作。⚠️易错点:TDD中跳过重构步骤导致代码腐化;将BDD的Given-When-Then与传统测试用例的Arrange-Act-Assert混淆。

Assessment

考核结构

Practical Testing Audit

限时现场机考,要求在 60 分钟内为一个逻辑复杂的 Java 类编写满足 100% 分支覆盖的测试用例。

25%

Week 6

Open Source Testing Project

选取一个真实的开源 Java 项目,利用变异测试找出其原始用例的不足,并提交改进后的测试架构报告。

35%

Week 9

Final ExaminationHurdle

综合考察测试理论推导、CFG 路径分析及测试决策能力的笔试。

40%

Week 11

From Seniors

学长留下的

基础信息谁都查得到,真正值钱的是过来人的经验。

学姐说

比你早一年的学长留下的真实经验 —— ChatGPT 给不了。

这门课还没有学长经验,你可以是第一个 —— 注册后在课内分享。

往年考点 / 踩坑

这门课暂无往年考点记录。

毕业生去向(整体)

下面是匠人学院毕业生整体去过的公司分布(来自脱敏校友证言)。这是全平台的总体去向,不代表选这门课的人一定去这些公司。

统计自 317 份脱敏校友证言

Deloitte

6 位校友

岗位:Graduate Program · Graduate Consulting · Platform Engineer · Web developer · Platform engineer

Zerologix

4 位校友

岗位:Frontend Dev · junior frontend developer · Front-end Developer · Full Stack Developer

Servian

4 位校友

岗位:Full-stack Developer · Data Engineer · Consultant

关于这块数据,我们说实话

雇主墙来自脱敏毕业生证言(testimonials)的整体分布,无法关联到具体学员或其所选课程;仅作为毕业生去向的总体社会证明展示。

我们没有"某位学长选了这门课、后来进了哪家公司"这种可查询的个人去向档案 —— 校友证言是脱敏的,无法关联到具体的人或他选过的课。所以这里只给整体分布,不给个人路径,不编。