C#-д зориулсан PVS-Studio ашиглан GitLab дээр нэгтгэх хүсэлтийн шинжилгээ

C#-д зориулсан PVS-Studio ашиглан GitLab дээр нэгтгэх хүсэлтийн шинжилгээ
GitLab-д дуртай, алдаануудыг үзэн яддаг уу? Эх кодынхоо чанарыг сайжруулахыг хүсч байна уу? Тэгвэл та зөв газартаа хүрлээ. Өнөөдөр бид нэгтгэх хүсэлтийг шалгахын тулд PVS-Studio C# анализаторыг хэрхэн тохируулахыг танд хэлэх болно. Ганц эвэртийн уур амьсгалтай, хүн бүрд аз жаргалтай уншаарай.

PVS-студи нь C, C++, C# болон Java хэл дээр бичигдсэн программуудын эх кодын алдаа болон болзошгүй эмзэг байдлыг тодорхойлох хэрэгсэл юм. Windows, Linux болон macOS дээрх 64 битийн системүүд дээр ажиллана. 32 бит, 64 бит болон суулгагдсан ARM платформд зориулагдсан кодыг шинжлэх боломжтой.

Дашрамд хэлэхэд бид маш олон зүйлийг хийсэн PVS-Studio 7.08 хувилбарыг гаргасан. сонирхолтой. Жишээ нь:

  • Linux болон macOS-д зориулсан C# анализатор;
  • Rider-д зориулсан залгаас;
  • шинэ файлын жагсаалтыг шалгах горим.

Файлын жагсаалтыг шалгах горим

Өмнө нь тодорхой файлуудыг шалгахын тулд анализатор руу файлын жагсаалт бүхий .xml файлыг дамжуулах шаардлагатай байсан. Гэхдээ энэ нь тийм ч тохиромжтой биш тул бид .txt файлыг шилжүүлэх боломжийг нэмсэн бөгөөд энэ нь амьдралыг маш энгийн болгодог.

Тодорхой файлуудыг шалгахын тулд та тугийг зааж өгөх ёстой --sourceFiles (-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++-ийн үүрэг хариуцлагын дүн шинжилгээ хийх, татах хүсэлтийг сонирхож байгаа бол энэ талаар уншиж болно. энд.

GitLab

GitLab нь нээлттэй эхийн вэб дээр суурилсан DevOps амьдралын мөчлөгийн хэрэгсэл бөгөөд Git-д зориулсан кодын хадгалах удирдлагын системийг өөрийн вики, асуудал хянах систем, CI/CD дамжуулах хоолой болон бусад функцээр хангадаг.

Та нэгтгэх хүсэлтэд дүн шинжилгээ хийж эхлэхээсээ өмнө төслөө бүртгүүлж, байршуулах хэрэгтэй. Хэрэв та үүнийг яаж хийхээ мэдэхгүй байгаа бол би санал болгож байна нийтлэл миний хамтран зүтгэгч.

тайлбар. Доор тайлбарласан орчныг бий болгох арга нь боломжит аргуудын нэг юм. Зорилго нь дүн шинжилгээ хийх, анализаторыг ажиллуулахад шаардлагатай орчныг бүрдүүлэх алхмуудыг харуулах явдал юм. Магадгүй таны тохиолдолд хүрээлэн буй орчныг бэлтгэх (репозитор нэмэх, анализатор суурилуулах) болон дүн шинжилгээ хийх үе шатуудыг салгах нь илүү оновчтой байх болно: жишээлбэл, Docker зургийг шаардлагатай орчинд бэлтгэх, тэдгээрийг ашиглах эсвэл өөр аргыг ашиглах.

Одоо юу болохыг илүү сайн ойлгохын тулд би дараах диаграмыг үзэхийг санал болгож байна.

C#-д зориулсан PVS-Studio ашиглан GitLab дээр нэгтгэх хүсэлтийн шинжилгээ
Анализаторыг ажиллуулахын тулд .NET Core SDK 3 шаардлагатай тул анализаторыг суулгахаасаа өмнө анализаторт шаардлагатай хамаарлыг суулгах Microsoft репозиторуудыг нэмэх хэрэгтэй. Төрөл бүрийн Linux түгээлтийн Microsoft репозиторыг нэмж байна холбогдох баримт бичигт тодорхойлсон.

Багц менежерээр дамжуулан 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-Studio репозитор болон анализатор нэмэх:

  - 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=XNUMX. Тиймээс, харгалзах битүүдийг шалгаснаар дүн шинжилгээ хийх явцад янз бүрийн төлөв байдлын талаархи мэдээллийг авах боломжтой. Буцаах кодуудыг баримт бичгийн "pvs-studio-dotnet (Linux / macOS) Буцаах кодууд" хэсэгт илүү дэлгэрэнгүй тайлбарласан болно.Visual Studio / MSBuild / .NET Core төслүүдийг PVS-Studio ашиглан командын мөрөөс шалгаж байна".

Энэ тохиолдолд бид 8 гарч ирэх бүх буцаах кодыг сонирхож байна.

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

Буцах код нь бидний сонирхож буй тооны битийг агуулж байвал бид 1-ийг хүлээн авах болно, эс тэгвээс бид 0-ийг хүлээн авна.

Нэгтгэх хүсэлтийн шинжилгээг нэмэх цаг болжээ. Үүнийг хийхийн өмнө скрипт хийх газрыг бэлдье. Бид үүнийг нэгтгэх хүсэлт гарсан үед л гүйцэтгэх хэрэгтэй. Энэ нь дараах байдалтай харагдаж байна.

merge:
  script:
  only:
  - merge_requests

Скрипт рүүгээ шилжье. Виртуал машин юу ч мэдэхгүй гэсэн асуудалтай тулгарсан гарал үүсэл/мастер. Тиймээс түүнд бага зэрэг тусалцгаая:

  - git fetch origin

Одоо бид салбаруудын ялгааг олж аваад үр дүнг хадгална txt файл:

  - 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:
  - plog-converter -t html -o eLog ./PVS-Studio.json

Хэрэгсэл плог хөрвүүлэгч нь задлагчийн алдааны тайланг HTML гэх мэт янз бүрийн хэлбэрт хөрвүүлэхэд ашигладаг нээлттэй эхийн төсөл юм. Хэрэгслийн илүү нарийвчилсан тайлбарыг "Plog Converter Utility" дэд хэсэгт өгсөн болно. баримт бичгийн холбогдох хэсэг.

Дашрамд хэлэхэд, хэрэв та IDE-ийн .json тайлантай орон нутгийн хэмжээнд эвтэйхэн ажиллахыг хүсвэл би манайхыг санал болгож байна. залгаас IDE Rider-д зориулсан. Түүний хэрэглээг илүү дэлгэрэнгүй тайлбарласан болно холбогдох баримт бичиг.

Тохиромжтой болгох үүднээс энд байна .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

сэтгэгдэл нэмэх