单元测试的实践与思考

这篇具有很好参考价值的文章主要介绍了单元测试的实践与思考。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

单元测试的实践与思考,程序员,软件测试,程序人生,单元测试,自动化测试,程序员,软件测试,python,职场经验,功能测试

之前一直有一个想法:将测试过程的每个重要环节都进行拆解,然后详细说明这个环节重点要做的事情,为什么要做这些事,以及注意事项。在星球群里和几位同学聊到了这个事情,有同学提议可否将单元测试环节加进来,斟酌一番,觉得还是很有必要的,就有了今天的这篇文章。

这篇文章,我会聊聊我对于单元测试的思考,以及些许实践。

软件研发测试的交付模型

软件从需求出现到最后的线上发布,大致要经历如下几个阶段:

单元测试的实践与思考,程序员,软件测试,程序人生,单元测试,自动化测试,程序员,软件测试,python,职场经验,功能测试

广义上来说,在需求提出的时候,测试就需要介入开展相关的可测性评估。但狭义上来看,正式的测试活动开展(执行测试用例),一般是从单元测试环节开始的。

提到单元测试,大家可能首先想到的是单元测试框架,Sonar,测试的粒度要精确到方法、代码行甚至函数级别。见过很多同学聊单元测试,都在疯狂追求代码覆盖率,好像代码覆盖率的指标越好看,最终的交付质量就一定会越好一样。但真的是这样吗?未必!

单元测试要解决什么问题

前面我写过单元测试的一些实践方法,这篇文章其实陷入了具体的技术细节中,即单元测试到底要怎么落地,落地执行的细节如何。

写下这篇文章的时候,我重新复盘了自己做测试工作以来在单元测试方面的实践过程,发现自己好像走进了一个技术的狭窄暗巷:太过于追求技术怎么实践落地,忽略了做单元测试的原因,以及做单元测试的背景。

从纯技术的角度出发,单元测试的粒度确实应该精确到每一个最小模块,即一个方法或函数。但做测试工作的毕竟是软件工程师,从工程师的角度出发,在我看来单元测试应该考虑的是如何保证自己负责的部分(一个应用服务或者该应用服务中的某些功能模块甚至接口)达到质量要求。

简单来说,保证自己负责的部分技术设计和交付产物达标,也是单元测试的范畴

