从总体上认识TDD

简介: 简单理解下测试驱动开发TDD,把握这种编程方式的简单、核心原则,体会这样给程序、编程带来的有益之处。 (由我从书中提取的重点后再写入一些个人体会、理解、个人解释而成的博文)

测试驱动开发

它是一种开发方式,是敏捷开发、极限编程的核心部分之一。

它的目标是:可运行的简洁的代码。

在TDD中,有着两项简单原则:

  1. 仅当测试化失败的时候,才编写新的代码(产品代码、功能代码);
  2. 去掉重复的部分——重构

从上产生出一组技术方面复杂的行为准则:

  • 必须参考每次修改代码后代码运行状况的反馈,逐渐完成设计;
  • 必须自己编写测试;
  • 开发环境(如IDea)必须对细微的修改做出响应;
  • 设计必须遵从高内聚、低耦合的原则,这便于实施测试。

从上两条原则也预示了TDD编程任务的先后顺序:

  1. 红色指示条——编写一个无法工作的简单测试(甚至说无法通过编译)
  2. 绿色指示条——迅速使测试工作起来(想方设法,竭尽手段
  3. 重构——去掉单纯由于使测试工作起来而产生的重复部分(数据的重复-输入、输出)

所以TDD的经典三部曲就是:红色指示条——绿色指示条——重构。

面对问题时,要么一筹莫展,要么从简单的地方着手。那么这样做吧: 从简单的地方着手;编写自动化测试;通过每一次的重构添加一回设计上的构思。


简单的原则,蕴含了非常好的思维模式,同样给程序带来了很好的效果。可以说,除非有着与之对应的测试,不然是不应该存在任何产品代码——这样的编程,确保了所写的代码,全部都是可测试的,这些代码的正确性有着测试方法的保证,任何错误的修改都将立刻提示出来。这给了继续前进的勇气。 也可以说,当程序的现有工作代码全部都被测试所覆盖,这就极大降低了BUG潜伏的隐患。 既然是需要现有测试,那么就是说现在程序里没有任何功能代码,也是先写了测试,所以说写测试时候并不在意程序是否存在这个类或方法、字段,尽管写测试吧,等测试写完后,再想方设法使得测试迅速工作起来!重构是非常重要的,简单来说重构就是对现有代码的修改——对如何做而不是做什么。

END

2019年11月3日,09点44分

目录
相关文章
|
SQL 运维 负载均衡
双活中心高效同步机制
双活中心高效同步机制
840 1
|
并行计算 算法框架/工具 iOS开发
在RTX3050上安装python3.9、anaconda、pycharm、cuda11.6、cudnn、jupyter等工具的详细步骤和方法
在RTX3050上安装python3.9、anaconda、pycharm、cuda11.6、cudnn、jupyter等工具的详细步骤和方法
776 3
|
9月前
|
数据采集 存储 JSON
使用Python获取1688商品详情的教程
本教程介绍如何使用Python爬取1688商品详情信息,涵盖环境配置、代码编写、数据处理及合法合规注意事项,助你快速掌握商品数据抓取与保存技巧。
|
人工智能 弹性计算 运维
通勤路上修故障?钉钉机器人+OOS AI助手实现7×24小时运维自由
通过钉钉机器人配置阿里云OOS AI助手,您可以直接在钉钉群内发送文字指令,实现免登录、跨设备、秒级响应的阿里云运维操作。
|
缓存 API 开发者
京东按图搜索商品(拍立淘)API接口系列(京东API)
京东按图搜索商品(拍立淘)API 接口(.jd.item_search_img)通过上传图片搜索京东平台上的相似商品,基于图像识别技术提供便捷的商品搜索方式。适用于电商平台展示、比价等场景。响应参数包括公共参数、商品信息及搜索结果相关参数,方便分页展示和了解整体搜索规模。Python 请求示例展示了如何使用该接口进行图片搜索。
762 15
|
XML Java 数据格式
使用完全注解的方式进行AOP功能实现(@Aspect+@Configuration+@EnableAspectJAutoProxy+@ComponentScan)
本文介绍了如何使用Spring框架的注解方式实现AOP(面向切面编程)。当目标对象没有实现接口时,Spring会自动采用CGLIB库进行动态代理。文中详细解释了常用的AOP注解,如`@Aspect`、`@Pointcut`、`@Before`等,并提供了完整的示例代码,包括业务逻辑类`User`、配置类`SpringConfiguration`、切面类`LoggingAspect`以及测试类`TestAnnotationConfig`。通过这些示例,展示了如何在方法执行前后添加日志记录等切面逻辑。
1546 2
使用完全注解的方式进行AOP功能实现(@Aspect+@Configuration+@EnableAspectJAutoProxy+@ComponentScan)
|
Docker 容器
SrpingBoot 集成 xxl-job 部署在 Docker 上碰到的坑
SrpingBoot 集成 xxl-job 部署在 Docker 上碰到的坑
710 0
|
机器学习/深度学习 算法 TensorFlow
【深度学习】基于卷积神经网络(tensorflow)的人脸识别项目(一)
【深度学习】基于卷积神经网络(tensorflow)的人脸识别项目(一)
633 0
【深度学习】基于卷积神经网络(tensorflow)的人脸识别项目(一)
|
机器学习/深度学习 编解码 算法
Python实现视频人脸检测识别功能
Python实现视频人脸检测识别功能
469 0