问题 问答题

已知检查括号匹配及注释、字符串处理的C源程序如下:

#include<stdio.h>

int brace,brack,paren;

void in_quote(int c);

void in_comment(void);

void search(int c);

/*rudimentary syntax checKer for C program*/

int main()

int c;

extern int brace,brack,paren;

while((c=getchar())!=EOF)

if(c==’/’)

if((c=getchar())==’*’)

in_comment(); /*inside comment*/

else

search(C) ;

else if(c==’\"||c=="")

in_quote(c); /*inside quote*/

else

search(c);

if(brace<0) /*output errors*/

printf("Unbalanced braces\n");

brace=0;

else if(brack<0)

printf("Unbalanced brackets\n");

brack=0;

else if(paren<0)

printf("Unbalanced parentheses\n");

paren=0;

if(brace>0) /*output errors*/

printf("Unbalanced braces\n");

if(brack>0)

printf("Unbalanced brackets\n");

if(paren>0)

printf("Unbalanced parentheses\n");

return 0;

/*search:search for rudimentary syntax errors*/

void search(int c)

extern int brace,brack,paren;

if(c==’’)

++brace;

else if(c==’’)

--brace;

else if(c==’[’)

++brack;

else if(c==’]’)

--brack;

else if(c==’(’)

++paren;

else if(c==’)’)

--paren;

/*in_comment:inside of a valid comment*/

void in_comment(void)

int c,d;

c=getchar();

d=getchar(); /*curr character*/

while(c!=’*’||d!=’/’) /*search for end*/

c=d;

d=getchar();

/*in_quote:inside quote*/

void in_quote(int c)

int d;

while((d=getchar())! =c) /*search end quote*/

if(d==’\\’)

getchar(); /*ignore escape seq*/

设计一组测试用例,使该程序所有函数的语句覆盖率和分支覆盖率均能达到100%。如果认为该程序的语句覆盖率或分支覆盖率无法达到100%,需说明为什么。

答案

参考答案:

测试用例:

①依次输入:c==EOF

②依次输入:c==’/’,c==’*’,c==’*’,d==’/’

③依次输入:c==’/’,c==’*’,c==’*’,d==’{’,d==’/’

④依次输入:c==’/’,c==’*’,c==’/’,d==’/’,d==’/’

⑤依次输入:c==’/’,c==’/’

⑥依次输入:c==’/’,c==’{’

⑦依次输入:c==’/’,c==’}’

⑧依次输入:c==’/’,c==’[’

⑨依次输入:c==’/’,c==’]’

⑩依次输入:c==’/’,c==’(’

(11)依次输入:c==’/’,c==’)’

(12)依次输入:c==’\’,d==’\’

(13)依次输入:c==’\’,d==’*’

(14)依次输入:c==’\’,d==’\\’

(15)依次输入:c=="",d==’\’

(16)依次输入:c=="",d==’*’

(17)依次输入:c=="",d==’\\’

(18)依次输入:c==’{’

(19)依次输入:c==’}’

(20)依次输入:c==’[’

(21)依次输入:c==’]’

(22)依次输入:c==’(’

(23)依次输入:c==’\\’

该程序的语句覆盖率和分支覆盖率无法达到100%。

因为该程序中有好几个判断语句,对于有的判断语句,若取真,则取假无法执行;若取假,则取真无法执行。所以,语句覆盖率和分支覆盖率无法达到100%。

单项选择题
单项选择题