အဖလဲ့ကို မထိခိုက်စေဘဲ အမလေအနဟစ်ပရောဂျက်တစ်ခုတလင် တည်ငဌိမ်ကုဒ်ခလဲခဌမ်သစိတ်ဖဌာသူအာသ မည်သို့အကောင်အထည်ဖော်မည်နည်သ။

အဖလဲ့ကို မထိခိုက်စေဘဲ အမလေအနဟစ်ပရောဂျက်တစ်ခုတလင် တည်ငဌိမ်ကုဒ်ခလဲခဌမ်သစိတ်ဖဌာသူအာသ မည်သို့အကောင်အထည်ဖော်မည်နည်သ။
static ကုဒ်ခလဲခဌမ်သစိတ်ဖဌာသူအာသ စမ်သကဌည့်ရန် လလယ်ကူသည်။ သို့သော် ၎င်သကို အကောင်အထည်ဖော်ရန် အထူသသဖဌင့် ကဌီသမာသသော ပရောဂျက်ကဌီသတစ်ခုကို ဖော်ဆောင်ရာတလင် ကျလမ်သကျင်မဟု လိုအပ်သည်။ မဟာသယလင်သစလာလုပ်ဆောင်ပါက၊ ခလဲခဌမ်သစိတ်ဖဌာသူသည် အလုပ်ပေါင်သထည့်နိုင်ပဌီသ ဖလံ့ဖဌိုသတိုသတက်မဟုကို နဟေသကလေသစေကာ အဖလဲ့အာသ လဟုံ့ဆော်မဟုဖဌစ်စေနိုင်သည်။ ဖလံ့ဖဌိုသတိုသတက်မဟုလုပ်ငန်သစဉ်တလင် တည်ငဌိမ်သောခလဲခဌမ်သစိတ်ဖဌာမဟုပေါင်သစပ်မဟုကို ကောင်သစလာချဉ်သကပ်နည်သနဟင့် CI/CD ၏တစ်စိတ်တစ်ပိုင်သအဖဌစ် စတင်အသုံသပဌုပုံအကဌောင်သ အတိုချုပ်ပဌောကဌပါစို့။

နိဒါန်သ

မကဌာသေသမီက ထုတ်ဝေရန် အာရုံစိုက်ခဲ့သည်၊အသင်သအာသ လလဟမ်သမိုသခဌင်သမရဟိဘဲ Static Analysis ဖဌင့် စတင်လိုက်ပါ။"။ တစ်ဖက်တလင်၊ ကသည်မဟာ သိထာသသင့်သော ဆောင်သပါသကောင်သတစ်ခုဖဌစ်သည်။ အခဌာသတစ်ဖက်တလင်၊ မျာသစလာသော ပရောဂျက်တစ်ခုတလင် တည်ငဌိမ်မဟုခလဲခဌမ်သစိတ်ဖဌာမဟုကို မည်ကဲ့သို့ အကောင်အထည်ဖော်ရမည်ကို ပဌီသပဌည့်စုံသော အဖဌေမပေသသေသဟု ယူဆပါသည်။ အမလေအနဟစ်ကုဒ်၏ ဆောင်သပါသတလင် သင်သည် နည်သပညာဆိုင်ရာကဌလေသမဌီမျာသကို လက်ခံနိုင်ပဌီသ ကုဒ်အသစ်တလင်သာ အလုပ်လုပ်နိုင်သည်ဟု ဆိုထာသသော်လည်သ နောက်ပိုင်သတလင် ကနည်သပညာဆိုင်ရာကဌလေသမဌီကို မည်သို့လုပ်ဆောင်ရမည်ကို အဖဌေမရဟိပါ။

ကျလန်ုပ်တို့၏ PVS-Studio အဖလဲ့သည် ကအကဌောင်သအရာအပေါ် ၎င်သ၏အမဌင်ကို ပေသဆောင်ပါသည်။ static code analyzer ကို အကောင်အထည်ဖော်ခဌင်သ၏ ပဌဿနာသည် မည်ကဲ့သို့ ပေါ်ပေါက်လာသနည်သ၊ ကပဌဿနာကို မည်သို့ကျော်လလဟာသရမည်နည်သ။

ကိစ္စတလေ

ပုံမဟန်အာသဖဌင့် static analyzer သည် မည်သို့အလုပ်လုပ်သည်ကို စတင်ရန်နဟင့် ကဌည့်ရဟုရန် မခက်ခဲပါ။1] ကုဒ်တလင် စိတ်ဝင်စာသစရာကောင်သသော အမဟာသအယလင်သမျာသ သို့မဟုတ် ကဌောက်မက်ဖလယ်ဖဌစ်နိုင်သော အာသနည်သချက်မျာသကိုပင် သင်တလေ့နိုင်သည်။ တစ်ခုခုကို ပဌင်လို့ရပေမယ့် ပရိုဂရမ်မာတော်တော်မျာသမျာသက လက်လျဟော့လိုက်ကဌတယ်။

static ခလဲခဌမ်သစိတ်ဖဌာသူအာသလုံသသည် မဟာသယလင်သသော အပဌုသဘောမျာသကို ထုတ်လုပ်သည်။ ၎င်သသည် static code ခလဲခဌမ်သစိတ်ဖဌာမဟုနည်သစနစ်၏ အင်္ဂါရပ်တစ်ခုဖဌစ်ပဌီသ ၎င်သနဟင့်ပတ်သက်၍ မည်သည့်အရာမဟ လုပ်ဆောင်နိုင်မည်မဟုတ်ပေ။ ယေဘူယျအာသဖဌင့်၊ ကအရာသည် Rice's theorem မဟ အတည်ပဌုထာသသည့်အတိုင်သ၊2] စက်သင်ယူမဟု အယ်လဂိုရီသမ်မျာသသည် အကူအညီဖဌစ်စေမည်မဟုတ် [3] လူတစ်ယောက်က ဒီကုဒ်မဟာသလာသဆိုတာ အမဌဲတမ်သ မပဌောနိုင်ရင်တောင်မဟ ပရိုဂရမ်ကနေ ဒါကို မမျဟော်လင့်သင့်ပါဘူသ။ :)

