如何写一个高效进程/线程池

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

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

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

介绍

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

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

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

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

原则与约束

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

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

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

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

如何写一个高效进程/线程池

如何写一个高效进程/线程池_关于高效企业测试的思考(1/6)相关推荐

  1. 手写一个简单的线程池MyThreadPool

    说明 手写的一个简单的线程池,旨在帮助了解线程池的工作原理. 核心内容 核心工作线程 任务阻塞队列 定义一个内部类去实现核心工作线程 /*** 内部类:工作的核心线程*/private final c ...

  2. java 手编线程池_死磕 java线程系列之自己动手写一个线程池

    欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. (手机横屏看源码更方便) 问题 (1)自己动手写一个线程池需要考虑哪些因素? (2)自己动手写 ...

  3. python 线程池_老程序员的经验分享:Python 从业十年是种什么体验?

    出于某些原因,想记录一下我过去数年使用 Python 的经验和一些感悟.毕竟算是一门把我带入互联网行业的语言,而我近期已经几乎不再写 Py 代码, 做一个记录,也许会对他人起到些微的帮助,也算是纪念与 ...

  4. 手撸一款简单高效的线程池(五)

    在之前的内容中,我们给大家介绍了 C++实现线程池过程中的一些常用线优化方案,并分析了不同机制使用时的利弊.这一篇,是线程池系列的最后一章.我们会介绍一下 CGraph 中的 threadpool 如 ...

  5. threadpoolexecutor创建线程池_线程池ThreadPoolExecutor源码分析

    什么是线程池 创建线程要花费昂贵的资源和时间,如果任务来了才创建那么响应时间会变长,而且一个进程能创建的线程数量有限.为了避免这些问题,在程序启动的时候就创建若干线程来响应出来,它们被称为线程池,里面 ...

  6. 项目使用线程池_并发编程系列1:线程池的架构实现、大小配置、及四种线程池使用...

    △ 公众号回复关键词"架构" 即可领取<1500+BAT架构及面试专题合集> 本篇为线程池系列文章之一,不经常使用线程池的童鞋,还有对几种线程的使用不甚了解的童鞋,可以 ...

  7. java 动态线程池_线程池的参数动态调整

    经典面试题 这次的文章还是绕回了我写的第三篇原创文章<有的线程它死了,于是它变成一道面试题>中留下的几个问题: 哎,兜兜转转,走走停停.天道好轮回,苍天饶过谁? 在这篇文章中我主要回答上面 ...

  8. java开源线程池_线程池 - Java 并发性和多线程 - UDN开源文档

    线程池 线程池(Thread Pool)对于限制应用程序中同一时刻运行的线程数很有用.因为每启动一个新线程都会有相应的性能开销,每个线程都需要给栈分配一些内存等等. 我们可以把并发执行的任务传递给一个 ...

  9. 大神教你如何给脚本写一个守护进程

    在我们日常运维中,写脚本监控一个进程是比较常见的操作,比如我要监控mysql进程是否消失,如果消失就重启mysql. 用下面这段代码就可以实现: #!/bin/shDate=` date '+%c'` ...

最新文章

  1. vim win装_VIM的代码补全工具YouCompleteMe在Windows上的安装攻略
  2. MySQL利用xtrabackup进行增量备份详细过程汇总
  3. java 学习心得 (近期的)
  4. chrome ui源码剖析-Accelerator(快捷键)
  5. vc6.0连接mysql数据库
  6. mongodb----集合而定多种查询方式
  7. 面试常考题---交换变量
  8. 【机器学习】opencv-人脸识别
  9. 浏览器播放rtsp视频流方案(ffmpeg + nginx转m3u8)
  10. Springboot+多线程+等待获取执行结果
  11. Atom: 几个常用的快捷键,恢复主菜单
  12. 2022泰迪杯数据挖掘挑战赛C题方案及赛后总结:疫情背景下的周边游需求图谱分析
  13. MongoVUE的基本使用
  14. PostScript 打印机打印内存不足错误消息
  15. linux firefox严重卡顿,Firefox火狐浏览器出现卡顿崩溃等问题的解决方法
  16. excel常用快捷键详解
  17. 忘了neo4j密码怎么办
  18. 2020 ACM杰出科学家名单出炉:叶杰平、崔鹏等26位华人学者上榜
  19. [文章]云计算、大数据和人工智能科普文
  20. 毕业设计 单片机火灾报警系统设计与实现 - stm32 嵌入式

热门文章

  1. 1151 LCA in a Binary Tree 甲级
  2. ARC115D-Odd Degree【dp,欧拉回路】
  3. CF1511G-Chips on a Board【倍增】
  4. P6378-[PA2010]Riddle【2-SAT】
  5. YbtOJ#526-折纸游戏【二分,hash】
  6. P3193-[HNOI2008]GT考试【KMP,dp,矩阵乘法】
  7. bzoj1013,luogu4035-[JSOI2008]球形空间产生器【高斯消元】
  8. POJ1845-Sumdiv【逆元,等比数列,约数】
  9. 【2018.3.17】模拟赛之一-ssl2574jzoj1368 无限序列【斐波那契数列】
  10. ssl2293-暗黑游戏【dp练习题】