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

循環的複雑度は、意思決定密度によって決まります。意思決定密度が高いほど、複雑さが増します。決定が埋め込まれていない場合、Cyclomatic Complexity は 1 になります。コード サイズとの関連関係のみがありますが、決定密度との因果関係があります。Tom McCabe の研究では、Cyclomatic Complexity が 10 を超えると、モジュールがエラーを起こしやすくなり、Cyclomatic Complexity の数値が直線的に上昇するにつれて、エラーが発生しやすくなることを示しています。モジュールの複雑さが高くなりすぎると、モジュールはテスト、保守、および文書化できなくなります。サイクロマティック複雑度分析を Fagan インスペクションと組み合わせて使用​​することは、非常に高品質のソフトウェアを生成するだけでなく、総開発コストを削減するための非常に強力な組み合わせです。Cyclomatic Complexity はコードの構造を評価し (複雑さのグラフは、コードのスケルトンとして説明できるものを示します)、Fagan Inspections はコードの機能の正確性に対処します。Cyclomatic Complexity 数値を提供するアナライザーを使用するだけでは、複雑度グラフも生成するアナライザーほど有用ではありません。

于 2013-12-06T15:23:20.460 に答える
0

はい、コードに制御ステートメント (if、else、while、for、do、break、&& など) がない限り、コードを通る唯一のパスがあるため、循環数は 1 です。

于 2013-09-17T09:45:16.673 に答える