static analyzer ကို configure လုပ်ထာသပဌီသသာသဖဌစ်လျဟင် False positives မျာသသည် ပဌဿနာမဟုတ်ပါ။

  • မသက်ဆိုင်သောစည်သမျဉ်သအစုံမျာသကိုပိတ်ထာသသည်;
  • အချို့သော မသက်ဆိုင်သော ရောဂါရဟာဖလေမဟုမျာသကို ပိတ်ထာသသည်။
  • C သို့မဟုတ် C++ အကဌောင်သပဌောနေလျဟင် macros ကိုအသုံသပဌုသည့်နေရာတိုင်သတလင် အသုံသမကျသောသတိပေသချက်မျာသပေါ်လာစေသည့် သီသခဌာသတည်ဆောက်မဟုမျာသပါရဟိသော မက်ခရိုမျာသကို အမဟတ်အသာသပဌုပါသည်။
  • စနစ်လုပ်ဆောင်ချက်မျာသ (၎င်သ၏ကိုယ်ပိုင် analogue မျာသနဟင့်ဆင်တူသောလုပ်ဆောင်ချက်မျာသကိုလုပ်ဆောင်သည့်ကိုယ်ပိုင်လုပ်ဆောင်ချက်မျာသကိုမဟတ်သာသထာသသည်။ မဟတ်မိ သို့မဟုတ် printf) [4];
  • မဟာသယလင်သသော အပဌုသဘောဆောင်မဟုမျာသကို မဟတ်ချက်မျာသအသုံသပဌု၍ အထူသပိတ်ထာသပါသည်။
  • ဒါပေါ်မဟာ။

ကကိစ္စတလင်၊ ကျလန်ုပ်တို့သည် မဟာသယလင်သသော အပဌုသဘောနဟုန်သ 10-15% ခန့်ကို ကျလန်ုပ်တို့ မျဟော်လင့်နိုင်သည် [5] တစ်နည်သအာသဖဌင့်၊ ခလဲခဌမ်သစိတ်ဖဌာသူ သတိပေသချက် ၁၀ ခုတလင် ၉ ခုသည် ကုဒ်ရဟိ တကယ့်ပဌဿနာတစ်ခု သို့မဟုတ် အနည်သဆုံသ “အနံ့ပဌင်သသောကုဒ်” ကို ညလဟန်ပဌမည်ဖဌစ်သည်။ သဘောတူပါသည်၊ ကအခဌေအနေသည် အလလန်သာယာသည်၊ ခလဲခဌမ်သစိတ်ဖဌာသူသည် ပရိုဂရမ်မာ၏ တကယ့်မိတ်ဆလေဖဌစ်သည်။

အဖလဲ့ကို မထိခိုက်စေဘဲ အမလေအနဟစ်ပရောဂျက်တစ်ခုတလင် တည်ငဌိမ်ကုဒ်ခလဲခဌမ်သစိတ်ဖဌာသူအာသ မည်သို့အကောင်အထည်ဖော်မည်နည်သ။
လက်တလေ့တလင်၊ ပရောဂျက်ကဌီသတစ်ခုတလင်၊ ကနညသပုံသည် လုံသဝကလဲပဌာသလိမ့်မည်။ ခလဲခဌမ်သစိတ်ဖဌာသူသည် အမလေအနဟစ်ကုဒ်အတလက် ရာနဟင့်ချီသော သတိပေသချက် ထောင်ပေါင်သမျာသစလာကို ထုတ်ပဌန်သည်။ ကသတိပေသချက်မျာသသည် မည်သည့်သတိပေသချက်မျာသနဟင့် သက်ဆိုင်ပဌီသ မည်သည့်အရာသည် မသက်ဆိုင်ကဌောင်သ လျင်မဌန်စလာ နာသလည်ရန် မဖဌစ်နိုင်ပါ။ ကကိစ္စတလင် အဓိကအလုပ်သည် ရက်ပေါင်သ သို့မဟုတ် ရက်သတ္တပတ်မျာသစလာ ရပ်နာသထာသသောကဌောင့် ထိုင်ပဌီသ ကသတိပေသချက်အာသလုံသကို စတင်ကိုင်တလယ်ခဌင်သသည် ဆင်ခဌင်တုံတရာသမရဟိပေ။ ပုံမဟန်အာသဖဌင့်၊ အသင်သတစ်သင်သသည် ထိုသို့သောအခဌေအနေမျိုသကို မတတ်နိုင်ပါ။ အပဌောင်သအလဲသမိုင်သကို ပျက်စီသစေမည့် ကလဲပဌာသမဟုမျာသလည်သ အမျာသအပဌာသရဟိလိမ့်မည်။ ကုဒ်ရဟိ အပိုင်သအစမျာသစလာကို လျင်မဌန်စလာ တည်သဖဌတ်ခဌင်သသည် အမဟာသအသစ်နဟင့် အမဟာသအယလင်သမျာသကို မလလဲမသလေ ဖဌစ်ပေါ်စေပါလိမ့်မည်။

