TDD实践小结

2024-03-01 23:48
文章标签 实践 小结 tdd

本文主要是介绍TDD实践小结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

所谓TDD,就是测试驱动开发。近期看了一些如何写代码的书,包括《修改代码的艺术》,《代码整洁之道》等,这些书都提到了TDD。

我记得几年以前在书店就开始看到关于极限编程的书,也偶尔听到测试驱动开发的概念。大体的思想就是在实现一个功能时,先写测试用例,

再写代码,然后让代码 通过测试用例。通过不断的迭代,来完善所开发的功能。

我以前也尝试过TDD,虽然也有收益,但现在看来,当时做的还不算TDD。主要原因是我的单元测试的粒度太粗糙,因为不会打桩,很多分支和

逻辑都走不到,而且因为需要真实的环境(比如需要真实的数据库环境),所以测试代码的维护成本较高,并且测试用例运行的时间也较长。

这些都让TDD很难持续下去,我觉得我当时的单元测试用例,更像是集成测试用例。而且这种测试用例往往是一次性的。

最近我对TDD产生兴趣的重要原因是我现在调试程序的成本比以前要高的多了。如果你在真实环境中发现并解决一个bug需要至少2个小时的话,

你肯定希望代码在真实环境测试前bug已经被消除。TDD的价值就在于此。

但TDD不能发现所有的bug,有两类bug,TDD是无能为力:

第一个是与操作系统的接口层,或者其他第三方库的接口层, 如果程序包括界面,还包括界面相关代码,这部分UT测试不到;

第二个是设计者逻辑上的理解错误,当我们期望的结果就是错的时候,UT就无能为力了。

除此之外,UT都可以测到,通过打桩的办法,可以实现分层测试,并且可以把每个UT的运行时间控制在毫秒级别。

我前段时间添加一个新功能,用TDD的方式来做,大概写了700多行测试代码,300多行正式代码。在编码过程中,发现了好几个

bug,但是在真实环境中调试还是遇到了问题,后来分析遇到的问题,就是前面说的这两种情况。其他的bug,都在调试之前解决掉了。

即使这样,我从开始调试到解决问题还是用了一天的时间。如果没有TDD估计效率只会更低。

还有一点,TDD不能完全取代设计,虽然TDD本身是个设计的过程,在做TDD前,要有一个初步的设计方案。

另外,如果要写出好代码,光有TDD不够,要能熟练运用各种设计模式。

这篇关于TDD实践小结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/764241

相关文章

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

mybatis映射器配置小结

《mybatis映射器配置小结》本文详解MyBatis映射器配置,重点讲解字段映射的三种解决方案(别名、自动驼峰映射、resultMap),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定... 目录select中字段的映射问题使用SQL语句中的别名功能使用mapUnderscoreToCame

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

Vue和React受控组件的区别小结

《Vue和React受控组件的区别小结》本文主要介绍了Vue和React受控组件的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录背景React 的实现vue3 的实现写法一:直接修改事件参数写法二:通过ref引用 DOMVu

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired