د C# لپاره د PVS-Studio په کارولو سره په GitLab کې د ادغام غوښتنو تحلیل

د C# لپاره د PVS-Studio په کارولو سره په GitLab کې د ادغام غوښتنو تحلیل
د GitLab سره مینه لرئ او د کیچونو څخه نفرت کوئ؟ غواړئ د خپل سرچینې کوډ کیفیت ښه کړئ؟ بیا تاسو سم ځای ته رسیدلی یاست. نن ورځ موږ به تاسو ته ووایو چې څنګه د PVS-Studio C# شنونکی تنظیم کړئ ترڅو د ادغام غوښتنې چیک کړئ. ټولو ته مبارکي او خوشحاله لوستل.

PVS- سټوډیو په C، C++، C# او Java کې لیکل شوي پروګرامونو د سرچینې کوډ کې د غلطیو او احتمالي زیانونو موندلو لپاره یوه وسیله ده. په وینډوز، لینکس او macOS کې په 64-bit سیسټمونو کار کوي. کولی شي د 32-bit، 64-bit او ایمبیډ شوي ARM پلیټ فارمونو لپاره ډیزاین شوی کوډ تحلیل کړي.

په هرصورت، موږ د PVS-Studio 7.08 خپور کړی، په کوم کې چې موږ ډیری شیان ترسره کړي دي په زړه پورې. د مثال په توګه:

  • د لینکس او macOS لپاره C# شنونکی؛
  • د سوار لپاره پلگ ان؛
  • د نوي فایل لیست چک حالت.

د فایل لیست چک حالت

پخوا، د ځانګړو فایلونو د کتلو لپاره، دا اړینه وه چې د .xml فایل د فایلونو لیست سره پارسر ته انتقال کړئ. مګر دا چې دا خورا اسانه نه دی، موږ د .txt لیږد وړتیا اضافه کړې، کوم چې ژوند خورا ساده کوي.

د ځانګړو فایلونو چک کولو لپاره، تاسو باید بیرغ مشخص کړئ -- سرچینه فایلونه (-f) او پاس کړئ .txt د فایلونو لیست سره. دا داسې ښکاري:

pvs-studio-dotnet -t path/to/solution.sln -f fileList.txt -o project.json

که تاسو د ژمنې چکونو تنظیم کولو یا پلولو غوښتنې سره علاقه لرئ ، تاسو کولی شئ دا د دې حالت په کارولو سره هم ترسره کړئ. توپیر به د تحلیل لپاره د فایلونو لیست ترلاسه کولو کې وي او پدې پورې اړه لري چې تاسو کوم سیسټمونه کاروئ.

د ادغام غوښتنې چک اصول

د چک اصلي جوهر دا دی چې ډاډ ترلاسه شي چې د تحلیل کونکي لخوا کشف شوي ستونزې په ادغام کې نه راځي د بادار څانګه همدارنګه، موږ نه غواړو هر ځل ټوله پروژه تحلیل کړو. برسېره پردې، کله چې د څانګو یوځای کول، موږ د بدل شوي فایلونو لیست لرو. له همدې امله ، زه وړاندیز کوم چې د ادغام غوښتنې چیک اضافه کړم.

دا هغه څه دي چې د ادغام غوښتنه د جامد تحلیل کونکي معرفي کولو دمخه ورته ښکاري:

د C# لپاره د PVS-Studio په کارولو سره په GitLab کې د ادغام غوښتنو تحلیل
يعنې ټولې هغه تېروتنې چې په څانګه کې وې بدلونونه، به ماسټر څانګې ته لاړ شي. څرنګه چې موږ دا نه غواړو، موږ تحلیل اضافه کوو، او اوس سرکټ داسې ښکاري:

د C# لپاره د PVS-Studio په کارولو سره په GitLab کې د ادغام غوښتنو تحلیل
موږ تحلیل کوو بدلونونه2 او، که کومه تېروتنه نه وي، موږ د ادغام غوښتنه منو، که نه نو موږ یې ردوو.

په هرصورت ، که تاسو د C/C++ لپاره د ژمنو تحلیل کولو او راوبولو غوښتنې سره علاقه لرئ ، نو تاسو کولی شئ پدې اړه ولولئ. دلته.

ګیتاباب

ګیتاباب د خلاصې سرچینې DevOps ژوند سایکل ویب وسیله ده چې د Git لپاره د خپل ویکي ، بګ تعقیب سیسټم ، CI/CD پایپ لاین او نورو ځانګړتیاو سره د کوډ ذخیره کولو مدیریت سیسټم چمتو کوي.

مخکې لدې چې تاسو د ادغام غوښتنې تحلیل پیل کړئ ، تاسو اړتیا لرئ خپله پروژه راجستر او اپلوډ کړئ. که تاسو نه پوهیږئ چې دا څنګه ترسره کړئ، زه وړاندیز کوم مقاله زما همکار

تبصره. لاندې تشریح شوي چاپیریال تنظیم کولو لاره یو له ممکنه څخه دی. هدف دا دی چې د تحلیل لپاره اړین چاپیریال رامینځته کولو او د تحلیل کونکي پیل کولو لپاره ګامونه وښیې. شاید ، ستاسو په قضیه کې ، دا به خورا غوره وي چې د چاپیریال چمتو کولو مرحلې جلا کړئ (د ذخیره کولو اضافه کول ، د تحلیل کونکي نصب کول) او تحلیل: د مثال په توګه ، د اړین چاپیریال سره د ډاکر عکسونو چمتو کول او د دوی کارول ، یا کومه بله لاره.

د ښه پوهیدو لپاره چې اوس به څه پیښ شي ، زه وړاندیز کوم چې لاندې ډیاګرام ته یو نظر وګورئ:

د C# لپاره د PVS-Studio په کارولو سره په GitLab کې د ادغام غوښتنو تحلیل
تحلیل کونکی د کار کولو لپاره .NET کور SDK 3 ته اړتیا لري ، نو د تحلیل کونکي نصبولو دمخه ، تاسو اړتیا لرئ د مایکروسافټ ذخیره اضافه کړئ ، له کوم څخه چې د تحلیل کونکي لپاره اړین انحصارونه به نصب شي. د مختلف لینکس توزیع لپاره د مایکروسافټ ذخیره اضافه کول په اړوند سند کې تشریح شوی.

د بسته بندۍ مدیر له لارې د PVS-Studio نصبولو لپاره، تاسو به د PVS-Studio ذخیره اضافه کولو ته هم اړتیا ولرئ. د مختلف توزیع لپاره د ذخیره کولو اضافه کول په تفصیل سره تشریح شوي د اسنادو اړونده برخه.

تحلیل کونکی د کار کولو لپاره د جواز کیلي ته اړتیا لري. تاسو کولی شئ د آزموینې جواز ترلاسه کړئ شنونکي ډاونلوډ پاڼه.

تبصره. مهرباني وکړئ په یاد ولرئ چې د عملیاتو تشریح شوي حالت (د ادغام غوښتنې تحلیل) د شرکت جواز ته اړتیا لري. له همدې امله، که تاسو غواړئ چې د "پیغام" په ډګر کې د عملیاتو دا طریقه هڅه وکړئ، مه هیروئ چې دا په ګوته کړئ چې تاسو د شرکت جواز ته اړتیا لرئ.

که د ادغام غوښتنه رامینځته شي ، نو موږ اړتیا لرو یوازې د بدل شوي فایلونو لیست تحلیل کړو ، که نه نو موږ ټولې فایلونه تحلیل کوو. د تحلیل وروسته، موږ اړتیا لرو چې لاګونه په هغه شکل بدل کړو چې موږ ورته اړتیا لرو.

اوس، زموږ د سترګو په وړاندې د کار الګوریتم سره، موږ کولی شو د سکریپټ لیکلو ته لاړ شو. د دې کولو لپاره، تاسو اړتیا لرئ چې فایل بدل کړئ .gitlab-ci.yml یا، که دا شتون ونلري، جوړ کړئ. د دې رامینځته کولو لپاره ، تاسو اړتیا لرئ د خپلې پروژې په نوم کلیک وکړئ -> CI/CD تنظیم کړئ.

د C# لپاره د PVS-Studio په کارولو سره په GitLab کې د ادغام غوښتنو تحلیل
اوس موږ د سکریپټ لیکلو ته چمتو یو. راځئ لومړی هغه کوډ ولیکئ چې شنونکی به نصب کړي او جواز ته ننوځي:

before_script:
  - apt-get update && apt-get -y install wget gnupg 

  - apt-get -y install git
  - wget https://packages.microsoft.com/config/debian/10/
packages-microsoft-prod.deb -O packages-microsoft-prod.deb
  - dpkg -i packages-microsoft-prod.deb
  - apt-get update
  - apt-get install apt-transport-https
  - apt-get update
  
  - wget -q -O - https://files.viva64.com/etc/pubkey.txt | apt-key add -
  - wget -O /etc/apt/sources.list.d/viva64.list
