0

我正在尝试计算我的软件的圈复杂度,但我有点困惑。据我了解,这是覆盖整个软件需要测试的路径数量。通常有 if 语句和循环会导致决策并因此增加路径但是我下面的代码没有循环或 if 语句,因此它只是 1 的复杂度吗?

btn_length.addEventListener (MouseEvent.CLICK, LengthFunc);

function LengthFunc (e: MouseEvent):void
{
    gotoAndStop (1,"Scene 2");
}


btn_speed.addEventListener (MouseEvent.CLICK, SpeedFunc);

function SpeedFunc (e: MouseEvent):void
{
        gotoAndStop (1,"Scene 6");
}


btn_currency.addEventListener (MouseEvent.CLICK, CurrencyFunc);

function CurrencyFunc (e: MouseEvent):void
{
    gotoAndStop (1,"Scene 10");
}

btn_weight.addEventListener (MouseEvent.CLICK, WeightFunc);

function WeightFunc (e: MouseEvent):void
{
    gotoAndStop (1,"Scene 11");
}

btn_data.addEventListener (MouseEvent.CLICK, dataFunc);

function dataFunc (e: MouseEvent):void
{
    gotoAndStop (1,"Scene 16");
}
stop();

我相信这个类的复杂度也为 1。

import fl.data.DataProvider;

var dpcurr:DataProvider = new DataProvider();
var fromVal:Number;
var toVal:Number;
var inputValcurr:Number
var resultValcurr:Number;
input_txt.restrict = "0-9\\.\\";

dpcurr.addItem( { label: "EUR, Euro", data: 1.18 });
dpcurr.addItem( { label: "GBP, British Pound", data: 1 });
dpcurr.addItem( { label: "USD, US Dollar", data:1.54});


fromList.dataProvider = dpcurr; 
toList.dataProvider = dpcurr;

fromList.addEventListener(Event.CHANGE, calculateResultcurr);
toList.addEventListener(Event.CHANGE, calculateResultcurr);
input_txt.addEventListener(Event.CHANGE, calculateResultcurr);

fromList.selectedIndex = 0;
toList.selectedIndex = 2;

fromVal = fromList.selectedItem.data;
toVal = toList.selectedItem.data;

function calculateResultcurr(e:Event):void{
fromVal = fromList.selectedItem.data;
toVal = toList.selectedItem.data;
inputValcurr = Number(input_txt.text);
resultValcurr = inputValcurr * (fromVal / toVal);

convert_btn.addEventListener(MouseEvent.­CLICK, convertcurr);

function convertcurr(evt:MouseEvent):void {
result_txt.text = resultValcurr.toString()}
}

home_btn. addEventListener (MouseEvent. CLICK, homecurr);

function homecurr ( e: MouseEvent ): void {
    gotoAndStop (1, "Scene 1" );
    }
stop();

如果有人可以让我知道我是对还是错,我将不胜感激。这是一个 Flash 项目,因此代码是用 ActionScript 3 编写的。

4

2 回答 2

0

是的,只要您的代码中没有任何控制语句(if、else、while、for、do、break 和 && 等),则代码中只有一条路径,因此圈数为 1。

于 2013-09-17T09:45:16.673 回答
0

圈复杂度由决策密度驱动。决策密度越高,复杂度越高。如果您没有嵌入式决策,则循环复杂度将为 1。与代码大小仅存在关联关系,但与决策密度存在因果关系。在 Tom McCabe 的研究中,他表明一旦 Cyclomatic Complexity 超过 10,模块就会变得容易出错,并且随着 Cyclomatic Complexity 数线性上升,错误倾向呈指数上升。当模块复杂度变得太高时,模块变得不可测试、不可维护和不可记录。将圈复杂度分析与 Fagan Inspections 结合使用是一种非常强大的组合,可以生成非常高质量的软件,并降低总开发成本。圈复杂度评估代码的结构(复杂度图为您提供了可以描述为代码骨架的图片),Fagan 检查解决了代码的功能正确性。仅仅使用一个分析器,它可以为您提供循环复杂度数,而没有其他任何东西,它几乎没有一个还可以生成复杂度图的分析器那么有用。

于 2013-12-06T15:23:20.460 回答