测试驱动开发 测试前移_测试驱动开发–双赢策略

测试驱动开发 测试前移

敏捷从业人员谈论测试驱动开发 (TDD),所以许多关心代码质量和可操作性的开发人员也是如此。 我曾几何时,不久前设法阅读了有关TDD的文章。 据我了解,TDD的关键是:
  1. 编写测试,但失败
  2. 代码,使测试成功
  3. 自动化测试
  4. 重构代码以提高质量
  5. 重复

很容易理解。 恼火的开发人员大喊:“开发人员在编写测试吗? 您如何期望我们开发和测试并及时完成功能?”。 毕竟,所有开发人员都不想做无聊的测试工作。 我从事开发人员大约两年了,在最初的日子里,有时我会做出这种React。 但是随着时间的流逝,我已经开始理解软件开发的症结所在。 这次我想到尝试TDD。

我的工作涉及使用Java EE Web框架通过UI在db中连接数据库中的数据,这是典型的Web应用程序工作。

让我解释一下在采用TDD之前的测试策略:

  1. 编写完整的代码,包括-PLSQL过程,调用PLSQL过程的Java代码,用于UI绑定的Java代码以及JSP页面本身。
  2. 手动测试db层和UI层代码的功能。 它涉及导航到页面,然后测试各种操作。 在这种情况下,UI问题和后端代码问题都会出现。
  3. 正如我将进一步研究UI一样,我将在代码中发现一些bug,否则编写一个selenium测试以自动测试一些用例。

通过上述3个步骤,我花了很多时间-

  1. 等待后端代码编译,然后重新启动服务器以使UI反映更改。 即使它只是一个简单的1词/ 1语句更改,我也不得不等待大约5分钟,有时甚至是8分钟。 当我等待重新启动时,我会失去对其他任务的关注,因此需要一段时间才能回到主要任务。
  2. 尝试调试并找出异常/错误是由于UI代码问题还是后端代码问题引起的。
  3. 等待页面加载并浏览页面到正确的页面。

好的,那是史前时代。 现在正走向现代。 我以为我无法完成TDD的工作,这是因为我编写了后端和UI代码耦合不良的代码。 我想不出一种方法来独立测试我的后端代码,然后转到UI代码,然后通过Selenium测试对其进行测试。 抛开这些概念,我试了一下。 我知道我与实际的TDD距离不是很近,但是感觉有点接近。

  1. 我对如何实现逻辑,创建基本实现并使其成功编译有一个很明确的想法。
  2. 创建了一些数据填充测试,以获取用于测试的数据类型。
  3. 创建了JUnits以测试基本功能。 主要是通过Java API正确执行PLSQL过程。
  4. 更新了JUnits以添加更多测试以测试所需的实际功能,并更新了代码以实现这些功能。
  5. 重构代码以消除难闻的气味,然后运行JUnits以确保没有任何损坏。

我感到兴奋的原因,以及我认为这是双赢的策略:

  • 与API的创建者相比,我开始更多地考虑API的用户。 这使我无法添加可以解决问题但难以测试的黑客。 与以前编写的代码相比,这极大​​地改善了代码结构。
  • 没有服务器重新启动,每次重新启动都不会浪费〜8分钟,也不会浪费浏览页面的时间。 我只需要编辑代码,运行Junit并查看测试即可确定命运。 这对于我编写的后端代码更有用。
  • 我专注于代码测试周期,因此不会失去重点。
  • 我看到测试显示绿色栏表示成就感。
  • 创建具有良好单元测试的代码以测试后端功能的可能性,这也有助于更轻松地重构代码。

现在,我只需要为UI和后端编写粘合代码,并通过Selenium测试来测试粘合代码。

任何人开始使用TDD时都有类似的经历吗?

参考: 我在测试驱动开发中的第一步-我们的JCG合作伙伴 Mohamed Sanaulla在“ 体验无限”博客上提出的双赢策略 。


翻译自: https://www.javacodegeeks.com/2012/05/test-driven-development-win-win.html

