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

相关文章

Java调用Python代码的几种方法小结

《Java调用Python代码的几种方法小结》Python语言有丰富的系统管理、数据处理、统计类软件包,因此从java应用中调用Python代码的需求很常见、实用,本文介绍几种方法从java调用Pyt... 目录引言Java core使用ProcessBuilder使用Java脚本引擎总结引言python

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

Docker集成CI/CD的项目实践

《Docker集成CI/CD的项目实践》本文主要介绍了Docker集成CI/CD的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、引言1.1 什么是 CI/CD?1.2 docker 在 CI/CD 中的作用二、Docke

Redis的Hash类型及相关命令小结

《Redis的Hash类型及相关命令小结》edisHash是一种数据结构,用于存储字段和值的映射关系,本文就来介绍一下Redis的Hash类型及相关命令小结,具有一定的参考价值,感兴趣的可以了解一下... 目录HSETHGETHEXISTSHDELHKEYSHVALSHGETALLHMGETHLENHSET

python中cv2.imdecode()与cv2.imencode()的使用小结

《python中cv2.imdecode()与cv2.imencode()的使用小结》本文介绍了cv2.imencode()和cv2.imdecode()函数的使用,文中通过示例代码介绍的非常详细,对... 目录1、图片路径带中文的读取和写入1.1 读取1.2 写入2、在网络中传输图片cv2.imencod

Java将时间戳转换为Date对象的方法小结

《Java将时间戳转换为Date对象的方法小结》在Java编程中,处理日期和时间是一个常见需求,特别是在处理网络通信或者数据库操作时,本文主要为大家整理了Java中将时间戳转换为Date对象的方法... 目录1. 理解时间戳2. Date 类的构造函数3. 转换示例4. 处理可能的异常5. 考虑时区问题6.

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

Prometheus与Grafana在DevOps中的应用与最佳实践

Prometheus 与 Grafana 在 DevOps 中的应用与最佳实践 随着 DevOps 文化和实践的普及,监控和可视化工具已成为 DevOps 工具链中不可或缺的部分。Prometheus 和 Grafana 是其中最受欢迎的开源监控解决方案之一,它们的结合能够为系统和应用程序提供全面的监控、告警和可视化展示。本篇文章将详细探讨 Prometheus 和 Grafana 在 DevO

springboot整合swagger2之最佳实践

来源:https://blog.lqdev.cn/2018/07/21/springboot/chapter-ten/ Swagger是一款RESTful接口的文档在线自动生成、功能测试功能框架。 一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务,加上swagger-ui,可以有很好的呈现。 SpringBoot集成 pom <!--swagge