புரோஹோஸ்டர் > PVS-Studio இப்போது சாக்லேட்டியில் உள்ளது: Azure DevOps இன் கீழ் இருந்து சாக்லேட்டியை சரிபார்க்கிறது
PVS-Studio இப்போது சாக்லேட்டியில் உள்ளது: Azure DevOps இன் கீழ் இருந்து சாக்லேட்டியை சரிபார்க்கிறது
நாங்கள் PVS-ஸ்டுடியோவைப் பயன்படுத்துவதை இன்னும் வசதியாக மாற்றுகிறோம். எங்கள் பகுப்பாய்வி இப்போது Windows க்கான தொகுப்பு மேலாளரான Chocolatey இல் கிடைக்கிறது. இது PVS-ஸ்டுடியோவை, குறிப்பாக, கிளவுட் சேவைகளில் பயன்படுத்துவதை எளிதாக்கும் என்று நாங்கள் நம்புகிறோம். வெகுதூரம் செல்லாமல் இருக்க, அதே சாக்லேட்டின் மூலக் குறியீட்டைச் சரிபார்ப்போம். Azure DevOps ஒரு CI அமைப்பாக செயல்படும்.
கிளவுட் அமைப்புகளுடன் ஒருங்கிணைப்பு என்ற தலைப்பில் எங்கள் மற்ற கட்டுரைகளின் பட்டியல் இங்கே:
Azure DevOps உடனான ஒருங்கிணைப்பு பற்றிய முதல் கட்டுரையில் கவனம் செலுத்துமாறு நான் உங்களுக்கு அறிவுறுத்துகிறேன், ஏனெனில் இந்த விஷயத்தில் சில புள்ளிகள் நகலெடுக்கப்படக்கூடாது என்பதற்காக தவிர்க்கப்படுகின்றன.
எனவே, இந்த கட்டுரையின் ஹீரோக்கள்:
பி.வி.எஸ்-ஸ்டுடியோ C, C++, C# மற்றும் Java இல் எழுதப்பட்ட நிரல்களில் பிழைகள் மற்றும் சாத்தியமான பாதிப்புகளைக் கண்டறிய வடிவமைக்கப்பட்ட நிலையான குறியீடு பகுப்பாய்வுக் கருவியாகும். 64-பிட் விண்டோஸ், லினக்ஸ் மற்றும் மேகோஸ் சிஸ்டங்களில் இயங்குகிறது, மேலும் 32-பிட், 64-பிட் மற்றும் உட்பொதிக்கப்பட்ட ARM இயங்குதளங்களுக்காக வடிவமைக்கப்பட்ட குறியீட்டை பகுப்பாய்வு செய்யலாம். உங்கள் திட்டப்பணிகளைச் சரிபார்க்க, நிலையான குறியீடு பகுப்பாய்வை முயற்சிப்பது இதுவே முதல் முறை என்றால், உங்களைப் பற்றி நன்கு தெரிந்துகொள்ளுமாறு நாங்கள் பரிந்துரைக்கிறோம் கட்டுரை மிகவும் சுவாரஸ்யமான PVS-ஸ்டுடியோ எச்சரிக்கைகளை எவ்வாறு விரைவாகப் பார்ப்பது மற்றும் இந்த கருவியின் திறன்களை எவ்வாறு மதிப்பிடுவது என்பது பற்றி.
அசூர் டெவொப்ஸ் - முழு வளர்ச்சி செயல்முறையையும் கூட்டாக உள்ளடக்கிய கிளவுட் சேவைகளின் தொகுப்பு. இந்த மேடையில் Azure Pipelines, Azure Boards, Azure Artifacts, Azure Repos, Azure Test Plans போன்ற கருவிகள் உள்ளன, இது மென்பொருளை உருவாக்கும் செயல்முறையை விரைவுபடுத்தவும் அதன் தரத்தை மேம்படுத்தவும் உங்களை அனுமதிக்கிறது.
Chocolatey விண்டோஸிற்கான திறந்த மூல தொகுப்பு மேலாளர். விண்டோஸ் இயக்க முறைமைகளில் நிறுவல் முதல் புதுப்பித்தல் மற்றும் நிறுவல் நீக்கம் வரை முழு மென்பொருள் வாழ்க்கை சுழற்சியையும் தானியங்குபடுத்துவதே திட்டத்தின் குறிக்கோள்.
சாக்லேட் பயன்படுத்துவது பற்றி
தொகுப்பு மேலாளரை எவ்வாறு நிறுவுவது என்பதை இங்கே பார்க்கலாம் இணைப்பை. பகுப்பாய்வியை நிறுவுவதற்கான முழுமையான ஆவணங்கள் கிடைக்கின்றன இணைப்பை Chocolatey தொகுப்பு மேலாளர் பிரிவைப் பயன்படுத்தி நிறுவலைப் பார்க்கவும். அங்கிருந்து சில புள்ளிகளை சுருக்கமாக மீண்டும் சொல்கிறேன்.
பகுப்பாய்வியின் சமீபத்திய பதிப்பை நிறுவுவதற்கான கட்டளை:
choco install pvs-studio
PVS-Studio தொகுப்பின் குறிப்பிட்ட பதிப்பை நிறுவுவதற்கான கட்டளை:
இயல்பாக, பகுப்பாய்வியின் கோர், கோர் பாகம் மட்டுமே நிறுவப்பட்டுள்ளது. மற்ற எல்லா கொடிகளையும் (தனிப்பட்ட, JavaCore, IDEA, MSVS2010, MSVS2012, MSVS2013, MSVS2015, MSVS2017, MSVS2019) --package-parameters ஐப் பயன்படுத்தி அனுப்பலாம்.
விஷுவல் ஸ்டுடியோ 2019க்கான செருகுநிரலுடன் பகுப்பாய்வியை நிறுவும் கட்டளையின் எடுத்துக்காட்டு:
இப்போது Azure DevOps இன் கீழ் பகுப்பாய்வியின் வசதியான பயன்பாட்டின் உதாரணத்தைப் பார்ப்போம்.
சரிசெய்தல்
கணக்கைப் பதிவு செய்தல், பைப்லைனை உருவாக்குதல் மற்றும் GitHub களஞ்சியத்தில் உள்ள திட்டத்துடன் உங்கள் கணக்கை ஒத்திசைத்தல் போன்ற சிக்கல்களைப் பற்றி ஒரு தனிப் பிரிவு உள்ளது என்பதை உங்களுக்கு நினைவூட்டுகிறேன். கட்டுரை. உள்ளமைவு கோப்பை எழுதுவதன் மூலம் எங்கள் அமைப்பு உடனடியாகத் தொடங்கும்.
முதலில், ஒரு வெளியீட்டு தூண்டுதலை அமைப்போம், மாற்றங்களுக்கு மட்டுமே நாங்கள் தொடங்குகிறோம் என்பதைக் குறிக்கிறது மாஸ்டர் கிளை:
trigger:
- master
அடுத்து நாம் ஒரு மெய்நிகர் இயந்திரத்தைத் தேர்ந்தெடுக்க வேண்டும். இப்போதைக்கு இது விண்டோஸ் சர்வர் 2019 மற்றும் விஷுவல் ஸ்டுடியோ 2019 உடன் மைக்ரோசாப்ட் ஹோஸ்ட் செய்யப்பட்ட முகவராக இருக்கும்:
pool:
vmImage: 'windows-latest'
உள்ளமைவு கோப்பின் உடலுக்கு செல்லலாம் (தொகுதி படிகள்) நீங்கள் ஒரு மெய்நிகர் கணினியில் தன்னிச்சையான மென்பொருளை நிறுவ முடியாது என்ற உண்மை இருந்தபோதிலும், நான் ஒரு டோக்கர் கொள்கலனைச் சேர்க்கவில்லை. Azure DevOpsக்கான நீட்டிப்பாக சாக்லேட்டியைச் சேர்க்கலாம். இதைச் செய்ய, செல்லலாம் இணைப்பை. கிளிக் செய்யவும் இலவசமாகப்பெற்றுக்கொள். அடுத்து, நீங்கள் ஏற்கனவே அங்கீகரிக்கப்பட்டிருந்தால், உங்கள் கணக்கைத் தேர்ந்தெடுக்கவும், இல்லையெனில், அங்கீகாரத்திற்குப் பிறகு அதையே செய்யவும்.
இங்கே நீங்கள் எங்கு நீட்டிப்பைச் சேர்ப்போம் என்பதைத் தேர்ந்தெடுத்து பொத்தானைக் கிளிக் செய்ய வேண்டும் நிறுவ.
வெற்றிகரமான நிறுவலுக்குப் பிறகு, கிளிக் செய்யவும் அமைப்புக்குச் செல்லவும்:
சாளரத்தில் சாக்லேட் பணிக்கான டெம்ப்ளேட்டை இப்போது பார்க்கலாம் பணிகளை ஒரு கட்டமைப்பு கோப்பை திருத்தும் போது azure-pipelines.yml:
சாக்லேட்டியைக் கிளிக் செய்து புலங்களின் பட்டியலைப் பார்க்கவும்:
இங்கே நாம் தேர்ந்தெடுக்க வேண்டும் நிறுவ அணிகளுடன் களத்தில். IN நுஸ்பெக் கோப்பு பெயர் தேவையான தொகுப்பின் பெயரைக் குறிப்பிடவும் - pvs-studio. நீங்கள் பதிப்பைக் குறிப்பிடவில்லை என்றால், சமீபத்தியது நிறுவப்படும், இது எங்களுக்கு முற்றிலும் பொருந்தும். பட்டனை அழுத்துவோம் கூட்டு மேலும் உருவாக்கப்பட்ட பணியை உள்ளமைவு கோப்பில் காண்போம்.
அடுத்து, எங்கள் கோப்பின் முக்கிய பகுதிக்கு செல்லலாம்:
- task: CmdLine@2
inputs:
script:
இப்போது நாம் பகுப்பாய்வி உரிமத்துடன் ஒரு கோப்பை உருவாக்க வேண்டும். இங்கே PVSNAME и பி.வி.எஸ்.கே - அமைப்புகளில் நாம் குறிப்பிடும் மதிப்புகளின் மாறிகளின் பெயர்கள். அவர்கள் PVS-ஸ்டுடியோ உள்நுழைவு மற்றும் உரிம விசையை சேமித்து வைப்பார்கள். அவற்றின் மதிப்புகளை அமைக்க, மெனுவைத் திறக்கவும் மாறிகள்->புதிய மாறி. மாறிகளை உருவாக்குவோம் PVSNAME உள்நுழைவு மற்றும் பி.வி.எஸ்.கே பகுப்பாய்வி விசைக்கு. பெட்டியை சரிபார்க்க மறக்காதீர்கள் இந்த மதிப்பை ரகசியமாக வைத்திருங்கள் செய்ய பி.வி.எஸ்.கே. கட்டளை குறியீடு:
கிளிக் செய்யலாம் சேமி->சேமி->இயக்கு பணியை இயக்க. பணிகள் தாவலுக்குச் சென்று அறிக்கையைப் பதிவிறக்குவோம்.
சாக்லேட் திட்டத்தில் C# குறியீடு 37615 வரிகள் மட்டுமே உள்ளன. கண்டுபிடிக்கப்பட்ட சில பிழைகளைப் பார்ப்போம்.
சோதனை முடிவுகள்
எச்சரிக்கை N1
பகுப்பாய்வி எச்சரிக்கை: V3005 'வழங்குபவர்' மாறி தனக்குத்தானே ஒதுக்கப்பட்டுள்ளது. CrytpoHashProviderSpecs.cs 38
public abstract class CrytpoHashProviderSpecsBase : TinySpec
{
....
protected CryptoHashProvider Provider;
....
public override void Context()
{
Provider = Provider = new CryptoHashProvider(FileSystem.Object);
}
}
பகுப்பாய்வி தனக்குத்தானே மாறியின் ஒதுக்கீட்டைக் கண்டறிந்தது, இது அர்த்தமற்றது. பெரும்பாலும், இந்த மாறிகளில் ஒன்றின் இடத்தில் வேறு ஏதாவது இருக்க வேண்டும். சரி, அல்லது இது ஒரு எழுத்துப்பிழை, மேலும் கூடுதல் வேலையை வெறுமனே அகற்றலாம்.
எச்சரிக்கை N2
பகுப்பாய்வி எச்சரிக்கை: V3093 [CWE-480] '&' ஆபரேட்டர் இரண்டு செயல்பாடுகளையும் மதிப்பீடு செய்கிறது. அதற்குப் பதிலாக ஷார்ட் சர்க்யூட் '&&' ஆபரேட்டரைப் பயன்படுத்த வேண்டும். Platform.cs 64
ஆபரேட்டர் வேறுபாடு & ஆபரேட்டரிடமிருந்து && வெளிப்பாட்டின் இடது பக்கம் இருந்தால் தவறான, பின்னர் வலது பக்கம் இன்னும் கணக்கிடப்படும், இது இந்த வழக்கில் தேவையற்ற முறை அழைப்புகளை குறிக்கிறது system.directory_உள்ளது.
கருத்தில் கொள்ளப்பட்ட துண்டில், இது ஒரு சிறிய குறைபாடு. ஆம், & ஆபரேட்டரை && ஆபரேட்டருடன் மாற்றுவதன் மூலம் இந்த நிலையை மேம்படுத்தலாம், ஆனால் நடைமுறைக் கண்ணோட்டத்தில், இது எதையும் பாதிக்காது. இருப்பினும், மற்ற சமயங்களில், & மற்றும் && இடையே உள்ள குழப்பம், வெளிப்பாட்டின் வலது பக்கம் தவறான/தவறான மதிப்புகளுடன் கையாளப்படும்போது கடுமையான சிக்கல்களை ஏற்படுத்தலாம். எடுத்துக்காட்டாக, எங்கள் பிழை சேகரிப்பில், V3093 கண்டறியும் கருவியைப் பயன்படுத்தி அடையாளம் காணப்பட்டது, இந்த வழக்கு உள்ளது:
if ((k < nct) & (s[k] != 0.0))
குறியீடாக இருந்தாலும் சரி k தவறானது, இது வரிசை உறுப்பை அணுக பயன்படும். இதன் விளைவாக, ஒரு விதிவிலக்கு தூக்கி எறியப்படும் IndexOutOfRangeException.
எச்சரிக்கைகள் N3, N4
பகுப்பாய்வி எச்சரிக்கை: V3022 [CWE-571] 'ஷார்ட் ப்ராம்ப்ட்' என்ற வெளிப்பாடு எப்போதும் உண்மைதான். InteractivePrompt.cs 101
பகுப்பாய்வி எச்சரிக்கை: V3022 [CWE-571] 'ஷார்ட் ப்ராம்ப்ட்' என்ற வெளிப்பாடு எப்போதும் உண்மைதான். InteractivePrompt.cs 105
இந்த நிலையில், மும்முனை ஆபரேட்டரின் செயல்பாட்டின் பின்னணியில் ஒரு விசித்திரமான தர்க்கம் உள்ளது. ஒரு கூர்ந்து கவனிப்போம்: நான் எண் 1 ஐக் குறிக்கும் நிபந்தனை பூர்த்தி செய்யப்பட்டால், நாங்கள் நிபந்தனை 2 க்கு செல்வோம், இது எப்போதும் இருக்கும். உண்மை, அதாவது வரி 3 செயல்படுத்தப்படும். நிபந்தனை 1 தவறானது எனத் தெரிந்தால், எண் 4 எனக் குறிக்கப்பட்ட வரிக்குச் செல்வோம், அந்த நிபந்தனையும் எப்போதும் இருக்கும். உண்மை, அதாவது வரி 5 செயல்படுத்தப்படும். எனவே, கருத்து 0 என குறிக்கப்பட்ட நிபந்தனைகள் ஒருபோதும் பூர்த்தி செய்யப்படாது, இது புரோகிராமர் எதிர்பார்த்த செயல்பாட்டின் தர்க்கமாக இல்லாமல் இருக்கலாம்.
எச்சரிக்கை N5
பகுப்பாய்வி எச்சரிக்கை: V3123 [CWE-783] ஒருவேளை '?:' ஆபரேட்டர் எதிர்பார்த்ததை விட வித்தியாசமான முறையில் செயல்படுகிறது. அதன் நிலையில் உள்ள மற்ற ஆபரேட்டர்களின் முன்னுரிமையை விட அதன் முன்னுரிமை குறைவாக உள்ளது. Options.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);
}
}
மாறி இருந்து j மேலே உள்ள சில வரிகள் பூஜ்ஜியத்திற்கு துவக்கப்படும், மும்மை ஆபரேட்டர் மதிப்பை வழங்கும் தவறான. இந்த நிலை காரணமாக, வளையத்தின் உடல் ஒரு முறை மட்டுமே செயல்படுத்தப்படும். புரோகிராமர் எண்ணியபடி இந்தக் குறியீடு வேலை செய்யாது என்று எனக்குத் தோன்றுகிறது.
எச்சரிக்கை N6
பகுப்பாய்வி எச்சரிக்கை: V3022 [CWE-571] வெளிப்பாடு 'installedPackageVersions. Count != 1' எப்போதும் உண்மை. 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);
}
....
}
....
}
இங்கே ஒரு விசித்திரமான உள்ளமை நிலை உள்ளது: நிறுவப்பட்ட பேக்கேஜ் பதிப்புகள். எண்ணிக்கை != 1எப்போதும் இருக்கும் உண்மை. பெரும்பாலும் அத்தகைய எச்சரிக்கை குறியீட்டில் தர்க்கரீதியான பிழையைக் குறிக்கிறது, மற்ற சந்தர்ப்பங்களில் இது தேவையற்ற சரிபார்ப்பைக் குறிக்கிறது.
எச்சரிக்கை N7
பகுப்பாய்வி எச்சரிக்கை: V3001 '||' இன் இடது மற்றும் வலதுபுறத்தில் ஒரே மாதிரியான துணை வெளிப்பாடுகள் 'commandArguments.contains("-apikey")' உள்ளன. இயக்குபவர். ArgumentsUtility.cs 42
இந்த குறியீட்டின் பகுதியை எழுதிய நிரலாளர் கடைசி இரண்டு வரிகளை நகலெடுத்து ஒட்டினார், அவற்றைத் திருத்த மறந்துவிட்டார். இதன் காரணமாக, சாக்லேட் பயனர்கள் அளவுருவைப் பயன்படுத்த முடியவில்லை அப்பிகே இன்னும் இரண்டு வழிகள். மேலே உள்ள அளவுருக்களைப் போலவே, நான் பின்வரும் விருப்பங்களை வழங்க முடியும்:
நகல்-பேஸ்ட் பிழைகள் அதிக அளவு மூலக் குறியீட்டைக் கொண்ட எந்தவொரு திட்டத்திலும் விரைவில் அல்லது பின்னர் தோன்றுவதற்கான அதிக வாய்ப்பு உள்ளது, மேலும் அவற்றை எதிர்த்துப் போராடுவதற்கான சிறந்த கருவிகளில் ஒன்று நிலையான பகுப்பாய்வு ஆகும்.
PS மற்றும் எப்போதும் போல், இந்த பிழையானது பல வரி நிபந்தனையின் முடிவில் தோன்றும் :). வெளியீட்டைப் பார்க்கவும் "கடைசி வரி விளைவு".
எச்சரிக்கை N8
பகுப்பாய்வி எச்சரிக்கை: V3095 [CWE-476] 'நிறுவப்பட்ட தொகுப்பு' பொருள் பூஜ்யத்திற்கு எதிராக சரிபார்க்கப்படுவதற்கு முன்பு பயன்படுத்தப்பட்டது. சோதனை வரிகள்: 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)
{
....
}
....
}
கிளாசிக் தவறு: பொருள் முதலில் நிறுவப்பட்ட தொகுப்பு பயன்படுத்தப்பட்டு பின்னர் சரிபார்க்கப்படுகிறது பூஜ்ய. இந்த நோயறிதல் நிரலில் உள்ள இரண்டு சிக்கல்களில் ஒன்றைப் பற்றி சொல்கிறது: ஒன்று நிறுவப்பட்ட தொகுப்பு ஒருபோதும் சமமாக இல்லை பூஜ்ய, இது சந்தேகத்திற்குரியது, பின்னர் காசோலை தேவையற்றது, அல்லது குறியீட்டில் ஒரு தீவிர பிழையை நாம் பெறலாம் - பூஜ்ய குறிப்பை அணுகுவதற்கான முயற்சி.
முடிவுக்கு
எனவே நாங்கள் மற்றொரு சிறிய படியை எடுத்துள்ளோம் - இப்போது PVS-ஸ்டுடியோவைப் பயன்படுத்துவது இன்னும் எளிதாகவும் வசதியாகவும் மாறிவிட்டது. PVS-Studio ஐப் பயன்படுத்தும் போது, குறியீட்டில் குறைந்த எண்ணிக்கையிலான பிழைகள் உள்ள, Chocolatey ஒரு நல்ல தொகுப்பு மேலாளர் என்பதையும் நான் கூற விரும்புகிறேன்.
நாங்கள் அழைக்கிறோம் скачать மற்றும் PVS-ஸ்டுடியோவை முயற்சிக்கவும். நிலையான பகுப்பாய்வியின் வழக்கமான பயன்பாடு, உங்கள் குழு உருவாக்கும் குறியீட்டின் தரம் மற்றும் நம்பகத்தன்மையை மேம்படுத்தும் மற்றும் பலவற்றைத் தடுக்க உதவும் பூஜ்ஜிய நாள் பாதிப்புகள்.
சோசலிஸ்ட் கட்சி
வெளியிடுவதற்கு முன், நாங்கள் கட்டுரையை சாக்லேட் டெவலப்பர்களுக்கு அனுப்பினோம், அவர்கள் அதை நன்றாகப் பெற்றனர். முக்கியமான எதையும் நாங்கள் கண்டுபிடிக்கவில்லை, ஆனால் அவர்கள், எடுத்துக்காட்டாக, "api-key" விசையுடன் தொடர்புடைய பிழையை நாங்கள் விரும்பினர்.