软件测试技术之谈谈单元测试:为什么要进行单元测试?
白羽 2018-07-20 来源 :网络 阅读 962 评论 0

摘要:本文将带你了解软件测试技术之谈谈单元测试:为什么要进行单元测试?,希望本文对大家学测试技术有所帮助。

单元测试
                  
  前言  最近,在网上看到过一个调查,调查的内容是“程序员在项目开发中编写单元测试的情况”。

当然,至于调查的结果,我想聪明的你已经可以猜到了。高达 58.3% 的比例,一般情况下不写单元测试,只有偶尔的情况才会写写。16.6% 的程序员从来都不写单元测试。

只有很少的一部分程序员才会在自己的代码中进行单元测试,并保证方法测试通过。看到这些,你想到了什么?  

现状  虽然,这个调查可能会有些片面性,但这也基本反应了国内程序员的开发现状,很少有程序员能够比较认真的去编写单元测试。而且,甚至有的程序员根本就不知道为什么要写单元测试(这一点让我很郁闷)。他们经常会说,公司里不是有测试人员嘛,测试应该是他们要做的事,我们的工作只是开发(这位仁兄肯定没有学过软件工程)。当然,这些并不是偶然的,正如佛经里边说的“因果循环”,有果必有因。那么,到底是什么原因,导致程序员对单元测试这么不感冒呢?  发现  通过与几个朋友的讨论,以及网上的调查,主要有这几种原因,导致程序员对单元测试很排斥,或许说很不以为意。  不

知道怎么编写单元测试 

 项目没有要求,所以不编写 

 单元测试价值不高,完全是浪费时间  

业务逻辑比较简单,不值得编写单元测试  

不管怎样,集成测试将会抓住所有的 bug,用不着进行单元测试  

在项目的前期还是尽量去编写单元测试,但是越到项目的后期就越失控  

为了完成编码任务,没有足够的时间编写单元测试。编写单元测试会导致不能按时完成编码任务,导致项目延期  

很显然,这几种原因归根结底,无外乎就是不了解单元测试,自认为很聪明,自己懒不想去测试,对项目的时间、进度把控不好。下面,我将一 一进行分析,剖析出程序员的开发心理,以此来给朋友们提个醒,最终聪明反被聪明误。  

剖析 

 不知道怎么编写单元测试  

这个问题在于,还没有接触过单元测试,同时,也没有体会过企业级的代码开发。不知道同时也不了解单元测试能带给你什么。设想一下,当你开发完一个功能模块的时候,你如何确定你的模块没有 bug 呢?如果涉及到具体的业务,你会执行 debug 模式,然后一点一点的深入到代码中去查看吗?如果你一直都是这样,那么你早就已经 OUT 了。赶快去了解一下单元测试的工具吧,你会收获很大的。  

项目没有要求,所以不编写  这个问题反映出了一种现象,同时也是一种习惯。项目有没有要求,只能说明项目的管理上不严格,并不是程序员不编写单元测试的理由。他们在以往的开发中,并没有养成写单元测试的好习惯。可想而知,他们的代码质量,我就不敢恭维了。给个建议,尝试着写漂亮的代码,之所以因为漂亮,是指得健康、简洁、健壮。当然,完成漂亮的代码就离不开单元测试了。  

单元测试价值不高,完全是浪费时间  这种说法其实是错误的。为什么这么说呢?在日常的开发中,代码的完工其实并不等于开发的完工。如果没有单元测试,那么如何保证代码能够正常运行呢?

测试人员做的只是业务上的集成测试,也就是黑盒测试,对单个的方法是没有办法测试的,而且,测试出的 bug 的范围也会很广,根本不能确定 bug 的范围,还得去花时间来确定 bug 出在什么地方。难道这就不浪费时间了吗?甚至,这样的方式,时间浪费的会更多。  

业务逻辑比较简单,不值得编写单元测试  

所谓的业务逻辑比较简单,其实是相对的。

当你对某一块业务逻辑很熟悉的时候,你自然会认为它很简单。然而,单元测试的必要性并不是仅仅在于测试代码的功能是否正确,还在于,当其他同事在了解你的业务的时候,能够很快的通过单元测试来熟悉代码的功能,甚至不用去读代码,就能够知道它做了哪些事情。因此,写单元测试不仅是解放了自己,更方便了别人。  

