测试驱动开发(TDD)

测试应用有很多方法,例如,黑盒测试、白盒测试、迭代测试等,然而,这些方法都是从宏观上描述测试的。为了在技术上保障测试的效果,Kent Beck(也是极限编程创始人)提出了在结果上进行限制的测试方法,也就是在编写程序之前,先确定程序中的变量、控件等元素允许的值。如果在编写程序时,变量、控件中的值与事先确定的值不相符,就说明程序的某处有bug,这种测试方法就是TDD(Test Driver Development,测试驱动开发)。TDD和Opengl ES一样,并不是具体的软件或程序库,只是一套测试框架(Junit),可用于对Android应用程序进行TDD测试。

测试驱动开发即TDD是敏捷软件开发方法的重要组成部分。TDD是从极限编程中发展而来,它既可以用在设计时也可以用在开发实践中。TDD把业务需求转化为可以运行的测试代码并具有如下的优点
1.TDD从一开始就保证了code的质量
2.大多数TDD开发人员编写出来的code都遵循SOLID原则
3.TDD确保了代码与业务需求之间的高度一致性
4.TDD鼓励创建更简单,针对性更强的库与API
5.TDD鼓励与企业沟通
6.TDD有助于从系统中清除那些没有用到的code
7.TDD提供内置的回归测试
8.TDD终止了递归错误的出现
9.如果开发程序时能够时刻记着可测试性,所得到的结果就是一种开放的,可扩展的,灵活的体系结构。

在软件项目管理中,软件开发实践一直在追求一种在业务需求,当前技术能力与能最大程度提高开发人员效率的方法之间的一种平衡,敏捷软件开发方法也不例外。在了解敏捷开发方法之前需要清楚敏捷宣言。

敏捷宣言

它描述了一组软件开发方法的关键价值,也是敏捷软件开发方法所遵守的原则。其具体内容如下:

个人与互动 大于 流程与工具 可用的软件 大于 文档 与客户的合作 大于 合约和商定 响应变化 大于 遵循计划

敏捷宣言所描述的软件开发方法具有更快速,更轻型的特点;它解决了传统瀑布软件开发方法和迭代,递增方法的一些缺陷。从敏捷宣言中可以看出敏捷方法应该具备如下特点:

1.敏捷方法是适应型的(Adaptive),而不是预测型(Predictive)的。敏捷方法拥抱变化,利用变化来发展,甚至改变自己,最后完善自己。也就是要用重构(Refactoring)。

2.敏捷方法一人为本而不是以过程为本,传统方法把开发者看作一个生产要素(分析员,测试员,程序员),拥有大量的中间产品(需求规约,设计模型等),而忽视了作为决定因素的人的特殊性。敏捷开发它只写有必要的文档,或尽量少写文档,敏捷开发注重的是人与人之间,面对面的交流,所以它强调以人为核心。

3.迭代增量式的开发过程,敏捷方法以原型开发思想为基础。迭代是指把一个复杂且开发周期很长的开发任务,分解为很多小周期可完成的任务,这样的一个周期就是一次迭代的过程;同时每一次迭代都可以生产或开发出一个可以交付的软件产品。

敏捷是一种指导软件开发的思想,它并没有指定具体的软件开发方式或流程,目前常用的具体敏捷软件开发方法或流程如下:

  • scrum
  • XP(极限编程)
  • 功能驱动开发
  • Clear case
  • 自适应软件开发

虽然这些软件开发方法的实现方式完全不同,但是他们具有如下的共同特征:

  • 都将团队内部的交流放在优先地位,即鼓励开发人员,业务用户和测试人员经常交流。
  • 注重项目的透明性;开发团队不是生存在一个黑盒中,不能向团队的其他成员隐藏自己的行为,都是用非常公开的工具来保证团队成员能够获得足够的信息
  • 团队成员都是相互负责的;团队不会因为某一个人而成功或失败;他们的成功与失败是按整个团队来衡量的
  • 开发人员没有自己的codebase,整个团队拥有完整的codebase,每个人都对其质量负责
  • 工作是在短暂的开发周期中完成的,理想情况下,每个周期结束时会发布。
  • 应对变化的能力是这种方法的基础
  • 一个系统的大致框架是提前定义的,但详细设计要等到实际安排功能开发计划时才会进行