https://files.viva64.com/etc/viva64.list
  - apt-get update
  - apt-get -y install pvs-studio-dotnet

  - pvs-studio-analyzer credentials $PVS_NAME $PVS_KEY
  - dotnet restore "$CI_PROJECT_DIR"/Test/Test.sln

څرنګه چې نصب او فعالول باید د نورو ټولو سکریپټونو څخه مخکې واقع شي، موږ یو ځانګړی لیبل کاروو مخکی_سکریپټ. اجازه راکړئ دا برخه یو څه تشریح کړم.

د تحلیل کونکي نصبولو لپاره چمتو کول:

  - wget https://packages.microsoft.com/config/debian/10/
packages-microsoft-prod.deb -O packages-microsoft-prod.deb
  - dpkg -i packages-microsoft-prod.deb
  - apt-get update
  - apt-get install apt-transport-https
  - apt-get update

د PVS- سټوډیو او تحلیل کونکي ذخیره اضافه کول:

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

د جواز فعالول:

  - pvs-studio-analyzer credentials $PVS_NAME $PVS_KEY

$PVS_NAME - کارن نوم.

$PVS_KEY - د محصول کلیدي.

د پروژې انحصار بیا رغول چیرته $CI_PROJECT_DIR - د پروژې لارښود ته بشپړ لاره:

  - dotnet restore "$CI_PROJECT_DIR"/Path/To/Solution.sln

د سم تحلیل لپاره، پروژه باید په بریالیتوب سره جوړه شي، او د هغې انحصار باید بیرته وساتل شي (د مثال په توګه، اړین NuGet کڅوړې باید ډاونلوډ شي).

تاسو کولی شئ په کلیک کولو سره د جواز معلوماتو لرونکي چاپیریال متغیرات تنظیم کړئ ټاکلو په، او وروسته - پر CI/CD.

د C# لپاره د PVS-Studio په کارولو سره په GitLab کې د ادغام غوښتنو تحلیل
په هغه کړکۍ کې چې خلاصیږي، توکي ومومئ ډولونه، په تڼۍ کې ښي کلیک وکړئ Expand او متغیرات اضافه کړئ. پایله باید لاندې وي:

د C# لپاره د PVS-Studio په کارولو سره په GitLab کې د ادغام غوښتنو تحلیل
اوس موږ کولی شو تحلیل ته لاړ شو. لومړی، راځئ چې د بشپړ تحلیل لپاره سکریپټ اضافه کړو. بیرغ ته -t بیرغ ته د حل لاره تیر کړئ -o فایل ته لاره ولیکئ چیرې چې د تحلیل پایلې به لیکل کیږي. موږ د راستنیدو کوډ سره هم علاقه لرو. په دې حالت کې، موږ د کار ودرولو کې لیوالتیا لرو کله چې د راستنیدو کوډ معلومات ولري چې د تحلیل په جریان کې اخطارونه خپاره شوي. دلته هغه څه دي چې ټوټه ورته ښکاري:

job:
  script:
  - exit_code=0
  - pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -o 
PVS-Studio.json || exit_code=$?
  - exit_code=$((($exit_code & 8)/8))
  - if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi

د راستنیدو کوډونه د بټ ماسک په اصولو کار کوي. د مثال په توګه، که د تحلیل په پایله کې اخطارونه خپاره شوي وي، نو د بیرته ستنیدو کوډ به 8 وي. که چیرې جواز په یوه میاشت کې پای ته ورسیږي، نو د بیرته ستنیدو کوډ به 4 وي. که د تحلیل په جریان کې غلطی وموندل شي، او جواز هم د یوې میاشتې په اوږدو کې پای ته رسیږي، د کوډ بیرته ستنیدو کې، دواړه ارزښتونه به لیکل کیږي: شمیرې یوځای کړئ او د بیرته راستنیدو وروستی کوډ ترلاسه کړئ - 8 + 4 = 12. په دې توګه، د اړوندو بټونو په چک کولو سره، دا ممکنه ده چې د تحلیل په جریان کې د مختلفو ایالتونو په اړه معلومات ترلاسه کړئ. د راستنیدو کوډونه د سند په pvs-studio-dotnet (Linux / macOS) د بیرته راستنیدو کوډونو برخه کې په ډیر تفصیل سره تشریح شوي.د PVS-Studio په کارولو سره د کمانډ لاین څخه د لید سټوډیو / MSBuild / .NET کور پروژې چیک کول".

