- 作者:zhaozj
- 发表时间:2020-12-23 11:00
- 来源:未知
本文选自由微软公司华人专家编著的《软件开发的科学与艺术》一书。全书透彻解析了微软软件开发的思想与过程。
双手互搏, 无坚不摧
作为一个软件开发人员,必须测试自己的程序,使得代码做得更好,更加稳定。就我个人的经验来说,如果没有测试过代码,程序就不可能正确运行。
另外,在同一组的开发人员之间做得很多的一件事就是:别人来对你的代码进行检查,反过来你对别人的代码进行检查,这个过程不仅是希望检查的人来发现你的代码中的问题,或是你去发现别人代码中的问题,更重要的是在向别人讲解你的代码的过程中,可以发现自己遗漏的地方和问题,理顺自己思路。
下面这段程序是我在开发Exchange Server时写的一段代码,当时写完以后我没有测试它。因为这段代码实在是太简单了,只有几行代码:取文件的长度,如果出错就返回。于是我仅仅是编译通过后就将其提交(checkin)到实际产品中了。
结果第二天早上当我到办公室的时候,发现我的三位上司都已经铁青着脸在那里等我了。原来,整个Exchange Server都运行不起来了!因为我的这段代码被加在了Exchange Server启动代码序列中,当Server启动时,由于我这段代码的错误,一启动就失败,导致了DOA(dead on arrival)。
//
// Get file size first
//
DWORD dwFileSize = GetFileSize( hFile, NULL );
if ( dwFileSize = -1 ) {
// what can we do ? keep silent
ErrorTrace(0, "GetFileSize failed with %d", GetLastError());
return;
}
注:GetFileSize调用失败时将返回–1。
这段代码的错误在于:if的判断条件写成了赋值,所以无论怎样都会出错,然后返回。
其实改进的方法很简单:就是将-1移到前面。这样,如果你遗漏了一个“=”,编译时编译器就会发现错误。所以在if语句中,要把常量放在前面。
//