软件中存在错误的来源

1、缺乏或者没有进行沟通,如对于一些我们应用程序中应当或者不应当实现的细节问题。

2、软件复杂度——在当今的软件开发中,对于一些没有经验的人来说,软件复杂性可能是难以理解的。图形化界面,客户/服务器和分布式的应用,数据通信,大规模的关系数据库,应用程序的规模等指数般的增加了软件的复杂度。

面向对象技术也有可能增加软件复杂度,除非能够被很好的工程化。

3、编程错误——任何一个编程人员都可能产生错误。

4、不断变更的需求——用户可能不知道变更的影响,或者知道影响却还是需要进行变更,这些会引起重新设计,工程的重新安排,对其它项目的影响,已完成的工作可能不得不重做或推翻,硬件需求可能也会受到影响。

如果存在许多小的变更或者任何大的改动,由于项目中不同部分间可知和不可知的依赖关系,这样就会产生问题,跟踪变更的复杂性也可能引入错误。

项目开发人员的积极性也会受到打击。

在一些快速变化的商业环境下,不断变更的需求可能是一种残酷的事实。在这种情况下,管理人员必须了解结果的风险,QA工程师和测试工程师必须适应和计划进行大规模的测试来防止不可避免的BUG出现无法控制的局面。

5、时间的压力——软件项目的时间安排是最难的,通常是需要很多猜测的工作。当最后期限来临的时候,错误也就伴随发生了。

6、人员的自大——我们经常会发现人们普遍喜欢说:
“没问题”
“很简单”
“我可以在几小时内解决那个问题”
“修改那些老代码应当是很简单的”

而不是说:
“那会增加很多复杂性,可能会导致很多错误”
“如果我们要做那个的话,我们将无能为力”
“我无法估计可能要多长时间,除非我能进一步进行观察和研究”
“我们无法搞清楚那些混乱的代码到底在做什么事情”
如果存在太多的“没问题”的话,问题也就产生了。

7、缺乏文档的代码——维护和修改很差的代码或缺乏文档的代码是很困难的。最终结果将导致BUG的出现。

8、软件开发工具——视图工具,类库,编译器,脚本工具等等通常会把它们自身的BUG 引入到你的项目中。