文档章节

Test(TDD)

赵-猛
 赵-猛
发布于 2016/03/17 13:52
字数 1747
阅读 8
收藏 0
点赞 1
评论 0

测试分类
    单元测试:白盒测试|开发人员测试|方法测试|单类测试
    集成测试:灰盒测试|开发人员测试|类关联测试|模块测试
    系统测试:黑盒测试|开发人员测试|模块集成测试|功能测试|端到端测试|
    验收测试:黑盒测试|客户测试|功能测试|端到端测试|交互测试|可用性测试|性能测试|压力测试
    
测试环境
    Dev环境测试: 单元测试|集成测试
    Intg环境测试:单元测试|集成测试|系统测试|验收测试
    Test环境测试:系统测试|验收测试
    Prod环境测试:验收测试

测试过程
1) 明确当前要完成的功能。可以记录成一个 TODO 列表。
2) 快速完成针对此功能的测试用例编写。
3) 测试代码编译不通过。
4) 编写对应的功能代码。
5) 测试通过。
6) 对代码进行重构,并保证测试通过。
7) 循环完成所有功能的开发。


测试原则
    测试隔离。不同代码的测试应该相互隔离。对一块代码的测试只考虑此代码的测试,不要考虑其实现细节(比如它使用了其他类的边界条件)。
    一顶帽子。开发人员开发过程中要做不同的工作,比如:编写测试代码、开发功能代码、对代码重构等。做不同的事,承担不同的角色。开发人员完成对应的工作时应该保持注意力集中在当前工作上,而不要过多的考虑其他方面的细节,保证头上只有一顶帽子。避免考虑无关细节过多,无谓地增加复杂度。
    测试列表。需要测试的功能点很多。应该在任何阶段想添加功能需求问题时,把相关功能点加到测试列表中,然后继续手头工作。然后不断的完成对应的测试用例、功能代码、重构。一是避免疏漏,也避免干扰当前进行的工作。
    测试驱动。这个比较核心。完成某个功能,某个类,首先编写测试代码,考虑其如何使用、如何测试。然后在对其进行设计、编码。
    先写断言。测试代码编写时,应该首先编写对功能代码的判断用的断言语句,然后编写相应的辅助语句。
    可测试性。功能代码设计、开发时应该具有较强的可测试性。其实遵循比较好的设计原则的代码都具备较好的测试性。比如比较高的内聚性,尽量依赖于接口等。
    及时重构。无论是功能代码还是测试代码,对结构不合理,重复的代码等情况,在测试通过后,及时进行重构。
    小步前进。软件开发是个复杂性非常高的工作,开发过程中要考虑很多东西,包括代码的正确性、可扩展性、性能等等,很多问题都是因为复杂性太大导致的。极限编程提出了一个非常好的思路就是小步前进。把所有的规模大、复杂性高的工作,分解成小的任务来完成。对于一个类来说,一个功能一个功能的完成,如果太困难就再分解。每个功能的完成就走测试代码-功能代码-测试-重构的循环。通过分解降低整个系统开发的复杂性。这样的效果非常明显。几个小的功能代码完成后,大的功能代码几乎是不用调试就可以通过。一个个类方法的实现,很快就看到整个类很快就完成啦。本来感觉很多特性需要增加,很快就会看到没有几个啦。你甚至会为这个速度感到震惊。

 
测试用例
    操作过程尽量模拟正常使用的过程。
    全面的测试用例应该尽量做到分支覆盖,核心代码尽量做到路径覆盖。
    测试数据尽量包括:真实数据、边界数据。
    测试语句和测试数据应该尽量简单,容易理解。
    为了避免对其他代码过多的依赖,可以实现简单的桩函数或桩类(Mock Object)。
    如果内部状态非常复杂或者应该判断流程而不是状态,可以通过记录日志字符串的方式进行验证。


测试类型
  Unit Testing<Integration Testing<Functional/System Testing<Stress/Load Testing<Acceptance Testing


测试方向
    笼统:正常测试和反向测试
    细分:Right-BICEP
        Right    正向测试
        用正确的数据
        B  边界条件
            一致性     数据是否符合规定的格式
            有序性      数组或集合数据的顺序
            范围,区间性    值是否存在于一个最大值和一个最小值之间
            引用,耦合性     代码是否引用了一些不受代码控制的外部因素
            存在性  固定的测试,如null,empty,非零等
            基数性  原则“0-1-N”
            时间性 是否按时间顺序执行,是否在正的时间执行,是够出现执行事情延误了
        I 反向关联
        C 交叉检查
        E 强制产生错误
        P 性能特性