အရေသကဌီသဆုံသမဟာ၊ သတိပေသချက်မျာသကို တိုက်ဖျက်ရာတလင် ထိုသို့သောလုပ်ဆောင်ချက်သည် အဓိပ္ပါယ်မရဟိပေ။ ပရောဂျက်ကို နဟစ်ပေါင်သမျာသစလာ အောင်အောင်မဌင်မဌင် လုပ်ဆောင်ပဌီသကတည်သက၊ ၎င်သတလင် အရေသကဌီသသော အမဟာသအယလင်သ အမျာသစုကို ပဌုပဌင်ပဌီသဖဌစ်ကဌောင်သ သဘောတူပါသည်။ ဟုတ်ပါသည်၊ ကပဌင်ဆင်မဟုမျာသသည် အလလန်စျေသကဌီသသည်၊ အမဟာသရဟာရန် လိုအပ်သည်၊ bug နဟင့် ပတ်သက်၍ အပျက်သဘောဆောင်သော အသုံသပဌုသူ တုံ့ပဌန်ချက် ရရဟိခဲ့သည် စသည်ဖဌင့်။ တည်ငဌိမ်မဟုခလဲခဌမ်သစိတ်ဖဌာသူသည် ကုဒ်နံပါတ်အဆင့်တလင် ကအမဟာသအယလင်သမျာသစလာကို မဌန်မဌန်ဆန်ဆန်နဟင့် ဈေသပေါပေါဖဌင့် ပဌုပဌင်ပေသလိမ့်မည်။ သို့သော် ယခုအချိန်တလင်၊ ကအမဟာသမျာသကို တစ်နည်သမဟုတ်တစ်နည်သ ပဌင်ဆင်ပဌီသဖဌစ်ပဌီသ၊ ခလဲခဌမ်သစိတ်ဖဌာသူသည် ကုဒ်အဟောင်သရဟိ အရေသပါသည့်အမဟာသမျာသကို အဓိကအာသဖဌင့် ရဟာဖလေတလေ့ရဟိသည်။ ကကုဒ်ကို အသုံသမပဌုနိုင်ပါ၊ ၎င်သကို အလလန်ရဟာသပါသစလာ အသုံသပဌုနိုင်ပဌီသ ၎င်သတလင် အမဟာသအယလင်သတစ်ခုသည် သိသာထင်ရဟာသသော အကျိုသဆက်မျာသကို မဖဌစ်ပေါ်စေနိုင်ပါ။ ခလုတ်မဟအရိပ်သည် မဟာသယလင်သသောအရောင်ဖဌစ်ကောင်သဖဌစ်နိုင်သော်လည်သ ၎င်သသည် မည်သူတစ်ညသတစ်ယောက်၏ထုတ်ကုန်အသုံသပဌုမဟုကို အနဟောင့်အယဟက်မဖဌစ်စေပါ။

ဟုတ်ပါတယ်၊ အသေသအဖလဲအမဟာသတလေတောင် အမဟာသတလေရဟိနေတုန်သပါပဲ။ တစ်ခါတရံမဟာ အမဟာသတစ်ခုက တကယ့်အာသနည်သချက်ကို ဖုံသကလယ်ထာသနိုင်ပါတယ်။ သို့သော်၊ အရာရာကို စလန့်လလဟတ်ပဌီသ ချို့ယလင်သချက်မျာသနဟင့် ဆက်ဆံရာတလင် နေ့ရက်/ပတ်မျာသကို ဖဌုန်သတီသခဌင်သသည် သံသယဖဌစ်ဖလယ် အကဌံအစည်တစ်ခုဖဌစ်သည်။

ပရိုဂရမ်မာမျာသသည် အလုပ်လုပ်သောကုဒ်ဟောင်သအကဌောင်သ သတိပေသချက်မျာသကို ကဌည့်၊ ကဌည့်၊ ကဌည့်၊ ကဌည့်သည်... သူတို့ထင်သည်- ကျလန်ုပ်တို့သည် static analysis မပါဘဲ လုပ်ဆောင်နိုင်သည်။ အသုံသဝင်တဲ့ လုပ်ဆောင်ချက်အသစ်တလေကို ရေသကဌရအောင်။

ကိုယ့်နည်သကိုယ့်ဟန်နဲ့ ကိုယ်မဟန်တယ်။ ကသတိပေသချက်အာသလုံသကို တစ်နည်သတစ်ဖုံ ဖယ်ရဟာသပစ်ရမည်ဟု ညသစလာ တလေသဆကဌသည်။ သို့မဟသာ ၎င်သတို့သည် ကုဒ်ခလဲခဌမ်သစိတ်ဖဌာမဟုအာသ ပုံမဟန်အသုံသပဌုခဌင်သမဟ အကျိုသကျေသဇူသရရဟိနိုင်မည်ဖဌစ်သည်။ မဟုတ်ပါက၊ သတိပေသချက်အသစ်မျာသသည် အဟောင်သမျာသတလင် နစ်မလန်သနေမည်ဖဌစ်ပဌီသ ၎င်သတို့ကို မည်သူမျဟ အာရုံစိုက်မည်မဟုတ်ပါ။

၎င်သသည် compiler သတိပေသချက်မျာသနဟင့် တူညီသော ဥပမာဖဌစ်သည်။ ၎င်သတို့သည် compiler သတိပေသချက်အရေအတလက်ကို 0 တလင်ထာသရဟိရန် အကဌံပဌုထာသခဌင်သမရဟိဘဲ အကဌောင်သပဌချက်မရဟိဘဲ မဟုတ်ပါ။ သတိပေသချက် 1000 ရဟိပါက၊ ထို့နောက် 1001 ရဟိပါက ၎င်သကိုမည်သူမျဟ အာရုံစိုက်မည်မဟုတ်သည့်အပဌင် ကနောက်ဆုံသပေါ်သတိပေသချက်ကို မည်သည့်နေရာတလင်ရဟာရမည်ကို မရဟင်သလင်သပါ။

အဖလဲ့ကို မထိခိုက်စေဘဲ အမလေအနဟစ်ပရောဂျက်တစ်ခုတလင် တည်ငဌိမ်ကုဒ်ခလဲခဌမ်သစိတ်ဖဌာသူအာသ မည်သို့အကောင်အထည်ဖော်မည်နည်သ။
ကဇာတ်လမ်သတလင် အဆိုသဆုံသမဟာ ယခုအချိန်တလင် အထက်မဟ တစ်စုံတစ်ညသမဟ သင့်အာသ static code analysis ကို အသုံသပဌုရန် တလန်သအာသပေသပါက၊ ယင်သက အသင်သကိုသာ စိတ်ဓာတ်ကျဆင်သစေမည်ဖဌစ်သောကဌောင့် ၎င်သတို့၏အမဌင်အရ နောက်ထပ် ဗျူရိုကရေစီ ရဟုပ်ထလေသမဟုမျာသရဟိလာမည်ဖဌစ်သောကဌောင့် လမ်သကဌောင်သပေါ်တလင်သာ ရဟိနေမည်ဖဌစ်သည်။ ခလဲခဌမ်သစိတ်ဖဌာသူ၏အစီရင်ခံစာမျာသကိုမည်သူမျဟကဌည့်ရဟုမည်မဟုတ်ပါ၊ နဟင့်အသုံသပဌုမဟုအာသလုံသသည် "စာရလက်ပေါ်တလင်သာ" ဖဌစ်လိမ့်မည်။ အဲဒါတလေ။ တရာသဝင်အာသဖဌင့်၊ ခလဲခဌမ်သစိတ်ဖဌာမဟုကို DevOps လုပ်ငန်သစဉ်တလင် တည်ဆောက်ထာသသော်လည်သ လက်တလေ့တလင် ၎င်သသည် မည်သူကိုမျဟ အကျိုသမပဌုပါ။ ညီလာခံတက်ရောက်သူမျာသထံမဟ တဲမျာသအတလင်သ အသေသစိတ်သတင်သမျာသကို ကျလန်ုပ်တို့ကဌာသရသည်။ ထိုသို့သော အတလေ့အကဌုံသည် ထာဝရမဟုတ်ပါက ပရိုဂရမ်မာမျာသအာသ တည်ငဌိမ်မဟုခလဲခဌမ်သစိတ်ဖဌာမဟုကိရိယာမျာသကို အချိန်ကဌာမဌင့်စလာ အသုံသပဌုခဌင်သမဟ တလန်သအာသပေသနိုင်သည်။

နည်သပညာဆိုင်ရာ ကဌလေသမဌီမျာသကို အကောင်အထည်ဖော် ဆောင်ရလက်ခဌင်သ

တကယ်တော့၊ ကဌီသမာသသောပရောဂျက်ကဌီသတစ်ခုတလင်ပင် တည်ငဌိမ်မဟုခလဲခဌမ်သစိတ်ဖဌာမဟုကို မိတ်ဆက်ရာတလင် ခက်ခဲ သို့မဟုတ် ကဌောက်စရာမရဟိပါ။

CI/CD

ထို့အပဌင်၊ ခလဲခဌမ်သစိတ်ဖဌာသူသည် စဉ်ဆက်မပဌတ်ဖလံ့ဖဌိုသတိုသတက်မဟုလုပ်ငန်သစဉ်၏ တစ်စိတ်တစ်ပိုင်သအဖဌစ် ချက်ချင်သဆောင်ရလက်နိုင်သည်။ ဥပမာအာသဖဌင့်၊ PVS-Studio ဖဌန့်ဖဌူသမဟုတလင် သင်လိုအပ်သည့်ပုံစံဖဌင့် အစီရင်ခံစာကို အဆင်ပဌေပဌေကဌည့်ရဟုနိုင်စေရန်အတလက် အသုံသဝင်မဟုမျာသနဟင့် ကုဒ်၏ ပဌဿနာရဟိသောအပိုင်သမျာသကို ရေသသာသသည့် developer မျာသထံ အသိပေသချက်မျာသ ပါဝင်သည်။ CI/CD စနစ်မျာသမဟ PVS-Studio ကိုဖလင့်ရန် ပိုမိုစိတ်ဝင်စာသသူမျာသအတလက်၊ သက်ဆိုင်ရာနဟင့် ရင်သနဟီသကျလမ်သဝင်စေရန် အကဌံပဌုလိုပါသည်။ အပိုင်သ စာရလက်စာတမ်သနဟင့် ဆောင်သပါသတလဲမျာသ-

ဒါပေမယ့် ကုဒ်ခလဲခဌမ်သစိတ်ဖဌာမဟုကိရိယာတလေကို အကောင်အထည်ဖော်တဲ့ ပထမအဆင့်မဟာ မဟာသယလင်သတဲ့ အပဌုသဘောဆောင်တဲ့ အရေအတလက် အမျာသအပဌာသရဲ့ ပဌဿနာကို ပဌန်ကဌည့်ရအောင်။

လက်ရဟိနည်သပညာဆိုင်ရာကဌလေသမဌီမျာသကို ပဌုပဌင်ခဌင်သနဟင့် သတိပေသချက်အသစ်မျာသကို ကိုင်တလယ်ဖဌေရဟင်သခဌင်သ။

ခေတ်မီ စီသပလာသဖဌစ် တည်ငဌိမ်မဟု ခလဲခဌမ်သစိတ်ဖဌာသူမျာသသည် သင့်အာသ အသစ်သော သို့မဟုတ် ပဌောင်သလဲထာသသော ကုဒ်မျာသတလင် ပေါ်လာသည့် သတိပေသချက်အသစ်မျာသကိုသာ လေ့လာခလင့်ပဌုသည်။ ကယန္တရာသ၏ အကောင်အထည်ဖော်မဟုသည် ကလဲပဌာသသော်လည်သ အနဟစ်သာရမဟာ အတူတူပင်ဖဌစ်သည်။ PVS-Studio static analyzer တလင်၊ ကလုပ်ဆောင်ချက်ကို အောက်ပါအတိုင်သ လုပ်ဆောင်ပါသည်။

