关于含循环代码的语句覆盖分析咨询:求a=5、b=7时的语句覆盖率
语句覆盖率计算:当a=5、b=7时的结果
先把你的代码整理成更易读的结构化格式:
read a; read b; i = 0; if (a > b) { while (i < a) { print(i); i++; } } else { while (i < b) { print(i); i++; } }
第一步:明确语句覆盖的核心定义
语句覆盖要求每一条独立的可执行语句至少被执行一次——循环内的语句只要执行过一次就算覆盖,不需要考虑循环执行的次数。
第二步:分析a=5、b=7时的执行路径
因为 5 > 7 的判断结果为假,代码会直接进入else分支,具体执行流程如下:
- 执行
read a;和read b;读取输入值 - 执行
i = 0;完成变量初始化 - 执行
if (a > b)的条件判断(结果为假) - 进入
else分支,执行while (i < b)的条件判断(第一次为真,后续循环中重复判断直到i=7时为假) - 循环体内的
print(i);和i++;会被执行多次(从i=0到i=6),但这两条语句只要执行过一次就算覆盖
第三步:统计覆盖与未覆盖的语句
总可执行语句(去重后共10条):
- 输入类:
read a;、read b; - 赋值类:
i = 0; - 判断类:
if (a > b)、while (i < a)、while (i < b) - 执行类:
print(i);(if分支内)、i++;(if分支内)、print(i);(else分支内)、i++;(else分支内)
已覆盖的语句(共7条):
read a;、read b;、i = 0;、if (a > b)、while (i < b)、print(i);(else分支内)、i++;(else分支内)
未覆盖的语句(共3条):
while (i < a)、print(i);(if分支内)、i++;(if分支内)
第四步:计算最终覆盖率
语句覆盖率 = (已覆盖语句数 / 总可执行语句数) × 100% = (7/10) × 100% = 70%
注:如果把
else的分支入口单独算作一条语句,总语句数会变为11,覆盖率约为72.7%,但行业内通常不会将else分支入口单独统计,因为它是if判断的逻辑延伸,核心统计的是独立的可执行逻辑语句。
内容的提问来源于stack exchange,提问作者Rashmika gamage
相关产品推荐
相关产品推荐

