软件测试的心理学和经济学
1.每当测试一个程序时,应当想到要为程序创造一些价值。
通过测试来提高程序的价值,是指测试提高了程序的可靠性或质量。提高了程序的可靠性,,是指找出并最终修改了程序的错误。
2.
测试是为发现错误而执行成勋的过程
3.
软件测试更适宜被视为试图发现程序中错误的破坏性过程。
一个成功的测试用例,通过诱发程序发生错误,可以在这个方向上促进软件质量的改进。
4.即使是规模很小的程序,一般来说,发现程序的所有错误也是不切实际的。
5.软件测试的原则
- 测试用例中一个必需部分是对预期输出或结果的定义。
- 程序员应当避免测试自己编写的程序
- 编写软件的组织不应当测试自己编写的软件
- 应当彻底检查每个测试的执行结果
- 测试用例的编写不仅应当根据有效和预期的输入情况,而且也应当根据无效和未预料到的输入情况。
- 检查 程序是否“未作其应该做的”仅是测试的一半,测试的另一半应该是检查是否“做了其不应该做的”。
- 应避免测试用例用后即弃,,除非软件本身就是一个一次性的软件。
- 计划测试工作时,不应默许假定不会发现错误。
- 程序某部分存在更多错误的可能性,与该部分已发现错误的数量成正比
- 软件测试是一项极富创造性,极具智力挑战性的工作。
6.黑盒测试
黑盒测试又称为数据驱动的测试或输入输出驱动的测试。
使用这种测试方法时,将程序视为一个盒子。测试目标的程序内部结构无关。将重点集中放在发现程序不按期规范正确运行的环境条件。
如果想用这种测试方法测试程序的所有错误,判定的标准时穷举输入测试,将所有的输入条件都作为测试用例。
我自己的理解时:黑盒测试在测试程序时,并不关注程序本身的结构与内部机制,所以只需要将所有的输入条件都作为测试用例,以书中例子为例,仅一个很小的程序所需要的测试用例就需要很多乃至天文数字。
在使用到数据存储时尤其严重,以书中为例航班订票系统,所依赖的测试不仅是有效的和无效的,还需要依赖每次事务处理的顺序。
总结:穷举输入测试是无法有效的。
两方面的含义:
一是无法测试一个程序以确保它是无错的
二是软件测试中需要考虑的一个基本问题就是软件测试的经济学。
7.白盒测试
白盒测试又称逻辑驱动测试。要求测试策略对程序的逻辑结构进行检查。
穷举路径测试,与穷举输入测试相类似:如果使用测试用例执行了程序中所有可能出现的控制流路径,那么程序就有可能得到了完全测试。
然而这种测试策略也存在很大问题
一:在程序中得到所有不同逻辑路径的数量可能也是一个天文数字,从现实来看是不和实际的。
二:第二个问题就算是穷举路径测试也不能完全确定该程序就是无错的:有这么几种可能性:
1)如果程序本身设计出现问题,测试了所有逻辑路径也不能百分百确定程序是正确的,举例来说,如果要求是设计一个升序排序的程序,但却设计了降序的程序,此时在使用穷举路径测试就没有价值了有点南辕北辙的感觉。。。
2)程序可能会因为缺少某些路径而存在问题,但是穷举路径测试当然不能发现缺少了哪些必须路径。(不是很理解)
3)穷举路径测试可能不会暴露数据敏感错误,比如数据类型或是有无符号的问题。
总结:
- 软件测试是为发现错误而执行程序的过程。
- 一个好的测试用例具有较高的发现某个尚未发现的错误的可能性。
- 一个成功的测试用例能够发现某个尚未发现的错误。