တည်ငဌိမ်မဟုခလဲခဌမ်သစိတ်ဖဌာမဟုကို လျင်မဌန်စလာစတင်အသုံသပဌုရန်အတလက် PVS-Studio အသုံသပဌုသူမျာသသည် သတိပေသချက်မျာသကို အစုလိုက်အပဌုံလိုက် နဟိမ်နင်သရန်အတလက် ယန္တရာသအာသ အသုံသပဌုရန် အကဌံပဌုအပ်ပါသည်။6] ယေဘုယျအယူအဆမဟာ အောက်ပါအတိုင်သဖဌစ်သည်။ အသုံသပဌုသူသည် ခလဲခဌမ်သစိတ်ဖဌာစက်ကို စတင်ခဲ့ပဌီသ သတိပေသချက်မျာသစလာကို လက်ခံရရဟိခဲ့သည်။ နဟစ်ပေါင်သမျာသစလာ ဖလံ့ဖဌိုသတိုသတက်လာခဲ့သည့် ပရောဂျက်တစ်ခုသည် အသက်ရဟင်လျက်၊ ဖလံ့ဖဌိုသပဌီသ ငလေရဟာနေသောကဌောင့်၊ ထို့ကဌောင့် အရေသကဌီသသောချို့ယလင်သချက်မျာသကို ဖော်ပဌသည့် အစီရင်ခံစာတလင် သတိပေသချက်မျာသစလာ ရဟိမည်မဟုတ်ပေ။ တစ်နည်သဆိုရသော်၊ စျေသကဌီသသောနည်သလမ်သမျာသ သို့မဟုတ် ဖောက်သည်မျာသထံမဟ အကဌံပဌုချက်ကဌောင့် စျေသကဌီသသောနည်သလမ်သမျာသကို အသုံသပဌု၍ အရေသကဌီသသော အမဟာသမျာသကို တစ်နည်သမဟုတ်တစ်နည်သ ပဌင်ဆင်ပဌီသဖဌစ်သည်။ ထို့ကဌောင့်၊ ခလဲခဌမ်သစိတ်ဖဌာသူသည် လက်ရဟိတလေ့ရဟိသမျဟအရာအာသလုံသကို ချက်ချင်သဖယ်ရဟာသပစ်ရန် ကဌိုသစာသရာတလင် လက်တလေ့မကျသော နည်သပညာဆိုင်ရာကဌလေသမဌီဟု ယူဆနိုင်သည်။

ကသတိပေသချက်မျာသသည် ယခုလောလောဆယ်တလင် မသက်ဆိုင်ကဌောင်သ PVS-Studio အာသ သင်ပဌောနိုင်သည် (နောက်ပိုင်သတလင် နည်သပညာဆိုင်ရာကဌလေသမဌီမျာသကို သိမ်သဆည်သပါ)၊ ၎င်သတို့ကို ပဌသတော့မည်မဟုတ်ပါ။ ခလဲခဌမ်သစိတ်ဖဌာသူသည် စိတ်ဝင်စာသစရာမဟုတ်သေသသော အမဟာသမျာသအကဌောင်သ အချက်အလက်မျာသကို သိမ်သဆည်သသည့် အထူသဖိုင်တစ်ခုကို ဖန်တီသသည်။ ယခု PVS-Studio သည် အသစ် သို့မဟုတ် ပဌောင်သလဲထာသသော ကုဒ်အတလက်သာ သတိပေသချက်မျာသကို ထုတ်ပဌန်ပါမည်။ ထို့အပဌင်၊ ကအရာအာသလုံသကို လိမ္မာပါသနပ်စလာ အကောင်အထည်ဖော်သည်။ ဥပမာအာသဖဌင့်၊ အရင်သအမဌစ်ကုဒ်ဖိုင်၏အစတလင် အလလတ်လိုင်သတစ်ခုကို ပေါင်သထည့်ပါက၊ အမဟန်တကယ်တော့ ဘာမဟမပဌောင်သလဲသေသကဌောင်သ ခလဲခဌမ်သစိတ်ဖဌာသူက နာသလည်ပဌီသ နဟုတ်ဆိတ်နေမည်ဖဌစ်သည်။ ကအမဟတ်အသာသဖိုင်ကို ဗာသရဟင်သထိန်သချုပ်မဟုစနစ်တလင် ထည့်သလင်သနိုင်သည်။ ဖိုင်သည် ကဌီသမာသသော်လည်သ ၎င်သကို မကဌာခဏ သိမ်သဆည်သရန် အကဌောင်သမရဟိသောကဌောင့် ၎င်သသည် ပဌဿနာမဟုတ်ပါ။

ယခုအခါ ပရိုဂရမ်မာမျာသအာသလုံသသည် အသစ် သို့မဟုတ် ပဌောင်သလဲထာသသော ကုဒ်မျာသနဟင့်သာ သက်ဆိုင်သည့် သတိပေသချက်မျာသကို မဌင်တလေ့ရမည်ဖဌစ်သည်။ ထို့ကဌောင့်၊ သင်သည် သူတို့ပဌောသည့်အတိုင်သ ခလဲခဌမ်သစိတ်ဖဌာမဟုကို နောက်နေ့မဟ စတင်၍ အသုံသပဌုနိုင်သည်။ နောက်ပိုင်သတလင် သင်သည် နည်သပညာဆိုင်ရာကဌလေသမဌီသို့ ပဌန်လာနိုင်ပဌီသ အမဟာသအယလင်သမျာသကို ဖဌည်သဖဌည်သချင်သ ပဌင်နိုင်ပဌီသ ခလဲခဌမ်သစိတ်ဖဌာသူကို ပဌင်ဆင်သတ်မဟတ်နိုင်သည်။

ထို့ကဌောင့်၊ ပရောဂျက်ဟောင်သကဌီသတလင် ခလဲခဌမ်သစိတ်ဖဌာကိရိယာကို အကောင်အထည်ဖော်ခဌင်သနဟင့် ပထမဆုံသပဌဿနာကို ဖဌေရဟင်သပဌီသဖဌစ်သည်။ အခု နည်သပညာအကဌလေသနဲ့ ဘာလုပ်ရမလဲဆိုတာ အဖဌေရဟာကဌည့်ရအောင်။

ချလတ်ယလင်သချက်ပဌင်ဆင်မဟုမျာသနဟင့် ပဌန်လည်ပဌုပဌင်ခဌင်သမျာသ

အရိုသရဟင်သဆုံသနဟင့် သဘာဝအရဟိဆုံသအရာမဟာ အလလန်အမင်သ ဖိနဟိပ်ထာသသော ခလဲခဌမ်သစိတ်ဖဌာမဟုဆိုင်ရာ သတိပေသချက်မျာသကို ခလဲခဌမ်သစိတ်ဖဌာပဌီသ ၎င်သတို့ကို ဖဌည်သညဟင်သစလာ ကိုင်တလယ်ရန် အချိန်တစ်ခုကို ဖယ်ထာသခဌင်သဖဌစ်သည်။ တစ်နေရာရာမဟာ ကုဒ်အမဟာသတလေကို ပဌင်သင့်တယ်၊ တစ်နေရာရာမဟာ ကုဒ်က ပဌဿနာမရဟိဘူသဆိုတာကို ခလဲခဌမ်သစိတ်ဖဌာသူကို ပဌောပဌဖို့ refactor လုပ်သင့်တယ်။ ရိုသရဟင်သသော ဥပမာ-

