已知C源程序如下:
/ * A simple mailing list example using an array of structures. */
#include<stdion. h>
#include<stdlib. h>
define MAX 4
struct adck {
char name[30];
char street[40];
char city[20];
unsigned long int zip;
)addr_l ist[MAX];
void init_list(void),enter(void);
void deleteAddr(void),list(void);
int menu_select(void),find_free(void);
int main(void)
{
char choice;
init_list();/ * initialize the structure array * /
for(;;){
choice=menu_select();
switch(choice){
case 1:enter();
break;
case 2:deleteAddr();
break;
case 3:list();
break;
case 4:exit(0);
}
}
return 0;
}
/ * Initialize the list. */
void init list(void)
{
register int t;
for(t=0;t<MAX;++t)addr_list[t],name[0]=\0;
}
/ * Get a menu selection. * /
Int menu_select(void)
{
char s[80];
int c;
printf("1. Enter a namekn");
printf("2. Delete a name\n"):
printf("3. List the file\n");
printf("4. Quitkn"):
do{
printf("\nEnter your choice:");
gets(S);
c=atoi(s):
}while(c<1 || c>4);
return c;
}
/ * Input addresses into the list. * /
void enter(void)
{
int slot;
char s[80];
slot=find_free();
if(slot==-1){
printf("\nList Full"):
return;
}
printf("Enter name:");
gets(addr_list[slot]. name);
printf("Enter street:");
gets(addr_list[slot]. street);
printf("Enter city:");
gets(addr_list[slot]. city);
printf("Enter zip:");
gets(s);
addr_list[slot]. zip=strtoul(s,\0,10);
}
/ * Find an unused structure. * /
int find_free(void)
{
register int t;
for(t=0;addr_list[t]. name[0]&&t<MAX;++t);
if(t==MAX)return-1:/ * no slots free* /
return t;
}
/ * Delete an address. * /
void deleteAddr(void)
{
register int slot;
char s[80];
printf("enter record# :");
gets(s);
slot=atoi(s):
if(slot>=0&&slot<MAX)
addr_list[slot]. name[0]=\0;
}
/*Display the list on the screen. */
void list(void)
{
register int t:
for(t=0;t<MAX;++t){
if(addr_list[t]. name[0]){
printf("%s\n",addr_list[t]. name);
printf("%s\n",addr_list[t]. street);
printf("%s\n",addr_list[t]. city);
printf("%lu\n",addir_list[t]. zip);
}
}
printf("\n\n");
}
设计一组测试用例,使该程序所有函数的语句覆盖率尽量达到100%。如果认为该程序的语句覆盖率无法达到100%,需说明原因。 |
参考答案:
设计测试用例时,关键需要注意将t的值达到Max,即起码要输入四个name才行,这样当t==Max才能为真,才可以执行相应的分支语句。 具体输入如下: 输入四个name:1 小明 凤凰街 南京 210000 1 小红 南京路 上海 120000 1 王明 达成路 上海 120000 1 李明 南京路 北京 100000 打算输入第五个:1 删除一个name:2 小明 列出所有: 3 退出: 4 这样,程序中每一条语句都能够被执行。 上述测试用例能够使每条语句均执行,故语句覆盖率能够达到100%。