一. 什么是软件测试
软件测试是一个过程或者一系列过程, 用来测试计算机代码完成了其应该完成的功能, 不执行不该有的操作.或者说软件测试是根据软件开发各阶段的功能和说明而精心设计的一批测试用例, 并根据测试用例运行程序, 以发现程序错误的过程.
二. 软件测试的心理学和经济学
1.软件测试心理学
测试是为发现错误而执行程序的一个过程.
2.黑盒测试
数据驱动测试或者输入输出驱动的测试, 测试目标与程序的内部结构以及程序的内部机制都无关, 将重点放在程序不按照其规范正确运行的环境条件.
3.白盒测试
逻辑驱动测试, 即允许对程序的内部结构进行检查, 对程序的逻辑结构进行检查, 从中获取测试数据(忽略了程序的规范).知道产品内部结构, 可通过测试检测产品内部是否按照说明书正常工作. 测试方法通常有逻辑驱动, 基路测试等.
4. 软件测试的目的
以最少的人力物力时间找出软件中潜在的各种错误缺陷,通过修正错误缺陷, 提高软件的性能和质量, 避免软件发布后由于潜在的问题引起商业风险
5.需求文档测试
主要测试产品需求中是否存在逻辑矛盾, 以及需求在技术上是否可以实现
6.设计文档测试
测试设计是否符合全部需求以及设计是否合理
三. 软件测试的原则
1.对预期输出或结果的一个定义
只有在测试之前对程序的预期结果做出相应的定义, 才会知道程序是否完成了自己应该完成的功能, 或者程序是否执行了自己不该执行的任务.
2.程序员应该避免测试自己编写的程序
每一个作者都清楚自己所编写的程序需要表达一个什么意思, 但实际表达出来的意思有可能是南辕北辙的, 而自己却没有意识到.
3.编写软件的组织不应该测试自己编写的软件
对于编写者来说, 定量的衡量软件的可靠性较难, 即使合理的规划和测试过程, 可能也会降低完成进度和成本目标.
4.彻底检查每个测试的执行结果
在后序的检查和测试中, 往往发现的错误是前序测试所遗漏的.
5. 测试用例的编写不仅要考虑到有效和预期的输入, 还应该考虑无效且不符合预期结果的输入用例.
在测试的过程中往往将重点放在了有效和符合预期结果的输入中, 而忽略了一些无效和未预料的结果.
6.检查程序是否未做其应该做的仅仅是测试的一半, 还应该检查程序是否做了其不应该做的
必须检查程序是否有我们不希望的副作用
7.避免测试用例用后丢弃, 除非软件本身是一次性的软件
保留测试用例是为了当程序其他部分发生更动后重新执行,
8.计划测试时, 不应该默许假定不会发现错误
所谓测试, 是为了发现错误而执行的一个过程
9.程序某部分存在更多错误的可能性
加入一个程序由模块 A和模块 B构成, 但是模块 A有五个错误, 而模块 B只有一个错误
10.软件测试是一个具有创造性和智力性的工作
测试一个大型软件所需要的创造性很可能超过了开发一个大型软件所需要的创造性和智力性.
四. 几个名词
1. Alpha 测试
有一个用户在开发环境下进行的测试, 也可以由公司内部的用户在模拟实际操作环境下进行的受控测试. 测试不能由测试员或者程序员来完成, 测试过程中如果发现错误, 可以现场立即向开发者反馈, 目的是评价软件的功能, 可靠性, 可使用性, 性能和支持. 尤其注重软件的界面和特色.可以从软件的编码之后进行测试.有关的手册应该在测试之前准备好
2. Bate 测试
软件的多个用户在一个或多个用户的实际使用环境下进行的测试. 开发者往往不在现场, Bate 的测试往往不能由测试员或者程序员来完成, 因此 Bate 测试是不可控的. 在遇到问题时有用户记下, 然后反馈给开发者, 开发者在接到反馈时及时对其作出修改, 最终将产品交给使用用户. Bate 测试往往侧重于产品的支持性, 只有 Alpha 测试达到一定的可靠性的之后才能进行 Bate 测试, 由于 Bate 测试注重于产品的支持性, 因此尽可能让支持产品发行的人员进行管理
3. 驱动模块
驱动模块往往也叫做主程序, 它接受测试数据, 将测试数据传入到北侧单元, 驱动模块主要完成对输入数据进行判断, 将输入数据传送给输出被测模块, 驱动被测模块执行, 接受被测单元执行结果, 对输出结果进行判断, 接受被测单元执行结果, 将执行结果作为用例执行结果输出测试报告