Mion-sgrùdadh air iarrtasan aonaidh ann an GitLab a’ cleachdadh PVS-Studio airson C#

Mion-sgrùdadh air iarrtasan aonaidh ann an GitLab a’ cleachdadh PVS-Studio airson C#
A bheil gaol agad air GitLab agus a bheil gràin agad air biastagan? A bheil thu airson càileachd a’ chòd stòr agad a leasachadh? An uairsin tha thu air tighinn dhan àite cheart. An-diugh innsidh sinn dhut mar a rèiticheas tu an anailisiche PVS-Studio C # gus sùil a thoirt air iarrtasan aonaidh. Biodh faireachdainn aon-adharcach agad agus leughadh toilichte don h-uile duine.

PVS-Studio na inneal airson mearachdan agus so-leòntachd a chomharrachadh ann an còd stòr nam prògraman sgrìobhte ann an C, C ++, C # agus Java. Ag obair air siostaman 64-bit air Windows, Linux agus macOS. Is urrainn dhaibh còd a dhealbhadh airson àrd-ùrlaran ARM 32-bit, 64-bit agus freumhaichte.

Co-dhiù, leig sinn a-mach PVS-Studio 7.08, anns an do rinn sinn tòrr rudan inntinneach. Mar eisimpleir:

  • C # anailisiche airson Linux agus macOS;
  • plugan airson Rider;
  • modh sgrùdaidh liosta faidhle ùr.

Modh sgrùdaidh liosta faidhle

Roimhe sin, gus sùil a thoirt air cuid de na faidhlichean, bha e riatanach a dhol seachad air .xml le liosta de na faidhlichean chun an analyzer. Ach leis nach eil seo glè ghoireasach, tha sinn air an comas gluasad .txt a chuir ris, a tha a’ dèanamh beatha gu math sìmplidh.

Gus sgrùdadh a dhèanamh air faidhlichean sònraichte, feumaidh tu am bratach a shònrachadh --sourceFiles (-f) agus a 'gluasad .txt le liosta de na faidhlichean. Tha e coltach ri seo:

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

Ma tha ùidh agad ann a bhith a’ stèidheachadh iarrtasan sgrùdaidh no tarraing, faodaidh tu sin a dhèanamh leis a’ mhodh seo cuideachd. Bidh an diofar ann a bhith a’ faighinn liosta fhaidhlichean airson an sgrùdadh agus bidh e an urra ri dè na siostaman a tha thu a’ cleachdadh.

Prionnsabal sgrùdadh air iarrtas co-aonaidh

Is e prìomh adhbhar an t-seic dèanamh cinnteach nach bi na duilgheadasan a lorg an anailisiche aig àm an aonaidh a’ tuiteam a-steach don mhaighstir meur. Chan eil sinn cuideachd airson mion-sgrùdadh a dhèanamh air a’ phròiseact gu lèir a h-uile turas. A bharrachd air an sin, nuair a thèid meuran a chur còmhla, tha liosta againn de fhaidhlichean atharraichte. Mar sin, tha mi a’ moladh sgrùdadh iarrtas aonaidh a chuir ris.

Seo cò ris a tha iarrtas co-aonaidh coltach mus cuir thu anailisiche statach an gnìomh:

Mion-sgrùdadh air iarrtasan aonaidh ann an GitLab a’ cleachdadh PVS-Studio airson C#
Is e sin, a h-uile mearachd a bha anns a 'mheur atharrachaidhean, gluaisidh e chun phrìomh mheur. Leis nach biodh sinn ag iarraidh seo, bidh sinn a’ cur mion-sgrùdadh ris, agus a-nis tha an diagram a’ coimhead mar seo:

Mion-sgrùdadh air iarrtasan aonaidh ann an GitLab a’ cleachdadh PVS-Studio airson C#
A' mion-sgrùdadh atharraichean 2 agus, mura h-eil mearachdan ann, gabhaidh sinn ris an iarrtas co-aonaidh, air neo bidh sinn ga dhiùltadh.

Co-dhiù, ma tha ùidh agad ann a bhith a’ dèanamh anailis air geallaidhean agus a’ tarraing iarrtasan airson C/C ++, faodaidh tu leughadh mu dheidhinn an seo.

GitLab

GitLab na inneal cuairt-beatha DevOps stòr fosgailte stèidhichte air an lìon a bheir seachad siostam riaghlaidh stòr còd airson Git leis an uici aige fhèin, siostam lorg chùisean, loidhne-phìoban CI / CD agus feartan eile.

