2、二分查找: 查找一个已排序的列表中,是否包含某个key。 代码如下:private static <T> int indexedBinarySearch(List<? extends Comparable<? super T>> list, T key) { int low = 0; int high = list.size()-1; while (low <= high) { int mid = (low + high) >>> 1; Comparable<? super T> midVal = list.get(mid); int cmp = midVal.compareTo(key); if (cmp < 0) low = mid + 1; else if (cmp > 0) high = mid - 1; else return mid; // key found } return -(low + 1); // key not found }对给出的一段代码,每题使用两种合适的白盒测试方法展开测试。 1.采用逻辑覆盖技术(判定条件覆盖、条件组合覆盖)展开测试。 2.利用基本路径测试技术展开测试。 3.从不同方面对循环节点展开测试。 4.综合使用不同的白盒测试方法展开测试。
时间: 2024-02-22 18:01:38 浏览: 71
1. 采用逻辑覆盖技术展开测试:
判定条件覆盖:对于每个判断语句,都至少执行一次true分支和false分支。
条件组合覆盖:对于每个判断语句,覆盖所有的组合情况。
在这段代码中,有一个判断语句和一个条件分支,可以使用上述两种方法进行测试:
判断语句:if (cmp < 0)
判定条件覆盖:设列表元素为A,key为B,测试用例为[A,B]和[B,A]。
条件组合覆盖:设列表元素为A、B、C,key为D,测试用例为[A,B,D]、[A,C,D]、[B,A,D]、[B,C,D]、[C,A,D]和[C,B,D]。
条件分支:else if (cmp > 0)
判定条件覆盖:设列表元素为A,key为B,测试用例为[A,B]和[B,A]。
条件组合覆盖:设列表元素为A、B、C,key为D,测试用例为[A,B,D]、[A,C,D]、[B,A,D]、[B,C,D]、[C,A,D]和[C,B,D]。
2. 利用基本路径测试技术展开测试:
基本路径测试是一种结构化测试方法,根据程序的控制流图,找出所有的程序路径,对每个路径至少执行一次。
在这段代码中,控制流图如下:
![控制流图](https://i.imgur.com/TywdL5D.png)
共有4条路径,分别是1-2-3-4-5-6-7-9、1-2-3-4-5-6-7-8-9、1-2-3-4-5-6-7-8-10-9和1-2-3-4-5-6-7-11-9。可以通过以下测试用例进行覆盖:
路径1:设列表元素为A,key为B,测试用例为[A,B]。
路径2:设列表元素为A,key为A,测试用例为[A,A]。
路径3:设列表元素为A,B,C,key为D,测试用例为[A,B,D]、[A,C,D]、[B,A,D]、[B,C,D]、[C,A,D]和[C,B,D]。
路径4:设列表元素为A,key为B,测试用例为[B,A]。
3. 从不同方面对循环节点展开测试:
循环节点是程序中最常见的执行结构之一,需要从不同的角度进行测试。
在这段代码中,循环节点为while (low <= high),可以从以下几个方面进行测试:
测试初始值:设列表元素为A,key为B,测试用例为[A,B]和[B,A]。
测试边界值:设列表元素为A、B、C、D,key为B,测试用例为[A,B,C,D,B]和[D,C,B,A,B]。
测试循环次数:设列表元素为A、B、C、D,key为B,测试用例为[A,B,C,D,B]和[A,D,C,B]。
4. 综合使用不同的白盒测试方法展开测试:
综合使用不同的测试方法可以更全面地覆盖程序的各个方面。
在这段代码中,可以综合使用逻辑覆盖技术和基本路径测试技术进行测试,同时加入一些针对循环节点的测试用例,如下:
判定条件覆盖:设列表元素为A,key为B,测试用例为[A,B]和[B,A]。
条件组合覆盖:设列表元素为A、B、C,key为D,测试用例为[A,B,D]、[A,C,D]、[B,A,D]、[B,C,D]、[C,A,D]和[C,B,D]。
基本路径测试:路径1、路径2、路径3和路径4。
测试初始值:设列表元素为A,key为B,测试用例为[A,B]和[B,A]。
测试边界值:设列表元素为A、B、C、D,key为B,测试用例为[A,B,C,D,B]和[D,C,B,A,B]。
测试循环次数:设列表元素为A、B、C、D,key为B,测试用例为[A,B,C,D,B]和[A,D,C,B]。
阅读全文