级别:入门
Scott A. Will(sawill@us.ibm.com), 经理,质量保证和系统测试,IBM Corporation/Tivoli Systems Software
Theodore F. Rivera(trivera@us.ibm.com), 产品开发经理,质量保证,IBM Corporation/Tivoli Systems Software
Adam Tate(atate@us.ibm.com), 经理,质量保证和总体解决方案测试,IBM Corporation/Tivoli Systems Software
2004 年 1 月
我们三个人的家中有四个青少年驾驶员,很快还会增加一个。不用说,我们非常熟悉在驾驶员培训班中灌输给我们这些新驾驶员的防御性驾驶技术。因为在我们的青少年驾驶员短短的开车期间,他们看到了打手机的男人闯红灯、女人在拐弯的时候化妆,以及业务主管在早晨上班的路上读报。所以孩子们很快学会如何注意可能会发生事故的区域以及如何避免这些事故。
防御性驾驶和防御性开发
大多数司机接受过防御性驾驶技术的教育 —— 这有很好的理由 —— 但是并不是所有开发人员都接受过防御性开发的教育,特别是那些没有用汇编语言进行过多少开发(如果不是完全没用过的话)、也没有因内存约束和处理器限制而关心过编写极其紧凑的代码的年轻开发人员。本文讨论防御性编码和单元测试概念,它们可以帮助开发人员更快生成更好的代码并且缺陷更少。
为什么防御性开发是重要的?
捕捉错误、问题和缺陷的最佳位置是在开发周期的早期。图 1 展示了最容易出现缺陷的地方,以及最容易发现它们的地方,并包括了修复这些缺陷的成本(这些成本是针对 1996 年的 —— 今天的成本显然更高)。
图 1. 缺陷:引入阶段及发现阶段(包括成本)
当然,比在编码阶段找到缺陷更好的是在一开始就防止它们。防止缺陷应该是开发人员最优先考虑的。我们将分析几个让开发人员可以在编码和单元测试时防止并检测缺陷的简单的、经过证明的方法。
在编译前(防御性设计考虑)
防止缺陷(特别是系统性缺陷)的最有效方式是仔细检查编码所依据的设计。由设计缺陷导致的缺陷 —— 虽然一般不是很多 —— 通常修补成本是最高的。事前花很少的时间针对以下几点对设计进行检查可以得到显著的长期回报。
设计考虑
设计是否有任何不清楚或者混乱的部分?如果是的话,在编写任何代码之前澄清这些问题。否则,您可能以一种方式解释一个设计需求,而同事则以另一种方式解释它,从而得到不兼容的实现。
如果您的代码要访问同时被其他组件访问的数据,那么保证您的设计可以处理这种情况。同时,检查设计的安全问题(请参阅参考资料)。
文章来源于领测软件测试网 https://www.ltesting.net/