主题:【原创】乱侃软件工程师的素养 1 -- poorfat
不过都不算任务时间,只能加班做。
if(!function_1()) {
return error_code_1;
} else if(!function_2()){
return error_code_2;
} else if(!function_3()){
return error_code_3;
}
现在的挑战是怎么样管理超大规模的项目和源代码,所以一般来说强调的是软件工程方面的东西,这其中当然也包括了楼主提到的软件测试。
你们没有code review吗?
配合map , pdb文件可以定位错误。
try
{
function_one( ... );
function_two( ... );
function_three( ... );
}
catch (e)
{
log("an exception is caught. "+ e.message);
}
你把异常给吃了,这个很糟糕。
呵呵。
是不是有些太武断了点呢?
已经是一个讨论了无数次的经典话题了,不是一两个帖子几行字可以说清楚的。 我们还是求同存异的好。
再强调一下:别忘了留下痕迹,从程序所有可能的执行路径都要记得留下踪迹。
我有一次测试这样一段程序。用正面测试(positive tests)都是好的。一用反例来测试,就碰到问题了。
请看这段程序:(以下用伪码表示)
bool Run(executableName, ParamList, &fullCommandLine, &error)
{
if ( ShellExecute("cmd /c " + executableName + " " +ParamList) )
{
fullCommandLine = "cmd /c " + executableName + " " +ParamList;
return true;
}
error = GetShellError();
return false;
}
void RunCommandWithLogging(executableName, ParamList)
{
...
var cmdline = "";
var errorlevel = 0;
if ( Run(executableName + " " +ParamList, cmdline, errorlevel) )
{
log("the command line=[" + cmdline+"] has succeeded. ");
}
else
{
log("the command line=[" + cmdline+"] has failed. Errorlevel="+errorlevel);
}
...
}
诸位看出问题来没有?每当我用一个错误的命令放入RunCommandWithLogging()函数,我就看到日志文件里有这样一行:
the command line=[] has failed. Errorlevel=blah
没错,就是一对空的方括号[]。问题就在这里。当命令行有错误的时候,日志文件里就没有记录那条错误的命令行,而只有一对空的方括号。
为什么会这样呢?应为当ShellExecute()失败的时候,变量fullCommandLine没有被赋值。就这么简单。因此,Run()函数应该订正如下:
bool Run(executableName, ParamList, &fullCommandLine, &error)
{
if ( ShellExecute("cmd /c " + executableName + " " +ParamList) )
{
fullCommandLine = "cmd /c " + executableName + " " +ParamList;
return true;
}
else
{
fullCommandLine = "cmd /c " + executableName + " " +ParamList;
error = GetShellError();
return false;
}
}
这个案例的教训就是,如果你要记录日志,别忘了所有的代码路径(code path)都要留下日志。
吹毛求疵一下
编程和编码优化是两回事,就应该分开进行。
看了你的水浒还没谢过呢,最近又看了你在一言堂的Agent帖,补上来一并谢了。