Mus tòisich thu a’ mion-sgrùdadh iarrtasan co-aonaidh, feumaidh tu do phròiseact a chlàradh agus a luchdachadh suas. Mura h-eil fios agad ciamar a nì thu seo, tha mi a’ moladh artaigil mo cho-obraiche.

thuirt. Is e an dòigh air an àrainneachd a tha air a mhìneachadh gu h-ìosal aon den fheadhainn a dh’ fhaodadh a bhith ann. Is e an t-amas na ceumannan a nochdadh airson a bhith a’ stèidheachadh na h-àrainneachd a tha riatanach airson mion-sgrùdadh agus an anailisiche a chuir air bhog. Is dòcha anns a 'chùis agad gum biodh e na b' fheàrr a bhith a 'sgaradh ìrean ullachadh na h-àrainneachd (a' cur stòran-tasgaidh, a 'stàladh anailisiche) agus mion-sgrùdadh: mar eisimpleir, ag ullachadh ìomhaighean Docker leis an àrainneachd riatanach agus gan cleachdadh, no dòigh air choireigin eile.

Gus tuigse nas fheàrr fhaighinn air na thachras a-nis, tha mi a’ moladh coimhead air an diagram a leanas:

Mion-sgrùdadh air iarrtasan aonaidh ann an GitLab a’ cleachdadh PVS-Studio airson C#
Feumaidh an anailisiche .NET Core SDK 3 obrachadh, agus mar sin mus cuir thu a-steach an anailisiche feumaidh tu na stòran Microsoft a chuir ris às an tèid na h-eisimeileachd a tha riatanach airson an anailisiche a chuir a-steach. A’ cur stòran Microsoft ris airson diofar sgaoilidhean Linux air a mhìneachadh anns an sgrìobhainn iomchaidh.

Gus PVS-Studio a chuir a-steach tron ​​​​mhanaidsear pacaid, feumaidh tu cuideachd na stòran PVS-Studio a chuir ris. Thathas a’ toirt cunntas nas mionaidiche air a bhith a’ cur tasgaidhean airson diofar sgaoilidhean ris earrann iomchaidh de na sgrìobhainnean.

Feumaidh an anailisiche iuchair cead airson obrachadh. Gheibh thu cead deuchainn aig Duilleag fiosrachaidh analyzer luchdadh a-nuas.

thuirt. Thoir an aire gu bheil feum aig a’ mhodh obrachaidh a chaidh a mhìneachadh (mion-sgrùdadh air iarrtasan co-aonaidh) air cead Iomairt. Mar sin, ma tha thu airson am modh obrachaidh seo fheuchainn, na dìochuimhnich innse anns an raon “Teachdaireachd” gu bheil feum agad air cead Iomairt.

Ma thachras iarrtas co-aonaidh, cha leig sinn a leas ach an liosta de fhaidhlichean atharraichte a sgrùdadh, air neo bidh sinn a’ sgrùdadh a h-uile faidhle. Às deidh mion-sgrùdadh, feumaidh sinn na logaichean a thionndadh a-steach don chruth a dh’ fheumas sinn.

A-nis, le algorithm na h-obrach ro do shùilean, faodaidh tu gluasad air adhart gu bhith a’ sgrìobhadh sgriobt. Gus seo a dhèanamh, feumaidh tu am faidhle atharrachadh .gitlab-ci.yml no, mura h-eil e ann, cruthaich e. Gus a chruthachadh, feumaidh tu briogadh air ainm do phròiseact -> Stèidhich CI / CD.

Mion-sgrùdadh air iarrtasan aonaidh ann an GitLab a’ cleachdadh PVS-Studio airson C#
A-nis tha sinn deiseil airson an sgriobt a sgrìobhadh. An toiseach sgrìobh sinn an còd a stàlaicheas an anailisiche agus a chuireas a-steach an cead:

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

Leis gum feum an stàladh agus an gnìomhachadh tachairt ro gach sgriobt eile, bidh sinn a’ cleachdadh bileag sònraichte roimh_script. Leig leam am pìos seo a mhìneachadh beagan.

Ag ullachadh airson an anailisiche a stàladh:

  - 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

A’ cur ri tasgaidhean PVS-Studio agus anailisiche:

  - 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

Gnìomhachadh ceadachas:

  - pvs-studio-analyzer credentials $PVS_NAME $PVS_KEY

$PVS_NAME - Ainm-cleachdaidh.

$PVS_KEY - iuchair toraidh.

A’ faighinn air ais eisimeileachd pròiseict far a bheil $CI_PROJECT_DIR - slighe slàn gu eòlaire a’ phròiseict:

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

