ControlFlag 1.0၊ C ကုဒ်တွင် အမှားများကို ဖော်ထုတ်ရန် ကိရိယာတစ်ခု ဖြန့်ချိသည်။

Intel သည် ရှိပြီးသားကုဒ်အများအပြားကို လေ့ကျင့်သင်ကြားထားသည့် machine learning system ကို အသုံးပြု၍ အရင်းအမြစ်ကုဒ်တွင် အမှားအယွင်းများနှင့် ကွဲလွဲချက်များကို ခွဲခြားသိရှိနိုင်စေမည့် ControlFlag 1.0 tool ၏ ပထမဆုံးသော အဓိကထွက်ရှိမှုကို ထုတ်ဝေခဲ့သည်။ ရိုးရာအငြိမ်ခွဲခြမ်းစိတ်ဖြာသူများနှင့်မတူဘဲ ControlFlag သည် အဆင်သင့်လုပ်ထားသော စည်းမျဉ်းများကို မကျင့်သုံးဘဲ ဖြစ်နိုင်သည့်ရွေးချယ်မှုများအားလုံးကို ဖြည့်ဆည်းရန်ခက်ခဲသော်လည်း ရှိပြီးသားပရောဂျက်အများအပြားတွင် ဘာသာစကားအမျိုးမျိုးတည်ဆောက်မှုအသုံးပြုမှုဆိုင်ရာ စာရင်းဇယားများအပေါ် အခြေခံထားသည်။ ControlFlag ကုဒ်ကို C++ ဖြင့်ရေးသားထားပြီး MIT လိုင်စင်အောက်တွင် open source ဖြစ်သည်။

GitHub နှင့် အလားတူသော အများသူငှာ သိုလှောင်ရာနေရာများတွင် ထုတ်ဝေထားသော open-source ပရောဂျက်များ၏ လက်ရှိကုဒ်ခင်းကျင်းမှု၏ ကိန်းဂဏန်းပုံစံတစ်ခုကို တည်ဆောက်ခြင်းဖြင့် စနစ်အား လေ့ကျင့်သင်ကြားပေးပါသည်။ လေ့ကျင့်ရေးအဆင့်တွင်၊ စနစ်သည် ကုဒ်အတွင်း တည်ဆောက်မှုများအတွက် ပုံမှန်ပုံစံများကို ဆုံးဖြတ်ပေးပြီး ပရိုဂရမ်အတွင်းရှိ ကုဒ်လုပ်ဆောင်မှု စီးဆင်းမှုကို ရောင်ပြန်ဟပ်ကာ ဤပုံစံများကြားတွင် ချိတ်ဆက်မှု၏ syntactic tree တစ်ခုကို တည်ဆောက်သည်။ ရလဒ်အနေဖြင့်၊ ခွဲခြမ်းစိတ်ဖြာထားသော အရင်းအမြစ်ကုဒ်များအားလုံး၏ ဖွံ့ဖြိုးတိုးတက်မှုအတွေ့အကြုံကို ပေါင်းစပ်ထားသည့် ကိုးကားဆုံးဖြတ်ချက်ချသည့်သစ်ပင်ကို ဖွဲ့စည်းထားပါသည်။ ပြန်လည်သုံးသပ်မှုအောက်ရှိ ကုဒ်သည် ကိုးကားချက်ဆုံးဖြတ်ချက်သစ်ပင်ကို စစ်ဆေးသည့် ပုံစံများကို ခွဲခြားသတ်မှတ်သည့် အလားတူလုပ်ငန်းစဉ်ကို လုပ်ဆောင်သည်။ အနီးနားအကိုင်းအခက်များနှင့် ကြီးမားသော ကွဲလွဲမှုများသည် စစ်ဆေးသည့်ပုံစံတွင် ကွဲလွဲမှုတစ်ခုရှိနေခြင်းကို ဖော်ပြသည်။

ControlFlag 1.0၊ C ကုဒ်တွင် အမှားများကို ဖော်ထုတ်ရန် ကိရိယာတစ်ခု ဖြန့်ချိသည်။

ControlFlag ၏စွမ်းဆောင်နိုင်မှုများ၏ ဥပမာအနေဖြင့်၊ developer များသည် OpenSSL နှင့် cURL ပရောဂျက်များ၏ အရင်းအမြစ်ကုဒ်များကို ခွဲခြမ်းစိတ်ဖြာခဲ့သည်-

  • မမှန်သောတည်ဆောက်မှုများ “(s1 == NULL) ∧ (s2 == NULL)” နှင့် “(s1 == NULL) | (s2 == NULL)" ၊ အသုံးများသောပုံစံ "(s1 == NULL) || (s2 == NULL)"။ ကုဒ်သည် “(-2 == rv)” (အနှုတ်သည် စာစီစာကုံး) နှင့် “BIO_puts(bp, “:”) <= 0)” (အသုံးအနှုန်းများတွင် ကွဲလွဲချက်များကို ခွဲခြားသတ်မှတ်ထားသည် function က "== 0") ဖြစ်သင့်တယ်။
  • cURL တွင်၊ ကိန်းဂဏာန်းအမျိုးအစားပါရှိသော်လည်း boolean တန်ဖိုး TRUE နှင့် နှိုင်းယှဉ်ထားသည့် ဖွဲ့စည်းပုံဒြပ်စင် "s->keepon" ကို အသုံးပြုသည့်အခါ static ခွဲခြမ်းစိတ်ဖြာသူများမှ မတွေ့နိုင်သော အမှားတစ်ခု တွေ့ရှိခဲ့သည်။

ControlFlag 1.0 ဗားရှင်း၏ အင်္ဂါရပ်များထဲတွင်၊ C ဘာသာစကားအတွက် စံနမူနာများအတွက် အပြည့်အဝ ပံ့ပိုးမှု နှင့် အခြေအနေအရ “if” စကားရပ်များတွင် ကွဲလွဲချက်များကို ရှာဖွေတွေ့ရှိနိုင်မှု ပါဝင်သည်။ ဥပမာအားဖြင့်၊ ကုဒ်အပိုင်းအစကို ခွဲခြမ်းစိတ်ဖြာသည့်အခါ “if (x = 7) y = x;” ကိန်းဂဏာန်းတန်ဖိုးများကို နှိုင်းယှဉ်ရန်အတွက် "if" ကြေငြာချက်သည် အများအားဖြင့် "variable == number" တည်ဆောက်မှုကို အသုံးပြုကြောင်း ဆုံးဖြတ်မည်ဖြစ်ပြီး၊ ထို့ကြောင့် "if" expression ရှိ "variable = number" သည် typo ကြောင့်ဖြစ်နိုင်ချေများပါသည်။ ဤကိရိယာတွင် GitHub တွင် ရှိပြီးသား C ဘာသာစကား သိုလှောင်ရာများကို ဒေါင်းလုဒ်လုပ်ပြီး မော်ဒယ်တည်ဆောက်ရန် ၎င်းတို့ကို အသုံးပြုနိုင်သည့် script တစ်ခုပါ၀င်သည်။ အဆင်သင့်လုပ်ထားသော မော်ဒယ်များလည်း ရနိုင်သောကြောင့် ကုဒ်ကို ချက်ချင်းစစ်ဆေးနိုင်မည်ဖြစ်သည်။

source: opennet.ru

မှတ်ချက် Add