单元测试的四大具体效益
1、保证代码质量
仅依靠系统测试会 存在大量未覆盖的“死角”,单元测试可以对各个代码单元彻底测试,保证代码质量。针对一个函数,单元测试可以覆盖输入数据的所有分类,做到不管输入什么数 据,函数本身的处理都符合设计,从而全面检测其功能逻辑,消灭可能隐藏的大量细小错误,这种测试效果是其他测试难于做到的。输入数据的“分类”,称为“等 价类”,即测试效果上的等价,同类数据中只需要测试一个,就相当于测试了同类中的所有数据。这种设计用例的方法就叫做“等价类法”。
2、降低排错成本
排错包括“验证是否有错”、“找出错在哪里”、“修正错误”三个工作。单元测试的目标最小,涉及代码最少,发现错误后排错最容易。Bug发 现得越晚,修改所需费用就越高,因此应该尽早查找和修改Bug,单元测试提供了尽早抓住Bug的最好机会。相比后续阶段的测试,单元测试的创建更简单,维 护更容易,并且可以更方便地进行重复。从全程费用来考虑,相比复杂且旷日持久的集成测试、系统测试,单元测试所需的费用是很低的。下图摘 自<<实用软件度量>>(Capers Jones, McGraw-Hill 1991),它列出了准备测试、执行测试、和修改缺陷所花费的时间(以一个功能点为基准),这些数据显示单元测试的成本效率大约是集成测试的两倍,系统测 试的三倍。
3、自动回归
自动回归测试可以避免小量修改导致大量系统级调试与测试。“回归”是指代码修改后回复到原来的正确状态。例如,一个函数本来工作正常,后来发现少了个功 能点,修改代码后,原有功能可能被破坏,回归测试就是检验原来的功能是否仍然正常。代码之间具有复杂的依赖关系,一个函数的修改,可能引起其他代码产生错 误,回归测试不仅针对被修改的代码单元,也针对其他相关代码。单元测试目标最小、结果明确、执行快捷,最容易实现自动化回归测试。
单元测试将代码功能“定格”,代码修改后可以自动检查是否引入新的错误,避免陷入“系统测试->修改->引入新的错误->新一轮系统测试->修改->引入新的错误”的怪圈。自动回归也使开发过程适应频繁变更的需求,使开发过程趋于“敏捷”。
4、促进开发
如果边开发边测试,那么,单元测试的结果可以完整地描述程序的行为,如下图。程序行为就是在什么输入下,会执行哪些代码,会产生什么输出。写代码时能随 时察看程序行为,就比较容易想明白思路对不对,接下来应该怎么写。刚写的代码有没有错误也随时可以发现,不但效率高得多,也没那么累。
只要做了单元测试,反映程序行为的数据就一定会存在,只要使用工具将这些数据捕获并显示出来,就可以一边编程一边察看程序行为。
编程时,程序员一定需要考虑清楚代码的功能,包括会有哪些输入,如何处理,应该产生什么结果,列出来就是测试数据了,因此,并不需要多少额外的时间来设 计测试数据,同时编写效率会显著提高,并且基本上不需要调试。调试是最花时间的。如果结合自动化的测试工具,让设计测试数据以外的工作(如编写测试代码、 隔离测试任务、底层模拟、统计覆盖率等等)由工具完成,那么,在开发的过程中进行单元测试,开发和测试同步完成,所用的时间一般比传统方式更短,代码单元 功能越复杂,节约的时间越多。
我们初学C语言时,通常会编写一些小算法,并通过控制台输出结果进行测试。这 是一种高效的编程方式,因为第一时间可以了解代码是否工作正常,随时调整思路。但在实际项目中,这种方式不再现实,正在编写的代码单元很难单独运行并观察 其行为。单元测试可以帮助我们重返“小算法编程”,让代码单元随时独立运行,减少麻烦的调试,缩短编码周期。
====================================分割线================================
最新内容请见作者的GitHub页:http://qaseven.github.io/
单元测试的四大具体效益相关推荐
- (4)Android入门——android四大组件基础介绍及打电话,发短信简单应用 单元测试
1,本章是android入门最后一篇,从后面开始将进入进阶阶段.我也会加快更新速度.但愿能保持每天三篇博文的数量.但是是在保证质量的前提下.后面我还会发布一些实际开发中用到的应用案例.敬请关注! 应用 ...
- android四大组件基础介绍及打电话,发短信简单应用 单元测试
http://androidtoast.iteye.com/blog/1169635 1,本章是android入门最后一篇,从后面开始将进入进阶阶段.我也会加快更新速度.但愿能保持每天三篇博文的数量. ...
- 中国AI应用最新白皮书:四大行业将受AI影响最大,或带来19000亿增益价值
白皮书指出,中国AI企业的发展势头良好,在全球处于优先地位;金融.汽车.医疗和零售将是受AI影响最大.同时最具成熟发展基础与市场应用潜力的传统产业,制造.教育和通信行业也值得关注. 编者按:在第三次人 ...
- iOS - UnitTests 单元测试
1.UnitTests 在计算机编程中,单元测试(又称为模块测试, Unit Testing)是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作.程序单元是应用的最小可测试部件.在过程化编 ...
- 四大原因可能让你拿到订单
四大原因可能让你拿到订单 同是开展国际贸易网络营销,有的同仁辛辛苦苦.忙忙碌碌,到头来没有拿到一个订单,看着别人硕果累累,别说老板那异样的眼神了,自己心里早已不是个味道了. 究其原因,笔者认为以下四个 ...
- 多元化谋定美国农业巨头-丰收节贸易会:四大粮商曲折历程
多元化谋定美国农业巨头-丰收节贸易会:四大粮商曲折历程 (文|陈佳,来自长江证券)新闻中国采编网 中国新闻采编网 谋定研究中国智库网 经信研究 国研智库 国情讲坛 万权采编:"ADM 是全球 ...
- 喜讯丨神策数据四大客户案例斩获大数据“星河”案例
为进一步加快培育数据要素市场.充分发挥数据作为生产要素的独特价值,中国信息通信研究院.中国通信标准化协会大数据技术标准推进委员会(CCSA TC601)共同组织了大数据"星河(Galaxy) ...
- junit 内部类测试_Springboot 使用单元测试
本文公众号来源:美码师作者:美码师本文已收录至我的GitHub 目标 了解 单元测试的背景 了解如何 利用 springboot 实现接口的测试 了解如何 利用 mokito 做代码的 mock 一. ...
- 【DevOps进行时】自动化测试之单元测试
在DevOps建设中,主流的测试分层体系可以分为单元测试.接口测试和界面测试.Google曾提出一个经验法则:70%的小型测试,20%的中型测试,10%大型测试. 当然,这个比例不是确定的,不同类型的 ...
最新文章
- 【微服务】Spring-Boot整合Consul (自定义服务配置及健康检查)
- NoSql数据库使用半年后在设计上面的一些心得
- 分库分表的几种常见形式以及可能遇到的难题--转
- CryptoAPI与openssl RSA非对称加密解密(PKCS1 PADDING)交互
- Install OpenCL on Debian, Ubuntu and Mint orderly
- linux脚本实现多重管道,制作Linux shell时流重定向和管道
- 趣图 | 著名的悖论蒙提霍尔问题到底是什么?
- English trip V1 - 20.Look at me 看着我 Teacher:Solo Key: 声调(英语默认就声调[rising]和降调[falling]两种)...
- Springboot+Vue前后端分离在线答题+题库管理系统
- swfupload ajax,swfupload ajax无刷新上传图片实例代码
- 毕业论文html代码查重吗,毕业论文中的代码内容重复了怎么办? 毕业论文代码重复率高...
- 巴比特独家 | 我们梳理98家新三板公司年报,发现企业布局区块链6大特点
- 成为技术传播者(二):Why and Why NOT
- 河北档案费2016年取消
- 【珍惜眼前人才是王道】
- 处理人际冲突(冲突的本质是什么?发生冲突最要不要采取哪四种行动?建设性处理冲突的技巧是什么?)...
- 编译Android源码,执行lunch命令时报错“No such file: /root/.lunchrc”的解决办法
- 使用libvirt和qemu将pci pass through设备添加到虚拟机上
- 小学计算机课在教室怎么上,小学计算机教室管理制度
- es浏览器插件安装eshead