软件构造复习(3)
Chapter 2: Process and Tools of Software Construction
软件测试与测试优先的编程
学会用等价划分和边界值分析方法为模块设计测试用例,用工具度量一组测试用例对代码的“覆盖度”,了解下列测试手段:
2.1 Software Testing
测试是提升软件质量的重要手段,可以确定软件是否达到可用级别(用户需求)。但是无法达到100%无错误。好的测试:能发现错误、不冗余、最佳特性、复杂度适中。
测试级别可以分为:单元测试、集成测试、系统测试以及回归测试。
Static vs. Dynamic testing
静态测试:肉眼检查。
动态测试:用测试用例进行实际测试。
Testing vs. Debugging
测试:发现是否错误。
调试:识别错误根源,消除错误。
White-box vs. black-box testing:
白盒测试:对程序内部代码结构的测试。 黑盒测试:对程序外部表现出来的行为的测试。
2.2 Test Case
测试用例是什么? 测试用例:输入+执行条件+期望结果
好的测试用例:最可能发现错误,不重复不冗余,最有效,既不简单也不复杂。
2.3 Test-First Programming
测试优先的编程(Test-First Programming):
先写spec,也就是specification,再写符合spec的测试用例,最后写代码、执行测试、有问题再改、再执行测试用例,直到通过它。
注:关于specification的详细介绍将在第三章中展现。
先写测试会节省大量调试时间。
测试驱动开发(Test-driven development TDD):
2.4 Unit Testing
单元测试(Unit Testing):
针对软件的最小单元模型开展测试,隔离各个模块,这样容易定位错误和调试。
2.5 Automated Unit Testing with JUnit
JUnit是xUnit的一个子集,是Java语言的单元测试框架。在使用时要在方法前加上@Test的注释字样。一个单元测试方法通常包含多个测试模块,并且会运用assertion方法(比如 assertEquals, assertTrue, assertFalse)来检查结果。
2.6 Black-box Testing
黑盒测试(Black-box testing):用于检查代码的功能,不关心内部实现细节。
黑盒测试所用测试用例是检测程序是否符合规约。也就是用尽可能少的测试用例,尽快运行,并尽可能大的发现程序的错误。
1. 分区选择测试用例
等价类划分(Equivalence Partitioning):基于等价类划分的测试就是将被测函数的输入域针对每个输入数据需要满足的约束条件划分为等价类,再从等价类中导出测试用例。每个等价类代表着对输入约束加以满足/违反的有效 /无效数据的集合。
分为几种情况:输入数据限定了数值范围、 输入数据指明了特定的值、
输入数据确定了一组数值、输入数据是Y/N
选择测试用例覆盖所有等价类。
2. 含边界分区(Include Boundaries in the Partition)
边界值分析(Boundary Value Analysis BVA):大量的错误发生在输入域的“边界 ”而非中央,边界值分析方法是对等价类划分方法的补充。在等价类划分时,将边界作为等价类之一加入考虑。
每个维度的每个取值至少被1个测试用例覆盖一 次即可。测试完备,但用例数量多,测试代价高;测试用例少,代价低,但测试覆盖度未必高,二者需要折中。
2.7 White-box Testing
Black-box vs. White-box testing: 黑盒测试完 全从函数spec导出测试用例,不考虑函数内部实现,而白盒测试要考虑内部实现细节,根据程序执行路径设计测试用例。白盒测试一般较早执行。
白盒测试方法:
独立/基本路径测试:对程序所有执行路径进行等价类划 分,找出有代表性的最简单的路径(例如循环只需执行1次),设计测试用例使每一条基本路径被至少覆盖1次。
2.8 Automated Testing and Regression Testing
自动测试(Automated testing):自动调用被测函数、自动判定测试结果、自动 计算覆盖度。例如JUnit
Automated testing vs. Automatic test generation:
Automated testing只是“测试用例的自动执行”,并非“自动生成测试用例”。自动生成测试用例仍是一个难题。
回归测试(Regression testing ):
回归测试:一旦程序被修改,重 新执行之前的所有测试。
自动化回归测试(Automated regression testing):一旦发现bug,要马上写一个可重现该bug的测试用例,并将其加入测试库。
tips:Travis-CI
2.9 Documenting Your Testing Strategy
记录测试策略(Documenting Testing Strategy):需要在程序中显式记录,让其他人可以理解并评判。
Summary
测试优先的编程:在写程序前先写测试用例;
写测试用例时注意分区和边界;
测试时白盒测试、语句覆盖一起进行;
每个模块都要进行模块测试,尽可能独立进行;
自动化回归测试减少bug;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理