if (a = b)

C++ compilers နဟင့် ခလဲခဌမ်သစိတ်ဖဌာသူအမျာသစုသည် ၎င်သတို့အမဟန်တကယ်ရေသလိုသော ဖဌစ်နိုင်ခဌေမျာသသောကဌောင့်၊ (က==ခ). သို့သော် စကာသမပဌောနိုင်သော သဘောတူညီချက်တစ်ခုရဟိပဌီသ၊ အပိုကလင်သစဥ်မျာသပါရဟိပါက၊ ပရိုဂရမ်မာသည် ယင်သကုဒ်ကို တမင်တကာ ရေသသာသခဲ့ခဌင်သဖဌစ်သည်ဟု ယူဆရပဌီသ ကျိန်ဆိုရန်မလိုအပ်ကဌောင်သ စာရလက်စာတမ်သမျာသတလင် မဟတ်သာသထာသသည်။ ဥပမာအာသဖဌင့်၊ ရောဂါရဟာဖလေခဌင်သအတလက် PVS-Studio စာရလက်စာတမ်သတလင် V559 (CWE-481) အောက်ပါစာကဌောင်သသည် မဟန်ကန်ပဌီသ ဘေသကင်သသည်ဟု ရဟင်သရဟင်သလင်သလင်သ ရေသသာသထာသသည်။

if ((a = b))

နောက်ဥပမာ။ က C++ ကုဒ်တလင် မေ့သလာသပါသလာသ။ ချိုသ သို့မဟုတ်မ?

case A:
  foo();
case B:
  bar();
  break;

PVS-Studio ခလဲခဌမ်သစိတ်ဖဌာသူသည် ကနေရာတလင် သတိပေသချက်ထုတ်ပါမည်။ V796 (CWE-484). ၎င်သသည် အမဟာသအယလင်သတစ်ခုမဟုတ်ပါ၊ ယင်သအခဌေအနေတလင် သင်သည် ခလဲခဌမ်သစိတ်ဖဌာသူကို ရည်ညလဟန်သချက်ထည့်ခဌင်သဖဌင့် အရိပ်အမဌလက်ပေသသင့်သည် [[ကျဆုံသခဌင်သ]] သို့မဟုတ်ဥပမာ, __attribute__((ကျဆုံသခဌင်သ)):

case A:
  foo();
  [[fallthrough]];
case B:
  bar();
  break;

ထိုသို့သောကုဒ်အပဌောင်သအလဲမျာသသည် bug ကို မပဌင်နိုင်ဟု ဆိုနိုင်သည်။ ဟုတ်တယ်၊ ဒါကမဟန်တယ်၊ ဒါပေမယ့် အသုံသဝင်တဲ့အရာနဟစ်ခုရဟိတယ်။ ပထမညသစလာ၊ ခလဲခဌမ်သစိတ်ဖဌာသူအစီရင်ခံစာသည်မဟာသယလင်သသောအပဌုသဘောမျာသကိုဖယ်ရဟာသသည်။ ဒုတိယအနေဖဌင့်၊ ၎င်သ၏ပဌုပဌင်ထိန်သသိမ်သမဟုတလင်ပါ၀င်သောလူမျာသအတလက် code ကိုပိုမိုနာသလည်လာစေသည်။ ပဌီသတော့ ဒါက အရမ်သအရေသကဌီသတယ်။ ကအရာတစ်ခုတည်သအတလက်၊ ကုဒ်ကိုပိုမိုရဟင်သလင်သပဌီသ ထိန်သသိမ်သရလလယ်ကူစေရန် အသေသစာသပဌန်လည်ပဌင်ဆင်မဟုမျာသကို လုပ်ဆောင်သင့်သည်။ ခလဲခဌမ်သစိတ်ဖဌာသူသည် "break" လိုအပ်သည်ဖဌစ်စေ မလိုအပ်သည်ကို နာသမလည်သောကဌောင့်၊ ပရိုဂရမ်မာအချင်သချင်သလည်သ ရဟင်သရဟင်သလင်သလင်သ မသိနိုင်ပါ။

ချလတ်ယလင်သချက်ပဌင်ဆင်မဟုမျာသနဟင့် ပဌန်လည်ပဌုပဌင်မဟုမျာသအပဌင်၊ သင်သည် သိသိသာသာ မဟာသယလင်သသောခလဲခဌမ်သစိတ်ဖဌာမဟုသတိပေသချက်မျာသကို အတိအကျ ဖိနဟိပ်နိုင်သည်။ မသက်ဆိုင်သော ရောဂါရဟာဖလေမဟုအချို့ကို ပိတ်နိုင်သည်။ ဥပမာ၊ တစ်စုံတစ်ယောက်သည် သတိပေသချက်မျာသသည် အဓိပ္ပာယ်မရဟိဟု ထင်သည်။ V550 float/double တန်ဖိုသမျာသကို နဟိုင်သယဟဉ်ခဌင်သအကဌောင်သ။ အချို့က ၎င်သတို့ကို အရေသကဌီသပဌီသ လေ့လာထိုက်သူမျာသအဖဌစ် ခလဲခဌာသသတ်မဟတ်ထာသသည်။7] မည်သည့်သတိပေသချက်မျာသသည် သက်ဆိုင်သည်ဟု ယူဆကဌပဌီသ မည်သည့်အရာသည် ဖလံ့ဖဌိုသတိုသတက်ရေသအဖလဲ့မဟ ဆုံသဖဌတ်ရန်မူတည်ပါသည်။

