我看TDD测试驱动开发

  今天在实验室给大家介绍了一下TDD和Docker,大家对TDD都比较感兴趣,包括老板,也问了一些问题。

  还是从头来说TDD吧,TDD作为敏捷开发领域的领头军,充满魅力,同时也充满争议。一切从三大军规说起:

  1. 除非这能让失败的单元测试通过,否则不允许去编写任何的产品代码。
  2. 只允许编写刚好能够导致失败的单元测试。 (编译失败也属于一种失败)
  3. 只允许编写刚好能够导致一个失败的单元测试通过的产品代码。

  上面这三个是网上找的中文翻译,回来后,我还是决定要把英文原文找出来,相对与上面三句拗口蹩脚的翻译,我相信,下面的英文应该更好阅读,更方便理解一点:

  1. You are not allowed to write any production code unless it is to make a failing unit test pass.
  2. You are not allowed to write any more of a unit test than is sufficient to fail; and compilation failures are failures.
  3. You are not allowed to write any more production code than is sufficient to pass the one failing unit test.

  从第一条开始说把,这一条限制了我们对代码的修改力度,一般在一个大的项目里面,代码比较庞杂,这里限制修改代码的前提是你的修改能够是失败的单元测试通过,那么至于其他的代码,你就不用去care,也不用去修改。如果没有这个限制的话,你可以随性的在保证单元测试通过的前提下,再额外写一些附加的代码,或者做一些与该失败的单元测试不相关的修改,那么,在大项目里面,很可能会牵一发而动全身,由于你的额外修改,牵扯出其他的问题或者bug。

  再看第二点,我的理解是军规规定,在编写单元测试的时候,只要有一个单元测试用例没有通过,那么我们就要停下来去修改我们的代码,同时,变异错误也是单元测试失败的一种情况(Java IDE一般会在编译失败的地方标红)。另一种理解,这里强调我们在编写单元测试的时候更多的要关注代码的各种边界条件,而其他一些情况则不应该出现在单元测试里面。后一种理解的层面是在单元测试的层面去理解,说的也是对的,但是把英文原文翻出来,应该第一种理解更合理。

  关于第三点,和第一点一起,再次约束了代码修改的力度。

  我也是刚开始接触TDD,挺有意思~~

时间: 2024-12-20 18:10:09

我看TDD测试驱动开发的相关文章

TDD测试驱动开发

TDD测试驱动开发 一.概念 TDD故名思意就是用测试的方法驱动开发,简单说就是先写测试代码,再写开发代码.传统的方式是先写代码,再测试,它的开发方式与之正好相反. TDD是极限编程的一个最重要的设计工具之一,使得我们编码的目的更加明确.而极限编程的另一个最重要的工具—重构.重构改变的是代码的内部结构,而不会改变外部接口功能.一整套完备的测试用例可以保证我们的程序更加健壮,功能更加完善. 二.作用 站在用户使用的角度去思考如何完成产品设计,强迫开发人员事先思考完善的测试用例并提供不考虑细节的外部

Scrum敏捷软件开发之技术实践——测试驱动开发TDD

重复无聊的定义 测试驱动开发,英文全称Test-Driven Development,简称TDD,是一种不同于传统软件开发流程的新型的开发方法.它要求在编写某个功能的代码之前先编写测试代码,然后只编写使测试通过的功能代码,通过测试来推动整个开发的进行.这有助于编写简洁可用和高质量的代码,并加速开发过程.(来源百度百科) 重复无聊的过程 测试驱动开发的基本过程如下: 快速新增一个测试(编者注:并非快速) 运行所有的测试(有时候只需要运行一个或一部分),发现新增的测试不能通过 做一些小小的改动,尽快

测试驱动开发TDD(一)TDD的好处及介绍

背景 一个高效的软件开发过程对软件开发人员来说是至关重要的,决定着开发是痛苦的挣扎,还是不断进步的喜悦.国人对软件蓝领的不屑,对繁琐冗长的传统开发过程的不耐,使大多数开发人员无所适从.最近兴起的一些软件开发过程相关的技术,提供一些比较高效.实用的软件过程开发方法.其中比较基础.关键的一个技术就是测试驱动开发(Test-Driven Development).虽然TDD光大于极限编程,但测试驱动开发完全可以单独应用.下面就从开发人员使用的角度进行介绍,使开发人员用最少的代价尽快理解.掌握.应用这种

软件工程 - Test-Driven Development (TDD),测试驱动开发

参考 https://baike.baidu.com/item/%E6%B5%8B%E8%AF%95%E9%A9%B1%E5%8A%A8%E5%BC%80%E5%8F%91/3328831?fr=aladdin https://en.wikipedia.org/wiki/Test-driven_development https://github.com/mjhea0/flaskr-tdd 总结 先写测试,然后写程序pass掉测试,that is 测试驱动开发. TDD usually foll

测试驱动开发TDD(二)开源测试框架CppUnit

背景 CppUnit 是个基于 LGPL 的开源项目,最初版本移植自 JUnit,是一个非常优秀的开源测试框架.CppUnit 和 JUnit 一样主要思想来源于极限编程(XProgramming).主要功能就是对单元测试进行管理,并可进行自动化测试.这样描述可能没有让您体会到测试框架的强大威力,那您在开发过程中遇到下列问题吗?如果答案是肯定的,就应该学习使用这种技术: 测试代码没有很好地维护而废弃,再次需要测试时还需要重写: 投入太多的精力,找 bug,而新的代码仍然会出现类似 bug: 写完

测试驱动开发TDD(三)开源测试框架的选择

http://www.qnr.cn/pc/rj/zhongji/ruanze/201008/523311.html  * http://www.uml.org.cn/Test/201006085.asp ** http://blog.csdn.net/jq0123/article/details/5479998 *** 最终选择Google的GTest作为我们开发的测试框架.

测试驱动开发TDD(六)Start Google Test in Windows

一.前言 本篇将介绍一些gtest的基本使用,包括下载,安装,编译,建立我们第一个测试Demo工程,以及编写一个最简单的测试案例. 二.下载 如果不记得网址, 直接在google里搜gtest,第一个就是.目前gtest的最新版本为1.3.0,从下列地址可以下载到该最新版本: http://googletest.googlecode.com/files/gtest-1.3.0.zip http://googletest.googlecode.com/files/gtest-1.3.0.tar.g

Cucumber测试驱动开发

Cucumber是一种BDD实践开发工具,属于敏捷开发的组成部分. 在敏捷开发中,对用户进行需求分析时,不是像传统的P&D的开发方式,首先编写大量的用户需求分析文档,而是通过一个个User Story来进行用户需求的分析. User Story的编写,也就是Cucumber的Gherkin编写.由一个个feature组成.User Story的编写应该符合SMART原则,即简明详细.可测量.可以在一个迭代内实现.有商业价值,并且可测试. BDD开发流程 首先应该在编写具体的代码前,先编写测试文件

什么是测试驱动开发

1:传统的编码方法 2:测试驱动开发 它的特点如下 2.1:编写一个失败的单元测试,来证明产品代码中存在缺陷,来进行修复这个缺陷 比喻我们要实现一个用户的添加方法User.Add,我们就会写一个测试方法来验证这个User.Add.当然在最初的测试肯定会失败,因为我们根本就没有 编写User.Add的编码所以运行失败以后我们就会去实现这个编码,直到通过为止 2.2:编写符合测试预期的代码,是测试通过 2.3:重构代码 第一次我们的编码肯定是为了完成功能可能可读性,规范效率还不是很好,所以我们会不停