你不知道的软件测试那些事?

testor testor     2022-11-21     687

关键词:

 你不知道的软件测试那些事?
  一、写在前言
  作为开发人员,我们都知道我们应该测试我们的代码。我们应该写单元测试,但这也通常是我们发现没时间时跳过的第一步。
  作为团队的领导者或者管理者我们都知道测试是必要的,但是当截止日期临近的时候,我们倾向于减少测试,而把更多的重点放到编码上。这样看测试领域似乎很紧张。我们都知道测试对我们是有利的,但是一旦项目面临压力时我们就不再测试了。
  二、我们为什么测试?
  Edsger W Dijkstra 说过:测试可以用来找到显式的缺陷(bug),但是无法显示潜伏的软件缺陷(bug)。这意味着测试不能百分百保证你的软件没有缺陷(bug),但是它确实很有帮助。
  我们也可以换种说法,如果我们不进行测试我们几乎可以百分百保证我们的软件会有缺陷(bug),除非我们是在编写像“hello world!”那样简单的程序。但是即使这么简单的程序你也会测试,因为一旦你输入完你的代码你就会很好奇它的输出是不是真的是“hello world!”。
  而这就是第一类形式的测试,也是我们一直在做的: 手工测试. 我们编写程序,然后启动它去检验运行结果。 对于一个简单的“hello world”这可能是足够的,但是对于复杂度更高的程序这可能会导致时间的浪费,这是对一个已知的行为结果集的手工重复。这难道不是我们发明计算机的初衷吗?
  对于“hello world”这不是大问题,但是当你创建一个 web 应用时,测试场景是在翻页十次,点击某些按钮,在大量表单中输入(正确的)数据之后再测试某些特定条件,你就看到自动化会节省大量的时间。如果你能通过测试运行器(testrunner)直接执行你想要测试的函数,而不是必须花费半分钟手工执行到那个函数,你会节省很多时间!但这也意味着我们需要多一点点编程,而更多的编程意味着更多的时间和精力。所以它会花费更多的时间而你的项目可能因此完工的晚些。
  三、也许未必
  让我们创建一个控制台应用程序来计算最大公约数(GCD)的两个整数。有很多方法可以解决这个问题,但为简单起见,我们将
  1.输入两个整数
  2.不管其算法怎么样,计算一下 GCD
  3.显示输出
  让我们浏览一下正常的开发周期。我们通常写一个 main() 函数,得到了两个整数,以及调用一个函数来计算一下 GCD,然后显示结果。测试。在你的控制台中输入 2 个整数会花一些时间,这将变得相当无聊,如果你需要多次重复你的代码。这也很容易在控制台应用程序中输入出错,导致程序崩溃。这意味着你必须重新启动程序,输入两位数,然后再次验证结果。请你要记住,我们讨论的是一个控制台应用程序,只需要两个输入值,不需要点击(在 web 应用程序中),我们已经看到,这将需要花费一些时间。
  然后,我们很可能会想要测试一些更多意味着重启程序的值,进入两位数(正确地),然后测试。。。所以我们即使看到也不会立即这样做,因为它要花费太多的时间。Edge 案例将会被遗忘,错误只会在生产中被发现!此外,当我们改变一些我们需要再次运行所有的测试(手动),使用一个被遗忘的,或者使用快捷键的高风险的测试。在那儿,不会有跟踪我们的测试工作。不写入日志文件,在整个测试期间,除非你增加这个你做的事情列表工作(手动)。
  四、消极反馈循环
  通常,当项目(因为某种原因)延期了,则容易陷入一种消极反馈循环。有时我们会先决定跳过编写测试代码,而这则会造成情况。
