Шоколад мудири бастаи кушодаасос барои Windows мебошад. Ҳадафи лоиҳа автоматикунонии тамоми давраи ҳаёти нармафзор аз насб то навсозӣ ва несткунӣ дар системаҳои оператсионии Windows мебошад.
Баъдан мо бояд мошини виртуалиро интихоб кунем. Дар айни замон он як агенти аз ҷониби Microsoft ҷойгиршуда бо Windows Server 2019 ва Visual Studio 2019 хоҳад буд:
pool:
vmImage: 'windows-latest'
Биёед ба бадани файли конфигуратсия (block қадам). Сарфи назар аз он, ки шумо нармафзори ихтиёриро ба мошини виртуалӣ насб карда наметавонед, ман контейнери Docker илова накардаам. Мо метавонем Chocolateyро ҳамчун васеъ барои Azure DevOps илова кунем. Барои ин, биёед ба пайванд. клик кунед Бепул шавед. Баъдан, агар шумо аллакай ваколатдор бошед, танҳо ҳисоби худро интихоб кунед ва агар не, пас аз иҷозатдиҳӣ ҳамон корро кунед.
Фарқияти оператор & аз оператор && аст, ки агар тарафи чапи ифода бошад бардурӯғ, он гоҳ тарафи рост ҳоло ҳам ҳисоб карда мешавад, ки дар ин ҳолат зангҳои усули нолозимро дар назар дорад system.directory_exists.
Дар порчаи баррасӣ, ин як камбудии хурд аст. Бале, ин ҳолатро бо иваз кардани оператори & бо оператори && оптимизатсия кардан мумкин аст, аммо аз нуқтаи назари амалӣ, ин ба ҳеҷ чиз таъсир намекунад. Аммо, дар ҳолатҳои дигар, иштибоҳ байни & ва && метавонад мушкилоти ҷиддиро ба бор орад, вақте ки тарафи рости ифода бо арзишҳои нодуруст/беэътибор кор карда мешавад. Масалан, дар ҷамъоварии хатоҳои мо, бо истифода аз ташхиси V3093 муайян карда шудааст, ин ҳолат вуҷуд дорад:
if ((k < nct) & (s[k] != 0.0))
Ҳатто агар индекс k нодуруст аст, он барои дастрасӣ ба элементи массив истифода мешавад. Дар натиҷа, истисно партофта мешавад IndexOutOfRangeException.
Хатогиҳои нусхабардорӣ ва часбонед, шонси баланде доранд, ки дер ё зуд дар ҳама гуна лоиҳа бо миқдори зиёди рамзи сарчашма пайдо шаванд ва яке аз беҳтарин абзорҳои мубориза бо онҳо таҳлили статикӣ мебошад.
PS Ва чун ҳамеша, ин хато дар охири ҳолати бисёрсатрӣ пайдо мешавад :). Ба нашр нигаред "Таъсири сатри охирин".
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)
{
....
}
....
}
Хатои классикӣ: аввал объект бастаи насбшуда истифода мешавад ва баъд санҷида мешавад ночиз. Ин ташхис ба мо дар бораи яке аз ду мушкилоти барнома нақл мекунад: ё бастаи насбшуда ҳеҷ гоҳ баробар нест ночиз, ки шубҳанок аст, ва он гоҳ чек зиёдатист, ё мо эҳтимолан дар код хатои ҷиддиро ба даст орем - кӯшиши дастрасӣ ба истинод ба нул.
хулоса
Ҳамин тавр, мо боз як қадами хурде гузоштем - ҳоло истифодаи PVS-Studio боз ҳам осонтар ва қулайтар шудааст. Ман инчунин мехоҳам бигӯям, ки Chocolatey як мудири бастаи хуби дорои шумораи ками хатогиҳо дар код аст, ки ҳангоми истифодаи PVS-Studio метавонад ҳатто камтар бошад.
Мо таклиф мекунем скачать ва PVS-Studio -ро санҷед. Истифодаи мунтазами анализатори статикӣ сифат ва эътимоднокии кодеро, ки дастаи шумо таҳия мекунад, беҳтар мекунад ва ба пешгирии бисёр чизҳо кӯмак мекунад осебпазирии рӯзи сифр.
PS
Пеш аз нашр, мо мақоларо ба таҳиягарони Chocolatey фиристодем ва онҳо онро хуб қабул карданд. Мо ягон чизи муҳимро наёфтем, аммо ба онҳо, масалан, хатогие, ки мо бо калиди "api-key" пайдо кардем, писанд омад.