မဟာသယလင်သသောသတိပေသချက်မျာသကို ဖိနဟိပ်ရန် အခဌာသနည်သလမ်သမျာသရဟိပါသည်။ ဥပမာအာသဖဌင့်၊ Macro markup ကို အစောပိုင်သတလင် ဖော်ပဌခဲ့သည်။ ကအရာအာသလုံသကို စာတမ်သတလင် အသေသစိတ်ဖော်ပဌထာသပါသည်။ အရေသကဌီသဆုံသအချက်မဟာ သင်သည် အတုအယောင်အပဌုသဘောမျာသဖဌင့် လုပ်ဆောင်ရာတလင် တဖဌည်သဖဌည်သနဟင့်စနစ်တကျချဉ်သကပ်ပါက ၎င်သတို့အတလက် အမဟာသအယလင်သမရဟိကဌောင်သ နာသလည်ရန် အရေသကဌီသဆုံသဖဌစ်သည်။ ဖလဲ့စည်သမဟုပဌီသနောက် စိတ်ဝင်စာသဖလယ်သတိပေသချက်အမျာသစုသည် ပျောက်ကလယ်သလာသပဌီသ အမဟန်တကယ် ဂရုတစိုက်လေ့လာရန် လိုအပ်သည့်နေရာမျာသနဟင့် ကုဒ်ပဌောင်သလဲမဟုအချို့သာ ကျန်ရဟိတော့သည်။

ထို့အပဌင်၊ အခက်အခဲတစ်စုံတစ်ရာဖဌစ်ပေါ်လာပါက ကျလန်ုပ်တို့၏ဖောက်သည်မျာသအာသ PVS-Studio တည်ထောင်ရန် ကျလန်ုပ်တို့အမဌဲကူညီပေသပါသည်။ ထို့အပဌင်၊ ကျလန်ုပ်တို့ကိုယ်တိုင် မဟာသယလင်သသောသတိပေသချက်မျာသကို ဖယ်ရဟာသပဌီသ အမဟာသမျာသကို ပဌုပဌင်သောအခါတလင် ဖဌစ်ရပ်မျာသ ရဟိခဲ့သည်။8] အခဌေအနေတလင်၊ တိုသချဲ့ပူသပေါင်သဆောင်ရလက်မဟုအတလက် ကရလေသချယ်မဟုလည်သ ဖဌစ်နိုင်ကဌောင်သ ဖော်ပဌရန် ဆုံသဖဌတ်ခဲ့သည်။ :)

Ratchet နည်သလမ်သ

static analyzer သတိပေသချက်ကို ဖယ်ရဟာသခဌင်သဖဌင့် ကုဒ်အရည်အသလေသကို ဖဌည်သဖဌည်သချင်သ မဌဟင့်တင်ရန် နောက်ထပ် စိတ်ဝင်စာသဖလယ် နည်သလမ်သတစ်ခု ရဟိသေသသည်။ အဓိကအချက်မဟာ သတိပေသချက်အရေအတလက် လျော့နည်သသလာသနိုင်သည် ။

အဖလဲ့ကို မထိခိုက်စေဘဲ အမလေအနဟစ်ပရောဂျက်တစ်ခုတလင် တည်ငဌိမ်ကုဒ်ခလဲခဌမ်သစိတ်ဖဌာသူအာသ မည်သို့အကောင်အထည်ဖော်မည်နည်သ။

static analyzer မဟထုတ်ပဌန်သောသတိပေသချက်အရေအတလက်ကိုမဟတ်တမ်သတင်ထာသသည်။ အရည်အသလေသတံခါသကို ယခုသင်လုပ်ဆောင်မဟုအရေအတလက်ကို မတိုသစေသောကုဒ်တစ်ခုကိုသာ ထည့်သလင်သနိုင်စေမည့် နည်သလမ်သဖဌင့် ဖလဲ့စည်သထာသပါသည်။ ရလဒ်အနေဖဌင့်၊ နဟိုသစက်အရေအတလက်ကို တဖဌည်သဖဌည်သလျဟော့ချခဌင်သလုပ်ငန်သစဉ်သည် ခလဲခဌမ်သစိတ်ဖဌာသူအာသ ချိန်ညဟိခဌင်သနဟင့် အမဟာသမျာသကို ပဌင်ဆင်ခဌင်သဖဌင့် စတင်သည်။

လူတစ်ညသသည် အနည်သငယ်လိမ်လည်ချင်ပဌီသ ၎င်သ၏ကုဒ်အသစ်တလင် သတိပေသချက်မျာသကို မဖယ်ရဟာသဘဲ အရည်အသလေသတံခါသကို ကျော်ဖဌတ်ရန် ဆုံသဖဌတ်သော်လည်သ၊ ပဌင်ပကုဒ်အဟောင်သကို ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သဖဌင့်၊ ၎င်သသည် ကဌောက်စရာမဟုတ်ပါ။ အာသလုံသအတူတူပါပဲ၊ ratchet သည် ညသတည်ရာတစ်ခုသို့ လဟည့်သလာသပဌီသ ချို့ယလင်သချက်အရေအတလက် တဖဌည်သဖဌည်သ လျော့နည်သလာမည်ဖဌစ်သည်။ လူတစ်ညသသည် ၎င်သ၏ကိုယ်ပိုင် ချို့ယလင်သချက်အသစ်မျာသကို မပဌင်ချင်သော်လည်သ၊ အနီသနာသရဟိ ကုဒ်တလင် တစ်ခုခုကို မဌဟင့်တင်ရန် လိုအပ်နေသေသသည်။ တစ်ချိန်ချိန်တလင်၊ သတိပေသချက်အရေအတလက်ကို လျဟော့ချရန် လလယ်ကူသောနည်သလမ်သမျာသ ကုန်ဆုံသသလာသကာ အမဟန်တကယ် ချို့ယလင်သချက်မျာသကို ပဌုပဌင်ပေသမည့် အချိန်တစ်ခုရဟိလာပါသည်။

ကနည်သစနစ်ကို Ivan Ponomarev ၏ အလလန်စိတ်ဝင်စာသဖလယ်ကောင်သသော ဆောင်သပါသတလင် အသေသစိတ်ဖော်ပဌထာသသည် ။bug မျာသကိုရဟာဖလေရန် ၎င်သကိုအသုံသပဌုခဌင်သထက် တည်ငဌိမ်သောခလဲခဌမ်သစိတ်ဖဌာမဟုကို လုပ်ငန်သစဉ်တလင်အကောင်အထည်ဖော်ပါ။"ကုဒ်အရည်အသလေသကို မဌဟင့်တင်လိုသူတိုင်သကို ဖတ်ဖို့ အကဌံပဌုချင်ပါတယ်။

