基于搜索的过程式程序测试方法对比研究
在软件开发中,测试用例的生成对于确保程序的质量至关重要。本文将介绍两种测试用例生成方法,MOSA(一种整体套件方法)和 LIPS(一种迭代单目标方法),并对它们在过程式代码测试中的有效性、效率和测试套件大小等方面进行对比分析。
1. 测试用例生成算法原理
在测试用例生成过程中,采用迭代的方式进行搜索。在每次迭代 i 时,从工作列表中移除最后添加的分支,并将其作为搜索算法的目标。如果搜索算法能找到覆盖该目标的测试用例,就将新的测试用例 $t_i$ 添加到测试套件中,并把 $t_i$ 覆盖路径上决策节点的所有未覆盖分支添加到工作列表。这个过程会一直迭代,直到工作列表为空(即所有分支都被覆盖),或者搜索预算(以适应度评估次数衡量)耗尽。
在每次迭代中,使用工作列表中最后添加的分支作为搜索目标,并重用前一次迭代的最终种群(播种),因为它可能包含覆盖替代分支的测试用例,这样能减少生成覆盖目标分支测试用例的时间。
有时候,一个测试用例可能会覆盖工作列表中已有的分支(附带覆盖),这些分支会从工作列表中移除并标记为“已覆盖”。另外,在搜索覆盖特定分支的测试用例时,搜索算法生成的部分解决方案可能会覆盖工作列表中的其他分支,这些测试用例会被添加到测试套件中,被覆盖的分支也会从工作列表中移除。不过,这种方法虽然提高了搜索效率和有效性,但可能会导致测试套件中出现冗余。
2. 搜索预算的处理
单目标方法中处理预算比较棘手。将剩余预算全部用于搜索覆盖特定分支可能会造成浪费,因为目标分支可能不可行或难以覆盖。一种替代的预算处理策略是将预算平均分配到各个分支。例如,如果总预算是 $SB$(如适应度函数评估次数)
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



