编写一个二分查找函数: • 1.画控制流图; • 2.分别确定3条路径,满足100%语句覆盖、完全分支覆盖、 完全谓词覆盖;并推导出相应路径的路径谓词表达式; • 3.求解每个谓词表达式,找出至少一条不可行路径; • 4.引入至少一个缺陷,使得某个特定的满足完全分支覆盖准 则的测试用例,未能检测出该缺陷。 • 5.使用VS上机实践并完成上述任务。 • 6.根据实训,试提出一种方法,能检测出前一步引入的缺陷
时间: 2024-01-24 11:19:11 浏览: 89
1. 二分查找函数控制流图如下:
![二分查找函数控制流图](https://i.imgur.com/gqVhw6M.png)
2. 根据控制流图,可以得到以下三条路径:
- 路径1:进入while循环,mid等于key,返回mid
- 路径2:进入while循环,mid小于key,改变low的值,继续while循环
- 路径3:进入while循环,mid大于key,改变high的值,继续while循环
对应的路径谓词表达式如下:
- 路径1:mid == key
- 路径2:mid < key
- 路径3:mid > key
3. 对于路径2,当数组中不存在key时,low会不断逼近high,导致死循环。因此,当low不小于high时,应该退出循环。
4. 引入一个缺陷:将while循环条件改为while(low <= high)。这样,当数组中不存在key时,程序会进入死循环,而原本能够检测到该缺陷的测试用例,现在却无法检测到。
5. 使用VS上机实践,并完成上述任务。
6. 为了检测出前一步引入的缺陷,可以添加一个新的测试用例,数组中不存在key,期望返回-1。这个测试用例可以覆盖路径2和路径3,并且路径谓词表达式中的mid < key和mid > key均为真。如果程序进入了死循环,说明存在缺陷。
阅读全文