如何写一个高效进程/线程池_关于高效企业测试的思考(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/332175.shtml

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

相关文章

智能音箱音效哪个好_华为支浩:音质好是底线,AI基本功扎实让智能音箱不再是“玩具”...

2020年,智能音箱市场的仗已经打了六年。立足国内,抑或放眼国际,似乎都是胜负已分,江山已定。可就在此时,一位“搅局者”闯入了大家视野。10月30日,华为年度旗舰新品发布会在上海举行。会上,华为…

JS(JavaScript)给元素绑定事件/给元素注册事件处理程序/给元素注册事件监听器

文章目录不使用 jQuery&#xff0c;给元素注册事件监听器通过jQuery给元素注册事件监听器通过标签的属性来注册事件监听器不使用 jQuery&#xff0c;给元素注册事件监听器 <script type"text/javascript">window.onload function () {alert("test"…

ssh无密码登陆权威指南

##【0】写在前面 ###由于ssh 实现的是免密码登陆&#xff0c;大致步骤是&#xff1a; 0.1&#xff09; client通过ssh登陆到server&#xff1b;0.2&#xff09; server检查家目录下的.ssh文件&#xff0c; 并发送公钥文件 authorized_keys 到client &#xff1b;0.3&#xff0…

java 十六进制浮点_Java十六进制浮点文字

java 十六进制浮点我如何遇到十六进制浮点数 我正在Java :: Geci中开发一种新功能&#xff0c;以减少代码重新格式化的可能性。 如果重新格式化&#xff0c;当前版本的代码将覆盖原本相同的代码。 这很烦人&#xff0c;因为按下重新格式化键的快捷键相当容易&#xff0c;而且许…

python时间倒计时显示屏厂家_python 实现倒计时功能(gui界面)

运行效果&#xff1a;完整源码&#xff1a;##import libraryfrom tkinter import *import timefrom playsound import playsound## display windowroot tk()root.geometry(400x300)root.resizable(0,0)root.config(bg blanched almond)root.title(techvidvan - countdown cloc…

IntelliJ IDEA中Maven操作窗口的命令详解/Maven命令详解/Maven生命周期命令详解

文章目录生命周期命令简介命令详解testpackage命令演示verifyinstall将当前项目放到 Maven 的本地仓库中&#xff0c;供其他项目使用将自己打包或者下载的 jar/war 文件复制到本地仓库中&#xff0c;供其他模块使用sitedeploy生命周期命令简介 在 Maven 中&#xff0c;项目构建…

基于Apache POI 向xlsx写入数据

【0】写在前面 0.1&#xff09; these codes are from 基于Apache POI 的向xlsx写入数据0.2&#xff09; this idea is from http://cwind.iteye.com/blog/2187670 , adding some comments for easy understanding proves to be my work. package com.cwind.poi; import jav…

javafx 打开新窗口_新的JMetro JavaFX 11兼容版本

javafx 打开新窗口你好&#xff0c;我们又见面了&#xff01; 这次&#xff0c;新版本与JavaFX 11兼容。 继续阅读以获取详细信息。 JMetro 8.5.7和11.5.7版本 JMetro代码已分为2个分支。 master分支具有Java 8兼容的JMetro版本&#xff0c;“ 11”分支具有Java 11兼容的版本…

后勤管理系统_充满“智慧”的后勤管理系统是什么样的?

▲2020年4月7日&#xff0c;亿力信息公司部署的后勤管理系统二期上线试运行&#xff0c;技术人员在现场指导用户进行系统的基本操作后勤管理系统二期全面提升管理效能近日&#xff0c;亿力信息公司承接部署的后勤管理系统二期已上线试运行&#xff0c;通过贯穿资产全寿命周期的…

Final Cut Pro 在视频的多个地方同时打马赛克

文章目录使用风格化效果中的像素化或者模糊效果使用风格化效果中的删减效果让马赛克显示一段时间后消失使用风格化效果中的像素化或者模糊效果 像素化和模糊效果是将整个视频画面都像素化和模糊化&#xff0c;所以如果你要将画面中的某个部分打马赛克&#xff0c;其实这样的效…

亚麻纤维截面形态_天然丝纤维蚕丝

点击蓝字 关注我们我国是蚕丝的发源地。近年来&#xff0c;对出土文物的考古研究指出&#xff0c;蚕丝在我国已有六千多年的历史。柞蚕丝也起源于我国&#xff0c;根据历史记载&#xff0c;已有三千多年的历史。远在汉、唐时代&#xff0c;我国的丝绸就畅销于中亚和欧洲各国&am…

jep122_JEP 358:有用的NullPointerExceptions

jep122在文章“ 更好的默认NullPointerException消息是否会传入Java&#xff1f; ”&#xff0c;我总结了当时与JEP 草案有关的背景细节&#xff0c;有关使某些类型的NullPointerException &#xff08;NPE&#xff09;消息更有用。 上周很高兴看到该JEP现在是候选 JEP &#x…

目录、文件夹、文件三者的区别

目录也是文件&#xff0c;是一种特殊文件&#xff0c;叫目录文件&#xff0c;简称目录。 目录是文件系统对象&#xff0c;属于文件系统的概念 术语目录指的是文档文件和文件夹的结构化列表存储在计算机上的方式。它与包含姓名、号码和地址列表的电话簿相当&#xff0c;并且不包…

基于Apache POI 从xlsx读出数据

【0】写在前面 0.1&#xff09; these codes are from 基于Apache POI 的从xlsx读出数据0.2&#xff09; this idea is from http://cwind.iteye.com/blog/2187670 , adding some comments for easy understanding proves to be my work. package com.cwind.poi; import jav…

toarray方法_机器学习中类别变量的编码方法总结

作者&#xff1a;louwill&#xff1b;转载自&#xff1a;机器学习实验室在做结构化数据训练时&#xff0c;类别特征是一个非常常见的变量类型。机器学习中有多种类别变量编码方式&#xff0c;各种编码方法都有各自的适用场景和特点。本文就对机器学习中常见的类别编码方式做一个…

java实现可选形参_Java:可选的可选实现

java实现可选形参类java.util.Optional被实现为单个不可变的具体类&#xff0c;该类在内部处理两种情况。 一个有元素&#xff0c;一个没有元素。 让Optional作为一个接口并让两个不同的实现代替实现该接口不是更好的选择吗&#xff1f; 毕竟&#xff0c;这就是我们通常被教导要…

MySQL数据库的JSON数据类型详解

文章目录JSON 数据类型意义存储JSON串修改JSON串中指定字段的值查询 JSON 串中的数据查询 JSON 串中指定字段的值特殊语法精确查询嵌套精确查询模糊查询优化 JSON 查询处理 JSON 数据的常用函数JSON_CONTAINS_PATHJSON_PRETTY总结参考资料JSON 数据类型意义 其实&#xff0c;没…

高特权级代码段转向低特权级代码段(利用 ret(retf) 指令实现 jmp from ring0 to ring3)

【0】写在前面 0.1&#xff09;本代码旨在演示 从 ring0 转移到 ring3&#xff08;即&#xff0c;从高特权级 转移到 低特权级&#xff09;0.2&#xff09;本文 只对 与 门相关的 代码进行简要注释&#xff0c;言简意赅&#xff1b;0.3&#xff09;文末的个人总结是干货&#…

aws 删除ec2实例_如何在AWS中启动EC2实例

aws 删除ec2实例你好朋友&#xff0c; 在本教程中&#xff0c;我们将看到如何立即在AWS中旋转EC2实例。 您应该有权访问AWS控制台。如果您还没有AWS账户&#xff0c;则可以单击此处并在AWS上创建免费套餐。 如何在AWS中启动EC2实例 第1步 &#xff1a; 使用您的凭证登录到您…

python足球射门小游戏_足球射门游戏教案

足球射门游戏教案【篇一&#xff1a;足球射门游戏教案】足球游戏教案任课教师&#xff1a;张旭授课班级&#xff1a;初二(1)班第1次课上课时间&#xff1a;2008-12-1人数&#xff1a;50男(30)女(20)指导教师&#xff1a;彭老师1.运球接力1.足球运球类游戏{ 2.传球射门3.足球打靶…