【《重构 改善既有代码的设计》学习笔记4】构筑测试体系

本篇文章的内容来自《重构 改善既有代码的设计》一书学习笔记整理并且加上自己的浅显的思考总结!

如果想要进行重构,首要前提是 拥有一个可靠的测试环境。

1、 自测代码的价值

完成一个功能:设计+开发+调试,认真分析,程序员最多花费的时间不是开发(编码),而是用来调试。调试可能花费无数个小时,甚至通宵达旦。

修复错误是快速的,而找出错误却是恶梦一场。当修复好一个错误,总是会有另一个错误的出现。而引入的错误可能要很久之后才能注意到它。【排查错误,定位错误花费的时间更多,并且在改bug的过程,又引入新的bug】

在做测试的时候,确保所有的测试都完全的自动化,让它们检查自己的测试结果。【做到这一点不容易,我目前所在的公司单元测试都不规范,更不要说完全自动化,后面还是多多学习,搞一套标准,推广起来】

正常的开发过程是,写好一个功能,就立即添加测试。 一套测试就是一个很强大的bug侦测器,能够大大缩减查找bug所需的时间。

推广自测或者要做起来,难度是很大的。 因为编写测试程序,意味着要写很多额外的代码。那就 要花费更多的时间,很多人可能觉得这没有提高编程开发速度,就不去做。或者因为需求进度问题,也省略不做。

【公司中的一些开发人员,根本也没有这方面的意识,因为没有强制的要求制度,甚至没有考虑过写自测代码】

2、JUnit测试框架

目前JUnit版本迭代都到5了,JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage

JUnit5[简单了解]

JUnit Platform是在JVM上启动测试框架的基础。它还定义了TestEngine API,用于开发在平台上运行的测试框架。此外,该平台还提供了一个Console Launcher,用于从命令行启动平台,以及一个基于JUnit 4的Runner,用于在基于JUnit 4的环境中运行平台上的任何TestEngine。JUnit平台的一流支持也存在于流行的IDE中(如IntelliJ IDEA,Eclipse)

JUnit Jupiter是用于在JUnit 5中编写测试和扩展的新编程模型和扩展模型的组合.Jupiter子项目提供了一个TestEngine,用于在平台上运行基于Jupiter的测试。

JUnit Vintage提供了一个TestEngine,用于在平台上运行基于JUnit 3和JUnit 4的测试。

重构书中的示例都是在 JUnit很老的版本,很多用用法和目前新版已经完全不一样。

相信进行java开发的程序员们,一定都是用过Junit这个优秀的单元测试工具。这里也就不说具体的用法了。

单元测试和功能测试

单元测试的目的: 提高程序员的生产率。

至于上QA(质量保证)部门开心,那是附带效果。单元测试是高度局部化的东西,每个测试类都隶属于单一包。能够测试其他包的接口。

功能测试的目的:保证软件能够正常运作。

从客户角度保证质量,不关心程序员的生产力。由一个喜欢寻找bug的独立团队(测试团队)来开发。

【在公司单元测试可以没有,功能测试一定是有的。单元测试还是要程序自身提高意识和行动起来】

3、添加更多的测试

观察类该做的所有事情,然后针对任何一项功能的任何一种可能失败情况,进行测试。【学习的标准和榜样】

测试的要诀是: 测试你最担心出错的部分。

测试也要考虑可能错误的边界条件,把火力集中到那儿。

不要因为测试无法捕获所有bug就不写测试,因为测试的确可以捕捉到到大多数bug。

总结

构筑测试体系,这个强调多少次都不为过,我根据个人所待过的公司,发现 大家都是一直强调单元测试,但是真正开发功能,最后落到实地的单元测试代码少之又少。一个是需求进度问题,一个程序员自身的问题

如果你今天看到了我的这篇博文,我希望我们应该有这样一个意识,在开发完一个功能后,一定要想着些单元测试。写测试代码,能写出好的测试代码你一定会从中获益很多。

我会整理一套规范先在自己的项目组用起来,后续推到公司其他项目组中,后续测试的东西也会分享出来。一起学习,一起成长。


如果您觉得这篇博文对你有帮助,请点赞或者喜欢,让更多的人看到,谢谢!

如果帅气(美丽)、睿智(聪颖),和我一样简单善良的你看到本篇博文中存在问题,请指出,我虚心接受你让我成长的批评,谢谢阅读!
祝你今天开心愉快!


欢迎访问我的csdn博客和关注的个人微信公众号!

愿你我在人生的路上能都变成最好的自己,能够成为一个独挡一面的人。

不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!

博客首页 : http://blog.csdn.net/u010648555

© 每天都在变得更好的阿飞

你可能感兴趣的:(软件设计_软件质量,【《重构,改善既有代码的设计》学习笔记】)