Static analysis - နိဒါန်သမဟ ပေါင်သစပ်မဟုအထိ

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

Static analysis - နိဒါန်သမဟ ပေါင်သစပ်မဟုအထိ
တကယ်တော့ သင်ဟာ ခေတ်မီဘာသာစကာသတစ်ခုခုနဲ့ ရေသမယ်ဆိုရင် အဲဒါကို သတိတောင်မထာသမိဘဲ၊ static analyzer နဲ့ သင် run လိုက်ပါ။ အမဟန်မဟာ မည်သည့်ခေတ်မီ compiler မဆို ကုဒ်ရဟိ ဖဌစ်နိုင်ချေရဟိသော ပဌဿနာမျာသအကဌောင်သ သတိပေသချက် အသေသအမလဟာသမျာသ ပေသထာသသော်လည်သ၊ ဥပမာအာသဖဌင့်၊ Visual Studio တလင် C++ ကုဒ်ကို ပဌုစုသောအခါတလင် အောက်ပါတို့ကို သင်တလေ့နိုင်သည်-

Static analysis - နိဒါန်သမဟ ပေါင်သစပ်မဟုအထိ
ဒီ output မဟာ variable ကိုတလေ့ရမဟာပါ။ var လုပ်ဆောင်ချက်ကို မည်သည့်နေရာတလင်မဟ အသုံသမပဌုခဲ့ပါ။ ထို့ကဌောင့် လက်တလေ့တလင် သင်သည် ရိုသရဟင်သသော static code analyzer ကို အမဌဲတမ်သနီသပါသ အသုံသပဌုခဲ့သည်။ သို့ရာတလင်၊ Coverity၊ Klocwork သို့မဟုတ် PVS-Studio ကဲ့သို့သော ပရော်ဖက်ရဟင်နယ် ခလဲခဌမ်သစိတ်ဖဌာသူမျာသနဟင့် မတူဘဲ၊ compiler မဟ ပေသဆောင်သော သတိပေသချက်မျာသသည် ပဌဿနာအသေသအမလဟာသမျာသကိုသာ ညလဟန်ပဌနိုင်သည်။

static analysis က ဘာလဲ ဆိုတာကို သေချာမသိရင်၊ ကဆောင်သပါသကိုဖတ်ပါ။ကနည်သစနစ်အကဌောင်သပိုမိုလေ့လာရန်။

အဘယ်ကဌောင့် static analysis လိုအပ်သနည်သ။

အတိုချုပ်ပဌောရရင် အရဟိန်နဲ့ ရိုသရဟင်သမဟု။

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

auto x = obj.x;
auto y = obj.y;
auto z = obj.z;

သင်သည် အောက်ပါကုဒ်ကို ရေသသာသခဲ့သည်-

auto x = obj.x;
auto y = obj.y;
auto z = obj.x;

သင်မဌင်သည့်အတိုင်သ၊ နောက်ဆုံသစာကဌောင်သတလင် typo တစ်ခုရဟိသည်။ ဥပမာအာသဖဌင့်၊ PVS-Studio သည် အောက်ပါသတိပေသချက်ကို ထုတ်ပဌန်သည်-

V537 'y' ပစ္စည်သ၏ အသုံသပဌုမဟု မဟန်ကန်မဟုကို ပဌန်လည်သုံသသပ်ပါ။

သင့်လက်ကို ကအမဟာသသို့ တလန်သပို့လိုပါက Compiler Explorer တလင် အဆင်သင့်လုပ်ထာသသော ဥပမာကို စမ်သကဌည့်ပါ- *ငိုပါ။*.

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

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

ကအခဌေအနေမျာသအတလက် static analysis ပေါ်လာသည်။ ၎င်သသည် ကုဒ်ရဟိ ပဌဿနာမျိုသစုံကို ထောက်ပဌပဌီသ ကနည်သဖဌင့် ရေသသာသရန် အဘယ်ကဌောင့် မလိုအပ်သနည်သ၊ ၎င်သကို ဖဌစ်ပေါ်လာနိုင်သည့် အကဌောင်သရင်သနဟင့် မည်ကဲ့သို့ ဖဌေရဟင်သရမည်ကို စာရလက်စာတမ်သတလင် ရဟင်သပဌမည့် ဆော့ဖ်ဝဲရေသသာသသူအတလက် လက်ထောက်ဖဌစ်သည်။ ဒါက ဘယ်လိုပုံသဏ္ဍာန်ရဟိနိုင်လဲဆိုတာ နမူနာတစ်ခုပါ-*ငိုပါ။*.