测试驱动开发 测试前移

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

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

相关文章

android timer后函数继续执行_Android内存异常机制(用户空间)_JE

常见的Android稳定性异常,有内核异常和Android层异常。内核异常也就是常说的“kernel panic”,简称KE异常;Android层异常又分为java层crash和Native层crash,简称JE、NE异常。此外,Android层异常还有应用ANR和system_Se…

oracle10 数据库审计,Oracle数据库审计用法实例

本节是从ORACLE METALINK的DOC:167293.1翻译整理而来的。通过举例的方式来说明ORACLE审计的用法。ORACLE的审计可以从语句级、对象本节是从Oracle METALINK的DOC:167293.1翻译整理而来的。通过举例的方式来说明ORACLE审计的用法。ORACLE的审计可以从语句级、对象级和权限级几个…

cefsharp 发送请求服务器_超高性能管线式HTTP请求(实践·原理·实现)

来源:https://www.cnblogs.com/lulianqi/p/8167526.html这里的高性能指的就是网卡有多快请求发送就能有多快,基本上一般的服务器在一台客户端的压力下就会出现明显延时。该篇实际是介绍pipe管线的原理,下面主要通过其高性能的测试实践,解析背…

oracle 启用闪回数据库,如何启用Oracle10g闪回数据库特性

为什么80%的码农都做不了架构师?>>>1.确认当前模式SYS AS SYSDBA on 29-MAR-05 >select flashback_on from v$database;FLA---NO2.检查/修改恢复区设置SYS AS SYSDBA on 29-MAR-05 >show parameter db_recovery_file_destNAME TYPE VALUE-----------…

nvme通用驱动_对领域驱动设计的理解与实践

领域驱动设计(Domain-Driven-Design)是一种针对大型复杂系统的领域建模与分析方法论。2003 年,Eric Evans 发布《Domain-Driven Design: Tackling Complexity in the Heart of Software》(领域驱动设计:软件核心复杂性应对之道),其中定义了DD…

为什么不应该用Stream forEach替换for循环的3个原因

太棒了! 我们正在将代码库迁移到Java8。我们将用函数替换所有内容。 扔掉设计模式。 删除面向对象。 对! 我们走吧! 等一下 Java 8已经问世了一年多,而这种兴奋又回到了日常业务中。 baeldung.com从2015年5月开始执行的一项非代…

使用NPOI库导入导出EXCEL

一、EXCEL 导入&#xff08;Excel 导入导出实际项目中会被封装成**Helper 本示例只对简单功能做演示&#xff09; NPOI 包引用 视图view {ViewBag.Title "NPOIExcel"; }<h2>NPOIExcel</h2> <form action"Url.Action("NPOIInport", &…

oracle12c ora 12547,Oracle 12c DBCA出现PRCR-1079 ORA-12547 CRS-5017

Oracle 12c用dbca创建数据库时出现了PRCR-1079 ORA-12547 CRS-5017不能启动数据库。因为这里安装了Oracle Restart&#xff0c;所以尝试使用srvctl start database命令来手动启动数据库&#xff0c;但是结果还是一样不能启动。[gridoracle12c 12.1]$ srvctl start database -db…

kmeans鸢尾花分类python代码_python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)

一.分散性聚类(kmeans) 算法流程: 1.选择聚类的个数k. 2.任意产生k个聚类&#xff0c;然后确定聚类中心&#xff0c;或者直接生成k个中心。 3.对每个点确定其聚类中心点。 4.再计算其聚类新中心。 5.重复以上步骤直到满足收敛要求。&#xff08;通常就是确定的中心点不再改变。…

akka_Akka的字数统计MapReduce

akka在我与Akka的日常工作中&#xff0c;我最近写了一个字数映射减少示例。 本示例实现了Map Reduce模型&#xff0c;该模型非常适合横向扩展设计方法。 流 客户端系统&#xff08;FileReadActor&#xff09;读取文本文件&#xff0c;并将每一行文本作为消息发送给ClientActor…

