生活工程体验信仰哲学精神
快软网
精神世界
探索历史
哲学文学
艺术价值
信仰创造
境界审美
体验技术
技能工具
工程信息
医学生产
生活运用
操作能力

从爬行到跑步我们为什么需要单元测试?

3月3日 醉殇别投稿
  点击链接阅读原文,获取更多技术内容:
  本文从测试体系的历史入手,讲述了从手动测试靠别人自动化测试靠自己自动化测试的历史进行进程,也尝试着从这个视角解释为什么大家不重视单元测试。之后我们分别讲述了什么是单元测试,一系列的金字塔测试最佳实践,并且深入讲解了单元测试的诸多好处。最后我们列举了常见的反面模式和误区,帮助大家快速识别常见的错误。
  作者乐凯
  来源阿里云开发者公众号
  前
  刹车是降低了速还是提升了速?我们通常认为写单测费动作、耽误研发进度,仿佛在给项“踩刹”。大规模家形状带着这个问题往下看,详细聊聊为什么单元测试可以让软件开发跑得更快。
  什么是单元测试
  广大家对于单项测算不应该是陌生的,截取壹段维基百科的定义帮助大众唤醒壹下记忆:
  在编程中,单元测试(UnitTest)称为模块测试,是针对程序模块(软件设计的最单位)来进行计算机正确性检验的测试作。
  测试单元的理念其实一直是Smashing的一部分。我们第三次编写计算机程序时,一定会输出获取一些样本数据输出在代码穿插过庞大量的System。out。println,确保每个原节点都符合预期。这个过程其实就是把复杂问题拆解成原化的问题、逐一攻破的过程。单元测试的的也同类,是保障软件程序中每个最单位的正确性,从保障由最单位构建起来的复杂系统的正确性。
  深入获取展开单元测试的必要性,我们先去考考古之前,看同一下测试体系是如何演进的。
  测试体系演进
  软件测试甚是一个过去的的种(QA、测试人员),QA测试人员的任务常就是进统计最大量的测试、繁琐易错。
  2000年代初以来,软件业的自动化测试已经发生了巨大的变化。为了应对现代软件系统的规模和复杂性,人们逐渐发展起来开发人员驱动的自动化测试实践。可以摆脱动测试的繁琐,利用软件来测试软件。但过去的实践仍然留下了必然的影响,软件测试还是同一个的种,过去的QA演进成了SDET(测试中的软件开发工程师)),我们虽然已经发展到了能够使用具了,但我们也只是会使用具的猴子。为什么这么讲?因为这种研发测试分离的模式本身就留下了很多问题。
  当研发和测试时是两个岗位时,交付的边界是软件整体的功能性(功能需求)和可使用性。研发只要保证软件整体上功能完成、可使用就可以了,测试也集中在集成测试和端到端测试但软件是由数个最单位构成的,在这种体系下人们会关注最单位的质量、是否唯一可测可演进,难免“最终其外,败絮其中”。
  基于种种弊端,歌、微软这些对研发质量常重视的公司都在从SDET的2。0时代过渡到一体化的3。0时代:微软在2015年去掉SDET种,在陆奇改造的Bing中率先提出“组合工程”的概念;歌也将SETI替换成EngProd(工程生产力),专门负责测试平台和具的搭建,不负责具体的业务逻辑测试。
  为什么需要单元测试
  在如今的互联网时代,软件迭代的速度越来越快,研发的职责也越来越多。DevOps的理念是“youbuildit,yourunit”,研发测试合为同一的趋势也可以理解为对“你构建它,你测试它”的要求。当研发要对自动编写的代码质量和测试负责的时候,好的测试实践就必不可少了。
  测试字塔
  就像盖楼需要从打地基、竖直防水、灌泥层往上构建一样,测试也有类似的测试字塔架构。下图出自《SoftwareEngineeringatGoogle》的测试章节,总结了Google在一天测试的最佳实践中。我们可以看到测试字塔由三层构成,最底层就是单元测试、占80,是软件系统的基础。再往上是集成测试和最终测试,分别占15和5。因为从下往上占逐层缩减,因此被称为测试字塔(跟盖高层楼一类)。歌推荐的这个例是多年实践出来的结果,意在提升研发的效率(productivity)并提升对产品的信度(产品信心)。
  字塔的核心理念之壹就是“UnitTestFirst”,每个软件项的第一个测试项目应该是单测(TDD甚认为第一个代码就应该是单测),且唯一一项占最高的测试也应该是单测。
  优秀的软件单元测试
  业界都把单元测试放在这么重要的位置?“抓放大”,只写端到端测试不吗?这就是为什么我们来展开讲单测的好处。
  提升调试效率
  单元测试是软件程极佳的基础,因为它们快速、稳定,并且极大地压缩了问题范围,提升了故障诊断的效率。
  测试更快:单测没有其他外部依赖,跑的快,可以提供更快的反馈环,更快的发现并修复问题。
  测试更稳定:同样因为0依赖,单测相于其他类型的测试更稳定,不会受外部其他模块的不兼容变更影响。因此单测也是最能导致开发者信的测试类型。
  问题更容易定位:单测以最大软件单位为边界,生长问题可以缩定位范围。相下方,越是字塔上层的测试类型,定位问题的难度越庞大。复杂的端到端测试涉及群体的模块,需要一致性队列查定位问题。
  提升代码质量
  代码是写给别人看的,好的代码应该是易读、易改、易维护的。写单测的过程其实就是吃自主代码狗粮(dogfood)的过程,从用户研发视去使用自主的代码,帮助我们提升代码质量。
  好的代码是容易测的:市场上很早就提出了圈复杂度(CyclomaticComplexity)的概念,利用来简化一个模块替代结构的复杂程度,其数量上行走独路径的条数,也可理解为覆盖所有的可能情况最少使使用者的测试使用例个数。圈复杂度极大说明程序代码的判断逻辑复杂度,可能质量低,且难于测试和维护。因此代码好的一件事定是圈复杂度低的,也是容易测试的。
  修改迭代演进:没有什么软件是不变的,好的软件系统应该是易于演进的。单测覆盖更高的项模块更原化,边界更清晰,更容易起来。单测覆盖更所有的项目重建的险也相对更,正好一个没有单一测覆盖的复杂项目是没人敢碰的。
  更优质的设计:前面也提到过,好的单测能够提升代码的质量。如果某个研发需要给自主的代码写单测,他关注代码的层级分割,减少过、圈复杂度达到更高的方法。下面的例子就是壹段没有单测的代码的认知复杂度值(可以理解为圈复杂度的壹个改良版,从代码是否容易理解的度简单),超标了三倍。现在回过头来想补单测,脑子都最大了。
  提升总体研发效率
  不误砍柴,提高质量、完善速度的单测可以提升研发质量和效率,加快项目总体交付。这句话乍一看是反常识的,写单测往往写实现逻辑要更这也是多数家不写单测最常的理由:“项赶进度,来不及写单测”。如果我们的项生态命周期计算的,写个原型很快就下线了,那写单测不投资回报率不提高。但是阿有很多toB的业务,提供给用户的能力都是以年计算生命周期的,提高质量的代码随着时间的推移,投资回报率将会越来越提高,具体体现在以下几个方面:
  减少调试时间:上面提到了上述提到的提升调试效率的原因,这不再重复。凑够了更高的单测覆盖可以节省调试所耗费的时间,凑够了测试覆盖的项本身bug数量就会较少。举个现实中的例子:某团队由于历史上的种种债务,基本全靠最终测试,几单元测试覆盖。造成的后果也常严重,团队oncall的同学50的时间都是在修复各种奇怪的bug,无法投到宝贵的精到架构升级等期更重要的项上。
  增加代码变更的信:前面提到没有测试覆盖的代码没有人敢碰,有充单测覆盖的代码可以显着提升改造代码的信和愿望。再给大家举个例子:我在Google总部作过几乎年之前就已经获得了阿。如果你在Google作过就能发现,你的代码经常会收到无关团队成员发起的代码更改。绝大多数情况下这些都是同学们自主制定的大规模自动化重构(massrefactor),如果看你的Java代码没有使用Builder模式,就会帮助做重构个(Google有大规模自动化动化具简化)这些重构作)。我们迫切渴望不谈,如果是没有覆盖的代码、还是没有相关组的,你敢这么重构吗?我们都希望能有像那样整洁的代码,但没有人敢碰的代码怎么变得更好?
  提升代码的自主解释性:文本档能够提升代码的自主解释性,让研发效率更高。好的单测其实也可以被提升代码的文本档,通过读取测试可以快速理解代码的用途(参参)TDD)。单测作为文本文件同时还完美的解决了文本文件保鲜的难题,给开发者提供了一套高档质量、随着代码不断更新的文本文件。
  更高效的代码审查:并不是所有的问题和设计上的缺陷都通过静态检查发现,这也是为什么需要人代码审查作为代码质量的最后一道防线。在Google,代码审查是代码合并最重要的的一个阶段,因此评审的效率直接影响总体的研发效率。好的单测覆盖能够减轻评审人的负担,让他们把精投获得到更重要的部分(如代码设计)。
  更频繁的开发版:敏捷开发的持续集成、持续部署的前提就是全餐、提高质量的自主动化测试。敏捷开发对于研发的提效还没有展开。但光是能够更快速的开发版本身就已经常有价值了。
  反面模式和常误区
  上面提到了写单元测试的一系列好处和相关的最佳实践。我们还列举了下常见的反面模式和误区,帮助大多数家庭更好地规避类似的错误。
  测试的反面模式(antipattern)
  反面模式一:冰激凌筒模式
  只关注用户户视的端到端测试、大规模依赖QA测试都会产出如下图所示的反面模式。很不幸,这也是在过去的测试体系影响下最常见的模式。冰激凌筒模式接下来,测试套件通常运行缓慢、不可靠、难以使用。
  图来源:Google软件工程
  反面模式:沙漏模式
  沙漏模式下,项拥有大量的单元测试和端粒测试,但缺乏集成测试。虽然它没有冰激凌那么糟糕,但仍然会导致许多端粒测试失败,这些失败本可以通过同一件事套中等范围的测试更快更容易地捕捉到。当模块间紧密连接,使得依赖项很难单独实例化出来的时候,就会出现沙漏模式。
  图来源:Google软件工程
  测试的常误差区
  常误区一:用户户第一一,测试覆盖用户户的需求够了
  误区下会认为,最终测试是站在用户视角做测试,把用户要的功能点都覆盖到就够了。这种误区导致的结果就是冰激凌筒反面模式。虽然软件交付的最终功能是提供给客户用户的,但构成软件的代码本身是提供给用户(研发)阅读的、需要用户去维护的。外部用户是用户,内部用户也是用户。
  常误差区:全面测试,节省了80的测试代码量,赢麻了
  从短期来看,不写单测可以节省80的测试代码量和少50的研发时间。但只要项复杂起来,时间早晚加倍奉还。等到真正需要还债的时候再去补,可能为时已晚。
  常误区三:写单测的人都弱爆了,我这么大还没有写出过bug
  这篇文章可能不适合你。不过软件开发是一个团队项目,你写的代码最终落到别人身上升级维护,没有测试覆盖的代码是没人敢碰的。
  总结
  结束处再总结快速一下。本发送从测试的历史获取,讲述了从动测试靠别自主动化测试靠自主自主动化测试的历史进程,也尝试着从这个视角解释了为什么大多数家过去不重视单元测试。之后我们分别讲述了什么是单元测试,接下来的字塔测试最佳实践,以及深入学习讲解了单元测试的诸多好处。最后我们列举了常的反面模式和误区,帮助广大家快速识别常的错误。
  如果把测试体系的演进类作为人类类的进化,那么认为我单测覆盖和有充分的单测覆盖的软件就可以爬出一组的古猿和直一组的现代人类类。家能够重视单元测试、写好单元测试,让我们的软件迅速从爬升中进化成奔跑,迸发源源不断的生成命、创造出更多价值!
  完整内容可点击下方链接查看:
  阿里云开发者社区,千万开发者的选择。百万精品技术内容、千节免费系统课程、丰富的体验场景、活跃的社群活动、行业专家分享交流,尽在:
投诉 评论 转载

农村独生子女家庭,可以申请哪些补贴?热评聚热点网 站在农民角度、关注三农!农民兄弟们大家好,我是三农老道!时间过得飞快,一转眼2023年已经来到7月中旬。随着今年下半年的开始,国家针对乡村制定的各类利好政策也在加紧落地。这些年……2021欧洲杯赛程(欧洲杯赛程对阵新鲜出炉)热博聚热点网 延后了一年的欧洲杯即将在2021年6月12日7月12日进行,届时比赛将会在12个城市之间巡回比赛。在这里小纳为大家介绍一些比较热门比较有看点的比赛,让广大足球爱好者不错过这些精……2023年海南美丽乡村绿色骑行(文昌站)圆满收官热博聚热点网 7月9日,2023年海南美丽乡村绿色骑行(文昌站)活动在文昌市潭牛镇大庙村举行。本次活动吸引了全省各地的300余名骑行爱好者,享受骑行乐趣,探访美丽乡村,品尝购买文昌鸡、花生油……养老金交满15年就可以不交了吗热传聚热点网 很多人都知道,享受养老保险待遇的一个条件就是需要缴纳达十五年以上,那么,养老金交满15年就可以不交了吗今天,小编整理了以下内容为您答疑解惑,希望对您有所帮助。个人缴费满1……专家漫谈丨数学学科的重要作用热文聚热点网 数学(英文Mathematics,简称Math),是研究数量、结构、变化、空间以及信息等概念的一门学科。一般来说,数学属于基础学科;在人类社会发展中,它具有十分重要的地位和作用……北京民事律师提出了离婚但是对方不回复怎么办?热议聚热点网 问:北京民事律师提出了离婚但是对方不回复怎么办?律师解答:提出了离婚但是对方不回复怎么办?如果向对方提出了离婚,但是对方并没有给与回复的话,那么就可以放弃协议……一般情况下刑事拘留一般多久热闻聚热点网 一、一般情况下刑事拘留一般多久刑事拘留最长期限不超过三十七天。根据《刑事诉讼法》第八十九条公安机关对被拘留的人,认为需要逮捕的,应当在拘留后的三日以内,提请人……从梅西到村超这一周足球的话题很热热闻聚热点网 原标题:从梅西到村超:天气很热球迷们的热情更热这一周足球的话题很热,中国国家队有比赛,中国亚运队有比赛,更何况万人迷梅西带着阿根廷国家队来到了北京,掀起了疯狂的追星浪潮,……关于利用影响力受贿犯罪请问按什么刑?热博聚热点网 问:关于利用影响力受贿犯罪请问按什么刑?律师解答:利用影响贿赂的处罚:数额较大或者其他严重情节的,处三年以下有期徒刑或者拘役,并处罚金;数额巨大或者其他严重情节的,……【歌词】捕捉爱情的女人歌手:陈明热闻聚热点网 捕捉爱情的女人爱情是一种神秘的东西美丽却让人怀疑你想将它紧紧握在手心它偏偏不理睬你寂寞是一种恼人的危机女人都输在这里你为了他下了一步险……从爬行到跑步我们为什么需要单元测试?热博聚热点网 点击链接阅读原文,获取更多技术内容:本文从测试体系的历史入手,讲述了从手动测试靠别人自动化测试靠自己自动化测试的历史进行进程,也尝试着从这个视角解释为什么大家不重视单元测……大巴车(高温天大巴车故障滞留高速)热评聚热点网 烈日炙烤,高温难耐。8月17日下午,因大巴车发生故障,10多名乘客被滞留在连霍高速公路夏邑收费站,40多度的高温使不少人心情变得越发急躁,不断的催促着司机维修大巴车。在此执勤的……
购买指南!2022年最佳学生的MacBook:苹果芯成功之作 儿子哈利被造谣将变性,伊能静深夜发文霸气维护:已请律师取证热 户口不在同一个省怎么办理结婚登记?热传聚热点网 结婚证补办需要什么手续,需要什么材料热传聚热点网 2。0T8AT!中大型SUV定位,后排放倒就是床,13。49 这样回你微信的人,请深交一辈子!热闻聚热点网 双面人生,成就不凡!爱彼皇家橡树金钢双色腕表!热博聚热点网 官方:点名通报郑州随意静默、封城代替管控热博聚热点网 感恩亲情的作文600字热文聚热点网 车酷早报前8月比亚迪、特斯拉销量增速显著,理想汽车Q3交付量 同心抗疫海口市社会组织孵化基地驰援海口疫情防控物资!热文聚热 深圳结婚登记需要未婚证明吗热文聚热点网
小三怀孕了法律怎么判抚养权在感情里各玩各的十二星座今日油价3月26日汽油油价华文大事记(续)浅谈初中语文教学中作文写作能力的培养身高165cm,体重120kg,想减肥,但是胃口超级好,怎么小区设备管理晚餐饮食要健康既能减肥又能养胃职务侵占60万如何缓刑自然教学总结北约大军堵在家门口示威,俄罗斯拉来巴基斯坦,将在波罗的海军演2021年及以后的最佳SEO策略

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找新乡渭南铜川松江山南雅安松原荃湾淮北昭通平凉鞍山赤峰苗栗保亭池州渝北株洲陇南濮阳三沙秀山密云鸡西