Java中语句、分支和路径覆盖测试[4] 软件测试
要获得100%的基本路径覆盖,您需要定义基组。这种方法的圈复杂度为四(1加决策数量),需要定义四个线性无关路径。为此,可以将任何第一个路径定为基线,并且逐个浏览决策,直至完成基组。
路径1:任何路径都可以作为基线,因此将决策结果选定为真(由 TTT 表示)。这是基组中的第一个路径。
路径2:要找到下一个基本路径,浏览(仅限于)基线路径中的第一个决策,显示 FTT 表示您期望的决策结果。
路径3:浏览基线路径中的第二个决策,显示第三个基本路径为 TFT 。这样,第一个基线决策就可以保持为结果“真”不变。
路径4:最后,浏览基线路径中的第三个决策,显示第四个基本路径为 TTF 。这样,第一个基线决策就可以保持为结果“真”不变。
因此,四个基本路径为 TTT、 FTT、 TFT、和 TTF。现在,进行测试并查看结果。
在所附的代码中,您可以看到 testReturnInputIntBooleanBooleanBooleanTFT() 和 testReturnInputIntBooleanBooleanBooleanFTT() 找到了语句和分支覆盖中未发现的bug。此外,基本路径数量随着决策数据呈线性增长,而非指数增长,使需要进行测试的数量与实现全面分支覆盖所需的数量相等。事实上,基本路径测试覆盖了一个方法中的所有语句和分支,因而有效包含了分支和语句覆盖。
但是,为何不对其他潜在路径进行测试呢?记住,基本路径测试的目的在于测试所有相对独立的决策结果。通过对四个基本路径的测试可达到这个目的,而这与其他的路径没有关系。如果在开始时选择 FFF 作为基线路径,您将得到(FFF、 TFF、 FTF、 FFT)基组,与 TTT 路径无关。两个基组都同样有效,任何一个都可以满足您的独立决策结果标准。
创建测试数据
在本示例中获得100%的基本路径覆盖率非常容易,但是对现实生活中的路径基组进行全面测试将更具挑战性,甚至不可能实现。由于基本路径覆盖测试一个方法中各个决策之间的交互情况,因此您需要使用促使指定路径执行的测试数据,而不能仅仅使用单一的决策结果,这对分支覆盖来说也很有必要。通过注入数据来强行按指定路径执行非常困难,但是您可以记住简化测试过程的几种编码实践。
使您的代码保持简单。圈复杂度越低越好。在能够减小数值时进行重构。数值越高,就越难测试,这个数值一旦超过10,测试就根本无法实现。这样不仅能减少需要测试的基本路径数量,而且还能减少每个路径中的决策数量。
避免重复决策
避免数据依赖性
考虑以下示例:
图5. 基本路径测试
x 变量间接依赖于 object1 参数,但其中插入的代码却使查看关系变得尤为困难。随着方法变得越来越复杂,查看方法的输入值和决策表达式之间的关系几乎是不可能的。
文章来源于领测软件测试网 https://www.ltesting.net/