Airson mion-sgrùdadh ceart, feumar am pròiseact a thogail gu soirbheachail, agus feumar na h-eisimeileachd aige ath-nuadhachadh (mar eisimpleir, feumar na pacaidean NuGet riatanach a luchdachadh sìos).

Faodaidh tu caochladairean àrainneachd a shuidheachadh anns a bheil fiosrachadh ceadachais le bhith a’ cliogadh suidheachadh, agus às deidh - air adhart CI/CD.

Mion-sgrùdadh air iarrtasan aonaidh ann an GitLab a’ cleachdadh PVS-Studio airson C#
Anns an uinneag a tha a’ fosgladh, lorg an nì Variables, cliog air a’ phutan air an taobh cheart Meudaich agus cuir caochladairean ris. Bu chòir don toradh coimhead mar seo:

Mion-sgrùdadh air iarrtasan aonaidh ann an GitLab a’ cleachdadh PVS-Studio airson C#
A-nis faodaidh tu a dhol air adhart gu mion-sgrùdadh. An toiseach, leig dhuinn sgriobt a chuir ris airson mion-sgrùdadh iomlan. Chun a 'bhratach -t bidh sinn a 'dol seachad air an t-slighe gu fuasgladh na brataich -o sgrìobh an t-slighe chun an fhaidhle anns an tèid toraidhean an anailis a sgrìobhadh. Tha ùidh againn cuideachd anns a’ chòd tilleadh. Anns a 'chùis seo, tha ùidh againn anns an obair a' stad nuair a tha fiosrachadh anns a 'chòd tilleadh gun deach rabhaidhean a thoirt seachad rè an anailis. Seo cò ris a tha am pìos seo coltach:

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

Bidh còdan tilleadh ag obair air prionnsapal beagan masg. Mar eisimpleir, ma chaidh rabhaidhean a thoirt seachad mar thoradh air an anailis, bidh an còd tilleadh co-ionann ri 8. Ma thig an cead gu crìch taobh a-staigh mìos, bidh an còd tilleadh co-ionann ri 4. Ma chaidh mearachdan a lorg rè an sgrùdaidh, agus thig an cead gu crìch taobh a-staigh mìos, tillidh an còd, thèid an dà luach a sgrìobhadh: cuir na h-àireamhan ri chèile agus faigh an còd tilleadh mu dheireadh - 8+4=12. Mar sin, le bhith a’ sgrùdadh nam pìosan co-fhreagarrach, gheibhear fiosrachadh mu dhiofar stàitean rè mion-sgrùdadh. Thathas a’ toirt cunntas nas mionaidiche air còdan tilleadh anns an earrainn “Pvs-studio-dotnet (Linux / macOS) Return Codes" den sgrìobhainn"A 'sgrùdadh phròiseactan Visual Studio / MBuild / .NET Core bhon loidhne-àithne a' cleachdadh PVS-Studio".

Anns a 'chùis seo, tha ùidh againn anns a h-uile còd tilleadh far a bheil 8 a' nochdadh.

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

Gheibh sinn 1 nuair a bhios am pìos den àireamh anns a bheil ùidh againn anns a’ chòd tilleadh, air neo gheibh sinn 0.

Tha an t-àm ann mion-sgrùdadh iarrtas co-aonaidh a chuir ris. Mus dèan sinn seo, ullaich sinn àite airson an sgriobt. Feumaidh sinn a bhith air a chuir gu bàs dìreach nuair a thig iarrtas co-aonaidh. Tha e coltach ri seo:

merge:
  script:
  only:
  - merge_requests

Gluaisidh sinn air adhart chun an sgriobt fhèin. Bha mi na aghaidh leis nach eil fios aig an inneal brìgheil dad mu dheidhinn tùs / maighstir. Mar sin cuidichidh sinn i beagan:

  - git fetch origin

A-nis gheibh sinn an eadar-dhealachadh eadar na geugan agus sàbhail an toradh a-steach txt faidhle:

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

Càite $CI_COMMIT_SHA — hash a' gheallaidh mu dheireadh.

An ath rud, tòisichidh sinn a’ sgrùdadh liosta nam faidhlichean a’ cleachdadh a’ bhratach -f. Bidh sinn a' gluasad am faidhle .txt a fhuair sinn roimhe thuige. Uill, le samhlachas leis an làn anailis, bidh sinn a’ coimhead air na còdan tilleadh:

  - 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

Bidh an sgriobt iomlan airson sgrùdadh a dhèanamh air iarrtas co-aonaidh a’ coimhead mar seo:

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

