本周课程把第六章测试的内容提前讲了一部分,主要为实验1服务,讲了有关测试的概念、作用和基本方法。“测试优先”的思想是非常重要的,根据spec写出简单而全面的测试,在方法/类完成后第一时间对其进行测试,保证每个方法/类的正确性,就能显著提高整个程序的正确性。如果先写完所有代码再进行测试、debug,将耗费更多的时间定位错误,会严重降低效率。
有关测试
1.好的测试:能发现错误,不冗余,具有最佳特性,复杂度适中。
2.测试种类:分为单元测试、集成测试、系统测试。
3.测试需要有正确的态度:测试时要让程序尽快出错,因为只有发现了错误才有改正错误的机会。把错误改正后,代码质量才能得到提升。
测试用例
1.测试用例是输入+执行条件+期望结果。测试用例的开发是有其特定目的的,一般来说是测试程序某一部分的正确性或性能。
2.测试流程 :
写测试用例->组织测试用例(一般在和src同级的文件夹test中)->执行测试用例->获取状态和报告->根据报告修改并重新测试直到测试通过
测试优先编程/测试驱动开发(TDD)
1.在写源代码之前先写测试,尽早而经常地经常测试,而不是把测试留到最后。最后测试通常会降低效率,因为总体测试之前没有对代码的任何部分进行测试,每一处都有可能出错。
2.步骤:写规范(即指定输入和输出的关系)->写规范的测试用例->写代码->执行测试
3.规范也有可能是有漏洞的。写测试可以发现规范中的错误或者不完整,及时修正有利于程序的开发。
使用JUnit进行自动化单元测试
1.JUnit是一个Java语言的单元测试框架。Junit 测试也是程序员测试,即所谓的白盒测试,它需要程序员知道被测试的代码如何完成功能,以及完成什么样的功能。
2.编写测试类的原则:
①测试方法上必须使用@Test进行修饰
②测试方法必须使用public void 进行修饰,不能带任何的参数
③新建一个源代码目录来存放我们的测试代码,即将测试代码和项目业务代码分开
④测试类所在的包名应该和被测试类所在的包名保持一致
⑤测试单元中的每个方法必须可以独立测试,测试方法间不能有任何的依赖
⑥测试类使用Test作为类名的后缀(不是必须)
⑦测试方法使用test作为方法名的前缀(不是必须)
3.测试类需要组织在特定目录中,并且要与被测试类处于同一包中
4.有关基本测试方法的书写,参考https://www.cnblogs.com/ysocean/p/6889906.html
黑盒测试
1.黑盒测试忽略实现细节,关注代码功能是否符合要求。
2.黑盒测试用例的要求:用尽可能少的测试用例,尽快运行,发现尽可能多的错误。
3.黑盒测试与规约、程序的关系:黑盒测试用例需要在规约的基础上进行选择,测试在规约的范围内,程序是否出现错误,即代码功能是否符合要求。
4.等价类划分
基于相似的输入展示相似行为的假设。将被测函数的输入域划分为若干等价类,从等价类中导出测试用例。其中每个等价类代表着对输入加以满足/不满足的有效/无效数据集合。
5.边界值分析
在划分等价类后,从每个等价类中取边界值进行测试。因为程序的大部分错误发生在输入域的边界,而不是中央。边界值分析方法是对等价类划分方法的补充。
代码覆盖度
代码覆盖度是白盒测试中的概念。指已有的测试用例覆盖了被测程序的多少,通常用被测程序中被执行语句百分比衡量。代码覆盖率越高,测试越充分。但要提高覆盖度则需要更多的测试用例,同时会提高测试代价。
测试效果:路径覆盖>分支覆盖>语句覆盖
测试难度:路径覆盖>分支覆盖>语句覆盖