分类: C/C++
2008-12-06 21:10:36
以前写代码时,从来不对自己写的代码做单元测试,经常在写完一大堆代码之后陷入到无穷无尽的调试中去。最近在写代码的时候,开始有意识地对自己写好的代码进行单元测试。非常出乎我意料的是,在这个过程中排除掉了不少的问题,这些问题如果拖到后期的话,完全能让人抓狂。看起来,在开发的最初阶段对代码执行单元测试,确实能非常有效地提高代码的健壮性。我思考了一下之所以会这样的原因,感觉比较靠谱的一种解释是:在编写代码的时候,程序员很可能会有考虑不到的地方,但是,单元测试过程的引入迫使程序员更深入地去理解自己编写的代码,并考虑在各种非法输入、边界条件、默认条件下代码的行为,在这个过程中,原本未考虑到的情况可能会在各种测试用例的"狂轰滥炸"中暴露出来,于是程序员就有机会尽可能早地发现问题。
记得有本书上说:测试的目的是发现bug,而调试的目的是修复bug。通常来讲,bug发现得越早,修复它所需要的代价就越小。从这个意义上讲,有效的单元测试确实非常有价值,远胜于近似于鸡肋的各种调试手段。那么,是时候养成一边写代码一边做单元测试的好习惯了!
另外一个感触是,valgrind工具确实是C/C++程序员的忠实助手。也是在上述过程,我在执行测试用例之后,基本上都用valgrind检查一下有没有内存泄漏的问题。有好几次,我甚至都认为是valgrind误报了,但是,经过不懈的查找,最终都发现确实是程序中存在内存泄漏的行为。所以,我觉得,valgrind是值得信赖的,尤其对于要和内存管理打交道的各路C/C++程序员而言。所以,尽可能多用valgrind吧,它可以减少不少无谓的脑细胞死亡。