【软件测试】说说你对TDD测试驱动开发的理解?

很多公司在面测试中高级岗时,都会不同程度地问到"有没有了解过TDD""你认为TDD可以解决什么问题"或者"说说测试驱动开发的流程"等等,即使公司并不会用到此开发流程,面试官也会通过你对这个相对还比较"陌生"的概念的讲述来了解你对一些测试相关概念的熟知程度以及测试思想的见解。

什么是TDD(测试驱动开发)?

百科中对测试驱动开发的介绍如下,测试驱动开发,英文全称是Test-Driven Development,简称为TDD,它是一种不同于传统软件开发流程的新型的开发方法。它要求在编写某个功能的代码之前先编写好测试代码,然后只编写使测试通过的功能代码,通过测试来推动整个开发的进行。这有助于编写简洁可用和高质量的代码,并加速开发过程。

测试驱动开发并不是在近几年才发展起来的一种方法,其最早是在极限编程方法论中就开始有了这种思想的实践过程 ,市面上很多《极限编程》、《持续集成》、《测试驱动开发》的书籍中都有不同角度的介绍。

简单来说,测试驱动开发是针对一些小功能点甚至小到一个方法的敏捷开发实践。传统的开发模式是开发人员编写完业务代码后再开始编写单元测试脚本来验证上一步的业务功能代码,而测试驱动开发的中心思想却是先根据需求文档来编写测试代码(即先编写单元测试脚本),并思考怎样对这些要实现的业务功能作验证,等编写了足够的单元测试脚本后,再继续编写业务功能代码,通过测试后,再继续迭代以上的过程一直到编写完成所有的业务需求功能模块。

单元测试

从上引出的一个概念-单元测试,这里简单说明下。单元测试一般是由开发者在编写业务功能代码时, 为了验证自己开发的每个代码单元而编写的一种独立的测试。完成单元测试后,开发人员会出一份单元测试报告以及单元测试覆盖率报告, 测试人员需要以以上报告作为设计功能测试用例的依据。

测试驱动开发的流程

可以从以下测试驱动开发周期图中清晰地看出核心流程节点。测试驱动开发的口号是不可运行/可运行/重构

测试驱动开发与传统开发的区别

传统开发模式下编写的单元测试脚本其实还是为了验证功能,仍属于测试的一种形式。而测试驱动开发已经不再是一种简单的测试行为了,准确地说,它是一种设计行为。测试驱动开发类似于是对一段代码的用法而编写的设计规格说明,可以从编写代码的内聚性、可测性、可复用性以及缺陷密度、接口的简易水平看出。在测试驱动开发中,以需求的剖析、用户业务功能的理解都是层层递进的,是可以逐步细化到代码级别的,而这样的过程也恰恰提高了测试的覆盖率,同时能从根本上解决一些因业务逻辑设计错误而导致的后期大量的缺陷修复工作。

测试驱动开发的优缺点

从以上的TDD周期图中也可以看出,测试驱动开发最大的优点就是重构了,不断迭代,不断地对现有代码进行重构,不断优化代码的内部结构,最终实现对整体代码的改进。以此不断减少一些设计冗余、代码冗余、接口复杂度等等。

另外,对于一些前期需求不明确,甚至需求信息量特别少,且后期又会有大量业务功能修改时,传统的开发模式需要加班加点以此赶工开发,测试,缺陷修复,人工、时间成本且不说,最重要的产品质量也无法得到保证。当然 ,这种模式下也最适合采用原型法、敏捷开发模式了,毕竟拥抱变化是敏捷的宗旨 。而测试驱动开发也是敏捷开发模式的基础,这样无论是来自客户的紧急需求还是项目团队的一次技术改革,都可以通过重构设计、增加测试脚本来实现了。

测试驱动开发的应用领域

以上分析了测试驱动开发的诸多优势,但目前并没有被大量广泛的使用起来,一来这是一种技术或管理方式上的变革需要慢慢被大众所熟知 ; 二来需要足够专业技能、专业素质的人才来保证整个过程的通畅与专业; 第三,前期需要一定的投入,而它产生的输出足以解决目前多数企业中遇到的质量、效率、成本等难题,所以选择是一步,真正能够严格执行下去的很少。

结尾

总之,如果是在面试过程中,可以通过以上几方面分步来讲解自己对测试驱动开发的认识,如果恰巧自己也在敏捷团队里有过工作经历,更可以添砖加瓦,加上自己的亲自经验,一定会给面试官一个思维清晰,测试经验丰富的良好印象。

【整整200集】超超超详细的Python接口自动化测试进阶教程,真实模拟企业项目实战!!

相关推荐
嵌入(师)6 小时前
嵌入式驱动开发详解21(网络驱动开发)
网络·驱动开发
hhhhhhh_hhhhhh_2 天前
rk3568制冷项目驱动开发流程汇总(只适用于部分模块CIF DVP等,自用)
驱动开发
icy、泡芙2 天前
T527-----音频调试
linux·驱动开发·音视频
7yewh3 天前
嵌入式Linux QT+OpenCV基于人脸识别的考勤系统 项目
linux·开发语言·arm开发·驱动开发·qt·opencv·嵌入式linux
疯狂飙车的蜗牛3 天前
从零玩转CanMV-K230(4)-小核Linux驱动开发参考
linux·运维·驱动开发
嵌入式进阶行者4 天前
【驱动开发初级】内核模块静态和动态添加功能的步骤
驱动开发
逝灮4 天前
【蓝桥杯——物联网设计与开发】拓展模块3 - 温度传感器模块
驱动开发·stm32·单片机·嵌入式硬件·物联网·蓝桥杯·温度传感器
__NULL__USER5 天前
petalinux-adi ---添加AD9361驱动(二)
linux·驱动开发
7yewh5 天前
嵌入式驱动RK3566 HDMI eDP MIPI 背光 屏幕选型与调试提升篇-eDP屏
linux·arm开发·驱动开发·嵌入式硬件·嵌入式linux·rk·edp
少年、潜行6 天前
树莓派3B+驱动开发(8)- i2c控制PCF8591
驱动开发·树莓派·3b+