ဆောင်သပါသမျာသတလင် ခလဲခဌမ်သစိတ်ဖဌာသူမဟ ရဟာဖလေတလေ့ရဟိနိုင်သည့် ပိုမိုစိတ်ဝင်စာသဖလယ်ကောင်သသော အမဟာသမျာသကို သင်ရဟာတလေ့နိုင်သည်-

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

မဟတ်ချက်။ Static analysis သည် ကုဒ်ပဌန်လည်သုံသသပ်ခဌင်သကဲ့သို့ အသုံသဝင်သောအရာကို အစာသထိုသခဌင်သ သို့မဟုတ် ပယ်ဖျက်ခဌင်သမဟုတ်ပါ။ ၎င်သသည် ကလုပ်ငန်သစဉ်ကို ဖဌည့်စလမ်သပေသကာ အမဟာသအယလင်သမျာသ၊ မဟာသယလင်သမဟုမျာသနဟင့် အန္တရာယ်ရဟိသော ဒီဇိုင်သမျာသကို ကဌိုတင်သတိပဌုမိရန်နဟင့် ပဌင်ဆင်ရန် ကူညီပေသသည်။ နေရာလလဲမဟာသနေသောကလင်သစဥ်ကိုရဟာဖလေခဌင်သထက် algorithms နဟင့် ကုဒ်ရဟင်သလင်သပဌတ်သာသမဟုအပေါ် ကုဒ်ပဌန်လည်သုံသသပ်ခဌင်သအပေါ် အာရုံစိုက်ခဌင်သက ပိုမိုအကျိုသဖဌစ်ထလန်သစေပါသည်။ ပျင်သစရာကောင်သသော နဟိုင်သယဟဉ်လုပ်ဆောင်ချက်မျာသကို ဖတ်ပါ။.

0. tool ကို သိလာခဌင်သ

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

ကအဆင့်တလင် သင်လေ့လာရမည့်အရာမျာသ

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

သင်လိုအပ်သမျဟကို install လုပ်ပဌီသနောက်၊ သင်လုပ်သင့်သည့်အရာမဟာ ပရောဂျက်တစ်ခုလုံသ၏ခလဲခဌမ်သစိတ်ဖဌာမဟုကို လုပ်ဆောင်ခဌင်သဖဌစ်သည် (Windows ကို, Linux ကို, MacOS) Visual Studio ရဟိ PVS-Studio တလင် အလာသတူပုံတစ်ပုံ (နဟိပ်၍ရနိုင်သည်)။

Static analysis - နိဒါန်သမဟ ပေါင်သစပ်မဟုအထိ
အမဟန်မဟာ static ခလဲခဌမ်သစိတ်ဖဌာသူမျာသသည် မျာသသောအာသဖဌင့် ကုဒ်အခဌေခံကဌီသမာသသော ပရောဂျက်မျာသအတလက် သတိပေသချက်အမျာသအပဌာသထုတ်ပေသလေ့ရဟိပါသည်။ သင့်ပရောဂျက်သည် အလုပ်ဖဌစ်နေပဌီဖဌစ်သောကဌောင့် ၎င်သတို့အာသလုံသကို ပဌုပဌင်ရန်မလိုအပ်ပါ၊ ဆိုလိုသည်မဟာ ကပဌဿနာမျာသသည် မစိုသရိမ်ရပါ။ သို့သော်သင် စိတ်ဝင်စာသစရာအကောင်သဆုံသသတိပေသချက်မျာသကို သင်ကဌည့်ရဟုနိုင်ပါသည်။ လိုအပ်ရင် ပဌင်ပေသပါ။ ဒီလိုလုပ်ဖို့၊ အထလက်ကို စစ်ထုတ်ပဌီသ အယုံကဌည်ရဆုံသ မက်ဆေ့ချ်တလေကိုသာ ချန်ထာသဖို့ လိုပါတယ်။ Visual Studio အတလက် PVS-Studio ပလပ်အင်တလင်၊ ၎င်သကို အမဟာသအဆင့်နဟင့် အမျိုသအစာသအလိုက် စစ်ထုတ်ခဌင်သဖဌင့် လုပ်ဆောင်သည်။ အတိကျဆုံသထလက်ရဟိရန်အတလက်သာ ချန်ထာသပါ။ မဌင့်သော О ယေဘုယျ (နဟိပ်နိုင်သည်)

