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

Java三角形类型判断程序Pitest未知存活突变问题咨询

问题1解答

Pitest的突变逻辑是基于编译后的Java字节码实现,而非直接修改你编写的源代码。你代码里写的ab == ac这类相等判断,编译为字节码后会生成if_icmpne(整数比较不相等则跳转)指令来实现短路逻辑:如果ab和ac不相等,就直接跳过后续ab == bc的判断,整个if条件直接返回false。
Pitest的条件跳转突变器会修改这类字节码指令的判断逻辑,将「不相等则跳转」修改为「大于则跳转」,对应到源码层面的描述就会显示为「不等号替换为大于号」,和你源代码有没有显式编写!=运算符无关。
要杀死这个存活的突变,你可以补充等腰三角形测试用例:assertEquals("isoceles", triangleType.triangleType(2, 5, 2)),这个用例在突变发生后会错误返回equilateral,触发测试断言失败即可杀死突变。

问题2解答

是的,Pitest统计局部变量时会将方法入参一并计入。Java方法的入参在字节码层面会存放在方法栈帧的局部变量表中,非static方法的局部变量表第0位是当前类实例this,后续位置依次对应方法入参。你这个方法共有3个int类型入参,对应局部变量表的1、2、3号位置,所以提示的「3号整数局部变量」就是第三个入参bc,对应的突变逻辑是bc值被自增1后再参与后续运算。
要杀死这个存活的突变,你可以补充测试用例:assertEquals("isoceles", triangleType.triangleType(3, 4, 4)),该用例在bc被自增为5后会错误返回scalene,触发断言失败即可杀死突变。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:06:03