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

本篇文章的内容来自《重构 改善既有代码的设计》一书学习笔记整理并且加上自己的浅显的思考总结!如果想要进行重构,首要前提是 拥有一个可靠的测试环境。1、 自测代码的价值完成一个功能:设计+开发+调试,认真分析,程序员最多花费的时间不是开发(编码),而是用来调试。调试可能花费无数个小时,甚至通宵达旦。修复错误是快速的,而找出错误却是恶梦一场。当修复好一个错误,总是会有另一个错误的出现。而引…

大家好,又见面了,我是全栈君。

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

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

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博客和关注的个人微信公众号!

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

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/121051.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Matlab中 axis 函数用法总结

    Matlab中 axis 函数用法总结axis——设置坐标轴【功能】对坐标轴进行标定。【语法介绍】axis([xminxmaxyminymax])设置当前二维图形对象的x轴和y轴的取值范围。向量参数[xminxmaxyminymax]中的元素分别表示x轴最小值、x轴最大值、y轴最小值和y轴最大值。axis([xminxmaxyminymaxzminzmaxcmincmax])设置x,y,z轴的取值范围和颜色范围。[xminxmaxyminymaxzminzm

    2022年5月4日
    193
  • 题目:Fizz Buzz

    题目:Fizz Buzz给你一个整数n.从1到n按照下面的规则打印每个数:如果这个数被3整除,打印fizz.如果这个数被5整除,打印buzz.如果这个数能同时被3和5整除,打印fizzbuzz.您在真实的面试中是否遇到过这个题?Yes哪家公司问你的这个题?AirbnbAlibabaAmazonAppleBaiduBloombergCisc

    2022年10月10日
    0
  • mybatis 批量插入「建议收藏」

    开发项目中,总是与数据打交道,有的时候将数据放入到一个集合中,然后在遍历集合一条一条的插入,感觉效率超不好,最近又碰到这个问题,插入50条数据用了将近1s,完全满足不了系统的需求.效率必须加快,然后网上查询资料,历经千万bug,终于搞定,这里指提供mybatis中的配置,至于dao层的调用mybatis就自己上网查询下资料吧1根据网上搜了一下资料,在sql-mapper.xml文件中写了如下配

    2022年4月9日
    33
  • 转:不同的行业和工作的真实情况是怎样的?「建议收藏」

    ————————————————————————————————————–不同的行业和工作的真实情况是怎样的?收入、发展前景和挑战如何?这个问题可能会耽误您很多时间,但是,这个问题实在是憋了许久。每个大学生考虑以后从事行业的方式都不同,这

    2022年4月8日
    32
  • php开源在线客服系统_源码屋

    php开源在线客服系统_源码屋另外,客#服源码也不太适用于小规模的企业通讯场景,用客#服源码往企业通讯场景上套就有点“杀鸡用牛刀”,因为企业通讯更强调功能丰富而非极限性能,与客#服源码的目标不符,所以二者的上层设计也不同。另外,在产品对比章节下,我们也提到了客#服源码项目的缺点供您参考。1、(业务功能完善性)客#服源码支持几乎所有商用即时通讯产品所支持的即时通讯相关功能(甚至还有更多的业务功能),且无业务功能限制,同时也支持一些诸如敏感词过滤(基于双数组Trie的AC自动机算法实现)、消息冷热分离存储等高级IM功能。……….

    2022年9月21日
    0
  • 历代iPhone的分辨率[通俗易懂]

    历代iPhone的分辨率设备 逻辑分辨率(point) 物理分辨率(pixel) 屏幕尺寸 缩放因子 PPI iPhone2G 320×480 320×480 3.5寸 @1x 163 iPhone3 320×480 320×480 3.5寸 @1x 163 iPhone…

    2022年4月15日
    159

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号