Static analysis - နိဒါန်သမဟ ပေါင်သစပ်မဟုအထိ
အမဟန်မဟာ၊ သတိပေသချက် 178 သည်ထောင်ပေါင်သမျာသစလာထက်ပိုမိုလလယ်ကူသည် ...

တက်ဘ်မျာသတလင် အလယ်အလတ် О အနိမ့် မကဌာခဏ သတိပေသချက်ကောင်သမျာသ ရဟိသော်လည်သ ကအမျိုသအစာသမျာသတလင် တိကျမဟု (ယုံကဌည်စိတ်ချရမဟု) နည်သပါသသော ရောဂါရဟာဖလေရေသမျာသ ပါဝင်သည်။ သတိပေသချက်အဆင့်မျာသနဟင့် Windows အောက်တလင် အလုပ်လုပ်ရန် ရလေသချယ်စရာမျာသအကဌောင်သ နောက်ထပ်အချက်အလက်မျာသကို ကနေရာတလင် တလေ့နိုင်သည်- *ငိုပါ။*.

စိတ်ဝင်စာသစရာအကောင်သဆုံသ အမဟာသမျာသကို အောင်မဌင်စလာ သုံသသပ်ပဌီသ (၎င်သတို့ကို အောင်မဌင်စလာ ပဌုပဌင်ခဌင်သ) သည် တန်ဖိုသရဟိပါသည်။ ကျန်ရဟိနေသော သတိပေသချက်မျာသကို ဖိနဟိပ်ပါ။. သတိပေသချက်အသစ်မျာသ အဟောင်သမျာသကဌာသတလင် ပျောက်ကလယ်မသလာသစေရန် ယင်သက လိုအပ်ပါသည်။ ထို့အပဌင်၊ static analyzer သည် ပရိုဂရမ်မာအတလက် လက်ထောက်ဖဌစ်ပဌီသ bugs စာရင်သမဟုတ်ပါ။ 🙂

1. အလိုအလျောက်စနစ်

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

ကအဆင့်တလင် သင်လေ့လာရမည့်အရာမျာသ

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

