软件测试实战---单元测试篇

作者:金朝阳

Author:jinchaoyang

单位:上海交大ABC公司

Company: ABC Technology Co.,Ltd.

 

花絮:

亲身经历的一件事:在我刚参加工作的一个项目中:所在的公司为一家世界500强的企业(欧莱雅)开发了一套报表查询系统,报表在用户现场实施后,有个关于销售的查询功能总是死机。公司的技术总监(一个毕业于国内某著名高校的牛人)经过仔细的代码简称后给出的结论:“即使是个傻子也不会写出这样的代码和存储过程”。

 

试想想,假如这话被写这段代码的程序员(这个程序员就是我的同事,年龄确实大了点,已经37岁了,接受新知识的能力确实差了点)听到对自己这样的评价后是如何感想的呢?但它从一个侧面反应出了一个本质的问题:在编码的初期,对代码进行审查是多么的重要,说白了就是在编码过程中做好单元测试时多么的重要。

 

 

单元测试(unit testing)软件测试的基础,单元测试做的好与坏将直接影响到软件后期的测试,笔者结合自己实际的项目经验可以毫不夸张的说:单元测试做的好与坏最终在很大程度上影响到整个产品的质量。下面笔者根据自己的项目经验谈谈单元测试:

 

 

1. 什么是单元测试

单元测试(unit testing,是指对软件中的最小可测单元进行检查和验证。这个最小的单元一般定义如下:

 

■ C语言等结构化语言里,单元一般指一个函数。

■ java等面向对象的语言里面单元一般指一个类。

■ 在图形化的软件中,单元可以指一个窗口,一个菜单,一个按钮等。

 

2. 单元测试的重要性

如果要保证一个系统的质量,首先要保证构成这个系统的所有组成的最小单元的质量是OK的而且是高质量的。在实际的情况下很多软件公司开发的产品在项目后期甚至是在交付用户使用过程中,今天捅出这个地方有个严重问题,明天捅出那个地方还有问题,总是感觉到问题无论如何也找不完,出现这样的情况一般是项目的前期单元测试没有做好。

 

3. 什么时候进行单元测试

程序员在编程过程中每时每刻都在进行单元测试,所以上编程和单元测试的过程是个相互交互的过程。程序员每完成一个函数、一个类,一个模块就要立即进行单元测试。

 

4. 单元测试由谁来做

单元测试一般由开发人员来做,如果开发人员能做到交叉测试最好。因为程序员检查自己的代码一般 情况下效果是不太理想的。

 

5. 国内单元测试的现状

国内大部分公司的单元测试很不正规,只是由开发人员来进行简单的编译和调试一下自己的程序,如果程序通过了编译和调试,就直接check in到公司里的代码服务器上。很多这样的情况决定了公司里的代码质量是低下的。

 

6. 单元测试的依据

单元最主要测试的依据是《详细设计文档》还有源程序本身。

 

7. 单元测试的步骤

单元测试一般是采用白盒的测试方法。具体如下:

■ 静态测试----先对程序的代码进行审查(code Review),根据笔者的经验其效果非常好,据统计代码中的缺陷60%以上都可以通过代码审查在早期发现。这样就避免了缺陷遗留到项目的后期。

■ 动态测试---运行代码看看其实际的运行结果是否符合期望的结果(深入检查代码的正确性、容错性和边界值等)。

 

在这里笔者有个比较好的建议:就是对于公司里新人写的代码全部都要由资深的开发人员或者开发经理来进行检查早期发现问题。对于水平较好的程序员的代码也要抽查使得其在编码过程中时刻提高警惕。

 

8.一个简单的单元测试的实例:

//此处省去2000字 

下面笔者谈谈自己的经验:

我所在的公司开发了国内某家中级法院审判系统的项目,项目是B/S结构的采用java+sybase技术实现的,项目在用户现场实施一段时间后,当地的客服人员反馈回来严重的问题:tomcat服务经常死掉,每次都需要手工重新启动。顶着很大的压力,因为软件在实施后,在用户现场出问题了,测试组肯定要负一定责任的。查找代码,发现代码中居然有2处数据库连接,但是只关闭了一处(在这个地方是需要一定经验的,成千上万行的代码,我们该从哪处代码下手呢?根据自己的经验:先根据系统的操作日志,找到用户操作最频繁的功能模块(在该系统中是新收二审案件的时候增加原审信息这个模块),然后再根据这些模块找到对应的相关代码,缩小范围后,再仔细查看这些代码)。终于找到ysaxx_add.jsp这个文件,有二个数据库连接,但是只关闭了一个,如下:

原始代码: 

 

//此处省去1000字 

 

个人经历之谈:代码在现场修改后(此项目中不是一处的代码存在数据库连接未关闭,而是有很多处存在数据库连接未关闭),用户tomcat服务死掉的问题真的解决了。我在这里谈到自己的亲身经历并不是想证明测试人员有多大的能耐。我是想认真的对开发人员说一句:其实这样数据库连接不关闭的问题,应该在项目编码单元测试过程中,通过静态的检查代码就能发现。这样的问题如果在前期没有被发现而遗留到项目后期是很难定位到具体是哪个地方出问题的,关键是给你的客户带来很不好的印象的。

 

 

 

综上所述:单元测试是构筑产品的基石,笔者在多家企业里总是强调:要构筑一个高质量的产品,首先一定要保证组成这个产品的最小组成单元是高质量的!

 

金朝阳

 

 

 

 

你可能感兴趣的:(软件测试实战---单元测试篇)