阅读以下技术说明和C语言代码,根据要求回答问题1至问题6。
【说明】
有两个进程(编号分别为0和1)需要访问同一个共享资源。为了解决竞争条件(race condition)的问题,需要实现一种互斥机制,使得在任何时刻只能有一个进程访问该共享资源。以下【C代码1】给出了一种实现方法。
【C代码1】
int flag[2]; /+flag数组,初始化为FALSE*/
Enter_Critical_Section(int my_task_id, int other_task_id)
{ while (flag[other_task_id]==TRUE); /*空循环语句*/
flag[my_task_id]=TRUE;
}
Exit_Critical_Section(int my_task_id, int other_task_id)
{ flag[my_task_id]=FALSE;
}
当一个进程要访问临界资源时,就可以调用【C代码1】给出的这两个函数。【C代码2】给出了进程0的一个例子。
【C代码2】
Enter_Critical_Section(0,1);
……使用这个资源……
Exit_Critical_Section(0,1);
……做其他的事情……
【问题6】 程序的环路复杂度V(G)也称为McCabe复杂性度量,它是构成基本路径集的独立路径数的上界,可依此得出应该设计的测试用例数目。请计算【C代码3】程序段的环路复杂度V(G)。 |
参考答案:
解析:V(G)=3[要点解析] 这是一道要求读者计算程序环路复杂度的试题。本题的解答思路如下。 程序的环路复杂度V(G)也称为McCabe复杂性度量,通常将它定义为程序控制流图(见图5-13)的区域数,它是构成基本路径集的独立路径数的上界,可依此得出应该设计的测试用例数目。 在进行程序的基本路径测试时,从程序的环路复杂度可导出程序基本路径集合中的独立路径条数,以确保程序中每个可执行语句至少执行一次所必须的测试用例数目的上界。 计算控制流图环路复杂性V(G)的一种简单方法是:V(G)=(区域数)=(判断节点数)+1。阅读图5-13的程序控制流图可知,该图的判断节点数为2个((x=0)and(y>2)和(x<1)or(y=1)),因此【C代码3】程序段的环路复杂度V(G)=2+1=3。