ပဌီသပဌည့်စုံသောစာရလက်စာတမ်သမရဟိသောကဌောင့်၊ တစ်ခါတစ်ရံတလင်သင်ရေသရန်လိုအပ်သည်။ ထောက်ခံမဟု. ဒါက ပုံမဟန်ဖဌစ်ပဌီသ သင့်ကိုကူညီရတာ ဝမ်သသာပါတယ်။ 🙂

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

  • PVS-Studio_Cmd.exe (Windows ရဟိ ဖဌေရဟင်သချက်မျာသ၊ C#၊ C++ ပရောဂျက်မျာသကို လေ့လာခဌင်သ)
  • CLMonitor.exe (စုစည်သစောင့်ကဌည့်ခဌင်သ)
  • pvs-studio-analyzer ( Linux / macOS တလင် C++ ပရောဂျက်မျာသကို လေ့လာခဌင်သ)
  • pvs-studio-dotnet (ဖဌေရဟင်သချက်ခလဲခဌမ်သစိတ်ဖဌာမဟု၊ Linux / macOS ရဟိ C# ပရောဂျက်မျာသ)
  • pvs-studio.jar (Java ပရောဂျက်မျာသကို လေ့လာခဌင်သ)
  • PlogConverter (ဖိုင်ပဌောင်သသူအစီရင်ခံရန်)

ခလဲခဌမ်သစိတ်ဖဌာမဟုကို CI တလင် ပေါင်သစပ်ရန်၊ သင်သည် အရာသုံသခုကို လုပ်ဆောင်ရန် လိုအပ်သည်-

  • ခလဲခဌမ်သစိတ်ဖဌာကိရိယာကိုတပ်ဆင်ပါ။
  • ခလဲခဌမ်သစိတ်ဖဌာမဟုကိုလုပ်ဆောင်ရန်;
  • ရလဒ်မျာသပေသပို့ပါ။

ဥပမာအာသဖဌင့်၊ Linux (Debian-base) တလင် PVS-Studio ကို ထည့်သလင်သရန် အောက်ပါ command မျာသကို လုပ်ဆောင်ရန် လိုအပ်သည်-

wget -q -O - https://files.viva64.com/etc/pubkey.txt 
    | sudo apt-key add -
sudo wget -O /etc/apt/sources.list.d/viva64.list 
  https://files.viva64.com/etc/viva64.list
  
sudo apt-get update -qq
sudo apt-get install -qq pvs-studio

Windows အသုံသပဌုသည့် စနစ်မျာသတလင်၊ package manager မဟ ခလဲခဌမ်သစိတ်ဖဌာမဟုကို ထည့်သလင်သရန် နည်သလမ်သမရဟိသော်လည်သ၊ ခလဲခဌမ်သစိတ်ဖဌာသူကို command line မဟ အသုံသချရန် ဖဌစ်နိုင်သည်-

PVS-Studio_setup.exe /verysilent /suppressmsgboxes 
/norestart /nocloseapplications

Windows အသုံသပဌုသည့်စနစ်မျာသတလင် PVS-Studio အသုံသချခဌင်သအကဌောင်သ ပိုမိုဖတ်ရဟုနိုင်သည်ဒီမဟာ*.

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

လလဟင့်တင်နည်သလမ်သသည် ပလပ်ဖောင်သနဟင့် ပရောဂျက်အင်္ဂါရပ်မျာသပေါ်တလင်မူတည်သောကဌောင့်၊ C++ (Linux) အတလက် ရလေသချယ်ခလင့်ကို ဥပမာတစ်ခုအနေဖဌင့် ပဌပါမည်။

pvs-studio-analyzer analyze -j8 
                            -o PVS-Studio.log
plog-converter -t errorfile PVS-Studio.log --cerr -w

ပထမ command သည် ခလဲခဌမ်သစိတ်ဖဌာမဟုကို လုပ်ဆောင်မည်ဖဌစ်ပဌီသ၊ စာအိတ်မျာသအစီရင်ခံစာကို စာသာသဖော်မတ်သို့ ပဌောင်သပေသကာ မျက်နဟာပဌင်ပေါ်တလင် ပဌသပဌီသ သတိပေသချက်မျာသရဟိပါက 0 မဟလလဲ၍ အခဌာသပဌန်ကုဒ်ကို ပဌန်ပေသသည်။ error မက်ဆေ့ချ်မျာသ ရဟိနေသောအခါတလင် ကကဲ့သို့သော ယန္တရာသတစ်ခုကို တည်ဆောက်မဟုကို ပိတ်ဆို့ရန် အဆင်ပဌေစလာ အသုံသပဌုနိုင်သည်။ သို့သော် သင်သည် အမဌဲတမ်သအလံကို ဖယ်ရဟာသနိုင်သည်။ -w သတိပေသချက်မျာသပါရဟိသော စည်သဝေသပလဲကို မပိတ်ဆို့ပါနဟင့်။

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

ဆောင်သပါသတလင် CI ဆိုင်ရာ ခလဲခဌမ်သစိတ်ဖဌာမဟု သတ်မဟတ်ခဌင်သအကဌောင်သ ပိုမိုဖတ်ရဟုနိုင်သည်"PVS-Studio နဟင့် ဆက်တိုက်ပေါင်သစပ်ခဌင်သ။" (Windows) သို့မဟုတ် "Travis CI တလင် PVS-Studio ကိုမည်သို့တပ်ဆင်ရမည်နည်သ။"(Linux)။

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

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

git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list

ယခု သင်သည် ကဖိုင်မျာသစာရင်သကို ခလဲခဌမ်သစိတ်ဖဌာသူထံ ထည့်သလင်သရန် လိုအပ်ပါသည်။ ဥပမာအာသဖဌင့်၊ PVS-Studio တလင် ၎င်သသည် အလံကို အသုံသပဌု၍ လုပ်ဆောင်သည်။ -S:

pvs-studio-analyzer analyze -j8 
                            -o PVS-Studio.log 
                            -S .pvs-pr.list

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

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

ဒါတလေအာသလုံသက သေချာပေါက် ကောင်သပါတယ်၊ ဒါပေမယ့် သတိပေသချက်အာသလုံသကို တစ်နေရာတည်သမဟာ မဌင်ချင်ပါတယ်။ static analyzer မဟသာမက ယူနစ်စမ်သသပ်မဟုမျာသ သို့မဟုတ် dynamic analyzer မဟလည်သဖဌစ်သည်။ ကအတလက် ဝန်ဆောင်မဟုမျာသနဟင့် ပလပ်အင်မျာသ အမျိုသမျိုသရဟိသည်။ ဥပမာ PVS-Studio ရဟိတယ်။ SonarQube တလင်ပေါင်သစည်သရန်အတလက် plugin.

2. developer စက်မျာသတလင် ပေါင်သစည်သခဌင်သ။

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

အရိုသရဟင်သဆုံသရလေသချယ်မဟုအနေဖဌင့်၊ developer မျာသသည် လိုအပ်သောခလဲခဌမ်သစိတ်ဖဌာစက်ကို ကိုယ်တိုင်ထည့်သလင်သနိုင်သည်။ သို့သော်၊ ၎င်သသည် အချိန်မျာသစလာယူရပဌီသ ၎င်သတို့ကို ဖလံ့ဖဌိုသတိုသတက်မဟုမဟ အာရုံပဌောင်သစေမည်၊ ထို့ကဌောင့် သင်သည် ထည့်သလင်သသူနဟင့် လိုအပ်သောအလံမျာသကို အသုံသပဌု၍ ကလုပ်ငန်သစဉ်ကို အလိုအလျောက်လုပ်ဆောင်နိုင်သည်။ PVS-Studio အတလက် အမျိုသမျိုသရဟိပါတယ်။ အလိုအလျောက်တပ်ဆင်မဟုအတလက်အလံမျာသ. သို့သော်လည်သ၊ ဥပမာအာသဖဌင့်၊ Chocolatey (Windows)၊ Homebrew (macOS) သို့မဟုတ် Linux အတလက် ရလေသချယ်စရာ ဒါဇင်မျာသစလာ အမဌဲရဟိပါသည်။

ထို့နောက် လိုအပ်သော ပလပ်အင်မျာသကို ဥပမာအာသဖဌင့် ထည့်သလင်သရန် လိုအပ်မည်ဖဌစ်သည်။ Visual Studio, IDEA, မဌင်သစီသသူရဲ စသည်တို့ကို

3. နေ့စဉ်အသုံသပဌုပါ။

ကအဆင့်တလင်၊ နေ့စဉ်အသုံသပဌုနေစဉ်အတလင်သ ခလဲခဌမ်သစိတ်ဖဌာစက်ကို အရဟိန်မဌဟင့်ရန် နည်သလမ်သမျာသအကဌောင်သ စကာသလုံသအချို့ကို ပဌောရန်အချိန်ဖဌစ်သည်။ ပရောဂျက်တစ်ခုလုံသ၏ ပဌီသပဌည့်စုံသော ခလဲခဌမ်သစိတ်ဖဌာမဟုတစ်ခုသည် အချိန်မျာသစလာယူရသော်လည်သ ပရောဂျက်တစ်ခုလုံသတလင် ကျလန်ုပ်တို့သည် ကုဒ်ကို တစ်ကဌိမ်တည်သမည်မျဟမကဌာခဏ ပဌောင်သလဲနိုင်သနည်သ။ ကမျဟကဌီသမာသသော refactoring သည် ကုဒ်အခဌေခံတစ်ခုလုံသကို ချက်ချင်သအကျိုသသက်ရောက်စေမည့် ပမာဏမရဟိပေ။ တစ်ကဌိမ်တလင် ပဌောင်သလဲနေသော ဖိုင်အရေအတလက်သည် တစ်ဒါဇင်ထက် နည်သပါသသောကဌောင့် ၎င်သတို့ကို ခလဲခဌမ်သစိတ်ဖဌာရန် သင့်လျော်ပါသည်။ အဲဒီလို အခဌေအနေမျိုသတော့ ရဟိတယ်။ တိုသမဌင့်သုံသသပ်မဟုမုဒ်. စိတ်မပူပါနဲ့၊ ဒါက တခဌာသကိရိယာမဟုတ်ပါဘူသ။ ကသည်မဟာ ပဌောင်သလဲထာသသောဖိုင်မျာသနဟင့် ၎င်သတို့၏ မဟီခိုမဟုမျာသကိုသာ ခလဲခဌမ်သစိတ်ဖဌာနိုင်စေမည့် အထူသမုဒ်ဖဌစ်ပဌီသ အကယ်၍ သင်သည် plugin ထည့်သလင်သထာသသည့် IDE တလင် အလုပ်လုပ်နေပါက တည်ဆောက်ပဌီသနောက် ၎င်သသည် အလိုအလျောက်ဖဌစ်သလာသမည်ဖဌစ်သည်။

ခလဲခဌမ်သစိတ်ဖဌာသူသည် မကဌာသေသမီက ပဌောင်သလဲထာသသော ကုဒ်တလင် ပဌဿနာမျာသကို တလေ့ရဟိပါက၊ ၎င်သကို လလတ်လပ်စလာ သတင်သပို့ပါမည်။ ဥပမာအာသဖဌင့်၊ PVS-Studio သည် သတိပေသချက်တစ်ခုကို အသုံသပဌု၍ ၎င်သအကဌောင်သကို သင့်အာသ ပဌောပဌပါမည်-

Static analysis - နိဒါန်သမဟ ပေါင်သစပ်မဟုအထိ
ဆော့ဖ်ဝဲကို အသုံသပဌုရန် developer မျာသအာသ ပဌောခဌင်သသည် မလုံလောက်ပါ။ အဲဒါက ဘာလဲဆိုတာနဲ့ အဲဒါကို တစ်နည်သနည်သနဲ့ ပဌောပဌဖို့လိုတယ်။ ဥပမာ၊ ကတလင်၊ PVS-Studio အတလက် အမဌန်စတင်ခဌင်သအကဌောင်သ ဆောင်သပါသမျာသဖဌစ်သည်၊ သို့သော် သင်နဟစ်သက်သည့် မည်သည့်ကိရိယာအတလက် အလာသတူသင်ခန်သစာမျာသကို သင်ရဟာတလေ့နိုင်သည်-

ထိုသို့သော ဆောင်သပါသမျာသသည် နေ့စဥ်အသုံသပဌုရန်အတလက် လိုအပ်သော အချက်အလက်အာသလုံသကို ပေသစလမ်သပဌီသ အချိန်အမျာသကဌီသမယူပါ။ 🙂

ကိရိယာကို သိခလင့်ရသည့်အဆင့်တလင်ပင်၊ ပထမဆုံသ လလဟတ်တင်မဟုတစ်ခုအတလင်သ သတိပေသချက်အမျာသအပဌာသကို ကျလန်ုပ်တို့ တာသမဌစ်ထာသသည်။ ကံမကောင်သစလာပဲ၊ static ခလဲခဌမ်သစိတ်ဖဌာသူမျာသသည် မပဌည့်စုံသောကဌောင့် တစ်ခါတစ်ရံ ၎င်သတို့သည် မဟာသယလင်သသောအပဌုသဘောမျာသကို ပေသကဌသည်။ ဥပမာအာသဖဌင့်၊ Visual Studio အတလက် PVS-Studio ပလပ်အင်တလင် ၎င်သတို့ကို ဖိနဟိပ်ရန် လလယ်ကူသည်-

Static analysis - နိဒါန်သမဟ ပေါင်သစပ်မဟုအထိ
သို့သော် သူတို့ကို ဖိနဟိပ်ရုံထက်မက သင်လုပ်နိုင်သည် ။ ဥပမာအာသဖဌင့်၊ သင်သည် အကူအညီပေသရန် ပဌဿနာတစ်ခုကို တိုင်ကဌာသနိုင်သည်။ အကယ်၍ false positive ကို ပဌုပဌင်နိုင်ပါက၊ ထို့နောက် သင့် codebase တလင် သတ်မဟတ်ထာသသော false positive မျာသ နည်သပါသပဌီသ နည်သပါသလာသည်ကို သတိပဌုမိနိုင်မည်ဖဌစ်သည်။

ပေါင်သစည်သပဌီသနောက်

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

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

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

Static analysis - နိဒါန်သမဟ ပေါင်သစပ်မဟုအထိ

ကဆောင်သပါသကို အင်္ဂလိပ်စကာသပဌော ပရိသတ်နဟင့် မျဟဝေလိုပါက၊ ဘာသာပဌန်လင့်ခ်- Maxim Zvyagintsev ကို အသုံသပဌုပါ။ Static Analysis- စတင်ခဌင်သမဟ ပေါင်သစည်သခဌင်သအထိ.

source: www.habr.com

မဟတ်ချက် Add