软件测试干货

测试驱动开发(TDD)

在软件项目管理中,软件开发实践一直在追求一种在业务需求,当前技术能力与能最大程度提高开发人员效率的方法之间的一种平衡,敏捷软件开发方法也不例外。在了解敏捷开发方法之前需要清楚敏捷宣言。

敏捷宣言

它描述了一组软件开发方法的关键价值,也是敏捷软件开发方法所遵守的原则。其具体内容如下:

个人与互动 大于 流程与工具 可用的软件 大于 文档 与客户的合作 大于 合约和商定 响应变化 大于 遵循计划

敏捷宣言所描述的软件开发方法具有更快速,更轻型的特点;它解决了传统瀑布软件开发方法和迭代,递增方法的一些缺陷。从敏捷宣言中可以看出敏捷方法应该具备如下特点:

1.敏捷方法是适应型的(Adaptive),而不是预测型(Predictive)的。敏捷方法拥抱变化,利用变化来发展,甚至改变自己,最后完善自己。也就是要用重构(Refactoring)。

2.敏捷方法一人为本而不是以过程为本,传统方法把开发者看作一个生产要素(分析员,测试员,程序员),拥有大量的中间产品(需求规约,设计模型等),而忽视了作为决定因素的人的特殊性。敏捷开发它只写有必要的文档,或尽量少写文档,敏捷开发注重的是人与人之间,面对面的交流,所以它强调以人为核心。

3.迭代增量式的开发过程,敏捷方法以原型开发思想为基础。迭代是指把一个复杂且开发周期很长的开发任务,分解为很多小周期可完成的任务,这样的一个周期就是一次迭代的过程;同时每一次迭代都可以生产或开发出一个可以交付的软件产品。

敏捷是一种指导软件开发的思想,它并没有指定具体的软件开发方式或流程,目前常用的具体敏捷软件开发方法或流程如下:

  • scrum
  • XP(极限编程)
  • 功能驱动开发
  • Clear case
  • 自适应软件开发

虽然这些软件开发方法的实现方式完全不同,但是他们具有如下的共同特征:

  • 都将团队内部的交流放在优先地位,即鼓励开发人员,业务用户和测试人员经常交流。
  • 注重项目的透明性;开发团队不是生存在一个黑盒中,不能向团队的其他成员隐藏自己的行为,都是用非常公开的工具来保证团队成员能够获得足够的信息
  • 团队成员都是相互负责的;团队不会因为某一个人而成功或失败;他们的成功与失败是按整个团队来衡量的
  • 开发人员没有自己的codebase,整个团队拥有完整的codebase,每个人都对其质量负责
  • 工作是在短暂的开发周期中完成的,理想情况下,每个周期结束时会发布。
  • 应对变化的能力是这种方法的基础
  • 一个系统的大致框架是提前定义的,但详细设计要等到实际安排功能开发计划时才会进行