项目前期还在尽量写测试,到了后期就失控了  

这种问题的原因在于,对项目进度、项目中的技术点研究时间、人员的沟通、业务需求的熟悉程度等没有把控好。

这个问题的出现并不是个人的问题,而是反映了项目管理中存在的问题。当然,个人的原因也存在,就是如何在有限的时间里,提高效率。这一点需要大家好好思考一下了。

我的建议,多做计划,根据实际情况变更计划。多和项目组长、组成员进行沟通。及时反应项目中存在的问题。 

为了完成编码任务,没有足够的时间编写单元测试  这个问题在于,程序员领取的任务较为复杂,或者自己的开发效率有待提高。

其实,开发任务是包括编码和单元测试的。在领任务的时候,应该跟据自身的能力,跟组长或经理沟通好,以便留出一定的测试时间。当然,提高自己的编码效率也是很有必要的。至于如何提高开发效率,网上有很多这样的文章,这里就不再赘述了。  重要性  测试常常是程序员十分厌倦的一个活动。测试能给我们带来什么?了解这些是非常重要的,测试不可能保证一个程序是完全正确的,但是测试却可以增强我们对程序完整的信心,测试可以让我们相信程序做了我么期望它做的事情。测试能够使我们尽早的发现程序的 bug 和不足。  一个 bug 被隐藏的时间越长,修复这个 bug 的代价就越大。在《快速软件开发》一书中已引用了大量的研究数据指出:最后才修改一个 bug 的代价是在 bug 产生时修改它的代价的10倍。  当然,我们主要讨论的是单元测试。单元测试是一个方法层面上的测试,也是最细粒度的测试。

用于测试一个类的每一个方法都已经满足了方法的功能要求。在开发中,对于自己开发的模块,只有在通过单元测试之后,才能提交到 SVN 库 或者 Git 库。 

 应用  正是由于测试在开发中的重要地位,才会在IT界刮起了 TDD 的旋风。TDD,也就是测试驱动开发模式。它旨在强调在开发功能代码之前,先编写测试代码。也就是说在明确要开发某个功能后,首先思考如何对这个功能进行测试,并完成测试代码的编写,然后编写相关的代码满足这些测试用例。然后循环进行添加其他功能,直到完成全部功能的开发。  

工具  

说了这么多,那么都有什么工具(框架)能帮助我们完成可重复的单元测试呢?

下面我就介绍几个常用的。这里只介绍 Java 语言的。其他语言的请问谷老师(Google)。  

JUnit(推荐使用JUnit4)  JUnit 在日常开发中还是很常用的,而且 Java 的各种 IDE (Eclipse、MyEclipse、IntelliJ IDEA)都集成了 JUnit 的组件。当然,自己添加插件也是很方便的。JUnit 框架是 Java 语言单元测试当前的一站式解决方案。这个框架值得称赞,因为它把测试驱动的开发思想介绍给 Java 开发人员并教给他们如何有效地编写单元测试。  

TestNG  TestNG,即Testing Next Generation,下一代测试技术。是根据JUnit和NUnit思想,采用 jdk 的 annotation 技术来强化测试功能并借助XML 文件强化测试组织结构而构建的测试框架。TestNG 的强大之处还在于不仅可以用来做单元测试,还可以用来做集成测试。  这里仅仅是介绍一下有哪些最常用的 Java 单元测试工具,对于如何使用这些工具,在后续的博客中会有介绍,这里就不再多说了。有兴趣的请关注后续的文章。  


结束语  

俗话说,一屋不扫,何以扫天下。开发中,我们自己的代码都不能保证功能的正确性,那么还有什么效率可言呢?

做再多的任务,写再多的代码也只不过是在搭鸡窝,做着机器一样的重复的工作。

IT界有一个原则,DRY原则 —— Don't Repeat Yourself !只有通过对自己的工作不断的检查,不断的测试,才能不断的突破,不断的脱颖而出,当然,你才能不断的提高。    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标软件测试之测试技术频道!

本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程