首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

小弟我看单元测试

2012-11-23 
我看单元测试单元测试这个东西很神奇,最早是从国外引入的,世面上也存在了很多开源的单元测试软件,那么它到

我看单元测试

单元测试这个东西很神奇,最早是从国外引入的,世面上也存在了很多开源的单元测试软件,那么它到底有什么优缺点呢?下面就列出来瞧瞧看看,并附上一些我自己的看法。

?

优点:

1.降低开发错误的反馈回路,减少重复工作,提升开发效率。例如服务器的重启啊之类的。

? ?这个确实,大优点之一,我相信也是大多数程序要写单元测试的初衷。

?

2.提升代码质量,写出更模块化、结构化的代码,减少BUG.

? ?所谓提升代码质量,这个也是TDD所一直鼓吹的东西。见仁见智吧,如果你写出更模块化,更结构化的代码非得通过单元测试的话,那么你就去干吧。

?

3.重构时保证功能的利器。 ?

? ?这个是单元测试最大的优点所在,但若你的系统并不存在什么大的重构的话,那也没什么存在的必要,还是那句话,什么事情要辨证的看。

?

4.让代码更容易维护,通过单元测试也可以摸索出整个系统的框架,单元测试相当于代码的规格书。

? ?这点我是持怀疑态度的,单元测试只是保证了每个单元模块的功能点,是一个个孤立的点,看单元测试也只是管中窥豹,并不能完整的看清楚系统。若说是规格书,javac干嘛去了,别把什么事都扯上。

?

缺点:

1.学习陈本:随着软件构建越来越复杂,单元测试的工具也随着增多,学习是一个很大陈本。

2.开发陈本:写单元测试会增加程序员的工作量,不是一点点的工作量,可能是原本功能开发两倍甚至三倍的工作量。

3.推广和运用单元测试需要比较大的投入,而且收效周期较长,只有编写足够过,足够好的单元测试之后,才能得到以上几个优点提到的收益。

?

那么怎样才能写出好的单元测试呢?

较高的代码重构能力,自身的代码功底要有一定要求,若是无这点保证,单元测试只会沦为一个KPI工具,毫无实际意义,而一个有较高代码功底的人不需要一整套的单元测试。根据自己需要选择性的写单元测试。

?

那么还有必要写单元测试吗?

个人看法是,这个东西不是二元的,非此即披,对于这个世界上这么多的技术,这么多的概念,特别是国外传进来的很多东西,大家只需要根据自己的情况,选择性的吸收,能提升自己工作技能上的都可以接受,不要人云亦云,从中抓取核心的东西,自己再总结总结就圆满了。我还是一直秉承自己的看法,一切概念,术语都是纸老虎,特别是一些国外的忽悠。这次参加杭州的qcon,特别有深的感受,国外的大师们都在鼓吹概念,国内的大牛们在批判那些国外大师的方法论、术语,很有意思!

?

对于组织上强推广单元测试的看法?

让工程师自己用脚去选择,程序员是工作在一线的人员,只有他们最了解实际的业务场景,代码复杂程度,若是他们觉得好的东西,他们自己回去吸收,并不需要强推。让工程师去做选择,这个才是工程师文化的核心。

?

1 楼 finallygo 2012-11-10   还有一个很重要的一点,单元测试可以方便的进行问题的重现和debug 2 楼 inter12 2012-11-10   finallygo 写道还有一个很重要的一点,单元测试可以方便的进行问题的重现和debug
这个看你单元测试是写在问题出现前还是问题出现后,若是问题出现前的话,那说明程序的上线前没有跑单元测试,无所谓debug或是问题重现,这是你自己的问题。
若是在问题出现后进行debug来查找问题,那说明没有好的方法来查找问题。对于问题的查询有很多手段,例如btrace等。
3 楼 finallygo 2012-11-10   inter12 写道finallygo 写道还有一个很重要的一点,单元测试可以方便的进行问题的重现和debug
这个看你单元测试是写在问题出现前还是问题出现后,若是问题出现前的话,那说明程序的上线前没有跑单元测试,无所谓debug或是问题重现,这是你自己的问题。
若是在问题出现后进行debug来查找问题,那说明没有好的方法来查找问题。对于问题的查询有很多手段,例如btrace等。

单元测试一般不能把所有的问题都测试到吧,因为数据是多种多样的,而很多问题正是一些特殊的数据导致的,而brace对于方法内部的调试不太方便吧,而且还会影响java的运行... 4 楼 inter12 2012-11-11   finallygo 写道inter12 写道finallygo 写道还有一个很重要的一点,单元测试可以方便的进行问题的重现和debug
这个看你单元测试是写在问题出现前还是问题出现后,若是问题出现前的话,那说明程序的上线前没有跑单元测试,无所谓debug或是问题重现,这是你自己的问题。
若是在问题出现后进行debug来查找问题,那说明没有好的方法来查找问题。对于问题的查询有很多手段,例如btrace等。

单元测试一般不能把所有的问题都测试到吧,因为数据是多种多样的,而很多问题正是一些特殊的数据导致的,而brace对于方法内部的调试不太方便吧,而且还会影响java的运行...
呵呵,好吧,条条大路通罗马,单元测试当然可以当做查问题的一种手段,每个人都有自己的选择,我也不强求。现在很多东西是只专注于一个业务的。对于你说的btrace影响性能的,任何附加的东西都会影响性能,只看影响的多少,投入付出收益比多少

热点排行