复杂性和可及性之间是否存在关联?


18

我最近在uni上研究了循环复杂度(McCabe)和软件的可达性。今天,我的讲师说这两个指标之间没有关联,但事实确实如此吗?

我认为肯定会有一定的相关性,因为较不复杂的程序(从我们看过的很少的程序中)在可访问性方面似乎有“更好”的结果。

有谁知道尝试同时查看这两个指标的情况,如果没有,那么对于找到大量程序的复杂性和可访问性而言,在哪里找到数据的好地方呢?

Answers:


2

我最近在uni上研究了循环复杂度(McCabe)和软件的可达性。今天,我的讲师说这两个指标之间没有关联,但事实确实如此吗?

实际上,是和不是。

首先,提醒一下,用于循环复杂度的McCabe度量是在控制流程图上计算的,在该流程图中,您将源代码抽象为一个有向图,其中基本块或语句是节点以及它们之间的过渡(通过正常的控制流向下)或在有条件的跳跃和循环情况下)处于边缘。这里的圈复杂性可以粗略地(如果您认为您的整个程序没有隔离的代码,即您的图形已连接)视为边数与节点数之差。

CC = E - N

可达性问题是图论中的一个常见问题,可以用以下方式表示:给定两个节点A和B,节点B是从节点A可以到达的,即一个到达B可以从A开始并正确跟随图的边缘方向?因此,它还是适用于控制流程图而不是代码的度量。

有几种方法可以将此问题应用于控制流程图。一种方法是所谓的“变量可达性分析”,这意味着对于给定的变量,分析确定在某个程序点其值是否仍然可用(此技术在软件分析中也称为切片)。我还发现只有一些文章将这个术语(通常是可达性问题)用于多线程应用程序

基本上可以看到CC与可达性之间的某种相关性:随着CC的增加,节点上边的比例也增加,即使在有向图的情况下边的方向也很重要,人们可以推测出边的数量最终导致图形中可用路径的增加,从而通过节点之间的直接或间接连接提高可达性。因此,答案是肯定的

另一方面,在多线程环境中的可到达性这一概念需要对所谓的超图进行分析-这并不是那么简单。CC的增加(这里称为“ 同步复杂性 ”)可能导致软件出现死锁的可能性更高,从而降低某些节点/代码段的可达性。因此,“否”在这里也是一个有效的答案


1

我不熟悉可达性,但是如果它是无法执行的代码路径的量度,那么循环复杂性应该是其上限。


0

对此可能会有一些统计数据,但是我想说这没有相关性,因为一个不依赖另一个,并且在软件系统的设计中还可以选择消除这种情况。

就现实世界数据而言,可能存在很强的相关性,但这可能是由于设计不良的软件系统无法消除这种相关性所致。由于缺乏图论知识,这可能是偶然的关联。


1
一个依赖于另一个是因果关系,而不是相关性。
JeffO
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.