?
项目延期,造成我们不得不去编写更多的代码。所以与其“浪费时间”去不停地测试代码,不如不停地去开发项目。而这样做的结果就是代码质量进一步下降,并最终(或早或晚)导致返工。返工又通常会在最有限的时间里变得十分紧急(有些人叫这种现象为“墨菲是个乐天派!”)。其实返工什么也改变不了,项目现在只会进一步被延迟。很奇怪吧,我们编写越多的代码,我们的项目完工越晚。一种常用应对措施是让更多的开发人员被参与到项目的研发中,然而这样的作用也只是加剧消极反馈循环而已。
  若项目缺乏测试,在验收和生产环境时,通常用户则会发现许多 bug,这将会快速地降低用户对项目的信任度,从而产生消极反馈。这种反馈传递给(工作过度的)开发人员,就造成开发人员“疲劳”现象。后果就是开发人员工作积极性下降,开发人员离职,……,项目又进一步延迟了。
  五、打破消极循环
  我想你已经想到有一个办法可以解决这种现象。让我们来绘制一幅不同的场景:我们可以从一个理想计划“项目按时完工”开始。我们开发代码,然后立即测试它。测试最好是自动化(编码实现)的,这样我们可以轻松有效的去执行它们。我们把开发和测试紧密的结合在一起,每个开发测试循环可以很快速的执行。当一个开发测试循环结束时我们有信心保证代码质量是很高的,因为它已经通过了测试。而且用户因为发现缺陷(bug)的数目变少而对我们继续高度信任。即使他们发现了一个缺陷(这依然是有可能的),我们也可以扩充我们的测试集合,去避免相关缺陷的重现。如此下去,返工将不再是必须的,项目得有继续。如果我们的项目已经延期了,就需要我们花些时间来采用这种方法论。对新功能的冻结也许是必须的。停止开发新的代码,取而代之去为最严重的(恼人的-清晰的-高代价的)缺陷编写测试。
  项目延期的情况下再去为你完整的代码库编写测试是不可行的,只针对其中的一些部分就可以,不要去浪费你的时间。但是要记住其它部分也还是需要编写测试的。我在这种情况下会去找出最严重的问题(划分优先级),然后为它们编写测试。之后“快速”修改代码就会变的更容易,并且可以保证在修改其他部分是它不会出错。自动化测试可以很频繁的执行,从而降低了缺陷(bug)重现的风险。大讲台,最实用的 IT 职业在线学习平台。好了,现在可以开始去有效的强健我们项目了
  六、总结
  大部分的项目中,会考虑测试和编码之间的平衡。不过我希望大家都能清楚,测试其实是项目的加速器,而不是在浪费时间。
?       如果有任何疑问,欢迎添加qq群测试入门到大神 755431660 共同学习~
技术分享图片

关于单元测试你不知道的那些事

查看详情

你不知道的软件测试那些事?

 你不知道的软件测试那些事?  一、写在前言  作为开发人员,我们都知道我们应该测试我们的代码。我们应该写单元测试,但这也通常是我们发现没时间时跳过的第一步。  作为团队的领导者或者管理者我们都知道测... 查看详情

asp.netcore中间件应用实践中你不知道的那些事(代码片段)

一、概述这篇文章主要分享Endpoint终结点路由的中间件的应用场景及实践案例,不讲述其工作原理,如果需要了解工作原理的同学,可以点击查看以下两篇解读文章:Asp.NetCoreEndPoint终结点路由工作原理解读ASP.NETCORE管道模型及中... 查看详情

记录-关于console你不知道的那些事

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 了解console● 什么是console?console其实是JavaScript内的一个原生对象内部存储的方法大部分都是在浏览器控制台输出一些内容并且还提供了很多的辅助方法... 查看详情

js函数作用域及变量提升那些事!

