测试驱动开发学习笔记(UTDD)
title: 测试驱动开发学习笔记(UTDD)
date: 2020-08-01 23:59:17
tags: [2020, 学习一门技能, TDD, DevOps]
What
TDD(Test-Driven Development)是敏捷开发中的一项核心实践和技术、是一种方法论。思路是通过测试来推进整个开发的进行。表现为测试代码优先于业务代码。UTDD呢,其实U就是unit,一般习惯直接叫成TDD。
从长远角度来看,他加快了组织价值流输出的质量、速度、稳定性,所以我想他理应纳入DevOps技能范凑。
Why
为什么要用到他呢?为什么说他加快了组织价值流输出呢?这就要说说他的优点了:
- 自解性:测试代码即文档,新接触代码的开发人员通过阅读测试代码即可充分了解业务。
- 健壮性:业务建立在一个个单元测试的保护之下,规避了大批bug。
- 正确性:修改已有代码不再烫手,测试带来了正确性保护,这将在重构或者维护时体现。
- 改进API:测试自然的让开发人员变得从客户端角度编写可测试的OO代码,驱动了API的设计。
以上的优点都在一定程度上提升组织的单位价值输出。
另外,他的引入也是有代价和风险的:
- 开发成本:开发人员需要编写测试代码。
- 维护成本:开发人员需要维护测试代码。
- 环境搭建:测试环境的建立成本。
所以,对于组织来说它的引入则是一把双刃剑,要看用在什么场景以及用到什么程度。成本大于收益那就不要采用了。
How
一、学TDD前该知道的
单元测试
单元测试应该是面向业务的,而不是面向代码的,编写单元测试时应该将一个业务场景当做一个被测试的单元。单元测试应遵循FIRST原则,即快(不依赖外部)、可重复、隔离(独立性)、清晰的成功或失败、频繁且小规模。测试方法命名采用ruby命名法should_xxx_xxx(),内容应用Given-When-Then模式,When时注意运用CQS命令查询分离原则。框架上,主要有做测试的Junit,做验证的AssertJ,做模拟的Mockito。
面向对象
业务代码编写遵守SOLID六大原则,单一职责原则、开闭原则.....等。简单来说要记住迪米特法则,即不要和陌生人说话,以及信息专家模式,以减少外部的数据访问权,然后就是注意组合优先,无差异无继承。
重构
重构即在保证原有代码功能的前提下,去除代码坏味道,进行的一种代码的优化操作。Kent Beck简单设计原则能很好的指导重构:
- 通过所有测试
- 减少重复代码
- 表达程序员的意图
- 尽可能减少方法的数量
重构的运用需要注意重构策略的选择和考虑引入Code Review。另外,重构可以且需要随时进行。
二、TDD
TDD核心可看做一个闭环:RED -> GREEN -> REFACTOR,即运行一个失败的测试 -> 让测试通过 -> 及时重构代码。
TDD还包括以下知识:
需求分析
TDD遵循简单设计,而这个简单设计不是不设计或少设计,而是清晰的设计。在进行单元测试编写之前,开发人员要用足够的时间去弄清需求,然后再做任务分解和子任务分解。任务分解是对用户故事的拆解,子任务分解是对任务的进一步细分拆解,最终任务和子任务能达到:
- 任何子任务均可通过测试来验收
- 所有任务的集合恰好等价于原问题域
- 子任务之间无交集
任务之间保持递进原则。
TDD的三大支柱
- 一次只写一个刚好失败的测试
- 不写任何产品代码,除非他刚好能让失败的测试通过
- 只在测试全部通过的前提下重构或开始新的功能
编写测试上,涵盖单元测试需要注重的点,比如FIRST原则等。
Last
最后,感谢测试驱动开发训练营张逸老师的倾囊相授!
测试驱动开发学习笔记(UTDD)的更多相关文章
- TDD(测试驱动开发)学习一:初识TDD
首先说一下名词解释,TDD,英文名称Test-Driven Development,中文名称测试驱动开发,简单的断下句“测试/驱动/开发”,简单的理解一下,就是测试驱动着开发,大白话就是说用一边测试一 ...
- TDD(测试驱动开发)学习二:创建第一个TDD程序
本节我们将学习一些测试驱动开发环境的搭建,测试驱动开发概念和流程.所涉及的内容全部会以截图的形式贴出来,如果你也感兴趣,可以一步一步的跟着来做,如果你有任何问题,可以进行留言,我也会很高兴的为你答疑. ...
- 测试驱动开发(TDD)及测试框架Mocha.js入门学习
组里马上要转变开发模式,由传统的开发模式(Developer开发,QA测试),转变为尝试TDD(Test-driven development,测试驱动开发)的开发模型.由此将不存在QA的角色,或者仅 ...
- Hibernate 马士兵 学习笔记 (转)
目录(?)[+] 第2课 Hibernate UML图 第3课 风格 第4课 资源 第5课 环境准备 第6课 第一个示例Hibernate HelloWorld 第7课 建立Annotation版本的 ...
- (转)Python学习笔记(1)__name__变量
Python使用缩进对齐组织代码的执行,所有没有缩进的代码,都会在载入时自动执行.每个文件(模块)都可以任意写一些没有缩进的代码,并在载入时自动执行.为了区分 主执行代码和被调用文件,Python引入 ...
- NGUI学习笔记(一)UILabel介绍
来个前言: 作为一个U3D程序员,自然要写一写U3D相关的内容了.想来想去还是从UI开始搞起,可能这也是最直观同时也最重要的部分之一了.U3D自带的UI系统,也许略坑,也没有太多介绍的价值,那么从今天 ...
- PyQt4入门学习笔记(一)
PyQt4入门学习笔记(一) 一直没有找到什么好的pyqt4的教程,偶然在google上搜到一篇不错的入门文档,翻译过来,留以后再复习. 原始链接如下: http://zetcode.com/gui/ ...
- TDD学习笔记【一】----序言
提到TDD大多数程序员的疑问: 为什么我要写两份程序? 为什么我要写程序来验证我已经知道的结果? 我又不是SA,可能也不懂domain,怎么产生一开始的test case? 最后的感想就变成是: 1. ...
- WeX5学习笔记
目录 WeX5学习笔记... 1 1.轻松看透WeX5产品能力和技术... 1 2.WeX5可以怎么玩?... 3 一.纯本地App. 3 二.关联一个网站,希望默认就打开某页... 4 三.UI设计 ...
随机推荐
- day58 bootstrap效果无法显示
在学习bootstrap时直接复制官网的组件的时候,如果效果无法想官网一样显示,最大的可能是类库导入的顺序问题. 打开页面>检查>Console 我们会发现一条报错,导入的js需要jQue ...
- 大话一个CPU(沙子是如何影响未来的)
大话一个CPU(沙子是如何影响未来的) CPU是个啥? 先大体上了解一下 中央处理器 (英语:Central Processing Unit,缩写:CPU),是计算机的主要设备之一,功能主要是解释计算 ...
- 06 drf源码剖析之权限
06 drf源码剖析之权限 目录 06 drf源码剖析之权限 1. 权限简述 2. 权限使用 3.源码剖析 4. 总结 1. 权限简述 权限与身份验证和限制一起,决定了是否应授予请求访问权限. 权限检 ...
- XSS原理及代码分析
前言 XSS又叫跨站脚本攻击,是一种对网站应用程序的安全漏洞攻击技术.它允许恶意用户将代码注入网页,其他用户在浏览网页时就会受到影响.XSS分为三种:反射型,存储型,和DOM型.下面我会构造有缺陷的代 ...
- 开源利器分享:BitBar 坐看今天你的项目涨了多少 star
今天开头我想叨叨几句,我个人最近的感受.在这个信息爆炸,互联网的时代里.我的周遭总是充斥者着各种让人能产生焦虑的信息, 我不知道有没有小伙伴和我一样,看到各种神通广大.游戏人生的大侠,低头看看自己当前 ...
- ShaderLab-12chapter屏幕后处理、图片置灰效果
屏幕后处理的原理 使用特定的材质去渲染对应相机近裁剪平面的4边形面片(刚好填充屏幕) 亮度-Luminance公式 --扩展置灰实现 luminance = 0.2125 * Red + 0.7154 ...
- bzoj4300绝世好题
bzoj4300绝世好题 题意: 给定一个长度为n的数列ai,求ai的子序列bi的最长长度,满足bi&bi-1!=0.n≤100000,ai≤10^9. 题解: 用f[i]表示当前二进制i为1 ...
- Unity3D Demo项目开发记录
前言 经过一段时间的学习与实际开发,unity3D也勉强算是强行入门了,正所谓好记性不如烂笔头,更何况本人并非专业从事unity3D开发,会一点C#但也并不熟悉,为了避免后期遗忘,因此特意整理了一个D ...
- OSCP Learning Notes - Buffer Overflows(2)
Finding the Offset 1. Use the Metasploite pattern_create.rb tool to create 5900 characters. /usr/sha ...
- Porter 进入 CNCF 云原生全景图,新版本即将发布!
近日,KubeSphere 社区子项目面向物理机环境的负载均衡器 Porter 正式进入 CNCF Landscape.CNCF Landscape 在云原生实践过程中的每个环节帮助用户了解有哪些具体 ...