相关内容参考自《软件测试的艺术》
一、软件测试的概念
所谓软件测试,就是一个过程或一系列过程.用来确认计算机代码完成了其应该完成的功能不执行其不该有的操作。软件应当是可预测且稳定的,不会给用户带来意外惊奇。
软件测试的作用主要体现在以下几个方面:
-
发现缺陷:软件测试的主要目标是发现软件中的缺陷和错误。通过执行各种测试用例和场景,测试人员可以检测出软件中的潜在问题,包括功能错误、性能问题、安全漏洞等。这有助于提前发现和修复问题,以确保软件的质量和可靠性。
-
提高软件质量:通过不断进行测试和修复,软件的质量可以得到提高。测试可以帮助开发团队识别和解决软件中的问题,确保软件在交付给用户之前达到预期的质量标准。这有助于减少用户在使用过程中遇到的问题,提高用户满意度。
-
降低风险:软件测试可以帮助识别和降低软件开发过程中的风险。通过测试,可以发现潜在的问题和风险,并及时采取措施进行修复和改进。这有助于减少软件在实际使用中可能导致的损失和风险。
-
改进用户体验:通过测试,可以确保软件的功能和性能符合用户的期望。测试可以帮助发现并解决用户可能遇到的问题,提高软件的易用性和用户体验。
二、常见的测试策略
(1)黑盒测试
黑盒测试是一种重要的测试策略, 又称为数据驱动的测试或输入/输出驱动的测试。使用这种测试方法时,将程序视为一个黑盒子。测试目标与程序的内部机制和结构完全无关,而是将重点集中放在发现程序不按其规范正确运行的环境条件。
在这种方法中,测试数据完全来源于软件规范(换句话说,不需要去了解程序的内部结构)。如果想用这种方法来发现程序的所有错误,判定的标准就是“穷举输入测试”,将所有可能的输入条件都作为测试用例。但穷举输入测试是无法实现的,所以需要根据实际情况,根据实际测试单元的需求规划,设计合适的测试数据集。
(2)白盒测试
白盒测试又称逻辑驱动的测试,允许我们检查程序的内部结构。这种测试策略对程序的逻辑结构迸行检查,从中获取测试数据。
在这里我们的目标是针对达种测试策略,建立起与黑盒测试中穷举输入测试相似的测试方法。也许有一个解决的办法,即将程序中的每条语句至少执行一次。但是我们不难证明,这还是远远不够的。这种方法通常称为穷举路径测试。所谓穷举路径测试,即如果使用测试用例执行了程序中所有可能的控制流路径,那么程序有可能得到了完全测试。但穷举路径测试就如同穷举输入测试,非但不可能,也是不切实际的。所以也需要根据实际情况与设计需求,来设计合适的测试用例。
三、软件测试的几个原则
(1)原则1:测试用例中一个必需部分是对预期输出或结果的定义
测试用例有明确的输入与准确的输出
(2)原则 2:程序员应当避免测试自己编写的程序
由干程序员错误地理解了疑难定义或规范,导致程序中存在错误。如果情况是这样,程序员可能会带着同样的误解来测试自己的程序。
(3)原则 3:编写软件的组织不应当测试自己编写的软件
理由同原则2类似
(4)原则 4:应当彻底检查每个测试的执行结果
后续发现的错误中可能是前面的测试遗漏掉的
(5)原则 5:测试用例的编写不仅应当根据有效和预期的输入情况,而且也应当根据无效和未预料到的输入情况
针对未预料到的和无效输入情况的测试用例,似乎比针对有效输入情况的那些用例更能发现问题
(6)原则 6:检查程序是否“未做其应该做的”仅是测试的一半,测试的另一半是检查程序是否“做了其不应该做的”
必须检查程序是否有我们不希望的负作用,比如,某个工资管理程序即便可以生成正确的工资单,但是如果也为非雇员生成工资单或者它覆盖掉了人员文件的第一条记录,这样的程序仍然是不正确的程序
(7)原则 7:应避免测试用例用后即弃,除非软件本身就是一个一次性的软件
测试用例需要可复用!如果对程序的更改导致了程序某个先前可以执行的部分发生了故障,这个故障往往是不会被发现的,保留测试用例,当程序其他部件发生更动后重新执行,这就是我们所谓的“回归测试”
(8)原则 8:计划测试工作时不应默许假定不会发现错误
所谓测试,就是为发现错误而执行程序的过程
(9)原则 9:程序某部分存在更多错误的可能性, 与该部分已发现错误的数目成正比
例如,假如某个程序由两个模块、类或子程序 A 和 B 组成,模块A 中已经发现了五个错误,而模块 B 中仅仅找到了一处错误。如果模块 A 所经过的测试并不是故意设计得更为严格,那么该原则告诉我们,模块 A 与模块 B 相比,存在更多错误的可能性要大
(10)原则 10:软件测试是一项极富创造性、极具智力挑战性的工作
测试一个大型软件所需要的创造性很可能超过了开发该软件所需要的创造性.我们已经看到,要充分地测试一个软件以确保所有错误都不存在是不可能的