回想一下,在开发阶段,研发同学都会进行本地自测,验证自己实现的功能是否符合预期。很多时候由于上下游依赖的关系,没办法进行联调验证,因此为了避免外部影响,常见的解决思路就是直接return,或者mock(关于mock,可以参考我前面的文章。

因为要保证自己负责部分达到质量要求,自己负责部分的最小粒度是由很多个方法函数构成,因此才有了单元测试框架、代码覆盖率等一系列事物的出现。单纯追求单元测试覆盖率并不一定能提高质量,但不做单元测试,后期的测试活动开展要面临的风险和压力一定会上升。

一般在小公司,单元测试由研发自己负责,测试更多的是制定流程规范和提供用例,以及质量度量。当每次迭代单元测试覆盖率到达要求时,才会开展冒烟测试,确保整体交付到测试工程师手中的代码达到一定质量要求,满足可测性标准。

单元测试要解决的问题,就是确保每个阶段每个人负责的最小模块的质量,满足流转到下一环节的标准。风险和缺陷越早发现修复,后面的发现和修复成本才会越来越低,这样才能整体上提高整个技术团队的交付效率和交付质量

单元测试的实践注意事项

在具体的实践中,单元测试落地的最大挑战,主要有如下几项:

  • 测试用例:应该确保先设计单元测试用例,再编写实现测试用例功能的代码,即TDD(测试驱动开发);

  • 隔离依赖:执行单元测试时应确保被测单元的独立完整性,避免依赖项对结果的影响,常用的方法是mock;

  • 测试数据:提前准备单元测试所需的数据,包括正常数据和异常数据,以充分验证代码在各种场景下的正确性;

  • 测试顺序:应该根据调用关系合理安排测试用例的执行顺序,确保各单元之间的互相依赖关系得到正确的处理;

  • 测试效率:落地单元测试之前就应该考虑将单元测试的执行纳入CICD流水线中,以便能够及时发现和修复问题;

  • 异常处理:使用正确合理的断言来验证代码的执行结果是否符合预期,同时考虑错误场景和可能出现的异常情况;

  • 维护成本:除了跟随迭代及时更新测试用例,还应该为测试用例和代码添加适当的文档注释,便于其他人理解维护;

最后,则是大家所熟知的测试覆盖率。提高覆盖率是为了尽可能多地覆盖代码中的语句、分支和条件,以确保代码的各个部分都得到了充分的测试,但覆盖率指标仅可以作为一个参考值,辅助我们对单元测试执行的结果进行评估,而非一切唯指标论。

行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群: 786229024,里面有各种测试开发资料和技术可以一起交流哦。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】单元测试的实践与思考,程序员,软件测试,程序人生,单元测试,自动化测试,程序员,软件测试,python,职场经验,功能测试
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。单元测试的实践与思考,程序员,软件测试,程序人生,单元测试,自动化测试,程序员,软件测试,python,职场经验,功能测试
单元测试的实践与思考,程序员,软件测试,程序人生,单元测试,自动化测试,程序员,软件测试,python,职场经验,功能测试

单元测试的实践与思考,程序员,软件测试,程序人生,单元测试,自动化测试,程序员,软件测试,python,职场经验,功能测试

单元测试的实践与思考,程序员,软件测试,程序人生,单元测试,自动化测试,程序员,软件测试,python,职场经验,功能测试文章来源地址https://www.toymoban.com/news/detail-754297.html

到了这里,关于单元测试的实践与思考的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 程序员职业规划-实践篇

    你是否认真思考过3-5年、10年: 你想成为什么样的人 ? 作为一名技术人,我们应认真规划自己的职业发展,不再焦虑、为自己加速~ 一块留言来聊聊吧~ 你该去什么样的公司、做什么样的事情、拿多少钱,都取决于一个问题: 你想成为什么样的人 ? 你是否认真思考过3-5年、

    2024年02月05日
    浏览(94)
  • 程序员的自我修养- 谈实践与认知

    2024年02月14日
    浏览(43)
  • 程序员必须避免的坑:编程陷阱与最佳实践

    摘要:作为一位资深程序员,我们在编程过程中可能会遇到各种各样的陷阱。本文将详细讨论程序员在编程过程中应避免的一些常见陷阱,并提供相应的最佳实践,以帮助您提高编程效率和代码质量。 正文: 编程过程中,务必保持代码风格的一致性。这包括缩进、命名规范

    2024年02月06日
    浏览(95)
  • 程序员必备技巧:.gitignore文件怎么写和最佳实践

    当你在Git仓库上工作时,创建一个.gitignore文件告诉Git在提交更改时忽略哪些文件和目录是很重要的。这可以帮助保持仓库的干净并防止不必要的文件被提交。在这篇博客中,我们将介绍一些创建.gitignore文件的最佳实践,并提供一个推荐的.gitignore文件,供您作为起点使用。

    2024年02月05日
    浏览(69)
  • 数据分析在程序员职业中的重要性及实践应用

    在当今信息化社会的快速发展中,数据分析已经成为一项重要的职业技能。不论是从事哪个行业,都需要具备一定的数据分析能力。对于程序员而言,掌握数据分析技能不仅能够提升自身在职场中的竞争力,更能够在职业生涯中获得更多的发展机会。本文将围绕数据分析在程

    2024年02月07日
    浏览(53)
  • 读程序员的README笔记07_测试(下)

    2.5.2.1. 首先应该关注代码中的高风险的区域 2.5.2.2. 那些低风险或被废弃的代码并不值得测试 3.2.1.1. 如果网络出现问题,那么测试也会失败 3.5.2.1. 使用常数种子的随机数生成器的测试将总是通过或总是失败 3.7.3.1. 注入式时间戳将让你使用模拟来精确控制测试中的时间流逝

    2024年02月05日
    浏览(51)
  • 读程序员的README笔记06_测试(上)

    4.2.3.1. 消除外部依赖性可以使单元测试快速而集中 4.5.3.1. 压力测试可暴露系统的负载能力究竟有多大,以及在过度负载下会发生什么状况 4.6.3.1. ISO认证审核委员会要求提供需求和相应的测试文件证据 5.2.1.1. 管理测试的setup和teardown 5.2.1.2. 管理测试执行和编排 5.2.1.2.1. 可

    2024年02月05日
    浏览(50)
  • 读程序员的制胜技笔记05_测试(上)

    3.5.3.1. 也是最容易编写的 3.5.3.2. 只测试单个代码单元:公共函数(public function) 3.5.3.3. 需要是公开的,因为测试应该检查外部可见的接口,而不是类的内部细节 3.5.3.4. 问题是即便它让你能够知晓单个单元是否正常工作,但是并不能保证所有单元能够正常协同工作 3.5.4.1. 测

    2024年02月05日
    浏览(46)
  • 读程序员的制胜技笔记06_测试(下)

    1.3.1.1. 假设18岁是你游戏用户的法定年龄 1.3.2.1. C# 1.3.2.1.1. 不需要测试公元1年1月1日到9999年12月31日之间所有可能的DateTime值(有360多万个) 1.3.2.1.2. 只需要测试7个不同的输入 1.3.2.1.3. 通过条件语句将输入范围进行分割的操作称为“边界条件”(boundary conditional) 1.3.2.1.3.1. 定

    2024年02月05日
    浏览(48)
  • 《新程序员003》预售,大厂云原生技术实践和数字化转型案例都在这了

    众所周知,国家政策利好的形势下,数字化转型成为传统企业的“迁移”热潮。由本地向云端迁移,由闭源向开源迁移,由单体应用/集中式架构向分布式/微服务架构迁移……在此过程中,由云原生带领的容器、虚拟化、DevOps、服务网格等技术成为企业数字化转型、业务上云

    2023年04月08日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包