پرو هوسٽر > PVS-اسٽوڊيو هاڻي چاڪليٽي ۾ آهي: Azure DevOps جي هيٺان چاڪليٽ جي جانچ ڪندي
PVS-اسٽوڊيو هاڻي چاڪليٽي ۾ آهي: Azure DevOps جي هيٺان چاڪليٽ جي جانچ ڪندي
اسان PVS-اسٽوڊيو کي وڌيڪ آسان استعمال ڪرڻ جاري رکون ٿا. اسان جو تجزيه نگار هاڻي موجود آهي چاڪليٽي ۾، ونڊوز لاءِ پيڪيج مئنيجر. اسان يقين رکون ٿا ته هي PVS-اسٽوڊيو جي تعیناتي کي آسان بڻائي سگهندو، خاص طور تي، ڪلائوڊ سروسز ۾. پري نه وڃڻ لاءِ، اچو ته ان ئي چاڪليٽ جو سورس ڪوڊ چيڪ ڪريون. Azure DevOps هڪ CI سسٽم طور ڪم ڪندو.
هتي اسان جي ٻين مضمونن جي هڪ فهرست آهي ڪلائوڊ سسٽم سان انضمام جي موضوع تي:
مان توهان کي صلاح ڏيان ٿو ته پهرين مضمون تي ڌيان ڏيو Azure DevOps سان انضمام بابت، ڇاڪاڻ ته هن معاملي ۾ ڪجهه نقطا ختم ڪيا ويا آهن ته جيئن نقل نه ڪيو وڃي.
تنهن ڪري، هن مضمون جا هيرو:
پي وي وي اسٽوڊيو هڪ جامد ڪوڊ تجزيي وارو اوزار آهي جيڪو C، C++، C# ۽ Java ۾ لکيل پروگرامن ۾ غلطين ۽ امڪاني نقصانن جي نشاندهي ڪرڻ لاءِ ٺهيل آهي. 64-bit ونڊوز، لينڪس، ۽ macOS سسٽم تي هلندو آهي، ۽ 32-bit، 64-bit، ۽ ايمبيڊڊ ARM پليٽ فارمز لاءِ ٺهيل ڪوڊ جو تجزيو ڪري سگھي ٿو. جيڪڏهن اهو توهان جو پهريون ڀيرو آهي ته توهان جي منصوبن کي جانچڻ لاءِ جامد ڪوڊ تجزيي جي ڪوشش ڪري رهيا آهيو، اسان سفارش ڪريون ٿا ته توهان پاڻ کي واقف ڪيو مضمون سڀ کان وڌيڪ دلچسپ PVS-اسٽوڊيو ڊيڄاريندڙن کي تڪڙو ڪيئن ڏسڻ ۽ هن اوزار جي صلاحيتن جو جائزو وٺڻ بابت.
آزور ديو اوپس - ڪلائوڊ سروسز جو هڪ سيٽ جيڪو گڏيل طور تي پوري ترقي جي عمل کي ڍڪيندو آهي. هن پليٽ فارم ۾ اوزار شامل آهن جهڙوڪ Azure Pipelines، Azure Boards، Azure Artifacts، Azure Repos، Azure Test Plans، جيڪي توهان کي سافٽ ويئر ٺاهڻ جي عمل کي تيز ڪرڻ ۽ ان جي معيار کي بهتر ڪرڻ جي اجازت ڏين ٿا.
هاڻي اچو ته Azure DevOps تحت تجزيي جي آسان استعمال جو هڪ مثال ڏسو.
adjustment
مان توهان کي ياد ڏياران ٿو ته اتي هڪ الڳ سيڪشن آهي اهڙن مسئلن بابت هڪ اڪائونٽ رجسٽر ڪرڻ، هڪ تعمير پائپ لائن ٺاهڻ ۽ توهان جي اڪائونٽ کي GitHub مخزن ۾ واقع هڪ منصوبي سان هم وقت سازي ڪرڻ. هڪ مضمون. اسان جي سيٽ اپ فوري طور تي هڪ ترتيب واري فائل لکڻ سان شروع ٿيندي.
هتي اسان کي چونڊڻ جي ضرورت آهي انسٽال ڪريو ٽيمن سان گڏ ميدان ۾. IN Nuspec فائل جو نالو ظاهر ڪريو گهربل پيڪيج جو نالو - pvs-studio. جيڪڏهن توهان ورزن جي وضاحت نه ڪريو، تازو هڪ نصب ڪيو ويندو، جيڪو اسان کي مڪمل طور تي مناسب آهي. اچو ته بٽڻ کي دٻايو شامل ۽ اسان ٺاهيل ڪم کي ترتيب واري فائل ۾ ڏسندا.
هاڻي اسان کي هڪ فائيل ٺاهڻ جي ضرورت آهي تجزياتي لائسنس سان. هتي PVSNAME и PVSKEY - متغيرن جا نالا جن جا قدر اسان سيٽنگون ۾ بيان ڪيون ٿا. اهي ذخيرو ڪندا PVS-اسٽوڊيو لاگ ان ۽ لائسنس جي چيڪ. انهن جي قيمتن کي سيٽ ڪرڻ لاء، مينيو کوليو متغير-> نئون متغير. اچو ته متغير ٺاهي PVSNAME لاگ ان ۽ PVSKEY تجزيي جي ڪنجي لاءِ. دٻي کي چيڪ ڪرڻ نه وساريو ھن قدر کي راز ۾ رکو لاء PVSKEY. حڪم ڪوڊ:
آپريٽر فرق & آپريٽر کان && اهو آهي ته جيڪڏهن اظهار جي کاٻي پاسي آهي ڪوڙي، پوءِ ساڄي پاسي اڃا به ڳڻيو ويندو، جيڪو ھن صورت ۾ غير ضروري طريقو ڪالن جو مطلب آھي system.directory_exists.
غور ڪيل ٽڪرا ۾، هي هڪ معمولي نقص آهي. ها، هي حالت بهتر ٿي سگهي ٿي & آپريٽر کي && آپريٽر سان بدلائي، پر عملي نقطي نظر کان، اهو ڪنهن به شيءِ تي اثر انداز نٿو ٿئي. جڏهن ته، ٻين حالتن ۾، ۽ ۽ ۽ ۽ جي وچ ۾ مونجهارو سنجيده مسئلا پيدا ڪري سگهي ٿو جڏهن اظهار جي ساڄي پاسي کي غلط/غلط قدرن سان علاج ڪيو ويندو آهي. مثال طور، اسان جي غلطي گڏ ڪرڻ ۾، سڃاڻپ V3093 تشخيصي استعمال ڪندي، اتي هي ڪيس آهي:
if ((k < nct) & (s[k] != 0.0))
جيتوڻيڪ انڊيڪس k غلط آهي، اهو استعمال ڪيو ويندو هڪ صف جي عنصر تائين رسائي ڪرڻ لاء. نتيجي طور، هڪ استثنا اڇلايو ويندو IndexOutOfRangeException.
انهي صورت ۾، ٽرينري آپريٽر جي آپريشن جي پويان هڪ عجيب منطق آهي. اچو ته هڪ ويجهي نظر رکون: جيڪڏهن مون نمبر 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);
}
}
variable کان وٺي 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);
}
....
}
....
}
ڪاپي پيسٽ جي غلطين کي جلدي يا بعد ۾ ظاهر ٿيڻ جو هڪ وڏو موقعو آهي ڪنهن به منصوبي ۾ سورس ڪوڊ جي وڏي مقدار سان، ۽ انهن کي منهن ڏيڻ لاءِ بهترين اوزارن مان هڪ آهي جامد تجزيو.
PS ۽ هميشه وانگر، هي غلطي هڪ گھڻن لائن شرط جي آخر ۾ ظاهر ٿئي ٿي :). اشاعت ڏسو "آخري لائين اثر".
خبردار N8
تجزيي جي خبرداري: V3095 [CWE-476] 'installedPackage' اعتراض استعمال ڪيو ويو ان کان اڳ جو ان جي تصديق ڪئي وئي null جي خلاف. لائنون چيڪ ڪريو: 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)
{
....
}
....
}
ڪلاسيڪي غلطي: اعتراض پهريون انسٽال ٿيل پيڪيج استعمال ڪيو ويندو آهي ۽ پوءِ جانچيو ويندو آهي اجايو. هي تشخيص اسان کي پروگرام ۾ ٻن مسئلن مان هڪ بابت ٻڌائي ٿو: يا ته انسٽال ٿيل پيڪيج ڪڏهن به برابر اجايو، جيڪو شڪ آهي، ۽ پوءِ چيڪ بيڪار آهي، يا اسان ممڪن طور تي ڪوڊ ۾ هڪ سنگين غلطي حاصل ڪري سگهون ٿا - هڪ null ريفرنس تائين رسائي جي ڪوشش.
ٿڪل
تنهنڪري اسان هڪ ٻيو ننڍڙو قدم کنيو آهي- هاڻي PVS-Studio استعمال ڪرڻ اڃا به آسان ۽ وڌيڪ آسان ٿي ويو آهي. مان اهو به چوڻ چاهيان ٿو ته چاڪليٽ هڪ سٺو پيڪيج مئنيجر آهي جنهن ۾ ڪوڊ ۾ ٿورڙي غلطيون آهن، جيڪي PVS-Studio استعمال ڪرڻ وقت اڃا به گهٽ ٿي سگهن ٿيون.
اسان توهان کي دعوت ڏيون ٿا скачать ۽ ڪوشش ڪريو PVS-Studio. جامد تجزيه ڪندڙ جو باقاعده استعمال توهان جي ٽيم جي ٺاهيل ڪوڊ جي معيار ۽ اعتبار کي بهتر بڻائي ٿو ۽ ڪيترن ئي کي روڪڻ ۾ مدد ڪندو صفر ڏينهن جي ڪمزورين.
پي ايس
اشاعت کان اڳ، اسان مضمون موڪليو چاڪليٽ ڊولپرز ڏانهن، ۽ انهن کي اهو سٺو مليو. اسان ڪجھ به نازڪ نه لڌو، پر اھي، مثال طور، اسان کي "api-key" چاٻي سان لاڳاپيل بگ پسند ڪيو.