关于高效企业测试的思考(1/6)

企业中的测试仍然不是应有的广泛使用的话题。 编写尤其是维护测试需要花费时间和精力,但是缩短软件测试并不是解决方案。 为了提高测试效率,应该追求哪些范围,方法和测试技术?

我根据许多实际项目,结合了我在企业测试中的经验和意见,提出了一系列建议。 特别是对于比“ hello world”要复杂得多的应用程序,遵循哪种方法至关重要。 我将主要关注测试应用程序的功能行为,即它们如何很好地实现我们的业务逻辑。 在下面的内容中,我将解释有关如何在不同的范围和使用不同的方法来提高测试效率的最佳实践:

  • 想法与约束
  • 单元测试
  • 用例测试
  • 代码级集成测试
  • 系统测试
  • 开发工作流程和管道
  • 测试代码质量和可维护的测试
  • 测试框架和技术

介绍

不管测试的类型和范围如何,拥有测试套件的目的都是为了验证我们的应用程序可以在生产中按预期工作。 从用户的角度来看,这应该是验证系统是否完成其工作的主要动机。

由于人的注意力跨度和上下文切换是一回事,因此我们需要确保我们的测试能够快速运行和验证,并具有可预测的结果。 在编写代码时,快速验证(少于或等于一秒钟)对于确保高效的工作流程以及确保我们不会分散注意力至关重要。

另一方面,我们需要确保测试保持可维护性。 软件更改非常频繁,并且具有足够的功能测试覆盖范围,生产代码中的每个功能更改都需要更改测试范围。 理想情况下,测试代码仅在功能(即业务逻辑)发生变化时才发生变化,而不是在代码清理和重构时发生变化。 通常,测试方案需要使非功能性的结构更改成为可能。

当我们研究不同的测试范围时(我们将更详细地介绍),就会出现一个问题,即哪个范围需要花费更多的时间和精力。 对于微服务应用程序或我们拥有大量分布和集成的任何系统,验证系统边界的集成测试变得更加重要。 因此,我们需要一种有效的方法来验证本地开发过程中的整个应用程序,同时保持应用程序环境和设置与生产环境尽可能相似。

原则与约束

无论选择哪种解决方案,我们都为测试套件定义以下原则和约束:

  • 测试需要快速执行和验证,并提供快速反馈。 对于没有任何进一步集成的单元测试,我们应该能够在一秒钟内运行数百个测试。 对于集成测试,执行时间取决于场景,理想情况下不超过一秒。
  • 在开发过程中,测试还必须在集成级别上提供快速反馈。 这要求测试上下文快速启动,或者在我们编写代码时保持运行。 因此,应该有可能通过少于5秒的重新部署和测试周转时间来建立有效的开发周期。
  • 测试需要使其能够重构生产代码,而无需在测试范围内进行重大更改。 不会更改应用程序功能行为的代码更改应仅导致最小的测试代码更改。
  • 确实会更改功能行为的代码更改应同样会导致有限的测试代码更改。 例如:“将HTTP边界交换到gRPC,将JSON交换到其他东西,甚至交换企业框架等,要花多少精力?”。
  • 测试技术和方法必须与根据我们的业务需求量身定制适当的抽象,委托和代码质量兼容。 我们需要能够设计表达性API,扩展潜在的DSL以及设计正确的抽象。
  • 测试技术需要支持一种“开发模式”,即以一种能够在集成环境中进行即时更改和重新部署的方式运行该应用程序,例如服务器的“开发”和调试模式, Quarkus的开发模式, 网真 , 监视部署方法等。
  • 测试方法必须与单独设置开发和测试生命周期兼容。 也就是说,开发人员必须能够在测试生命周期之外设置和配置其本地环境(例如,使用Shell脚本),然后在已经设置好的环境中快速运行测试方案。 出于灵活性和可重用性的原因,各个测试用例不应管理测试设置的生命周期。
  • 我们需要能够在多个范围内重用测试场景,例如,一次定义业务场景,并将设置重新用于系统测试,负载测试,在本地或针对外部部署的环境中运行。 复制方案应该很简单,方案应该只包含几行代码,通过使用不同的实现来达到不同的目的。

