1.引论
1.1 什么是软件测试
软件测试主要是对制作的软件产品进行检查和测试,及时地发现程序中的故障和逻辑错误,以保障软件产品的可靠性。软件测试是保证软件质量的关键步骤,也是提高软件可靠性的重要手段,因此它是软件工程的的重要重要组成部分之一。
软件测试的内容包括两个方面,即文档和程序。
软件测试的宗旨是要采用费用最少而效果最好的方法提高软件产品的质量。
Dijkstra关于软件测试有一句极精辟的话“测试只能证明程序有错,不能保证程序无错”。
1.2 软件测试的目标
G.Myers在他的优秀著作《软件测试技巧》中,精辟的阐述测试的目的或定义:
1. 程序测试是为了发现错误而执行程序的过程;
2. 好的测试方案是极可能发现迄今为止尚未发现的错误;
3. 成功的测试是能够发现以前尚未发现的错误。
由此可见,传统观念“程序测试是为了证明程序中不存在错误”,“成功的测试是一个未能发现错误的测试”是不正确的。
1.3 软件测试的原则
1. 预先确定测试结果
2. 软件的开发者(或部门)不应该测试自己的程序
3. 制定严格的测试计划,防止测试的随意性
4. 设计和选择测试方案要有利于发现错误
5. 集中力量测试容易出错的程序段
在许多程序中,错误好像是成群出现的,这些错误往往比较集中在一段程序中。存在错误的概率与这段程序中发现的错误成比列。这就是所谓群集现象。
6. 保存好测试计划,测试方案,错误数据统计和分类,以及最终的分析报告。
2.软件测试方法
软件测试通常有三种方法,第一种是程序正确性证明,即验证;第二种是静态测试,即不执行被测试的程序而发先程序中的错误;第三种是动态测试。
2.1 程序正确性证明
程序正确性证明是从理论上对程序的正确性进行论证,通过证明可以得出程序逻辑上是否正确。
在许多情况下,一个完全的形式证明可能是不必要的。在某些情况下,若不能实现完全测试,则也不可能实现完全的形式证明。然而,我们常常用程序正确性证明所开发的推理风格来指导测试过程,以增强对程序的信任,有时可以把某些性质的程序证明和其他性质的测试结合起来。
2.2 静态测试
所谓静态测试是指不执行程序而找出程序存在错误的方法。这种方法以人工的,非形式化的方法对程序进行分析和测试,它是不依赖于计算机的测试。实践表明,静态测试可以发现大约30%-70%的逻辑设计错误和编码错误。
2.2.1 功能检查(自我测试)
功能检查也叫自我测试,由程序员将模块功能(说明,算法,语法规则),流程图和编码对照起来反复阅读,检查程序的语法和逻辑错误。
2.2.2 群体检查
群体检查是由自于人听社记者对功能说明,流程图,程序编码的自我测试等情况的汇报之后,对程序进行动态分析的过程。
2.2.3 人工运行检查
人工运行检查是由人扮演计算机来执行程序,将测试方案按程序的逻辑结构执行一遍,从而找出程序的错误供测试者分析。
2.3 动态测试
静态测试主要是检查程序的逻辑设计和编码错误,但在理论上和实践上还存在局限性,所以还比寻进行动态测试。
所谓动态测试,就是把程序看作函数,取函数定义域中的每一个元素作为输入,实际运行程序,检查程序的执行结果是否全部落在函数的值域之内,以此来检查程序的正确性,可靠性和有效性。
1. 如果产品要实现的功能是已知的,就可以分别测试是否达到每个功能要求,称之为“黑盒测试”
2. 如果知道产品的内部逻辑结构和处理过程,可以根据规格说明来完成内部操作的测试,称之为“白盒测试”
2.3.1 黑盒测试法(功能测试法)
黑盒测试法又称为功能测试法,它是在软件接口上进行测试,根据对软件功能的分析,推演出函数定义域中有代表性的元素组成测试方案。测试者使用这种方法时,把程序看成一个黑盒,完全不考虑程序内部的结构和处理过程。其目的是用来证明与程序内部工作无关的功能需求的有效性,很少考虑软件的内部逻辑结构。
41/41234>