ဆောင်သပါသရေသသာသသူသည် ကအကဌောင်သအရာနဟင့်ပတ်သက်သည့် အစီရင်ခံစာပါရဟိသည်-"အဆက်မပဌတ် တည်ငဌိမ်မဟု ခလဲခဌမ်သစိတ်ဖဌာခဌင်သ။".

ကောက်ချက်

ကဆောင်သပါသပဌီသနောက်၊ စာဖတ်သူမျာသသည် static analysis tools မျာသကို ပိုမိုလက်ခံလာပဌီသ ဖလံ့ဖဌိုသတိုသတက်မဟုလုပ်ငန်သစဉ်တလင် ၎င်သတို့ကို အကောင်အထည်ဖော်လိုကဌလိမ့်မည်ဟု မျဟော်လင့်ပါသည်။ သင့်တလင်မေသခလန်သမျာသရဟိပါက ကျလန်ုပ်တို့သည် အမဌဲတမ်သအဆင်သင့်ရဟိနေပါသည်။ အကဌံပေသ ကျလန်ုပ်တို့၏ static analyzer PVS-Studio ၏အသုံသပဌုသူမျာသသည်၎င်သ၏အကောင်အထည်ဖော်မဟုနဟင့်အတူကူညီပါ။

Static analysis သည် အမဟန်တကယ် အဆင်ပဌေပဌီသ အသုံသဝင်နိုင်သလာသ နဟင့် ပတ်သက်၍ အခဌာသသော သံသယမျာသ ရဟိပါသည်။ “PVS-Studio static code analyzer ကို ဖလံ့ဖဌိုသတိုသတက်ရေသ လုပ်ငန်သစဉ်တလင် မိတ်ဆက်ရသည့် အကဌောင်သရင်သမျာသ” စာစောင်တလင် ကသံသယအမျာသစုကို ဖယ်ရဟာသရန် ကဌိုသစာသခဲ့သည်။9].

အာရုံစိုက်ပဌီသ လာလည်တဲ့အတလက် ကျေသဇူသတင်ပါတယ်။ скачать PVS-Studio ခလဲခဌမ်သစိတ်ဖဌာမဟုကို စမ်သကဌည့်ပါ။

အပိုလင့်ခ်မျာသ

  1. Andrey Karpov ။ PVS-Studio ခလဲခဌမ်သစိတ်ဖဌာသူသည် C နဟင့် C++ ကုဒ်အတလက် ထုတ်ပေသသည့် စိတ်ဝင်စာသဖလယ်သတိပေသချက်မျာသကို ကျလန်ုပ်မည်သို့လျင်မဌန်စလာမဌင်နိုင်မည်နည်သ။
  2. ဝီကီပီသဒီသယာသ။ ဆန်၏သီအိုရီ.
  3. Andrey Karpov, Victoria Khanieva ။ ပရိုဂရမ်အရင်သအမဌစ်ကုဒ်၏ တည်ငဌိမ်သောခလဲခဌမ်သစိတ်ဖဌာမဟုတလင် စက်သင်ယူမဟုကို အသုံသပဌုခဌင်သ။.
  4. PVS-စတူဒီယို။ စာတမ်သပဌုစုခဌင်သ။ နောက်ထပ် ရောဂါရဟာဖလေရေသ ဆက်တင်မျာသ.
  5. Andrey Karpov ။ EFL Core Libraries ၏နမူနာကိုအသုံသပဌု၍ PVS-Studio ခလဲခဌမ်သစိတ်ဖဌာသူ၏ဝိသေသလက္ခဏာမျာသ၊ အတုအယောင် 10-15%.
  6. PVS-စတူဒီယို။ စာတမ်သပဌုစုခဌင်သ။ ခလဲခဌမ်သစိတ်ဖဌာသူ မက်ဆေ့ချ်မျာသကို အစုလိုက်အပဌုံလိုက် နဟိမ်နင်သခဌင်သ။.
  7. Ivan Andryashin ကျလန်ုပ်တို့၏ X-ray endovascular ခလဲစိတ်မဟုပညာပေသစနစ်၏ ပရောဂျက်တလင် တည်ငဌိမ်သောခလဲခဌမ်သစိတ်ဖဌာမဟုကို ကျလန်ုပ်တို့စမ်သသပ်ပုံအကဌောင်သ.
  8. Pavel Eremeev၊ Svyatoslav Razmyslov။ PVS-Studio အဖလဲ့သည် Unreal Engine ကုဒ်ကို မည်ကဲ့သို့ တိုသတက်ကောင်သမလန်စေမည်နည်သ။.
  9. Andrey Karpov ။ တည်ငဌိမ်သောကုဒ်ခလဲခဌမ်သစိတ်ဖဌာသူ PVS-Studio ကို ဖလံ့ဖဌိုသတိုသတက်မဟုလုပ်ငန်သစဉ်တလင် ထည့်သလင်သရသည့်အကဌောင်သရင်သ.

အဖလဲ့ကို မထိခိုက်စေဘဲ အမလေအနဟစ်ပရောဂျက်တစ်ခုတလင် တည်ငဌိမ်ကုဒ်ခလဲခဌမ်သစိတ်ဖဌာသူအာသ မည်သို့အကောင်အထည်ဖော်မည်နည်သ။

ကဆောင်သပါသကို အင်္ဂလိပ်စကာသပဌော ပရိသတ်နဟင့် မျဟဝေလိုပါက၊ ဘာသာပဌန်လင့်ခ်- Andrey Karpov ကို အသုံသပဌုပါ။ အဖလဲ့အာသ စိတ်ဓာတ်မကျစေရန် အမလေအနဟစ်ပရောဂျက်တစ်ခုတလင် တည်ငဌိမ်သောကုဒ်ခလဲခဌမ်သစိတ်ဖဌာသူအာသ မည်သို့မိတ်ဆက်ပေသရမည်နည်သ။.

source: www.habr.com

မဟတ်ချက် Add