测试内容
  单元测试任务包括
  接口功能测试:用来保证接口功能的正确性。
  局部数据结构测试(不常用):用来保证接口中的数据结构是正确的
      比如变量有无初始值
      变量是否溢出
  边界条件测试
      变量没有赋值(即为NULL)
      变量是数值(或字符)
          主要边界:最小值,最大值,无穷大(对于DOUBLE等)
          溢出边界(期望异常或拒绝服务):最小值-1,最大值+1
          临近边界:最小值+1,最大值-1
      变量是字符串
          引用“字符变量”的边界
          空字符串
          对字符串长度应用“数值变量”的边界
      变量是集合
          空集合
          对集合的大小应用“数值变量”的边界
          调整次序:升序、降序
      变量有规律
          比如对于Math.sqrt,给出n^2-1,和n^2+1的边界
          所有独立执行通路测试:保证每一条代码,每个分支都经过测试
      代码覆盖率
          语句覆盖:保证每一个语句都执行到了
          判定覆盖(分支覆盖):保证每一个分支都执行到
          条件覆盖:保证每一个条件都覆盖到true和false(即if、while中的条件语句)
          路径覆盖:保证每一个路径都覆盖到
  各条错误处理通路测试:保证每一个异常都经过测试 

  
相关软件
    Cobertura:语句覆盖
    Emma: Eclemma(Eclipse Plugin)
    Jacoco

 

© 著作权归作者所有

共有 人打赏支持
赵-猛
粉丝 4
博文 77
码字总数 428859
作品 0
深圳
技术主管
在ASP.NET MVC中进行TDD开发

TDD介绍 TDD是一种开发方法,全称是Test-Driven development,中文是测试驱动开发。作者是Kent Beck。首先让我介绍一下三种常见的开发方式: 第一种:先Coding,然后Bug Fix。 第二种:先Cod...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

[草稿]-TDD-测试驱动开发-领悟总结