Original: https://www.cnblogs.com/klb561/p/15950343.html
Author: konglingbin
Title: 测试驱动开发(TDD)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/552339/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 理解Hive 不同组件的功能

    Hive功能通过将SQL转换成MR、Spark等任务,来计算HDFS中数据的工具。Hive是基于Hadoop之上的数仓工具。通过HDFS存储真实的数据,通过YARN运行计算任务(M…

    技术杂谈 2023年5月31日
    0107
  • 聊聊运营活动的设计与实现逻辑

    产品留不住,唯有套路得用户; 一、业务背景 在多数的产品功能体系中,都会设计活动板块,活动作为运营的手段,根本目的是为了更好的连接产品和用户,所以很考验运营方案的策划,在活动的生命…

    技术杂谈 2023年7月23日
    094
  • 关于缓存一致性协议、MESI、StoreBuffer、InvalidateQueue、内存屏障、Lock指令和JMM的那点事

    前言 事情是这样的,一位读者看了我的一篇文章,不认同我文章里面的观点,于是有了下面的交流。 可能是我发的那个狗头的表情,让这位读者认为我不尊重他。于是,这位读者一气之下把我删掉了,…

    技术杂谈 2023年7月25日
    068
  • MAT(Memory Analyzer Tool)工具入门介绍(转)

    1、MAT是什么? MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分析工具,它可以帮助我们查找内…

    技术杂谈 2023年5月30日
    0106
  • WinForm应用程序UI调用长耗时函数 z

    您可以将方法调用排队以在线程池线程上执行(请参阅here): ThreadPool.QueueUserWorkItem(new WaitCallback(YourMethod));…

    技术杂谈 2023年6月1日
    0123
  • RubyGem镜像/ruby国内镜像

    清华镜像 添加 TUNA 源并移除&#x…

    技术杂谈 2023年5月31日
    082
  • 通俗易懂讲泛型

    由于博客园的 markdown 语法有点坑,格式如果阅读中遇到问题,可以异步本人语雀文档查看:https://www.yuque.com/docs/share/57b89afd-9…

    技术杂谈 2023年7月25日
    062
  • 标识符和关键字

    标识符 标识符是什么? 关键字 为编程文件取名时不能使用图中的关键字,否则会直接报错,根本没法儿写后续内容 Java的所有组成部分都需要名字。类名,变量名以及方法名都被称为标识符 …

    技术杂谈 2023年6月21日
    081
  • CentOs安装Nginx

    安装 gcc pcre pcre-devel zlib OpenSSL 安装 安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需…

    技术杂谈 2023年7月10日
    080
  • quartz框架(八)-Listener

    上篇博文,博主介绍了jobStore相关的内容。本篇博文,博主将介绍quartz框架中监听器的使用以及原理。监听器在开源框架中十分常见,通过监听器我们可以实现一些定制化的功能。 监…

    技术杂谈 2023年7月24日
    081
  • Vuex 简单使用

    官网:https://vuex.vuejs.org/zh/ 参考文章:https://www.cnblogs.com/chinabin1993/p/9848720.html Vue…

    技术杂谈 2023年7月25日
    070
  • 技能篇:关于缓存数据的一致性探讨

    为了更快响应请求,减少不必要的查询,加速数据的处理,数据缓存是我们日常开发绕不过去的环节 关注公众号,一起交流,微信搜一搜: 潜行前行 缓存的意义 数据的保存,离不开磁盘或者内存的…

    技术杂谈 2023年7月25日
    081
  • 使用Xamarin开发手机聊天程序 — 基础篇(大量图文讲解 step by step,附源码下载)

    如果是.NET开发人员,想学习手机应用开发(Android和iOS),Xamarin 无疑是最好的选择,编写一次,即可发布到Android和iOS平台,真是利器中的利器啊!而且,X…

    技术杂谈 2023年6月1日
    0110
  • 《重构:改善既有代码的设计》 读书笔记 第三章

    第三章 代码的坏味道 3.1 神秘命名 命名是编程中很难的事情,所以最常用的重构手段就是去改个名字。 如果你发现改名很难,那就说明代码设计有问题。 3.2 重复代码 同一类的两个函…

    技术杂谈 2023年6月1日
    082
  • PHP 程序员的技术成长规划

    本文按照目前主流技术做了一个基本的梳理,整个是假设PHP程序员不是基础非常扎实的情况进行的设定,并且所有设定都非常具体明确清晰,可能会让人觉得不适,请理解仅代表一家之言。(未来技术…

    技术杂谈 2023年5月31日
    082
  • SASE

    什么是 SASE? SASE一般读作”sassy”。 安全访问服务边缘简称 SASE,是一种基于云的 IT 模型,它将软件定义的网络与网络安全功能捆绑在一起…

    技术杂谈 2023年5月31日
    094
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球