主要内容

不可达代码

执行期间无法访问代码

描述

不可达代码使用语句覆盖率确定在执行期间是否可以到达代码段。语句覆盖率检查程序语句是否已执行。如果语句具有测试条件,并且至少出现其中一个,则该语句已执行且可到达。未出现的测试条件不被视为死代码,除非ey具有相应的代码分支。如果所有测试条件都没有出现,则不会执行该语句,并且每个测试条件都是无法访问的代码的实例。例如,在转换本准则的声明,案例3从未发生过:

void test1(inta){inttmp=0;if((a!=3)){switch(a){案例1:tmp++;break;默认值:tmp=1;break;/*案例3到案例2没有死代码*/案例3:案例2:tmp=100;break;}}}void test2(inta){inttmp=0;if((a!=3)){switch(a){案例1:tmp++;break;默认值:tmp=1;break;//案件3的死代码案例3.:break;案例2:tmp=100;break;}

在里面test1(),案例3符合案例2检查显示没有死代码。在里面test2(),该复选框显示的代码无效案例3因为打破不执行下一行的语句。

无法访问代码的其他示例包括:

  • 如果测试条件的计算结果始终为false,则无法到达相应的代码分支来源窗格中,分支的开口括号为灰色。

  • 如果测试条件的计算结果始终为true,则该条件是冗余的来源窗格中的条件关键字,例如如果,显示为灰色。

  • 代码遵循打破回来陈述

如果代码块的左大括号在来源窗格中,要高亮显示整个块,请双击支撑。

检查对函数中的代码进行操作未调用的函数函数不可到达确定函数本身是否未被调用或是从无法访问的代码调用。

例子

全部展开

#定义True 1#定义False 0 typedef enum{Intermediate,End,Wait,Init}enumState;enumState input();enumState inputRef();void操作(enumState,int);int checkInit(enumState stateval){if(stateval==Init)返回True;返回False;}int checkWait(enumState stateval==Wait)返回True;返回False;}void main(){enumState myState=input(),refState=inputRef();if(checkInit(myState)){if(checkWait(myState)){操作(myState,checkInit(refState));}else{operation(myState,checkWait(refState));}}

在本例中主要的进入if(checkInit(myState))只有myState=Init.因此,在该分支中,Polyspace®认为我的国家有价值初始化.checkWait(myState)总是回来错误的以及if(checkWait(myState))这是遥不可及的。

更正-删除冗余测试

一种可能的纠正方法是删除冗余测试if(checkWait(myState)).

#定义真1#定义假0 typedef enum{mediate,End,Wait,Init}enumState;枚举状态输入();enumState inputRef();无效操作(枚举状态,int);int checkInit(enumState stateval){if(stateval==Init)返回True;return False;}int checkWait(enumState stateval){if(stateval==Wait)返回True;return False;}void main(){enumState myState=input(),refState=inputRef();if(checkInit(myState(myState))操作(myState,checkWait(refState));}
#include#includeintroll(){return(rand()%6+1)}无效操作(int);void main(){srand(time(NULL));int die=roll();如果(die>=1&&die<=6)/*无法访问的代码*/操作(die);}

在这个例子中,滚动()返回一个介于1和6之间的值。因此如果测试主要的始终计算为true且为冗余。如果存在相应的其他的分支时,灰色错误显示在其他的声明。没有其他的分支时,灰色错误显示在如果关键字来指示冗余条件。

更正-删除冗余测试

一种可能的纠正方法是消除这种情况如果(模具>=1和模具<=6).

#include#includeintroll(){return(rand()%6+1)}无效操作(int);void main(){srand(time(NULL));int die=roll();操作(die);}
#include#include#define True 1#define False 0 int roll1(){return(rand()%6+1)}int roll2();void操作(int,int);void main(){srand(time(NULL));int die1=roll1(),die2=roll2();如果((die1>=1和&die1<=6)||(die2>=1&&die2<=6))/*无法访问的代码*/操作(die1,die2);}

在这个例子中,roll1()返回一个介于1和6之间的值。因此如果测验如果((die1>=1)和&(die1<=6))都是真的,因为如果测试与测试相结合||这个如果不管第二部分是什么,测试总是正确的。因此,本文的第二部分如果无法访问测试。

更正-将测试与&&

一种可能的纠正方法是将两个部分合并在一起如果测试&&而不是||.

#include#include#define True 1#define False 0 int roll1(){return(rand()%6+1)}int roll2();void operation(int,int);void main(){srand(time(NULL));int die1=roll1(),die2=roll2();if((die1>=1&&die1<=6)&&die2>=1&&die2<=6)操作(die1,die2)})

核对资料

组:数据流
语言:C+C++
首字母缩略词:UNR