在本系列的下一部分中,我们将研究代码级单元测试和组件用例测试,以及它们如何与这些原理和约束相匹配。

翻译自: https://www.javacodegeeks.com/2019/09/thoughts-on-efficient-enterprise-testing.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339535.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电脑开机后显示服务器没有声音,我的电脑音频服务启动不了,没有声音,小扬声器那里是一个红色的小叉叉...

(我系统是W7普通家庭版32位)一、电脑没了声音,小喇叭上有个红叉,鼠标放上去显“音频服务未运行”,进入控制面板,声音里显没有设备。1,确保硬件好的前提下,还是得先检查下你的驱动有没有问题。2,…

10鼎信诺为什么安装不了_鼎信诺审计软件一周常见问题(4.134.17)

今天介绍一下近期咨询较多的两款财务软件在取数后不能显示辅助核算明细的问题,分别是诺诺云和亿企代账,这两款软件都是采用云记账方式,均可以通过其平台中的导出审计数据的功能导出一个备份文件夹,备份文件夹中都是TXT格式的文本文…

Angular 8 + Spring Boot 2.2:立即构建一个CRUD应用程序!

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证。 如果您已经成为Java开发人员超过15年,那么您可能还记得什么时候有过多的J…

http服务器网站打不开,网站打不开_ostonkin8743的博客__杭州19楼

HTTP 错误 403 - 限制为仅本地主机访问 Internet 服务管理器 (HTML)HTTP 错误 403 403.1 禁止:禁止执行访问如果从并不允许执行程序的目录中执行 CGI、ISAPI 或其他执行程序就可能引起此错误。如果问题依然存在,请与 Web 服务器的管理员联系。HTTP 错误 …

函数传参字典_Python 函数中的 4 种参数类型

作者:小小程序员链接:https://zhuanlan.zhihu.com/p/89538123来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。在调用函数时,通常会传递参数,函数内部的代码保持不变&#x…

gc频繁的暂停启动_减少主要GC暂停的频率

gc频繁的暂停启动这篇文章将讨论一种减少垃圾收集暂停的技术,它会延迟应用程序的延迟。 正如我几年前所写, 在JVM中无法禁用垃圾收集 。 但是,有一个巧妙的技巧可以用来大大减少长时间停顿的时间和频率。 如您所知,JVM内部发生了…

部署war文件到服务器,war包怎么部署到云服务器

war包怎么部署到云服务器 内容精选换一换部署提供可视化、一键式部署服务,支持并行部署和流水线无缝集成,实现部署环境标准化和部署过程自动化。本节通过以下四步介绍如何使用部署服务将归档在软件发布库的软件包部署到云主机上。第一步:准备…

惠普bios硬重置_惠普笔记本电脑按什么样键进入BIOS设置?惠普笔记本BIOS密码忘了咋重置...

F① F② DEL都不行。r是不是的啊?量情拆好:如果您确认无法进入BIOS://stg.www⑧.hp,这个情况很可能是硬件有故障造成的,建议您可以通过以下网址查询距离最近的惠普金牌服务中心.com/cn/zh/support-drivers/esupport/ascpps&…

Java 8中的StringJoiner与String.join的示例

将多个String文字或对象合并为一个是常见的编程要求,并且经常会发现需要为应用程序将String列表或String集合转换为CSV String的情况。 长期以来,JDK API无法将多个String文字或对象连接在一起,这迫使程序员编写诸如遍历所有String对象并使用…

小米4系统定位服务器地址,小米4原装浏览器怎么开启定位系统

