缺陷产生的原因是多种多样的,但是人为的因素是主要的原因,下面是一些经常导致产生缺陷的人为原因:
● 总体而言,人总是容易犯错误的。
● 开发人员的态度。
● 测试人员的经验和技术不足。
● 开发人员测试人员和其他人员之间的沟通问题。
● 需求变更频繁。
● 管理上的缺失。
● 进度上的压力。
● ……
同时,有些环境方面的原因也会造成软件缺陷的产生,例如:软件使用的周围环境的影响(电磁辐射的影响),软件使用环境的影响(运行软件的硬件系统老化等),以及现在的软件系统越来越复杂,相互之间的影响越来越大,都会导致软件缺陷的产生。下图是更加全面的软件失败/失效的演变图。
图2 软件失效/失败的演变过程
缺陷可以通过静态测试的方式发现,而对于失效和失败,一般来说,只能通过动态测试的方式来检测到。在软件开发的不同阶段,都有不同的技术和方法来检测和移除可能存在的缺陷和失效。例如,在开发阶段,代码和设计的静态评审就可以用来发现存在的缺陷。在动态测试过程,通过执行测试用例来发现可能的失效和失败。