Log4j 2配置与IntelliJ IDEA控制台颜色

Log4j是Java平台上最好的日志组件了&#xff0c;Log4j 2升级了不少API&#xff0c;拓展性更好。使用的话只需要直接引入就可以了. <dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version> &…

用c3p0连接oracle怎么分页,JSP分页(MySql+c3p0+dbutils)

JSP分页(MySqlc3p0dbutils)来源&#xff1a;互联网作者&#xff1a;佚名时间&#xff1a;2015-02-16 17:27为什么要对数据进行分页&#xff1f;当数据较多时&#xff0c;页面就会变的很庞大&#xff0c;不仅会影响到用户的使用&#xff0c;而且还有加重服务器的负担。下面简单的…

Apache Storm的实时情绪分析示例

实时情感分析是指处理自然语言文本&#xff08;或语音&#xff09;流以提取主观信息。 琐碎的用例用于构建推荐引擎或查找社交媒体趋势。 我选择了Apache Storm作为实时处理引擎。 Storm非常强大&#xff08;我们正在生产中使用它&#xff09;&#xff0c;并且非常容易在其之上…

flink sql设置并行度_《从0到1学习Flink》—— Flink parallelism 和 Slot 介绍

前言之所以写这个是因为前段时间自己的项目出现过这样的一个问题&#xff1a;Caused by: akka.pattern.AskTimeoutException: Ask timed out on [Actor[akka://flink/user/taskmanager_0#15608456]] after [10000 ms]. Sender[null] sent message of type "org.apache.f…

zabbix3.2监控

自动化运维框架 运维标准流程监控管理容量管理、关联关系、任务管理、自动部署、分布式集群、传统集群、机器管理安全控制灾难管理 自动化监控 监控评估数据采集主动式数据采集: client、公共插件、自定义脚本被动式服务状态: 服务状态、程序状态、用户访问质量第三方信息 公…

fasttext 文本分类_一文综述经典的深度文本分类方法

作者 | 何从庆转载自AI算法之心(ID:AIHeartForYou)笔者整理最近几年比较经典的深度文本分类方法&#xff0c;希望帮助小伙伴们了解深度学习在文本分类中的应用。Convolutional Neural Networks for Sentence Classification (EMNLP 2014)Kim在EMNLP2014提出的TextCNN方法&…

vi/vim 编辑器详解

vi/vim &#xff1a; 强大的编辑器 进入vi的命令 vi filename :打开或新建文件&#xff0c;并将光标置于第一行首 vi n filename &#xff1a;打开文件&#xff0c;并将光标置于第n行首 vi filename &#xff1a;打开文件&#xff0c;并将光标置于最后一行首 vi /pattern …

实验三+067+冯艳芳

一、实验目的 掌握黑盒测试用例设计方法 二、实验要求 &#xff08;1&#xff09;对被测程序进行黑盒测试用例设计 &#xff08;2&#xff09;运用等价类、边界值、决策表、状态图法等进行测试用例设计。 &#xff08;3&#xff09;对手机上任意一款音乐软件进行黑盒测试实践。…

python越来越慢_为什么Python中的串联速度越来越慢?

为什么在某些情况下,Python 3中的连接似乎比Python 2中的连接慢&#xff1f; 影响最大的串联方法似乎是字节对象的连续串联,从O(n)到O(n?)操作. 我的分析代码大部分在这里&#xff1a; #!/usr/bin/env python from operator import concat from sys import version, version_i…

jvm gc策略_IBM JVM调整– gencon GC策略

jvm gc策略本文将向您详细介绍从Java虚拟机&#xff08;例如HotSpot或JRockit&#xff09;迁移到IBM JVM时重要的Java堆空间调整注意事项。 此调整建议基于我为我的一个IT客户端执行的最新故障排除和调整任务。 IBM JVM概述 正如您可能从其他文章中看到的那样&#xff0c;IBM …