logo
COMP3111中等6 学分

软件测试

新南威尔士大学·University of New South Wales·悉尼

COMP3111《软件测试》是 新南威尔士大学 的公开课程页面。当前可确认的信息包括 6 学分,难度 中等,公开通过率 90%。 页面已整理 10 周教学安排,3 个重点考核,方便你快速判断工作量、考核结构和适配度。 课程简介摘要:课程定位 COMP3111/9111 是软件工程专业在‘质量保证 (QA)’维度的进阶必修课。

💪 压力
4 / 5
⭐ 含金量
5 / 5
✅ 通过率
0%

📖 课程概览

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

🧠 大神解析

📊 课程难度与压力分析

COMP3111 的难度属于‘思维逻辑的极限博弈’。写代码是正向思维,写测试是‘反向思维’——你要想尽办法让你的代码挂掉。难点在第七周的变异测试(Mutation Testing),你需要理解为什么 100% 的语句覆盖率依然可能漏掉致命 Bug。压力主要来自于期中机考,你需要在高压下分析一个你从未见过的复杂算法(可能嵌套了多层 If-else)并找出所有的边界点。及格极容易,但拿 HD 需要你对‘逻辑覆盖率’的每个边界条件有近乎病态的直觉。

🎯 备考重点与高分策略

高分秘籍:‘得控制流图者得 Distinction’。期末考试中,画出一个函数的 CFG 并计算圈复杂度(Cyclomatic Complexity)是必考的 20 分大题。一定要练到能精准识别‘逻辑合并点’。重点攻克‘MCDC (修正条件/判定覆盖)’,那是民航级软件测试的标准,也是 D 和 HD 的分水岭。备考时,关注‘等价类表’的撰写规范。对于项目,HD 的关键在于‘Mock 的深度’——不仅模拟正常返回,还要模拟数据库超时、网络波动等边缘情况。重视 Tutorial 里的每一道变异算子题。

📚 学习建议与资源推荐

神书推荐:Paul Ammann 的《Introduction to Software Testing》,全球公认逻辑最清晰的教材。如果 JUnit 不熟,强烈推荐去 YouTube 搜‘Java Techie Mockito’系列。最重要的建议:養成‘先写测试再写代码 (TDD)’的习惯。这能让你理解什么是‘可测试的代码’。学会利用 JaCoCo 插件在 VS Code 里实时查看代码覆盖色块。加入 CS 的 QA 讨论组。

⚠️ 作业与 Lab 避坑指南

项目避坑:千万不要为了覆盖率而写‘垃圾断言 (Assertions)’!老师会手动抽查你的测试代码,如果断言只是为了凑数而没有真实校验逻辑,会被直接判定为学术不诚信。Assignment 写作中,严禁只贴表格,必须写出你的‘测试策略选择理由’。此外,注意 Final 考试有 Hurdle,理论部分的基础定义(如什么构成了回归测试)如果错太多会直接挂。考试时带好直尺,画 CFG 图必须横平竖直。注意:分清‘错误 (Error)’、‘缺陷 (Defect)’与‘故障 (Failure)’的本质定义差别。

💬 过来人经验分享

学长建议:这门课是为你进入工业界‘修金身’。学完后,你的代码水平会领先普通开发者一个时代,因为你学会了编写‘敢于交给任何用户’的稳健代码。建议找一个同样追求‘零 Bug’的队友共同打磨项目。拿 HD 的关键:在报告中展现出你对‘测试成本与质量权衡’的深刻觉知。坚持住,通关 3111,你就真正跨过了从写码匠到软件专家的那道红线。这张成绩单是进入一线大厂 SRE 或基础架构部最有力的筹码。

📅 每周课程大纲

Week 1软件测试导论与质量模型
📖核心知识点:软件测试基本概念与V模型(验证vs确认);测试层级体系——单元测试、集成测试、系统测试、验收测试的定义与适用场景;质量属性(可靠性、可维护性、可用性)与ISO 25010标准概览;Error/Defect/Failure三者的本质区别与因果链。⏰本周节奏:第一周以概念建立为主,lecture密度不高但定义精确度要求极高,建议边听边建术语卡片。🎯考试关联:期末必考「测试层级定义与区分「简答题,V模型对应关系是高频选择题。🧪Tutorial/Lab:配置JUnit 5与JaCoCo环境,完成第一个断言驱动的单元测试用例。📌作业关联:Assignment中代码覆盖率报告需要JaCoCo,本周务必跑通工具链。⚠️易错点:混淆Verification与Validation;将Testing等同于Debugging——测试是发现缺陷,调试是定位修复。
Week 2黑盒测试:等价类划分
📖核心知识点:等价类划分(Equivalence Partitioning)原理——将输入域划分为有限个等价类,每类中任一值代表整类行为;弱等价类测试(单缺陷假设)vs强等价类测试(多缺陷假设);有效等价类与无效等价类的识别方法;最小测试用例集的构造策略。⏰本周节奏:本周开始进入系统化测试设计,lecture会给出多个划分示例,tutorial需要独立完成3-4道等价类划分练习。🎯考试关联:期末大题必考——给定函数规格说明,要求画出等价类表并设计最小用例集,分值通常15-20分。🧪Tutorial/Lab:针对一个多参数输入的Java方法,手动划分等价类并用JUnit实现自动化验证。📌作业关联:Assignment第一阶段要求对目标模块进行黑盒等价类测试,覆盖有效与无效输入。⚠️易错点:遗漏无效等价类(如null、空字符串、超界值);混淆等价类划分与边界值分析的适用场景。
Week 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「条件导致规则数膨胀。
Week 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路径)。
Week 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值(连通分量数)搞错;将不可行路径强行设计测试用例导致用例无意义。
Week 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时只追求覆盖率而忽略断言质量——空断言会被判定为无效测试。
Week 7变异测试与测试有效性评估
📖核心知识点:变异测试(Mutation Testing)核心思想——通过注入人为缺陷(变异体)评估测试套件的缺陷检测能力;变异算子分类(算术替换AOR、关系替换ROR、条件替换COR等);变异得分(Mutation Score)计算=被杀变异体/(总变异体-等价变异体);等价变异体问题及其不可判定性。⏰本周节奏:变异测试是全课理论巅峰,概念密度极高,建议lecture后立即做手算练习巩固。🎯考试关联:期末必考——给定代码和测试套件,判断哪些变异体能被杀死、计算变异得分,分值15-20分。🧪Tutorial/Lab:使用PIT(PITest)框架对Java项目执行变异测试,分析存活变异体并改进测试套件以提升变异得分。📌作业关联:Assignment核心要求——对开源项目执行变异测试,找出原始测试套件的不足并提交改进方案。⚠️易错点:忽略等价变异体导致变异得分计算偏低;混淆「测试杀死变异体「与「测试检测到变异体「的判定条件。
Week 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应聚焦行为验证而非实现细节。
Week 9Web自动化测试与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微调后测试全部失败。
Week 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混淆。

📋 课程信息

学分
6 Credit Points
含金量
5 / 5
压力指数
4 / 5
课程类型
elective

💬 学生评价

💭

还没有同学评价这门课,成为第一个分享体验的人吧

写点评