ProHoster > Mae PVS-Studio bellach mewn Chocolatey: yn gwirio Chocolatey o dan Azure DevOps
Mae PVS-Studio bellach mewn Chocolatey: yn gwirio Chocolatey o dan Azure DevOps
Rydym yn parhau i wneud defnyddio PVS-Studio yn fwy cyfleus. Mae ein dadansoddwr bellach ar gael yn Chocolatey, rheolwr pecyn ar gyfer Windows. Credwn y bydd hyn yn hwyluso'r defnydd o PVS-Studio, yn arbennig, mewn gwasanaethau cwmwl. Er mwyn peidio â mynd yn bell, gadewch i ni wirio cod ffynhonnell yr un Chocolatey. Bydd Azure DevOps yn gweithredu fel system CI.
Dyma restr o'n herthyglau eraill ar y pwnc o integreiddio â systemau cwmwl:
Rwy'n eich cynghori i roi sylw i'r erthygl gyntaf am integreiddio ag Azure DevOps, oherwydd yn yr achos hwn mae rhai pwyntiau'n cael eu hepgor er mwyn peidio â chael eu dyblygu.
Felly, arwyr yr erthygl hon:
PVS-Stiwdio Offeryn dadansoddi cod statig yw hwn sydd wedi'i gynllunio i nodi gwallau a gwendidau posibl mewn rhaglenni a ysgrifennwyd yn C, C++, C# a Java. Yn rhedeg ar systemau Windows, Linux, a macOS 64-bit, a gall ddadansoddi cod a ddyluniwyd ar gyfer llwyfannau ARM 32-bit, 64-bit ac wedi'u mewnosod. Os mai dyma'r tro cyntaf i chi geisio dadansoddi cod statig i wirio'ch prosiectau, rydym yn argymell eich bod yn ymgyfarwyddo â nhw erthygl sut i weld y rhybuddion PVS-Stiwdio mwyaf diddorol yn gyflym a gwerthuso galluoedd yr offeryn hwn.
Azure DevOps - set o wasanaethau cwmwl sy'n cwmpasu'r broses ddatblygu gyfan ar y cyd. Mae'r platfform hwn yn cynnwys offer fel Piblinellau Azure, Byrddau Azure, Arteffactau Azure, Azure Repos, Cynlluniau Prawf Azure, sy'n eich galluogi i gyflymu'r broses o greu meddalwedd a gwella ei ansawdd.
Chocolatey yn rheolwr pecyn ffynhonnell agored ar gyfer Windows. Nod y prosiect yw awtomeiddio'r cylch bywyd meddalwedd cyfan o'r gosod i ddiweddaru a dadosod ar systemau gweithredu Windows.
Ynglŷn â defnyddio Chocolatey
Gallwch weld sut i osod y rheolwr pecyn ei hun ar hyn cyswllt. Mae dogfennaeth gyflawn ar gyfer gosod y dadansoddwr ar gael yn cyswllt Gweler y Gosod gan ddefnyddio'r adran rheolwr pecyn Chocolatey. Ailadroddaf yn fyr rai pwyntiau oddi yno.
Gorchymyn i osod y fersiwn diweddaraf o'r dadansoddwr:
choco install pvs-studio
Gorchymyn i osod fersiwn benodol o'r pecyn PVS-Studio:
Yn ddiofyn, dim ond craidd y dadansoddwr, y gydran Craidd, sy'n cael ei osod. Gellir pasio pob baner arall (Standalone, JavaCore, IDEA, MSVS2010, MSVS2012, MSVS2013, MSVS2015, MSVS2017, MSVS2019) gan ddefnyddio --package-parameters.
Enghraifft o orchymyn a fydd yn gosod dadansoddwr gydag ategyn ar gyfer Visual Studio 2019:
Nawr, gadewch i ni edrych ar enghraifft o ddefnydd cyfleus o'r dadansoddwr o dan Azure DevOps.
addasiad
Gadewch imi eich atgoffa bod yna adran ar wahân am faterion fel cofrestru cyfrif, creu Piblinell Adeiladu a chydamseru'ch cyfrif â phrosiect sydd wedi'i leoli yn ystorfa GitHub. erthygl. Bydd ein gosodiad yn dechrau ar unwaith gydag ysgrifennu ffeil ffurfweddu.
Yn gyntaf, gadewch i ni sefydlu sbardun lansio, gan nodi ein bod yn lansio dim ond ar gyfer newidiadau yn meistr cangen:
trigger:
- master
Nesaf mae angen i ni ddewis peiriant rhithwir. Am y tro bydd yn asiant a gynhelir gan Microsoft gyda Windows Server 2019 a Visual Studio 2019:
pool:
vmImage: 'windows-latest'
Gadewch i ni symud ymlaen i gorff y ffeil ffurfweddu (bloc camau). Er gwaethaf y ffaith na allwch osod meddalwedd mympwyol i mewn i beiriant rhithwir, ni wnes i ychwanegu cynhwysydd Docker. Gallwn ychwanegu Chocolatey fel estyniad ar gyfer Azure DevOps. I wneud hyn, gadewch i ni fynd i cyswllt. Cliciwch Ei gael am ddim. Nesaf, os ydych chi eisoes wedi'ch awdurdodi, dewiswch eich cyfrif, ac os na, gwnewch yr un peth ar ôl awdurdodi.
Yma mae angen i chi ddewis lle byddwn yn ychwanegu'r estyniad a chlicio ar y botwm Gosod.
Ar ôl gosod llwyddiannus, cliciwch Ymlaen i'r sefydliad:
Gallwch nawr weld y templed ar gyfer y dasg Chocolatey yn y ffenestr tasgau wrth olygu ffeil ffurfweddu asur-piblinellau.yml:
Cliciwch ar Chocolatey a gweld rhestr o feysydd:
Yma mae angen i ni ddewis gosod yn y maes gyda'r timau. YN Enw Ffeil Nuspec nodwch enw'r pecyn gofynnol - pvs-studio. Os na fyddwch yn nodi'r fersiwn, bydd yr un diweddaraf yn cael ei osod, sy'n addas i ni yn llwyr. Gadewch i ni bwyso'r botwm ychwanegu a byddwn yn gweld y dasg a gynhyrchir yn y ffeil ffurfweddu.
Nesaf, gadewch i ni symud ymlaen i brif ran ein ffeil:
- task: CmdLine@2
inputs:
script:
Nawr mae angen i ni greu ffeil gyda'r drwydded dadansoddwr. Yma PVSNAME и PVSKEY – enwau newidynnau y byddwn yn nodi eu gwerthoedd yn y gosodiadau. Byddant yn storio'r mewngofnodi PVS-Studio ac allwedd trwydded. I osod eu gwerthoedd, agorwch y ddewislen Newidynnau -> Newidyn newydd. Gadewch i ni greu newidynnau PVSNAME ar gyfer mewngofnodi a PVSKEY ar gyfer allwedd y dadansoddwr. Peidiwch ag anghofio gwirio'r blwch Cadwch y gwerth hwn yn gyfrinachol gyfer PVSKEY. Cod gorchymyn:
Gadewch i ni glicio Cadw-> Arbed-> Rhedeg i redeg y dasg. Gadewch i ni lawrlwytho'r adroddiad trwy fynd i'r tab tasgau.
Mae'r prosiect Chocolatey yn cynnwys 37615 llinell yn unig o god C#. Gadewch i ni edrych ar rai o'r gwallau a ganfuwyd.
Canlyniadau profion
Rhybudd N1
Rhybudd dadansoddwr: V3005 Mae'r newidyn 'Darparwr' wedi'i neilltuo iddo'i hun. CrytpoHashProviderSpecs.cs 38
public abstract class CrytpoHashProviderSpecsBase : TinySpec
{
....
protected CryptoHashProvider Provider;
....
public override void Context()
{
Provider = Provider = new CryptoHashProvider(FileSystem.Object);
}
}
Canfu'r dadansoddwr aseiniad o'r newidyn iddo'i hun, nad yw'n gwneud synnwyr. Yn fwyaf tebygol, yn lle un o'r newidynnau hyn dylai fod un arall. Wel, neu teipio yw hwn, a gellir dileu'r aseiniad ychwanegol yn syml.
Rhybudd N2
Rhybudd dadansoddwr: V3093 [CWE-480] Mae'r gweithredwr '&' yn gwerthuso'r ddwy operand. Efallai y dylid defnyddio gweithredwr cylched byr '&&' yn lle hynny. Platfform.cs 64
Gwahaniaeth gweithredwr & gan y gweithredwr && yw os yw ochr chwith y mynegiant yn ffug, yna bydd yr ochr dde yn dal i gael ei gyfrifo, sydd yn yr achos hwn yn awgrymu galwadau dull diangen system.directory_exists.
Yn y darn a ystyriwyd, mân ddiffyg yw hwn. Oes, gellir optimeiddio'r amod hwn trwy ddisodli'r & gweithredwr gyda'r && gweithredwr, ond o safbwynt ymarferol, nid yw hyn yn effeithio ar unrhyw beth. Fodd bynnag, mewn achosion eraill, gall dryswch rhwng & a && achosi problemau difrifol pan fydd ochr dde'r ymadrodd yn cael ei thrin â gwerthoedd anghywir/annilys. Er enghraifft, yn ein casgliad gwallau, wedi'i nodi gan ddefnyddio'r diagnostig V3093, mae'r achos hwn:
if ((k < nct) & (s[k] != 0.0))
Hyd yn oed os yw'r mynegai k yn anghywir, bydd yn cael ei ddefnyddio i gyrchu elfen arae. O ganlyniad, bydd eithriad yn cael ei daflu MynegaiOutOfRangeException.
Rhybuddion N3, N4
Rhybudd dadansoddwr: V3022 [CWE-571] Mae mynegiant 'shortPrompt' bob amser yn wir. InteractivePrompt.cs 101
Rhybudd dadansoddwr: V3022 [CWE-571] Mae mynegiant 'shortPrompt' bob amser yn wir. InteractivePrompt.cs 105
Yn yr achos hwn, mae yna resymeg ryfedd y tu ôl i weithrediad y gweithredwr teiran. Gadewch i ni edrych yn agosach: os bodlonir y cyflwr a nodais â rhif 1, yna symudwn ymlaen i amod 2, sydd bob amser yn wir, sy'n golygu y bydd llinell 3 yn cael ei gweithredu. Os bydd amod 1 yn ffug, yna byddwn yn mynd i'r llinell sydd wedi'i marcio â rhif 4, mae'r cyflwr hefyd bob amser yn wir, sy'n golygu y bydd llinell 5 yn cael ei gweithredu.
Rhybudd N5
Rhybudd dadansoddwr: V3123 [CWE-783] Efallai bod y gweithredwr '?:' yn gweithio mewn ffordd wahanol i'r disgwyl. Mae ei flaenoriaeth yn is na blaenoriaeth gweithredwyr eraill yn ei gyflwr. Opsiynau.cs 1019
private static string GetArgumentName (...., string description)
{
string[] nameStart;
if (maxIndex == 1)
{
nameStart = new string[]{"{0:", "{"};
}
else
{
nameStart = new string[]{"{" + index + ":"};
}
for (int i = 0; i < nameStart.Length; ++i)
{
int start, j = 0;
do
{
start = description.IndexOf (nameStart [i], j);
}
while (start >= 0 && j != 0 ? description [j++ - 1] == '{' : false);
....
return maxIndex == 1 ? "VALUE" : "VALUE" + (index + 1);
}
}
Ers y newidyn j mae ychydig o linellau uchod yn cael eu cychwyn i sero, bydd y gweithredwr teiran yn dychwelyd y gwerth ffug. Oherwydd yr amod hwn, dim ond unwaith y bydd corff y ddolen yn cael ei weithredu. Mae'n ymddangos i mi nad yw'r darn hwn o god yn gweithio o gwbl fel y bwriadodd y rhaglennydd.
Rhybudd N6
Rhybudd dadansoddwr: V3022 [CWE-571] Mae'r ymadrodd 'installedPackageVersions.Count!= 1' bob amser yn wir. NugetService.cs 1405
private void remove_nuget_cache_for_package(....)
{
if (!config.AllVersions && installedPackageVersions.Count > 1)
{
const string allVersionsChoice = "All versions";
if (installedPackageVersions.Count != 1)
{
choices.Add(allVersionsChoice);
}
....
}
....
}
Mae cyflwr nythu rhyfedd yma: installPackageVersions.Count != 1a fydd bob amser yn wir. Yn aml mae rhybudd o'r fath yn nodi gwall rhesymegol yn y cod, ac mewn achosion eraill mae'n nodi gwirio diangen.
Rhybudd N7
Rhybudd dadansoddwr: V3001 Ceir is-fynegiadau unfath 'commandArguments.contains("-apikey")' i'r chwith ac i'r dde o'r '|| gweithredydd. DadleuonUtility.cs 42
Fe wnaeth y rhaglennydd a ysgrifennodd yr adran hon o god gopïo a gludo'r ddwy linell olaf ac anghofio eu golygu. Oherwydd hyn, nid oedd defnyddwyr Chocolatey yn gallu defnyddio'r paramedr pigyn cwpl mwy o ffyrdd. Yn debyg i'r paramedrau uchod, gallaf gynnig yr opsiynau canlynol:
Mae gan wallau copi-past siawns uchel o ymddangos yn hwyr neu'n hwyrach mewn unrhyw brosiect gyda llawer iawn o god ffynhonnell, ac un o'r arfau gorau i'w hymladd yw dadansoddiad statig.
PS Ac fel bob amser, mae'r gwall hwn yn tueddu i ymddangos ar ddiwedd cyflwr aml-linell :). Gweler y cyhoeddiad "Effaith llinell olaf".
Rhybudd N8
Rhybudd dadansoddwr: V3095 [CWE-476] Defnyddiwyd y gwrthrych 'installedPackage' cyn iddo gael ei ddilysu yn erbyn null. Llinellau gwirio: 910, 917. NugetService.cs 910
public virtual ConcurrentDictionary<string, PackageResult> get_outdated(....)
{
....
var pinnedPackageResult = outdatedPackages.GetOrAdd(
packageName,
new PackageResult(installedPackage,
_fileSystem.combine_paths(
ApplicationParameters.PackagesLocation,
installedPackage.Id)));
....
if ( installedPackage != null
&& !string.IsNullOrWhiteSpace(installedPackage.Version.SpecialVersion)
&& !config.UpgradeCommand.ExcludePrerelease)
{
....
}
....
}
Camgymeriad clasurol: gwrthrych yn gyntaf installPackage yn cael ei ddefnyddio ac yna'n cael ei wirio amdano null. Mae'r diagnostig hwn yn dweud wrthym am un o ddwy broblem yn y rhaglen: naill ai installPackage byth yn gyfartal null, sy'n amheus, ac yna mae'r siec yn ddiangen, neu gallem o bosibl gael gwall difrifol yn y cod - ymgais i gael mynediad at gyfeirnod null.
Casgliad
Felly rydym wedi cymryd cam bach arall - nawr mae defnyddio PVS-Studio wedi dod hyd yn oed yn haws ac yn fwy cyfleus. Hoffwn hefyd ddweud bod Chocolatey yn rheolwr pecyn da gyda nifer fach o wallau yn y cod, a allai fod hyd yn oed yn llai wrth ddefnyddio PVS-Studio.
Rydym yn gwahodd скачать a rhowch gynnig ar PVS-Studio. Bydd defnydd rheolaidd o ddadansoddwr statig yn gwella ansawdd a dibynadwyedd y cod y mae eich tîm yn ei ddatblygu ac yn helpu i atal llawer dim gwendidau diwrnod.
PS
Cyn ei chyhoeddi, fe wnaethom anfon yr erthygl at y datblygwyr Chocolatey, a chawsant ei derbyn yn dda. Ni ddaethom o hyd i unrhyw beth hollbwysig, ond roedden nhw, er enghraifft, yn hoffi'r byg a welsom yn ymwneud â'r allwedd “api-key”.