今天的学习
今天到图书馆意外发现了两本好书:《单元测试之道——NUnit》和《敏捷软件开发》,迅速将其收入囊中,好久没有借书了,省得买了,特别是后面那本,呵呵。
最近面对代码,虽然常常有重构的迫切愿望,但刚想动手便忽然觉得这没有任何测试保证的重构能走多远?今天拿到《单元测试之道》这本书,很薄,好呀,先不管它翻译的怎么样,看看再说。
15:29:40
这时我想起了那天博客堂上的一篇关于测试的文章(好像是关心写的),里面列举了n多的带有“测试”二字的名词,单元测试只是其中之一。他提到了一个问题我觉得很对:有时候程序写多了,写长了,写复杂了之后,可能测试代码也会相应的变多变长变复杂,那这时候很可能测试代码本身就有bug,谁又能保证测试代码的正确性呢?还有,也许会常常遇到测试有时成功有时失败的情况——进度条一会红,一会绿;或者说在这台机器上红,换台机器又绿;再或者说现在虽然红,但重启一次机器就又绿;刮风时红,打雷时绿……那又该从哪下手呢?
20:15:06
这里又想到一个关于重构和TDD的问题:比如我现在要对我曾经写过的一个项目通过重构来改进,但它是用vc6开发的,里面有一个神通广大的全功能class,这个class里面还有三四个至少300行的大函数,当时写这个程序的时候还不懂重构、单元测试、模式什么的,现在了解一点了,就知道了这个项目中“臭味儿代码”还是蛮多的。但是,它现在没有任何的单元测试代码,那么我是应该先给它把这些测试代码补上呢?还是先重构?如果先补上测试,那么经过大刀阔斧的重构之后——虽然也要小步前进——原先的函数们恐怕早已灰飞烟灭,那么之前补写的那些以原有函数为测试对象的测试代码恐怕也要跟着全部重写了吧?反过来,如果我不顾没有单元测试的危险而勇往直前不断重构的话,谁来保证我重构的正确性呢?抑或采用一种折衷方案——一边重构一边把单元测试代码补上?
最后,不知道现在有没有for vc6的自动测试框架可以用,就像是JUnit、NUnit那种东西,再得寸进尺一下,不知道现在有没有for vc6的重构工具,要能add-in到右键菜单里面的那种,哪怕是只能支持Extract method和Rename也行,就像vs2005一样。
p.s.刚刚统计了一下,GetRasterMetadata函数有437行,GetRasterData有319行,WriteToBMPFile有347行,看来真的是够“臭”的了.....
20:41:10
《单元测试之道》P.38的示例代码中把数据库的Connect动作放在了[SetUp]中,这不太好吧,如果我也照猫画虎的把连接SDE的代码放在[SetUp]里面,那运行一套测试恐怕真的要一夜才够....