手机系统最好是开发版,稳定版必须先root,可以自己root(另找教程),也可以刷成开发版。我的手机系统是MIUI4.10.31(开发版),可以在“系统更新”查看,具有root功能。小米4如何开启虚拟键盘方法安装RE管理器和Root Explore…

中如何将方形图片转换成圆形图片_【PS】PS中不可不知的实用技巧!你都掌握了吗?...

今天给大家分享一些在PS中经常用到的实用小技巧,操作简单易上手。01 拉伸图片人物不变形在我们在PS里想要拉伸一些图片时,里面的人物往往会跟着一起变形,那么如何改变图片比例的同时,又不影响人物的形态呢?打开我们需要…

jooq 执行sql_使用jOOQ和Java 8的CompletableFuture进行异步SQL执行

jooq 执行sql响应式编程是一个新的流行词,它实际上仅表示异步编程或消息传递。 事实是,函数语法极大地帮助构建了异步执行链,今天,我们将看到如何使用jOOQ和新的CompletableFuture API在Java 8中做到这一点。 实际上&#xff0c…

python系统状态_python实现系统状态监测和故障转移实例方法

代码如下:#coding: utf-8import socketimport selectimport timeimport osimport threadingdef ser():s socket.socket(socket.AF_INET,socket.SOCK_DGRAM)s.bind(("",43244))while 1:infds,outfds,errfds select.select([s],[],[],5)if infds:sms s.recv(1024)if…

ubuntu系统安装socket服务器,Ubuntu上进行socket编程,并且实现通信功能

#include #include #include#include#include #include#include #include #include #include#include #include#include #include #define PERM S_IRUSR|S_IWUSR#define MYPORT 5500 //宏定义,定义通信端口#define BACKLOG 10//宏定义,定义服务程序可以连…

使用JUnit对ADF应用程序进行单元测试

JUnit是Java语言的单元测试软件包,由于ADF构建在J2EE框架之上,因此可以用来测试Oracle ADF应用程序。 单元测试基本上是根据某些定义的测试标准来验证最小的可测试模块的过程。 在这里,我将说明如何在JDeveloper 12.2.1.3中设置和使用JUnit来…

libgo高性能网络服务器,【开源】gnet: 一个轻量级且高性能的 Golang 网络库

![](https://ask.qcloudimg.com/http-save/1303222/sipe2g9n9h.png)# Github 主页[https://github.com/panjf2000/gnet](https://github.com/panjf2000/gnet)欢迎大家围观~~,目前还在持续更新,感兴趣的话可以 star 一下暗中观察哦。# 原文博客[gnet: 一个…

拆分js文件_2021入门Webpack,看这篇就够了:Webpack.config.js 解析

这是优妈成长记的第63篇原创这是一个webpack配置说明本文是发布在github上webpack-demo的README文件内容。主要对webpack.config.js每一条的注释说明。github项目地址:https://github.com/hourong88/webpack-demo可以点击文章最下方【阅读原文】跳转github链接查看&…

orcad自上而下_开发自上而下的Web服务项目

orcad自上而下这是从Alessio Soldano编辑的Advanced JAX-WS Web Services手册中摘录的示例章节。 第一章介绍了自底向上创建Web服务端点的方法。 它允许非常快地将现有bean作为Web Service端点公开:在大多数情况下,将类转换为端点只需在代码中添加少量注…

安装win7系统不能开机启动服务器,win7系统开机启动项不能加载的原因分析及解决...

开机启动项是每台电脑都有的东西,就是多和少的问题的,很多人开机的时候喜欢加载很多的启动项,其实这也没什么不好的。现在的电脑为了受到更好的保护,往往在开机的时候就加载了一些启动项,如:杀毒软件&#…

七大罪过与如何避免

在整个本文中,我将在代码片段中使用Java,同时还将使用JUnit和Mockito 。 本文旨在提供示例测试代码,这些示例可以是: 难以阅读 难以维护 在这些示例之后,本文将尝试提供替代方法,这些替代方法可用于增强…