【软考-软件设计师-历年真题-2013年上半年上午基础知识】
软件的复杂性主要体现在程序的复杂性。(30)是度量软件复杂性的一个主要参数。若采用McCabe度量法计算环路复杂性,则对于下图所示的程序图,其环路复杂度为(31)。
(30)A.代码行数 B.常量的数量 C.变量的数量 D.调用的库函数的数量
(31)A.2 B.3 C.4 D.5
【答案】A C
【解析】本题考查软件复杂性方面的基础知识。
软件复杂性度量是软件度量的一个重要分支。对于软件复杂性度量的主要参数有:
•规模,即总共的指令数,或源程序行数。
•难度,通常由程序中出现的操作数的数目所决定的量来表示。
•结构,通常用与程序结构有关的度量来表示。
•智能度,即算法的难易程度。
软件复杂性主要表现在程序的复杂性。程序的复杂性主要指模块内程序的复杂性。
McCabe度量法是一种基于程序控制流的复杂性度量方法。McCabe复杂性度量又称为环路度量,它认为程序的复杂性很大程度上取决于控制的复杂性。
单一的顺序程序结构最为简单,循环和选择所构成的环路越多,程序就越复杂。
这种方法以图论为工具,先画出程序图,然后用该图的环路数作为程序复杂性的度量值。
程序图是退化的程序流程图,也就是说,把程序流程图中每个处理符号都退化成一个结点,原来连接不同处理符号的流线变成连接不同点的有向弧,这样得到的有向图就叫做程序图。
程序图仅描述程序内部的控制流程,完全不表现对数据的具体操作以及分支和循环的具体条件。
根据图论,在一个强连通的有向图G中,环的个数V(G)由以下公式给出:
V(G) = m - n + 2p
其中,V(G)是有向图G中的环路数,m是图G中弧的个数,n是图G中的结点数, P是G中的强连通分量个数。
在一个程序中,从程序图的入口点总能到达图中的任何一个结点,因此,程序总是连通的,但不是强连通的。为了使程序图成为强连通图,从图的入口点到出口点加一条用虚线表示的有向边,使图成为强连通图,这样就可以使用上式计算环路复杂性了。
对于题目中的程序图,其中结点数n = 9,弧数m=ll, p=l,则有:
V(G) = m-n+2p =11-9+2 = 4
即McCabe环路复杂的度量值为4。