热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

敲黑板了!借助自动创建单元测试来提高单元测试的投资回报率(ROI)

ParasoftJtest的自动单元测试创建技术消除了单元测试的障碍,使单元测试的日常工作自动化,包括创建、隔离、模拟和维护。大多数开发团队都会同意,尽管他们不喜欢它,但是单元测试

Parasoft Jtest的自动单元测试创建技术消除了单元测试的障碍,使单元测试的日常工作自动化,包括创建、隔离、模拟和维护。

大多数开发团队都会同意,尽管他们不喜欢它,但是单元测试实际上是非常有价值的。尽管有许多有助于手动测试创建的工具,但是在将业务逻辑添加到测试之前,创建和维护单元测试仍然需要大量手动,耗时且经常令人费解的工作。这样,尽管有进行大量单元测试的意图,但是开发团队通常会执行所需的最小数量的单元测试,或者完全跳过它。


开发人员表态

最近的一次客户调查表明,在某种程度上可以预料到,测试创建、模拟/隔离和维护是阻碍单元测试成功的关键问题。图1显示了该调查的结果,显示了开发人员正在使用Java进行单元测试时确定的首要问题。

图1:调查结果显示了单元测试引起的关键关注领域(百分比)。

为了解决这些主要问题,我们可以转向自动化软件测试。在此文中,我将向您展示如何使用Parasoft Jtest自动化测试执行和数据收集,以及自动创建单元测试,以节省测试创建时的时间和精力。Parasoft Jtest的自动单元测试创建技术可以建立测试框架,实例化对象,并为适当的对象和被测方法使用的方法调用配置模拟。它创建了常规的JUnit,完成了所有平凡的工作,因此开发人员可以专注于将人类智能和逻辑应用于他们的测试。


单元测试的好处以及为什么开发人员仍然避免使用它

单元测试是迭代的,在敏捷过程中,单元测试具有改善项目成果的良好记录。当然,经过充分证明的是,在生命周期的早期进行测试是以后检测并消除昂贵且耗时的系统级错误的最佳方法。更具体地说,以下是单元测试的一些主要优点:


  • 为敏捷过程提供敏捷性:敏捷过程依赖于高效,可重复的自动化测试套件,以确保每次迭代都不会陷入“大爆炸”测试周期。敏捷和DevOps的成功很大程度上取决于开发团队创建可以高效运行的测试套件以及测试尽可能多的功能。
  • 更高的质量和安全性:软件团队了解,测试是确保软件满足要求的唯一方法,但是团队经常无法进行足够的测试,或者在开发生命周期中进行得太晚。特别是安全性,需要在最早的阶段就内置到应用程序中,因此必须尽早进行安全性测试。
  • 从长远来看降低成本:在已发布软件中发现的软件错误修复成本可能是开发期间的1000倍。在单元测试的早期编码阶段发现的错误比后来发现的错误便宜得多。在测试自动化和单元测试基础架构上的短期投资可带来更好的产品质量、安全性和按时交付的回报。

不幸的是,尽管希望获得更好的结果,但是尽管有这些好处,开发人员仍在努力进行单元测试。上述调查结果也说明了这些斗争,其中包括:


  • 创建测试是额外的工作,而且通常很乏味:可以理解,单元测试是额外的工作,通常被视为编程的最不期望的方面。在尝试维护项目目标和截止日期的同时创建一个全面的测试套件是开发团队面临的两个相互竞争的压力。
  • 测试维护非常昂贵:就像代码一样,单元测试也需要维护。任何代码更改都可能导致相关测试的更改。不仅如此,由于代码库修改而失败的测试似乎无关紧要,从而导致测试套件不稳定。额外的维护在许多开发人员的心中创造了“双重工作”。
  • 模拟和隔离被测单元既困难又耗时:隔离被测单元至关重要,但要模拟依赖关系,这可能是一个耗时的过程。

如果软件开发团队想获得彻底的单元测试的好处,那么他们必须通过创建、隔离和维护测试来解决这些问题,而解决方案就是自动化。Parasoft Jtest的自动单元测试创建工具提供了测试创建和维护所需的帮助,同时在开发人员的IDE中工作并利用现有的测试和模拟框架。


通过自动创建测试来减少负担

创建单元测试很繁琐,并且将注意力从项目中更有趣的部分转移开来。代码本身是重复的,通常需要与被测代码一样多的工作,最重要的是,单元测试代码本身需要像任何代码一样进行修复和调试。幸运的是,单元测试非常适合自动化,而来自单元测试工具的自动指导可以极大地简化测试的创建,减少调试和修复的数量,并收集结果和指标以提供项目分析。


超越IDE

例如,许多IDE提供了针对JUnit的单元测试创建向导,但没有提供“内容”来完成该过程。断言需要手动定义,并且如果使用模拟框架,则需要大量的手动编码。相反,Parasoft Jtest在开发人员的IDE中提供了上下文相关的实时帮助。通过自动创建单元测试,当您利用单元测试工具执行以下操作时,快速简单地完成了简单骨架单元测试中缺少的“内容”:


  • 创建测试框架,实例化对象,并配置适当的模拟对象和方法
  • 执行测试自动化执行的运行时分析,以突出显示在测试过程中更改的对象值,并建议对这些值进行验证的断言。
  • 标识应该模拟的方法调用,以便更好地隔离测试中的代码
  • 检测已创建但未在测试完成后释放的系统资源,从而可能创建不稳定的测试环境
  • 收集代码覆盖率和其他指标

为了解决这个问题,我们来看一个例子。在这里,用IDE调用Parasoft Jtest的单元测试助手来创建参数化测试:

该工具将创建以下单元测试代码,此时开发人员将根据需要完成参数:

为了为不同的参数值创建测试用例,Parasoft Jtest的单元测试助手提供了一个测试用例向导:


降低模拟复杂度

单元测试意味着隔离被测对象,如果存在许多依赖性,则需要大量工作。即使使用Mockito或PowerMock这样的模拟框架,仍然需要大量的手动编码。使用自动测试助手工具,您可以检测依赖关系并自动填写框架所需的详细信息。

该工具本身会分析被测代码,自动检测依赖关系,并向开发人员提出建议。

例如,在这里我们正在执行IWorkspaceClass类的以下单元测试:

在运行时会检测到依赖关系,该工具建议模拟发现的依赖关系:

使用该工具选择“模拟”将通过单元测试生成必要的模拟代码。生成此代码后,可以对其进行自定义以表示所需的正确逻辑。依赖关系的自动检测和随后的模拟代码创建极大地减少了模拟对象所需的手动编码,并且可能容易出错。


通过自动化减少测试套件的维护

测试套件的维护与创建测试所需的许多工作重叠,例如创建新测试,修改测试以适合基础逻辑、模拟依赖关系、测试执行和验证。在测试维护期间从Parasoft Jtest的单元测试助手获得帮助与在创建过程中一样有价值,因为它可以提供有关在测试执行期间收集的运行时分析结果的更新反馈。例如,在运行时检测到被测对象中的新依赖关系,该工具会提示开发人员如何处理它。

在此阶段同样重要的是,确保断言仍然有效。Parasoft Jtest单元测试助手提供了一些建议,这些建议可以检测代码中的更改并更新断言以反映新的业务逻辑。


最大限度地利用现有工具

已经进行单元测试的Java开发人员可能会使用JUnit,并可能使用其项目的断言框架,例如Mockito或PowerMock。测试自动化工具需要利用这些现有工具,因为替换单元测试中的现有投资将消除任何成本和时间收益。Parasoft Jtest的单元测试助手与这些现有工具无缝集成,这一点至关重要。


结论

单元测试具有明显的好处,尽管大多数开发团队都意识到了这一点,但是许多人却因创建和维护测试而受阻。使用Parasoft Jtest的自动化单元测试技术将帮助用户消除这些障碍,使单元测试的平凡方面自动化,包括创建,隔离,模拟和维护。为了加快采用速度,Parasoft Jtest利用了开发团队在测试和模拟框架上的现有投资,并在为产品带来高品质的同时,还给了开发人员更多的时间。



推荐阅读
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 目前有哪些主流的编程语言呢?1、Java:应用广泛,Android的编程,大部分是用Java;相关岗位:软件工程师,软件架构师和DevOps工程师。2、Python:简单易学,软件 ... [详细]
  • 【限时免费】       架构和运维技术高峰论坛·成都站来啦~~     报名请点击左下角 阅读原文运维和架构系列论坛,由IT趣学社主办,以目前最火热的运维技术体系为核心,邀请业界 ... [详细]
  • 智慧城市背景下Python机器学习项目实战案例分享
    首先,何为智慧城市?智慧城市的“智慧”源自何处?智慧城市的特征在于运用大数据和数字技术提高居民生活质量。机构获得的数据越全面、越实时,它们就越有能力观测事件发生的详情、分析需求模 ... [详细]
  • docker 多物理机容器_Docker(1) 什么是 Docker
    ​1|0学习Docker前的必备知识1|1环境配置的烦恼软件开发最大的麻烦事之一,就是环境配置相信每位编程初学者都会在环境配置上倒腾很久,而作为老师也会 ... [详细]
  • 本文比较了eBPF和WebAssembly作为云原生VM的特点和应用领域。eBPF作为运行在Linux内核中的轻量级代码执行沙箱,适用于网络或安全相关的任务;而WebAssembly作为图灵完备的语言,在商业应用中具有优势。同时,介绍了WebAssembly在Linux内核中运行的尝试以及基于LLVM的云原生WebAssembly编译器WasmEdge Runtime的案例,展示了WebAssembly作为原生应用程序的潜力。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 本文介绍了Java高并发程序设计中线程安全的概念与synchronized关键字的使用。通过一个计数器的例子,演示了多线程同时对变量进行累加操作时可能出现的问题。最终值会小于预期的原因是因为两个线程同时对变量进行写入时,其中一个线程的结果会覆盖另一个线程的结果。为了解决这个问题,可以使用synchronized关键字来保证线程安全。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 全局角度出发讨论敏捷
    JonKern对于是什么促成了敏捷的成功有着自己读到的见解。你可能会不同意他的观点。下面列出了一些建立在项目全局角度之上的关键实践,项目本身就是从此开始的。如果不能从系统角度来做项目,那它就不能达到预期的效果,甚至可能会失败。我很早以前就认为,开发软件就像是在完成一个很长的待办事项列表。我试了很多方法来运行项目,从记事贴到Jira(从Jira刚发布起我就开始使用)。我使用传统Scrum风格的Spr ... [详细]
  • 开发笔记:DevOps Gitlab环境部署
    本文由编程笔记#小编为大家整理,主要介绍了DevOpsGitlab环境部署相关的知识,希望对你有一定的参考价值。DevOps介绍 ... [详细]
  • 阿里巴巴DevOps实践指南 | 云端开发
    开发者工具打造围绕开发者全生命周期的工具产品https:developer.aliyun.comtool?spma1z389.11499242.0.0.654524137BG3J ... [详细]
author-avatar
荆州房产网
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有