...了从新的理解,还是有所收获的~ 主要参考书籍:《你不知道的JavaScript(上卷)》第一部分《JavaScript高级程序设计》第四章4.2执行环境与作用域 理解要点:1.js其实是一门编译语言,代码的执行分为两个阶段:(《你不... 查看详情

那些年你不知道的微服务架构的九大特性

图灵学院 java架构师学习路线 微服务的九大特性特性一:组件化与多服务软件开发一直以来都有一个梦想:像搭积木一样来构建应用,尽可能的模块化、组件化,方便可更换可升级的目的。一个组件就是一个可以独立更... 查看详情

那些你不知道的炫酷导航交互效果(代码片段)

基于上次发布的那些你不知道的炫酷按钮交互效果反馈比较好,后续将继续收集那些炫酷的交互效果,希望可以给你的项目添砖加瓦,更上一层楼。那些你不知道的炫酷交互效果系列:那些你不知道的炫酷按钮交互效果那些你不... 查看详情

那些你不知道的炫酷开关交互效果(12种)(代码片段)

...总计收集12款不同交互效果,相信总有一款适合你。那些你不知道的炫酷交互效果系列:那些你不知道的炫酷按钮交互效果那些你不知道的炫酷导航交互效果那些你不知道的炫酷开关交互效果效果1基于普通的开关效果增加了向内... 查看详情

关于生产者/消费者/订阅者模式的那些事

...这就导致了我生产产品和你取产品是两个非同步的动作,你不知道我什么时候生产完产品,而我也不知道你什么时候来取。而生产者/消费者模式就是解决这个非同步问题的,由于肯定不可能我生产完一个就给你打个电话叫你来 查看详情

字符串,那些你不知道的事(代码片段)

...遇到乱码的情况随便Google下就能找到解决方法,但是这样你不觉得有种被动的感觉嘛,我觉得和学习任何东西一样,学习编程首要是学习其思想,知道某事物为什么(why)要这么做,至于如何做(how)那只是前人提出的解决方案... 查看详情

社区说|flutter开发需要知道的那些事

...)20:00-21:00活动日程20:00-20:45主题分享Flutter开发需要知道的那些事为什么选择FlutterFlutter如何复用ElementKey的基本使用20:45-21:00互动问答举办社区GDG石家庄B站直播访问以下链接或点击阅读原文获取更多资讯https://live.bilibili.com/211... 查看详情

那些你不知道的kotlin冷知识(代码片段)

Lambda表达式Lambda固然好用,但是你知道Kotlin是如何实现的吗?kotlin代码funfoo(item:Int)=print(item)转换为java字节码@NotNullpublicfinalFunction0foo(finalintitem)return(Function0)(newFunction0()//$FF:syntheticm 查看详情

springcloudzuul那些你不知道的功能点(代码片段)

本文摘自于《SpringCloud微服务入门实战与进阶》一书。1./routes端点当@EnableZuulProxy与SpringBootActuator配合使用时,Zuul会暴露一个路由管理端点/routes。借助这个端点,可以方便、直观地查看以及管理Zuul的路由。将所有端点都暴露出来... 查看详情

关于生产者/消费者/订阅者模式的那些事(代码片段)

...导致了我生产产品和你取产品是两个非同步的动作,你不知道我什么时候生产完产品,而我也不知道 查看详情

你所不知道的chaosblade那些事(代码片段)

你所不知道的ChaosBlade那些事作者简介:肖长军,阿里巴巴技术专家,花名穹谷,多年应用性能监控研发和分布式系统高可用架构经验,现专注于混沌工程领域,具备多年混沌工程研发和实践经验。开源项目ChaosBlade的负责人,阿... 查看详情

面试那些事

今年的金三银四面试的人特别多,筛选的简历也很多,不知道是每年这个时间都这么多人,还是今年整体行业不太景气,主动或者被动出来的人多了些。来来回回面试也很多,看的简历多了也会发现一些简历问题,这里分享下。... 查看详情

[javascript实践篇]——那些你不知道的“奇淫巧技”

...样子验证,你会惊叹一下的letvariable2=variable1||‘‘;如果你不信,在谷歌浏览器开发者面板的控制台下试试! 查看详情

物联网通信技术,那些你不知道的事

...分享自华为云社区《物联网通信技术之有线通信技术那些你不知道的事》,原文作者 查看详情