单元测试的随想录
上一篇 / 下一篇 2012-05-16 13:56:28 / 个人分类:单元测试
(1)单元测试会在无形中增加自己的代码开发量;51Testing软件测试网5?Xqq j)Fw$f
0djc8}a;R k0 (2)程序员们缺少软件质量的意识,认为保证软件质量是软件测试部门的事情;51Testing软件测试网I&K"S0p\~~1Qo
)HH'J3qXM0 (3)单元测试的效果无法在短期内有所体现,不如功能开发那样立竿见影;
:v&GH H'F'A8V`5B4Z7x051Testing软件测试网D(u4Rj/\(4)大家习惯了开发、编译、调试、上机测试、修改这样的传统的开发方式;
;x~7of1j+wdw W051Testing软件测试网;Kw2Q3{ vX0_k wN(5)项目至上而下缺少质量控制意识,片面追求开发速度、功能数量、入库行数并过度依赖集成测试。51Testing软件测试网wlx&D+s-LK]k
51Testing软件测试网(W'\A4Or9MvKRT但是,这里我想说的是每一个程序员都必须对自己的代码负责,不管这段代码是你设计的还是你维护的。单元测试就是一种很好的验证你代码质量的方法。无论是在设计测试用例、理解代码设计、新功能开发、系统理解方面,单元测试都会对你有所帮助。但是,不可否认,单元测试对个人的要求还是很高的,这就需要个人一点点去适应、去改变。
s @HP/D'QU(X051Testing软件测试网%P{g/h2N[a)头文件仿真
|2B+Yj&yE'j0cOB/c0G f:rR@7J2C0 在单元测试中,为了调用很多的底层函数,通常我们会对某些头文件进行仿真。这个时候,我们引用的函数完全是自己定义和设计的。但是,我们也不能为了现在 的测试修改原来的头文件排布。所以,这个时候就需要对原有的头文件进行仿真。现在,我们假设原来会引用到一个data_type.h文件,中间有我们需要 的函数声明,但是现在不需要了。这时候,我们就可以自己定义一个空的data_type.h文件,添几行代码就可以了。
[,nhq Yc,fEY,W&f;k\051Testing软件测试网n]t^1\
UJo #ifndef _DATA_TYPE_H ,Mz$os#_.us!WV_0#endif51Testing软件测试网({:Y s3D}k:T |
b)数据处理流程和上层接口分开51Testing软件测试网u%qp&d R s7l,Y
rav?3\0 我们在安排源文件的时候,在安排函数分布的时候要注意一个基本的原则:数据和上层接口分开。在单元测试的时候,我们不太在乎曾经将这个数据的上层包装形 式是什么。只有真正把数据从结构从释放出来,形成一个独立的处理文件,这样我们的测试才更方便、更有针对性。小函数、独立函数、与接口分离的函数,这些都 是我们在代码开发中需要特别注意的。
.FPy&G^6G7N#c?0w5`)e3U:w fJ#H IM0 c)底层驱动打桩处理51Testing软件测试网+l8Z i@3e hv
e6c2@N-qV `;LJ,Tw0 在真实的软件模块中, 我们的代码是不可能独立存在的,因此当前模块的代码常常需要引用别的模块代码。建立符合自己模块的桩函数,一方面可以提高代码的开发效率,另外一方面也方 便我们对自身的代码进行测试。当然,底层驱动打桩函数是多种多样的,某些配置类的函数我们可以象征地输出一行打印就可以了;某些函数我们可以利用测试端的 一个相似函数代替即可;另外本地不存在的一些函数可能还需要我们真正编写代码仿真一把。
E3yY x4h0?0~)V F\0d)测试用例应该尽量和实际环境一致
4T%V Yh4i9^,B _051Testing软件测试网XbK1t)B&c F为了验证代码的正确性,编写测试用例当然是少不了的。但是,编写测试用例并不是说越多越好。重复、低质量的测试用例只会浪费我们的测试资源。那 么,应该怎么做呢?其实真实的运行场景才是我们所关注的。对于我们来说,最重要的就是把那些基础功能、使用最多的功能、最容易犯错的功能设计成测试用例, 剩下的测试用例才是关于覆盖率、性能方面的。51Testing软件测试网qC/UrZ0{a
Y%e cE+o%S e9H0 e)重视代码覆盖率,更加重视功能覆盖率51Testing软件测试网)tu] NW2a{
HB3X0K:\YX2|B,G0 在开发中,很多开发者甚至领导都会把代码测试覆盖率当作单元测试很重要的一个条件。诚然,高的代码覆盖率固然能说明一些问题,但那不是问题的全 部。我们进行单元测试的目的主要是为了验证功能实现和设计是否一致,不是为了测试而测试。当然,在测试中我们可以仿真很多的条件,90%甚至更高的代码覆 盖率都是有可能的。但是,我们需要问一下自己,这些测试和最后的功能测试关系很大吗?如果没有这些测试,会影响最后的功能测试吗?我们假设的这些单元测试 条件在实际运行的时候是真实存在的吗?