如果你可以回到过去并告诉自己在开始时作为开发人员阅读一本特定的书,那本书会是哪本书?
我希望这个列表可以变化,涵盖范围广泛.
要搜索:使用右上角的搜索框.要搜索当前问题的答案,请使用inquestion:this.例如:
inquestion:this "Code Complete"
Run Code Online (Sandbox Code Playgroud) 我经常发现,当程序员或分配任务的程序员并不真正理解解决方案如何工作时,他们会随意添加内容直到它工作.
例子:
重新绘制一个窗口,由于某种原因,它不会像程序员那样被绘制:
Invalidate();
Revalidate();
ProcessMessages();
Update();
Repaint();
Repaint();
ProcessMessages();
Repaint();
Run Code Online (Sandbox Code Playgroud)
过度谨慎:
function test1(x: boolean)
begin
select case x
true: // do something
false: // do something else
else
raise Exception.Create("Invalid value.") // just to be sure
end;
end;
function test2(x: Integer);
var
y: Integer;
begin
y = Abs(x);
if y >= 0 then
begin
// do something
end;
end;
Run Code Online (Sandbox Code Playgroud)
虽然特别是过于谨慎的编码实践会导致大多数语言中的编译器警告,但我实际上已经在生产代码中看到了以上所有内容!
在大多数情况下,这种编码由程序员和/或老板辩护.原因总是归结为这种反应:
不幸的是,我没有充分的理由不这样做,虽然我仍然认为这是非常糟糕的风格,这可能会产生不良后果.
我可以提出一些事实,这种风格最终会产生不良后果吗?
编辑:谢谢你提出摆脱这种风格的好建议.但我仍然感兴趣的原因是我可以向同事们提出解释并可能说服他们的原因,为什么这很糟糕,为了他们的最佳利益而不是偏执狂.
如果项目具有100%的单元测试覆盖率,是否仍需要集成测试?
我从未参与过具有100%单元测试覆盖率的项目,但我想知道你的项目是否获得了这个(或90%),你的体验是否还需要集成测试?(你需要更少吗?)
我问,因为集成测试似乎很糟糕.它们通常是缓慢的,脆弱的(容易折断),不透明(当有人不得不潜入所有层以找出问题时),并且导致我们的项目放慢速度......我开始认为拥有只有单元测试(也许是一小部分烟雾测试)才是最佳选择.
从长远来看,似乎集成测试(根据我的经验)比他们节省的成本更高.
谢谢你的考虑.
如果你有 100% 的测试覆盖率并且所有测试都通过,这是否意味着代码保证是正确的并且编写更多的测试是没有意义的?