食用指南
在本次作业中,你将上手对五个函数进行单元测试,以在实操中进一步理解熟悉软件测试的方法论。
你需要对三个(由助教处心积虑构造出的毫无意义且逻辑复杂的)函数进行白盒测试。你将对这些函数进行人工的控制流和数据流分析,画出函数的控制流图,并给出尽可能的测试输入来达成对函数的行覆盖、分支覆盖、条件组合覆盖。如果愿意,你还可以在配套代码包里,使用Boost.Test库编写并实际运行你的测试,然后使用llvm-cov工具分析你的测试对待测函数的覆盖情况。如果你不会使用上述库/工具,我们还在文档中提供了简单的教学和进一步学习的指引。
你需要对两个函数(包括一个非常复杂的模板函数)进行黑盒测试。你将从函数的功能描述和函数签名出发,应用等价类划分和边界值分析的思想,设计出尽可能少但是足够高质量的测试样例。你依然可以在配套代码包里来实际运行你的测试,并初步体会为什么对于复杂的函数,我们会更倾向使用黑盒测试的思想。
作业要求
你需要在教学网上的对应作业模块提交的:
- 一个PDF文件,命名为"学号-姓名"(如2500010086-二进雉),内容是本次作业五道题目的解答
每道题目的解答应包括三个部分:
- 你的解答
- 你常用的生成模型给出的解答
- 对比生成模型的解答,你的解答的优越/不足之处
每道题目的具体解答要求见题目文档,提示词自拟,涉及到画图的问题不要求生成模型也给出答案。
任何符合上述格式的作业,只要态度认真,无学术诚信问题,都将得到满分。
(如果你平常不使用生成模型,可以考虑使用DeepSeek V4模型来完成本次作业,它完全免费且性能足够本次作业的需要)
文档导引
黑盒测试作业(必读)
包含了需要你完成黑盒测试的两道题目。
白盒测试作业(必读)
包含了需要你完成白盒测试的两道题目。
vcpkg包管理器介绍
选读内容,介绍了如何安装、使用vcpkg包管理器。
vcpkg是由microsoft团队开发的一款C++包管理器,用于统一管理项目所需的C++第三方库。如果你有兴趣进行C++实际项目的开发,学习如何使用包管理器能极大地便利你的开发流程。
Boost.Test第三方库介绍
选读内容,介绍了如何安装、使用Boost.Test第三方库进行C++项目的单元测试。
Boost库是C++社区中公认的一组高质量第三方库的集合,而Boost.Test库则是其中专用于软件测试(尤其是单元测试)的库。配合vcpkg包管理器,你可以将此库轻松地集成进你的C++项目(比如说,mini-lisp),并使用该库提供的一系列测试宏,轻松地为你的函数编写单元测试。哦,当然,测试样例还得靠你自己想,或者用别的什么方法来生成。
llvm-cov覆盖率检测工具介绍
选读内容,介绍了如何让G++/Clang++对你的C++程序进行覆盖率插装,并使用llvm-cov对进行了覆盖率插装的程序进行覆盖率检测。
在C++生态中,最流行的两个开源覆盖率检测工具就是gcov(GCC-Cov)和llvm-cov(LLVM-Cov)了,而llvm-cov可以做到完美兼容gcov,所以我们在这里选择介绍llvm-cov。覆盖率检测一般只用于大型项目的专业软件测试中,在个人日常开发中几乎不会用到,如果你未来不打算从事相关领域的工作和研究,本部分内容对你来说很可能是完全无用的。
作业配套代码包使用说明
选读内容,介绍了如何使用作业配套的代码包。
往届学生反映,只是书面地完成我们提供的软件测试作业并不能满足学习的需要,他们希望能学习如何在编程实践中运用软件测试的知识,这正是上面一串教学和这份配套代码包出现的原因。为了不给同学们增加额外的压力,本次作业本质上还只是书面作业,我们提供的所有额外内容都是为那些有额外需求的同学服务的。如果你想要让你在本次作业中设计的测试在实际的测试框架中跑起来,并观察覆盖率等结果,可以考虑使用本配套代码包。这套代码包提供了待测函数的代码实现,并使用cmake编写了简单的带覆盖率插装的测试框架,你可以自由地书写测试样例,并观察这些测试样例运行的结果。