五、基于准则的测试设计

抽象应该用来处理问题的复杂性,而不是忽略问题的复杂性。

5.1 定义覆盖准则

因为我们不可能使用所有的输入来测试,所以我们利用覆盖准则决定使用哪些测试输入。覆盖准则背后的原理是划分输入空间使单个测试用例发现的故障数最大化。从实际角度来说,覆盖准则也提供了有用的规则来决定什么时候停止测试。
测试需求: 测试需求是软件工件中测试用例必须满足或覆盖的指定元素。

如果目标是覆盖程序中的所有决定(分支覆盖),那么每个决定都将导致两个测试需求,一个需求决定复制为假,另一个需求决定赋值为真。如果每个方法必须被调用至少一次(调用覆盖),每个方法都生成一个测试需求。
覆盖准则就是系统性地生成测试需求的办法。
覆盖准则: 覆盖准则是一个或一组规则。这些规则决定了在测试用例中要覆盖的测试需求。
覆盖: 给定一个覆盖准则C所包含的测试需求集TR,当且仅当对TR中的每个测试tr,测试用例集T中至少存在一个测试用例t满足tr的时候,测试用例集T满足覆盖准则C。
极小测试用例集: 给定一个测试需求集TR和一个满足所有测试需求的测试用例集T,如果从T中任意移除单个的测试用例会导致T不能满足所有的测试需求,那么T就是极小的。
最小测试用例集: 给定一个测试需求集TR和一个满足所有测试需求的测试用例集T,如果不存在满足所有测试需求的更小的测试用例集,那么T就是最小的。
检查一个测试用例集是否是极小的比较容易,通过删除测试用例以使测试用例集极小化也很好理解;但是找到一个最小测试用例集是比较困难的。事实上,在原则上这是一个不可判定的问题。
覆盖程度: 给定一个测试需求集TR和一个满足所有测试需求的测试用例集T,T满足的测试需求数和TR数目的比率就是覆盖程度。
无法满足的测试需求称为不可行的,其正式含义是不存在满足测试需求的测试用例值。
死码会造成不可行的测试需求,这是因为死码中的语句是不可达的。
传统上我们应用覆盖准则的方式有两种。其一是直接生成测试用例值来满足准则,另一种是采用其他方法来生成测试用例值(手动生成或使用伪随机数生成工具),然后用覆盖准则衡量生成的测试用例的质量,但是很难达到100%覆盖率。覆盖准则有时也被称为度量。这两种不同的使用覆盖准则的方法有着强大的理论基础。生成器可以自动生成测试值来满足准则,识别器则决定一个测试用例集是否满足一条覆盖准则。
覆盖准则之前经常相互关联,而且可以使用包含关系来进行互相比较。
准则包含: 当且仅当满足覆盖准则C1的每一组测试用例集也同时满足覆盖准则C2时,C1包含C2。

5.2 不可行性和包含

在软件测试中,"不可行性"和"包含"两个概念通常与测试用例的设计和实施有关。
不可行性
不可行性在软件测试中通常指的是某个测试用例无法执行或实施。这可能是由于以下原因造成的:
1、测试环境不正确或不足:测试用例需要特定的软件、硬件或网络环境,但这些条件没有得到满足。
2、输入数据不正确或不足:测试用例需要特定的输入数据,但这些数据没有得到正确的准备或收集。
3、依赖关系缺失:测试用例依赖于其他测试用例或系统的结果,但这些依赖关系没有得到满足。
4、技术限制:由于技术限制,例如编程语言不支持、工具不兼容等,导致测试用例无法执行。
为了避免不可行性的发生,需要在设计测试用例时仔细考虑所需的条件和依赖关系,并确保测试环境的可用性和输入数据的正确性。
包含
在软件测试中,"包含"通常指的是确定测试用例是否应该包含在某个测试套件或集合中。这取决于以下几个因素:
1、测试目标和目的:每个测试用例都有特定的测试目标和目的。根据这些目标和目的,可以确定哪些测试用例是相关的,并应该被包含在测试套件中。
2、测试范围和边界条件:根据软件的功能和性能要求,可以确定哪些测试用例是必要的,以覆盖软件的所有功能和边界条件。
3、资源限制和优先级:由于时间和资源的限制,可能需要对测试用例进行优先级排序,并仅选择那些对软件质量和交付时间有最大影响的测试用例来包含在测试套件中。

5.3 使用覆盖准则的好处

有三个重要的方法可以影响覆盖准则的使用。
1、产生测试需求的困难度
2、生成测试用例的困难度
3、测试用例解释故障的能力

使用覆盖准则有以下几个好处:
提高软件质量:通过全面的测试用例覆盖,可以减少软件中的错误、缺陷和漏洞,提高软件的质量和可靠性。
降低维护成本:使用覆盖准则可以制定更加全面、有效的测试计划,减少测试用例的冗余和遗漏,降低软件维护成本。
增强软件的可维护性:通过全面的测试用例覆盖,可以更加清晰地了解软件的功能和需求,使软件更加易于维护和升级。
提高开发效率:使用覆盖准则可以更加快速、准确地找到软件中的错误和缺陷,提高开发效率。
提高软件的可信度:通过全面的测试用例覆盖,可以更加准确地评估软件的性能和稳定性,提高软件的可信度和用户满意度。

你可能感兴趣的:(软件测试基础,软件测试)