给软件带来错误的原因很多,具体地说,主要有如下几点:
1. 交流不够、交流上有误解或者根本不进行交流
在应用应该做什么或不应该做什么的细节(应用的需求)不清晰的情况下进行开发。
2. 软件复杂性
图形用户界面(GUI),客户/服务器结构,分布式应用,数据通信,超大型关系型数据库以及庞大的系统规模,使得软件及系统的复杂性呈指数增长,没有现代软件开发经验的人很难理解它。
3. 程序设计错误
象所有的人一样,程序员也会出错。
4. 需求变化
需求变化的影响是多方面的,客户可能不了解需求变化带来的影响,也可能知道但又不得不那么做。需求变化的后果可能是造成系统的重新设计,设计人员的日程的重新安排,已经完成的工作可能要重做或者完全抛弃,对其他项目产生影响,硬件需求可能要因此改变,等等。如果有许多小的改变或者一次大的变化,项目各部分之间已知或未知的依赖性可能会相互影响而导致更多问题的出现,需求改变带来的复杂性可能导致错误,还可能影响工程参与者的积极性。
5. 时间压力
软件项目的日程表很难做到准确,很多时候需要预计和猜测。当最终期限迫近和关键时刻到来之际,错误也就跟着来了。
在谈到软件测试时,许多人都引用Grenford J. Myers在《The Art of Software Testing》一书中的观点:
1. 软件测试是为了发现错误而执行程序的过程;
2. 测试是为了证明程序有错,而不是证明程序无错误;
3. 一个好的测试用例是在于它能发现至今未发现的错误;
4. 一个成功的测试是发现了至今未发现的错误的测试。
测试的定义
软件测试就是在软件投入运行前,对软件需求分析、设计规格说明和编码的最终复查,是软件质量保证的关键步骤。
定义1:软件测试是为了发现错误而执行程序的过程。
定义2:软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误的过程。
软件测试在软件生存周期中横跨两个阶段:
1单元测试阶段:编写出每个模块之后,就对它做必要的测试。
2综合测试阶段:结束单元测试后进行的测试,如系统测试、验收测试