You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何杀死for循环的“Changed conditional boundary”变异体?

杀死该条件边界变异体的方法

该变异的本质是把循环条件i < 100修改为i <= 100,只要构造出能区分原始代码和变异代码行为差异的测试用例,就可以杀死该变异。

测试用例构造方案

  • 准备getAccounts()返回的数组:设置数组长度为101,将下标0到100的所有位置都存入非空的BankAccount实例,确保数组没有空位
  • 调用addAccount()方法,传入新的BankAccount对象
  • 断言方法返回值为100,且运行过程中不会抛出数组越界异常

差异原理

原始代码运行逻辑:
循环只会遍历下标0到99的位置,所有位置都非空不会触发break,循环结束后i的值为100,直接执行getAccounts()[100] = acc,覆盖该位置原有值后返回100,不会出现数组越界。
变异后代码运行逻辑:
循环会执行到i=100的位置,判断该位置非空不触发break,i自增到101后才退出循环,后续执行getAccounts()[101] = acc时会直接抛出ArrayIndexOutOfBoundsException,和原始代码行为完全不同,测试用例会直接识别出该变异。

如果你的业务逻辑本身限制最多只能存100个账户,也可以先修改原始代码补全边界校验:在循环结束后增加判断if(i >= 100) throw new IllegalStateException("账户数量已达上限");,再编写测试用例断言数组存满100个账户时抛出IllegalStateException。此时变异后的代码会在循环内部访问下标100时抛出数组越界异常,和预期异常类型不一致,也可以杀死该变异。

内容的提问来源于stack exchange,提问作者Programmer2B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 11:45:02