西西河

主题:【原创】乱侃软件工程师的素养 1 -- poorfat

共:💬71 🌺108
全看树展主题 · 分页首页 上页
/ 5
下页 末页
家园 我经历的两家公司都要求作codereview

不过都不算任务时间,只能加班做。

家园 完全可以兼顾性能和可读性:

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吗?

家园 建议使用BugTrap.

配合map , pdb文件可以定位错误。

家园 这段代码有很大问题

try

{

function_one( ... );

function_two( ... );

function_three( ... );

}

catch (e)

{

log("an exception is caught. "+ e.message);

}

你把异常给吃了,这个很糟糕。

家园 BSO 自己是manager

呵呵。

家园 你都不知道这些函数是干什么的你就说这个情况不需要优化

是不是有些太武断了点呢?

家园 这个不错。
家园 你的这个观点

已经是一个讨论了无数次的经典话题了,不是一两个帖子几行字可以说清楚的。 我们还是求同存异的好。

家园 【原创】素养 (5) 留下痕迹案例2

再强调一下:别忘了留下痕迹,从程序所有可能的执行路径都要记得留下踪迹。

我有一次测试这样一段程序。用正面测试(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)都要留下日志。

家园 命令行赋值语句提出来放在第一行更好些吧?

吹毛求疵一下

家园 严重同意,花一个。

编程和编码优化是两回事,就应该分开进行。

家园 原来无斋主人就是Tonyxu啊

看了你的水浒还没谢过呢,最近又看了你在一言堂的Agent帖,补上来一并谢了。

家园 多谢多谢。让我想到西西河的一个问题,有了一些启发
全看树展主题 · 分页首页 上页
/ 5
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河