TDD : Test-Driven Development 测试驱动开发,即TDD,是敏捷开发一个重要的特点.而敏捷开发是一种将高效设计模式推广到了开发流程控制层面上结果.而TDD是敏捷概念的一种表现形式.(不善于讲广义...

Channely ⋅ 2014/08/15 ⋅ 0

如何把BDD,ATDD和TDD结合起来?

笔者最近在研究BDD,尽管在做BDD(行为驱动开发,或者ATDD,可接受性测试)的时候,不一定需要TDD(测试驱动开发),或者在做TDD(测试驱动开发)的时候也不需要BDD(为驱动开发)。但是如果项...

chancein007 ⋅ 2017/01/01 ⋅ 0

使用Cut快速构建C++程序的TDD环境

本文通过Bazel(Google Build Tool)构建工具,使用Cut(C++ Unified Test Framework)快速构建一个C++程序的TDD环境,以此阐述Cut在实际项目中的实际应用。 一般地,一个C++程序为了实施TDD,必...

_RayCloud_ ⋅ 2017/01/24 ⋅ 0

JavaScript 测试工具--testem

Test'em 是一个 JavaScript 运行测试器,而且它让 JavaScript 的单元测试更方便更好玩,会让你爱上测试。 特性: 独立的测试框架,支持: Jasmine QUnit Mocha Buster.js 其他,需要通过自定...

叶秀兰 ⋅ 2013/12/18 ⋅ 0

使用unity进行测试驱动开发

Unity介绍 Unity 是一个用纯C语言编写的测试工具. 它简洁实用,多应用于嵌入式系统.Unity工具可以裁剪用于各种规模的嵌入式项目,当然,只要是纯C语言的项目,Unity都可以使用. 主页:http://th...

bbdlg ⋅ 2012/09/13 ⋅ 1

TDD(测试驱动开发)学习一:初识TDD

首先说一下名词解释,TDD,英文名称Test-Driven Development,中文名称测试驱动开发,简单的断下句“测试/驱动/开发”,简单的理解一下,就是测试驱动着开发,大白话就是说用一边测试一边来推...

Michaelyn ⋅ 2015/05/29 ⋅ 0

「勿忘初心」TDD,Dont DDT

偶尔翻到自己五年前写的关于TDD的文章,又看一遍, 感觉当时的自己是走在正确的路上。但是这么多年过去了,BDD也在流行,自己却没有一直沿着这条路走下去,为什么? 老文重拾,感慨良多。 这...

blackanger ⋅ 2013/11/04 ⋅ 0

Swift 进阶开发指南:如何使用 Quick、Nimble 执行测试驱动开发(TDD)

只要是在移动端应用上写任何类型的测试,这都不是一个受欢迎的选择,事实上,多数移动端应用开发团队都尽可能省略写测试的工作,希望借此教程来节省时间以加速开发进程。 自认为自己是一位技...

猫D ⋅ 2017/11/13 ⋅ 0

单元测试要做多细

这篇文章主要来源是StackOverflow上的一个回答——“How deep are your unit tests?”。一个有13.8K的分的人(John Nolan)问了个关于TDD的问题,这个问题并不新鲜,最亮的是这个问题的Best ...

zhangyujsj ⋅ 2015/09/06 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

BS与CS的联系与区别【简】

C/S是Client/Server的缩写。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、InFORMix或 SQL Server。客户端需要安装专用的客户端软件。 B/S是Brower/...

anlve ⋅ 40分钟前 ⋅ 0

发生了什么?Linus 又发怒了?

在一个 Linux 内核 4.18-rc1 的 Pull Request 中,开发者 Andy Shevchenko 表示其在对设备属性框架进行更新时,移除了 union 别名,这引发了 Linus 的暴怒。 这一次 Linus Torvalds 发怒的原...

问题终结者 ⋅ 59分钟前 ⋅ 0

在树莓派上搭建一个maven仓库

在树莓派上搭建一个maven仓库 20180618 lambo init 项目说明 家里有台树莓派性能太慢。想搭建一个maven私服, 使用nexus或者 jfrog-artifactory 运行的够呛。怎么办呢,手写一个吧.所在这个...

林小宝 ⋅ 今天 ⋅ 0

Spring发展历程总结

转自与 https://www.cnblogs.com/RunForLove/p/4641672.html 目前很多公司的架构,从Struts2迁移到了SpringMVC。你有想过为什么不使用Servlet+JSP来构建Java web项目,而是采用SpringMVC呢?...

onedotdot ⋅ 今天 ⋅ 0

Python模块/包/库安装(6种方法)

Python模块/包/库安装(6种方法) 冰颖机器人 2016-11-29 21:33:26 一、方法1: 单文件模块 直接把文件拷贝到 $python_dir/Lib 二、方法2: 多文件模块,带setup.py 下载模块包(压缩文件zip...

cswangyx ⋅ 今天 ⋅ 0

零基础学习大数据人工智能,学习路线篇!系统规划大数据之路?

大数据处理技术怎么学习呢?首先我们要学习Python语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。 Python:Python 的排名从去年开始就借助人工智能持续上升,现在它已经...

董黎明 ⋅ 今天 ⋅ 0

openJdk和sun jdk的区别

使用过LINUX的人都应该知道,在大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的OpenJDK, 那么到底什么是OpenJDK,它与SUN JDK有什么关系和区别呢? 历史上的原因是,Ope...

jason_kiss ⋅ 今天 ⋅ 0

梳理

Redux 是 JavaScript 状态容器,提供可预测化的状态管理。 它是JS的状态容器,是一种解决问题的方式,所以即可以用于 react 也可以用于 vue。 需要理解其思想及实现方式。 应用中所有的 stat...

分秒 ⋅ 今天 ⋅ 0

Java 后台判断是否为ajax请求

/** * 是否是Ajax请求 * @param request * @return */public static boolean isAjax(ServletRequest request){return "XMLHttpRequest".equalsIgnoreCase(((HttpServletReques......

JavaSon712 ⋅ 今天 ⋅ 0

Redis 单线程 为何却需要事务处理并发问题

Redis是单线程处理,也就是命令会顺序执行。那么为什么会存在并发问题呢? 个人理解是,虽然redis是单线程,但是可以同时有多个客户端访问,每个客户端会有 一个线程。客户端访问之间存在竞争...

码代码的小司机 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部