پدې حالت کې، موږ د ټولو بیرته راستنیدو کوډونو سره علاقه لرو چیرې چې 8 ښکاري.

  - exit_code=$((($exit_code & 8)/8))

موږ به 1 ترلاسه کړو کله چې د راستنیدو کوډ د هغه شمیرې برخه ولري چې موږ یې لیوالتیا لرو، که نه نو موږ به 0 ترلاسه کړو.

دا وخت دی چې د ادغام غوښتنې تحلیل اضافه کړئ. د دې کولو دمخه، راځئ چې د سکریپټ لپاره یو ځای چمتو کړو. موږ اړتیا لرو چې دا یوازې هغه وخت اجرا شي کله چې د ادغام غوښتنه پیښ شي. دا داسې ښکاري:

merge:
  script:
  only:
  - merge_requests

راځئ چې پخپله سکریپټ ته لاړ شو. زه د دې حقیقت سره مخ شوم چې مجازی ماشین په اړه هیڅ نه پوهیږي اصلي / ماسټر. نو راځئ چې د هغې سره لږه مرسته وکړو:

  - git fetch origin

اوس موږ د څانګو توپیر ترلاسه کوو او پایله یې خوندي کوو په ډایلولو سره دوتنه

  - git diff --name-only origin/master $CI_COMMIT_SHA > pvs-fl.txt

چیرته $CI_COMMIT_SHA - د وروستي ژمنې هش.

بیا، موږ د بیرغ په کارولو سره د فایلونو لیست تحلیل پیل کوو -f. موږ مخکې ترلاسه شوي .txt فایل دې ته لیږدوو. ښه، د بشپړ تحلیل سره د مشابهت په واسطه، موږ د راستنیدو کوډونو ته ګورو:

  - exit_code=0
  - pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -f 
pvs-fl.txt -o PVS-Studio.json || exit_code=$?
  - exit_code=$((($exit_code & 8)/8))
  - if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi

د ادغام غوښتنې چک کولو لپاره بشپړ سکریپټ به داسې ښکاري:

merge:
  script:
  - git fetch origin
  - git diff --name-only origin/master $CI_COMMIT_SHA > pvs-fl.txt
  - exit_code=0
  - pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -f 
pvs-fl.txt -o PVS-Studio.json || exit_code=$?
  - exit_code=$((($exit_code & 8)/8))
  - if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi
  only:
  - merge_requests

دا یوازې د ټولو سکریپټونو کار کولو وروسته د لاګ تبادلې اضافه کولو لپاره پاتې کیږي. د لیبل په کارولو سره after_script او افادیت پلګ کنورټر:

after_script:
  - plog-converter -t html -o eLog ./PVS-Studio.json

افادیت پلګ کنورټر د خلاصې سرچینې پروژه ده چې د پارسر غلطی راپور ورکولو په مختلفو بڼو لکه HTML کې بدلولو لپاره کارول کیږي. د افادیت د لا زیاتو توضیحاتو لپاره، د "پلګ کنورټر یوټیلیټ" فرعي برخه وګورئ. د اسنادو اړونده برخه.

په هرصورت، که تاسو غواړئ په اسانۍ سره د IDE څخه د json راپور سره کار وکړئ، نو زه وړاندیز کوم چې زموږ نښلول د IDE رایډر لپاره. د هغې کارول په تفصیل سره تشریح شوي اړونده سند.

دلته د اسانتیا لپاره .gitlab-ci.yml ټول:

image: debian

before_script:
  - apt-get update && apt-get -y install wget gnupg 

  - apt-get -y install git
  - wget https://packages.microsoft.com/config/debian/10/
packages-microsoft-prod.deb -O packages-microsoft-prod.deb
  - dpkg -i packages-microsoft-prod.deb
  - apt-get update
  - apt-get install apt-transport-https
  - apt-get update
  
  - wget -q -O - https://files.viva64.com/etc/pubkey.txt | apt-key add -
  - wget -O /etc/apt/sources.list.d/viva64.list
https://files.viva64.com/etc/viva64.list
  - apt-get update
  - apt-get -y install pvs-studio-dotnet

  - pvs-studio-analyzer credentials $PVS_NAME $PVS_KEY
  - dotnet restore "$CI_PROJECT_DIR"/Test/Test.sln