Chan eil air fhàgail ach tionndadh log a chuir ris às deidh na sgriobtaichean gu lèir a bhith air an giullachd. Cleachdaidh sinn an leubail às dèidh_script agus goireasachd plog-tionndaidh:

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

Goireasach plog-tionndaidh na phròiseact le còd fosgailte a thathas a’ cleachdadh gus aithisgean mearachd parser a thionndadh gu diofar chruthan, leithid HTML. Tha tuairisgeul nas mionaidiche air a’ ghoireas air a thoirt seachad anns an fho-earrann “Plog Converter Utility” earrann iomchaidh de na sgrìobhainnean.

Co-dhiù, ma tha thu airson obrachadh gu goireasach le aithisgean .json gu h-ionadail bhon IDE, tha mi a’ moladh ar plugan airson IDE Rider. Tha an cleachdadh air a mhìneachadh ann am barrachd mionaideachd sgrìobhainn iomchaidh.

Airson goireasachd, seo e .gitlab-ci.yml gu h-iomlan:

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

Aon uair ‘s gu bheil thu air a h-uile càil a chuir ris an fhaidhle, cliog air Geall atharraichean. Gus faicinn gu bheil a h-uile dad ceart, rachaibh gu CI / CD -> Pìoban -> Running. Fosglaidh uinneag inneal brìgheil, agus aig an deireadh bu chòir na leanas a bhith ann:

Mion-sgrùdadh air iarrtasan aonaidh ann an GitLab a’ cleachdadh PVS-Studio airson C#
chunnaic Shoirbhich le Job - soirbheachas, tha a h-uile dad gu math. A-nis faodaidh tu deuchainn a dhèanamh air na rinn thu.

Eisimpleirean obrach

Airson eisimpleir de dh'obair, cruthaichidh sinn pròiseact sìmplidh (a-steach mhaighstir) anns am bi grunn fhaidhlichean. Às deidh sin, ann am meur eile chan atharraich sinn ach aon fhaidhle agus feuchaidh sinn ri iarrtas co-aonaidh a dhèanamh.

Beachdaichidh sinn air dà chùis: nuair a tha mearachd anns an fhaidhle atharraichte agus nuair nach eil. An toiseach, eisimpleir le mearachd.

Canaidh sinn gu bheil faidhle anns a’ phrìomh mheur Prògram.cs, anns nach eil mearachdan, ach ann am meur eile chuir an leasaiche còd mearachdach ris agus tha e airson iarrtas co-aonaidh a dhèanamh. Dè an seòrsa mearachd a rinn e nach eil cho cudromach, is e am prìomh rud gu bheil e ann. Mar eisimpleir, dhìochuimhnich an gnìomhaiche tilgeil (Tha, cho ceàrr):

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

Bheir sinn sùil air toradh mion-sgrùdadh eisimpleir le mearachd. Cuideachd gus dèanamh cinnteach nach deach ach aon fhaidhle a pharsadh, chuir mi a’ bhratach ris -r gu loidhne tòiseachaidh pvs-studio-dotnet:

Mion-sgrùdadh air iarrtasan aonaidh ann an GitLab a’ cleachdadh PVS-Studio airson C#
Tha sinn a’ faicinn gun do lorg an anailisiche mearachd agus nach do leig leis meuran a chur còmhla.

Feuch an toir sinn sùil air an eisimpleir gun mhearachd. A 'ceartachadh a' chòd:

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

Cuir còmhla toraidhean mion-sgrùdadh iarrtas:

Mion-sgrùdadh air iarrtasan aonaidh ann an GitLab a’ cleachdadh PVS-Studio airson C#
Mar a chì sinn, cha deach mearachdan sam bith a lorg, agus bha coileanadh na h-obrach soirbheachail, agus is e sin a bha sinn airson sgrùdadh.

co-dhùnadh

Tha e glè ghoireasach agus tlachdmhor a bhith a’ glanadh droch chòd mus tèid geugan a chur còmhla. Mar sin ma tha thu a’ cleachdadh CI/CD, feuch ri sgrùdaire statach a stèidheachadh airson sgrùdadh. A bharrachd air an sin, tha seo air a dhèanamh gu math sìmplidh.

Tapadh leibh airson ur aire.

Mion-sgrùdadh air iarrtasan aonaidh ann an GitLab a’ cleachdadh PVS-Studio airson C#
Ma tha thu airson an artaigil seo a cho-roinn le luchd-èisteachd Beurla, cleachd an ceangal eadar-theangachaidh: Nikolay Mironov. Mion-sgrùdadh air iarrtasan aonaidh ann an GitLab a’ cleachdadh PVS-Studio airson C#.

Source: www.habr.com

Cuir beachd ann