Cyclomatic ရှုပ်ထွေးသော – အဘယ်အရာသည်နှင့်အဘယ်ကြောင့်သင်ကဂရုစိုက်သင့်သလော
Cyclomatic ရှုပ်ထွေးသောကဘာလဲ?
(စ CCN, v (က G), သို့မဟုတ် McCabe ရှုပ်ထွေးအဖြစ်လူသိများ) Cyclomatic ရှုပ်ထွေးနေတဲ့တော်တော်ရိုးရှင်းသောမက်ထရစ်တို့အတွက်ကြီးမားတဲ့ရှုပ်ထွေးအသံနာမည်ဖြစ်ပါတယ်။ မီတာသင်အတော်ကြာအဓိပ္ပာယ်ပေးရမယ့်, တကယ်တော့ဒါဟာကျွန်မ & # 39 နိုင်အောင်ရိုးရှင်းပါသည်။ သငျသညျအဘယျသို့များအတွက်ခံစားရရှိရန်စတင်နိုင်အောင်သင်တို့ကိုလည်း CCN ဂရုစိုက်သင့်ပါတယ်ဘာကြောင့်အကြောင်းပြောဆိုနှင့်သင်အနည်းငယ်ဥပမာပေးကြည့်; သင်အခြားလူများ 🙂 ကျွန်မ & # 39 ကရှင်းပြတဲ့အခါမှာအသံချင်ဘယ်လောက်စမတ်ဆုံးဖြတ်နိုင်သောလမ်း အမျိုးမျိုးသော cyclomatic ရှုပ်ထွေးနံပါတ်များကိုအဖြစ်မှန်အတွက်မှဘာသာပြန်ဆို။
cyclomatic ရှုပ်ထွေးကြောင့်မယုံနိုင်လောက်အောင်အသုံးမဝင်ကြောင်းရိုးရှင်းလို့သည်ဟုမထင်ကြနှင့်။ ငါ & # 39 လူအပေါင်းတို့သည်မက်ထရစ်ထဲက; software ကိုဖွံ့ဖြိုးဆဲနှင့်ပိုမိုကောင်းမွန် software ကိုတညျဆောကျဖို့ဘယ်လို Fortune မဂ္ဂဇင်း 500 ကုမ္ပဏီများကအကြံပေး၏နောက်ဆုံးအနှစ် 30 ကျော်ကိုအသုံးပြုပါ, cyclomatic ရှုပ်ထွေးငါလူတို့နှင့်အတူ start အကြံပေးပထမလေးမက်ထရစ်တစ်ခုဖြစ်သည်။
ငါကပုံမှန်လူတစ်ဦးမှ cyclomatic ရှုပ်ထွေးရှင်းပြဖို့ဖြစ်လျှင်ကိုယ့်ကြောင့်ကုဒ်တစ်ဖဲ့ကိုရခြင်းအတွက်ဆုံးဖြတ်ချက်များ၏နံပါတ်ကြောင်းသူတို့ကိုပြောပြလိမ့်မယ်။ ကကြောက်စရာအသံမထားဘူးဒါကြောင့်ကျွန်မပင် McCabe ရှုပ်ထွေးခေါ်လိမ့်မယ်။
ငါစမတ်မြည်ချင်တဲ့အခါ, ငါနည်းလမ်းများ၏စီးဆင်းမှုဂရပ်မှတဆင့် linearly လွတ်လပ်သောလမ်းကြောင်း၏နံပါတ်အဖြစ် CCN ရှင်းပြပါ။ တစ်ဦးက tester တစ်ခုလုံးကို function ကိုအတည်ပြုရန်လိုအပ်စမ်းသပ်မှု၏နိမ့်ဆုံးအရေအတွက်သည်အတိုင်းဤစဉ်းစားပေလိမ့်မည်။ သောမတ်စ် McCabe ကုဒ်တစ်ဖဲ့ကိုရခြင်းအတွက်လိုအပ်သောစမ်းသပ်မှုများနိမ့်ဆုံးအရေအတွက်သည်ကိုဆုံးဖြတ်ရန်တစ်ပုံသေနည်းကိုဖန်တီးရန်အလုပ်လုပ်ကိုင်သောအခါတကယ်တော့, cyclomatic ရှုပ်ထွေးတီထွင်ခဲ့သည်။
နောက်ဆုံးအနေနဲ့ငါ & # 39 လျှင်, သင်တို့အားငါ function ကို & # 39 တာက function ကို၏ v (G) ကိုတွက်ချက်ပြောချင်နေတဲ့သင်္ချာ geek ဖို့ပြောနေတာပါ; s ကိုထိန်းချုပ်စီးဆင်းမှုဂရပ်များနှင့်အစွန်း၏နံပါတ်ကနေရှိပါတယ် vertices ၏နံပါတ်နုတ်နှင့် ထို့နောက် 2. ထည့်သွင်းယခုသင်သည်နာမတော်ကိုအမှီ ပြု. v (G) မှလာဘယ်မှာမှန်းနိုင်ပေမည်။
အဘယ်ကြောင့်ငါ Cyclomatic ရှုပ်ထွေးဂရုစိုကျသငျ့သလော
မည်သို့ပင်သင် cyclomatic ရှုပ်ထွေးဖော်ပြရန်မည်သို့, တဦးတည်းအရာကအမြဲအတူတူပင်ဖြစ်ပါသည်။ အောက်ပိုင်းနံပါတ်များကိုပိုကောင်းဖြစ်ကြသည်။
ပိုမိုမြင့်မားသောနံပါတ်များ, မှားယှငျးသှားဖို့ကပိုဆိုလိုပိုပြီးစမ်းသပ်ဖို့နှင့်ပြုစုသူစာဖတ်ခြင်းသို့မဟုတ်ပြောင်းလဲနေတဲ့ code တစ်ခုခုလွဲချော်မည်ကိုတစ်ဦးပိုမိုမြင့်မားဖြစ်နိုင်ခြေ။ ဤအရာအားလုံးသည်ပိုပြီး bug တွေနှင့်တစ်ဦးပိုမိုမြင့်မား CCN နှင့်အတူကုဒ်ထဲမှာနှေးကွေးဖှံ့ဖွိုးတိုးဖို့ဦးဆောင်လမ်းပြ။ ဒီသက်သေပြဘို့ Cyclomatic ရှုပ်ထွေး Metric အသုံးပြုခြင်းတစ်ဦးကစမ်းသပ်ခြင်းနည်းလမ်း: စနစ်ကျသောစမ်းသပ်ခြင်း – သင်အမှန်တကယ်စိတ်မရှည် (သို့မဟုတ်သင်ရုံအစိုးရအေဂျင်စီများအဘို့ကျမ်းစာ၌ရေးထားနည်းပညာပိုင်းဆိုင်ရာစာရွက်စာတမ်းများကိုဖတ်ရှုခံစားပျော်မွေ့) ရောက်နေတယ်ဆိုရင်သင် NIST အထူးထုတ်ဝေမှု 500-235 ဖတ်နိုင်သည်။ နာကျင်မှုငါ & # 39 များအတွက်ထိုကဲ့သို့သောမြင့်သောသည်းခံစိတ်မရှိဘဲသင်တို့တွင်သူတို့အဘို့; ll အခြားဆောင်းပါးထဲမှာအစီရင်ခံစာ၏အရေးကြီးသော-bits ကိုဖုံးလွှမ်း။
Cyclomatic ရှုပ်ထွေးသော၏ဥပမာကျနော်တို့ဂျာဗား၌ရေးထားလျက်ရှိ၏ထိုဂန္မင်္ဂလာပါကမ္ဘာ့ဖလားအစီအစဉ်၏အနည်းငယ် ပို. ပို. ရှုပ်ထွေးသောဗားရှင်းမှာကြည့်ခြင်းအားဖြင့်စတင်ပါလိမ့်မယ်။
code ကိုမ conditional သို့မဟုတ်ကွင်းရှိပါတယ်ဘာဖြစ်လို့လဲဆိုတော့ပထမဦးဆုံး version ကိုအဓိကနည်းလမ်း 1 cyclomatic ရှုပ်ထွေးပါတယ်။
အများပြည်သူလူတန်းစားမင်္ဂလာပါ {အများပြည်သူငြိမ်ပျက်ပြယ်အဓိက (String () args) {
System.out.println ( "မင်္ဂလာပါကမ္ဘာ့ဖလား!");
}
}
ဒါဟာလာမယ့် version ကိုသငျသညျအဓိကနည်းလမ်းတစ်ခုအငြင်းအခုံလွန်နှငျ့သငျခဲ့တယျဆိုပါကတစ်ဦးကွဲပြားခြားနားမက်ဆေ့ခ်ျကိုရိုက်ထုတ်မယ်ဆိုရင်ကြည့်ဖို့ check လုပ်ပေးပါတယ်။ ဒီဗားရှင်းကြောင့်နည်းလမ်းအတွက်ဆိုပါကတစ်ခုတည်းကြေညာချက် 2 တစ် cyclomatic ရှုပ်ထွေးပါတယ်။
အများပြည်သူလူတန်းစားမင်္ဂလာပါ {အများပြည်သူငြိမ်ပျက်ပြယ်အဓိက (String () args) {
{(== 0 args.length) လျှင်
System.out.println ( "မင်္ဂလာပါကမ္ဘာ့ဖလား!");
} အခြား {
System.out.println ( "မင်္ဂလာပါ" + args (0) + "!");
}
}
}
မင်္ဂလာပါကမ္ဘာ့ဖလား၏ကျွန်ုပ်တို့၏နောက်ဆုံးဗားရှင်း 3 ဖို့ cyclomatic ရှုပ်ထွေးပြုစုပျိုးထောင်တစ်ဦးလျှင်တစ်ဦးသည်အခြားကြေညာချက်ရှိပါတယ်။
အများပြည်သူလူတန်းစားမင်္ဂလာပါ {အများပြည်သူငြိမ်ပျက်ပြယ်အဓိက (String () args) {
{(== 0 args.length) လျှင်
System.out.println ( "မင်္ဂလာပါကမ္ဘာ့ဖလား!");
(== 1 args.length) လျှင်} အခြား {
System.out.println ( "မင်္ဂလာပါ" + args (0) + "!");
} အခြား {
System.out.println ( "Aargh မှဟဲလိုပြောလွန်းများစွာသောလူ!");
}
}
}
သူများသည်အားလုံးတော်တော်လေးရိုးရှင်းတဲ့ဖြစ်ကြသည်။ ငါတို့သည်အဘယ်ကြောင့်အချို့အစစ်အမှန်ကမ္ဘာကကုဒ်မှအပေါ်ကိုရွှေ့နှင့်ငါ့ညစ်ပတ်ရေချိုးခန်းတစ်နည်းနည်းတင်ဆက်နေဖြင့်အချို့သောပျော်စရာရှိသည်မဟုတ်ကြဘူး။ ဤတွင်အတွက်အများဆုံးရှုပ်ထွေးနည်းလမ်းဖြစ်ပါသည် Panopticode ငါအချို့နှစ်ပေါင်းပြန်ရေးသားခဲ့သည်မှာ open source စီမံကိန်းကို။ ဤနည်းလမ်းကိုတစ် CCN ၏မြင့်မားနှင့်အတူမဆိုနည်းလမ်းမှာတန်ဖိုးရှိရှာဖွေနေခြင်းဖြစ်သည် 11 တစ် cyclomatic ရှုပ်ထွေးရှိပါတယ် အလွန် ဒါဟာရိုးရှင်းနိုင်ပါတယ်လျှင်ဂရုတစိုက်ကြည့်ရှုရန်။
boolean argumentsCouldMatch (PanopticodeMethod panopticodeMethod, String elementMethodName) {စာရင်း methodArguments;
PanopticodeClass parentClass;
string () ငြင်းခုံ;
အငြင်းပွားမှုများ = parseArguments (elementMethodName);
methodArguments = panopticodeMethod.getArguments ();
parentClass = panopticodeMethod.getParentClass ();
လျှင် (panopticodeMethod.isConstructor () && parentClass.isInnerClass () &&! parentClass.isStatic ()) {
string () originalArguments = အငြင်းပွားမှုများ;
အငြင်းပွားမှုများ = သစ်ကို String (originalArguments.length - 1);
System.arraycopy (originalArguments, 1, အငြင်းပွားမှုများ, 0, originalArguments.length - 1);
}
လျှင် (parentClass.isEnum () && panopticodeMethod.isConstructor ()) {
string () originalArguments = အငြင်းပွားမှုများ;
အငြင်းပွားမှုများ = သစ်ကို String (originalArguments.length - 2);
System.arraycopy (originalArguments, 2, အငြင်းပွားမှုများ, 0, originalArguments.length - 2);
}
လျှင် (arguments.length! = methodArguments.size ()) {
မှားယွင်းသောပြန်လာ;
}
ဈ; (ဈ 0 င် = int များအတွက်
Ugh ။ ငါ & # 39; သင်တွေ့မြင်ခဲ့ရသည်စိတ်မကောင်း့။ ငါရှုပ်ထွေးသောအရာတစ်ခုခုကိုရေးအခါတိုင်းငါကကောင်းစွာယူနစ်ကိုစမ်းသပ်ဖြစ်ပါတယ်သေချာသေချာပါစေ။
အရမ်းအမြင့်ကိုဘယ်လိုမြင့်မားလား?
နောက်ဆုံးနည်းလမ်းအဖြစ်ကျွန်တော်တို့ဟာ 10 တစ် cyclomatic ရှုပ်ထွေးလှည့်ပတ်ထရတစ်ချိန်က code ကိုရုပ်ဆိုးရရှိသွားတဲ့ပြသထားတယ်။ ပြထားတဲ့နည်းလမ်းနေဆဲတော်တော်လေးဖတ်လို့လွယ်ဖြစ်ပါသည်, သို့သော်မှန်ကန်လုံးဝသေချာစေရန်လိုအပ်သောစမ်းသပ်ငါ & # 39 ထက်အများကြီးပိုမိုမြင့်မားလျက်ရှိ၏နှင့်အတူမီတာအဆင်ပြေ။ ငါ့ကိုယ်ပိုင်စီမံကိန်းများတွင်ကျွန်မ 5 သို့မဟုတ်ပိုမိုမြင့်မားတဲ့ CCN နှင့်ငါ code ကိုဖွင့်သန့်ရှင်းရေးအကူအညီတောငျးရိုးရှင်းမည်သို့မသိရ 10 သို့မဟုတ်ပိုမိုမြင့်မားတဲ့ cyclomatic ရှုပ်ထွေးနှင့်အတူဘာမှကိုရှာဖွေလျှင်မည်သည့်နည်းလမ်းကိုပြန်လည်ဆန်းစစ်။
အဆိုပါ NIST အစီရင်ခံစာအရငါမြင့်မားသော CCN မြင့်မားတစ်နေရာရာမှာ 9 နဲ့ 12 အကြားဖြစ်ခြင်းနှင့်အတူပြင်းပြင်းထန်ထန်သိသိသာသာတိုးမြှင့်ချို့ယွင်းချက်ဆက်နွယ်နေကြောင်းကြောင်း။ အစီရင်ခံတင်ပြအစောပိုင်းကအမျိုးမျိုးသောစီမံကိန်းများကိုဖော်ပြခဲ့တဲ့ သောအမှုသည်အဘယ်ကြောင့် 11 တစ် CCN နှင့်အတူနည်းလမ်းမှာရှာဖွေနေကအလိုလိုရှင်းရှင်းလင်းလင်းလုပ်သင့်ပါတယ်။
မူပိုင် 2010 – Julia Shaw
Comments are closed, but trackbacks and pingbacks are open.