merge:
  script:
  - git fetch origin
  - git diff --name-only origin/master $CI_COMMIT_SHA > pvs-fl.txt
  - exit_code=0
  - pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -f 
pvs-fl.txt -o PVS-Studio.json || exit_code=$?
  - exit_code=$((($exit_code & 8)/8))
  - if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi
  only:
  - merge_requests

job:
  script:
  - exit_code=0
  - pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -o 
PVS-Studio.json || exit_code=$?
  - exit_code=$((($exit_code & 8)/8))
  - if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi
  
after_script:
  - plog-converter -t html -o eLog ./PVS-Studio.json

یوځل چې هرڅه په فایل کې اضافه شي ، کلیک وکړئ بدلونونه ژمن کړئ. د دې لپاره چې وګورئ چې هرڅه سم دي، لاړ شئ CI / CD -> نل لیکې -> منډه. د مجازی ماشین کړکۍ به خلاص شي، چې په پای کې باید لاندې وي:

د C# لپاره د PVS-Studio په کارولو سره په GitLab کې د ادغام غوښتنو تحلیل
ولیدل کار بریالی شو - بریا، هرڅه سم دي. اوس تاسو کولی شئ ازموینه وکړئ چې تاسو څه کړي دي.

د کار مثالونه

د کار د مثال لپاره، راځئ یوه ساده پروژه جوړه کړو (په د بادار) کوم چې به ډیری فایلونه ولري. له هغې وروسته، په بله څانګه کې، موږ به یوازې یو فایل بدل کړو او د ادغام غوښتنه کولو هڅه وکړو.

راځئ چې دوه قضیې په پام کې ونیسو: کله چې ترمیم شوي فایل کې تېروتنه وي او کله چې نه وي. لومړی، د غلطۍ سره یو مثال.

راځئ چې ووایو په ماسټر څانګه کې فایل شتون لري Program.cs، کوم چې غلطۍ نلري، او په بله څانګه کې، پراختیا کونکي غلط کوډ اضافه کړی او غواړي د یوځای کولو غوښتنه وکړي. هغه څه ډول تېروتنه وکړه دومره مهمه نه ده، اصلي خبره دا ده چې دا شتون لري. د مثال په توګه، ما آپریټر هیر کړ غورځوي (هو، دومره غلط):

void MyAwesomeMethod(String name)
{
  if (name == null)
    new ArgumentNullException(....);
  // do something
  ....
}

راځئ چې د یوې غلطۍ سره د مثال تحلیل پایله وګورو. همچنان ، د ډاډ ترلاسه کولو لپاره چې یوازې یوه فایل پارس شوی ، ما بیرغ اضافه کړ -r د pvs-studio-dotnet پیل کرښې ته:

د C# لپاره د PVS-Studio په کارولو سره په GitLab کې د ادغام غوښتنو تحلیل
موږ ګورو چې شنونکي یوه تېروتنه وموندله او اجازه یې ورنکړه چې څانګې سره یوځای شي.

راځئ چې بېلګه پرته له خطا وګورو. د کوډ اصلاح کول:

void MyAwesomeMethod(String name)
{
  if (name == null)
    throw new ArgumentNullException(....);
  // do something
  ....
}

د ادغام غوښتنې تحلیل پایلې:

د C# لپاره د PVS-Studio په کارولو سره په GitLab کې د ادغام غوښتنو تحلیل
لکه څنګه چې موږ لیدلی شو، کومه تېروتنه ونه موندل شوه، او د دندې اجرا کول بریالي وو، کوم چې موږ غوښتل وګورو.

پایلې

د څانګو یوځای کولو دمخه د خراب کوډ له مینځه وړل خورا اسانه او خوندور دي. له همدې امله، که تاسو CI/CD کاروئ، هڅه وکړئ چې د دې چک کولو لپاره یو جامد تحلیل کونکی ځای په ځای کړئ. سربیره پردې، دا په ساده ډول ترسره کیږي.

تاسو د پاملرنې څخه مو مننه.

د C# لپاره د PVS-Studio په کارولو سره په GitLab کې د ادغام غوښتنو تحلیل
که تاسو غواړئ دا مقاله د انګلیسي ژبو لیدونکو سره شریکه کړئ، مهرباني وکړئ د ژباړې لینک وکاروئ: نیکولای میرونوف. د C# لپاره د PVS-Studio په کارولو سره په GitLab کې د ادغام غوښتنو تحلیل.

سرچینه: www.habr.com

Add a comment