2012-02-05 59 views
2

我一直认为防御性编程是邪恶的(我仍然这样做),因为通常我的经验中的防御性编程总是涉及基于不可预知的结果的某种不合理的牺牲。例如,我看到很多人试图对自己的同事进行防守编码。他们会做些事情“以防万一”代码稍后以某种方式改变。他们最终会以某种方式牺牲表现,或者在任何情况下都会采取一些银弹。这是防守编程吗?

这个具体的编码习惯是否被视为防御性编程?如果不是,这种做法会被称为什么?

维基百科防御性编程定义为软件的不可预知使用保护,但并不说明针对其他程序员的代码完整性防御性编程策略,所以我不知道这是否适用,也没有人知道这就是所谓的。

基本上,我希望能够与这样做,并告诉他们自己在做什么是错的,以专业的方式将人们争辩。我希望能够客观地反驳这一点,因为它有害无益。

+0

执行代码复审,当其他成分发生变化,我相信,被称为“依赖注入”,总称“模块化”下下降有一个在编码标准.... – 2012-02-05 04:28:52

+0

甚至使你的代码工作的同意,并且是一个好想法。 – bdares 2012-02-05 04:47:51

+1

如果您对自己的同事进行防御性编码,则问题将无法通过编写代码来解决。我会建议召开一次会议。 :) – 2012-02-05 05:03:59

回答

2

“过度工程”是错误的。

“防御性编程”很好。

这需要智慧,经验......也许频繁的代码审查的常设政策...分辨。

+4

PS:我会考虑“检查返回值”和“验证输入”为“防御性编码”。我认为,“仅仅在我的同事可能终有一天会改变他的代码的机会上,额外的代码才会变得愚蠢而且没有生产力”。 – paulsm4 2012-02-05 04:36:46

1

这一切都取决于具体情况。如果您正在开发可供其他程序员重复使用的软件,那么至少要进行一些防御性编程是有道理的。例如,您可以记录所有需要的输入要求,但有时您需要测试输入实际符合要求以避免灾难性行为(例如销毁数据库)。这通常涉及(微不足道的)性能问题。

在另一方面,防御可能的方式有些过头。也许这就是通知你的观点。一个或两个具体的例子将有助于区分正在发生的事情。