美文网首页
第12节课测试也是程序员的事?

第12节课测试也是程序员的事?

作者: 两颗酸橙子 | 来源:发表于2021-04-19 18:28 被阅读0次

测试人员能测的是什么?

         他们只能站在系统外部做功能特性的测试,而一个软件是由他内部诸多模块组成的,测试人员只能从外部保障正确性,所能达到的效果是有限的。

打个比方,你做一台机器,每个零部件都不保证正确性,却要让最后的结构正确,这实在是一个可笑的要求,但是

却真实地发生在软件开发的过程中。

在软件开发中有一个重要的概念,软件变更成本,他会随着时间和开发阶段逐步增加,也就是说,我们要尽可能早地发现问题,修正问题,这样所消耗的成本才是最低的。

最理想的情况下

质量保证是贯穿在软件开发全过程中,从需求开始的每一个环节,都将”测试“纳入考量,每个角色交付自己的工作成果时,都多问一句,你怎么保证交付物的质量。

需求人员要确定验收标准,开发人员则要交出自己的开发者测试。这是一个来自于精益原则的重要思想,内建质量(Build Quality In)

对于每个程序员来说,只有在开发阶段把代码和测试都写好,才有资格说,自己交付的是高质量的代码

自动化测试(背景)

程序员这个群体做测试有个天然的优势:会写代码,这个优势足以让我们把测试自动化

关键词:smalltalk

这种测试框架最大的价值,是把自动化测试作为一种最佳实践引入到开发过程中,使得测试动作可以通过标准化的手段固定下来。

测试模型:蛋卷与金字塔

我们把测试分为人工测试和自动化测试。即便我们只关注自动化测试,也可以按照不同的层次进行划分,

将测试分为最小程序模块的单元测试,

将多个模块组合在一起做的集成测试,

将整个系统组合在一起的系统测试。

有一种直觉的做法是,既然越高层的测试覆盖面越广,那就多写高层测试,比如系统测试。

当然,有些情景高层的测试不容易覆盖到的,所以,还要有一些底层的测试,比如单元测试。

在这种情况下,底层的测试只是作为高层测试的补充,而主力就是高层测试。

这样就会形成下面这样一种测试模型:冰淇淋蛋卷。

     听说过冰淇凌蛋卷测试模型的人并不多,它是一种费时费力的模型,要准备高层测试实在是太麻烦了。

之所以要在这里提及它,是因为虽然这个概念很多人没听说过,但是有不少团队的测试实际采用的就是这样一种模型,

这也是很多团队觉得测试很麻烦却不明就里的原因。

行业里的最佳实践:测试金字塔

测试金字塔

Mike cohn在自己的著作《succeeding with Agile》提出测试金字塔,但大多数人都是通过Martin Fowler 的文章知道的这个概念。

测试金字塔的重点就是越底层的测试应该写得越多。

想要理解测试金字塔成为行业最佳实践的缘由,我们需要理解不同层次测试的差异。越是底层的测试,牵扯到相关内容越少,而高层测试则涉及面更广。

小事容易做好,而大事难度则大得多。所以,以这个标准来看,底层的测试才更容易写好。

人们会本能地都会倾向于少做复杂的东西,所以,人们肯定不会倾向于多写高层测试,其结果必然是,高层测试的测试量不会太多,测试覆盖率无论如何都上不来。

而且,一旦测试失败,因为牵扯的内容太多,定位起来也是非常麻烦的。

而反过来,将底层测试定义为测试主体,因为牵扯的内容少,更容易写,才有可能让团队得到更多的测试,而且一旦出现问题,也会更容易发现。

核心: 小事反馈周期短,而大事反馈周期长。

当测试金字塔遇到持续集成

测试金字塔是一个重要实践的基础,它就是持续集成。

当测试数量达到一定规模,测试运行的时间就会很长,我们可能无法在本地环境一次性运行所有测试。

一般我们会选择在本地运行所有单元测试和集成测试,而把系统测试放在持续集成服务器上执行。这个时候,底层测试的数量就成了关键,按照测试金字塔模型,底层测试数量会很多,测试可以覆盖主要的场景;

而按照冰淇淋蛋卷模型,底层测试的数量则有限。作为提交代码的防护网,测试数量多寡决定着得到反馈的早晚。

所以,金字塔模型与持续集成天然就有着很好的配合。需要特别注意的是,不是用单元测试框架写的测试就是单元测试。很多人用单元测试框架写的是集成测试或是系统测试。单元测试框架只是一个自动化测试的工具而已,并不是用来定义测试类型的。

在实际工作中,区分不同测试有很多种做法,比如,将不同的测试放到不同的目录下,或是给不同类型的测试一个统一的命名规范。区分不同类型测试主要目的,主要是在不同的场景下,运行不同类型的测试。

就像前面提到的做法是,在本地运行单元测试和集成测试,在持续集成服务器上运行系统测试。

人的时间和精力是有限的,所以,人们开始思考不同的测试如何组合。在这个方面的最佳实践称之为测试金字塔,它强调的重点是,越底层的测试应该写得越多。

只有按照测试金字塔的方式写测试,持续集成才能更好地发挥作用。

如果今天的内容你只能记住一件事,那请记住:多写单元测试。

相关文章

  • 第12节课测试也是程序员的事?

    测试人员能测的是什么? 他们只能站在系统外部做功能特性的测试,而一个软件是由他内部诸多模块组成的,测试人员...

  • 高效程序员---测试

    测试也是程序员的事吗? 为什么要测试?因为它能让项目的质量有保证。 程序员最基本的职业素养:保证自己开发的软件尽可...

  • php单元测试之simpletest

    了解单元测试 单元测试是由程序员自己来完成,最终受益的也是程序员自己。可以这么说,程序员有责任编写功能代码,同时也...

  • 走进 .Net 单元测试

    走进 .Net 单元测试 Intro “不会写单元测试的程序员不是合格的程序员,不写单元测试的程序员不是优秀程序员...

  • Junit初步

    JUnit是一个Java语言的单元测试框架 Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件...

  • 亲密关系践行(00) A和M的故事

    齐帆齐微课 第03篇 初见: 2020-1024,这是一个特殊的节日,程序员专属的节日,也是A的节日,那一天 通过...

  • 0054 发布游戏连连看到阿里云网站以及总结

    上节课完成游戏连连看的所有的功能。这节课就来进行最后的装修以及发布。 完整性测试 为了测试从第1关到第9关所有的关...

  • Python接口测试实战1(上)-接口测试理论

    接口测试理论(第1天 上午) 接口测试基础 什么是接口? 这里插播一个段子 上图中,程序员口中提到的接口是什么意思...

  • 《重构-改善既有代码的设计》笔记-构筑测试体系

    前言 编写优良的测试程序,可以极大的提高我的编程速度,即使不进行重构也是一样如此。 自测试代码的价值 程序员花时间...

  • 1024.1354天:程序员节

    #每日三件事,第1354天# 1024,程序员节。 俄罗斯的官方节日就有程序员节,不过是每年的第256天,即闰年的...

网友评论

      本文标题:第12节课测试也是程序员的事?

      本文链接:https://www.haomeiwen.com/subject/cwcwlltx.html