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، جيڪي توهان کي سافٽ ويئر ٺاهڻ جي عمل کي تيز ڪرڻ ۽ ان جي معيار کي بهتر ڪرڻ جي اجازت ڏين ٿا.

چاڪليڪ ونڊوز لاءِ هڪ اوپن سورس پيڪيج مينيجر آهي. پروجيڪٽ جو مقصد انسٽاليشن کان وٺي ونڊوز آپريٽنگ سسٽم تي تازه ڪاري ۽ انسٽال ڪرڻ تائين پوري سافٽ ويئر لائف سائيڪل کي خودڪار ڪرڻ آهي.

چاڪليٽ استعمال ڪرڻ بابت

توھان ڏسي سگھوٿا ته ڪيئن انسٽال ڪجي پيڪيج مئنيجر پاڻ ھن تي لنڪ. تجزيي کي نصب ڪرڻ لاء مڪمل دستاويز موجود آهي تي لنڪ چاڪليٽ پيڪيج مئنيجر سيڪشن استعمال ڪندي انسٽاليشن ڏسو. مان مختصر طور تي اتان کان ڪجهه نقطا ورجائيندس.

تجزيي جي جديد ورزن کي انسٽال ڪرڻ لاءِ حڪم:

choco install pvs-studio

PVS-Studio پيڪيج جي مخصوص ورزن کي انسٽال ڪرڻ لاءِ حڪم:

choco install pvs-studio --version=7.05.35617.2075

ڊفالٽ طور، صرف تجزيي جو بنيادي، بنيادي جزو، نصب ٿيل آهي. ٻيا سڀ جھنڊا (Standalone, JavaCore, IDEA, MSVS2010, MSVS2012, MSVS2013, MSVS2015, MSVS2017, MSVS2019) پاس ڪري سگھجن ٿا --package-parameters استعمال ڪندي.

هڪ حڪم جو هڪ مثال جيڪو هڪ تجزيه ڪندڙ نصب ڪندو هڪ پلگ ان سان Visual Studio 2019:

choco install pvs-studio --package-parameters="'/MSVS2019'"

هاڻي اچو ته Azure DevOps تحت تجزيي جي آسان استعمال جو هڪ مثال ڏسو.

adjustment

مان توهان کي ياد ڏياران ٿو ته اتي هڪ الڳ سيڪشن آهي اهڙن مسئلن بابت هڪ اڪائونٽ رجسٽر ڪرڻ، هڪ تعمير پائپ لائن ٺاهڻ ۽ توهان جي اڪائونٽ کي GitHub مخزن ۾ واقع هڪ منصوبي سان هم وقت سازي ڪرڻ. هڪ مضمون. اسان جي سيٽ اپ فوري طور تي هڪ ترتيب واري فائل لکڻ سان شروع ٿيندي.

پهرين، اچو ته هڪ لانچ ٽريگر قائم ڪريو، اشارو ڪري ٿو ته اسان صرف تبديلين لاء لانچ ڪيو رکن ٿا شاخ:

trigger:
- master

اڳيون اسان کي هڪ مجازي مشين چونڊڻ جي ضرورت آهي. ھاڻي اھو ھوندو Microsoft جي ميزباني ڪيل ايجنٽ سان Windows Server 2019 ۽ Visual Studio 2019:

pool:
  vmImage: 'windows-latest'

اچو ته ڪنفگريشن فائل جي جسم ڏانھن وڃو (block قدم). ان حقيقت جي باوجود ته توهان هڪ ورچوئل مشين ۾ صوابديدي سافٽ ويئر انسٽال نٿا ڪري سگهو، مون ڊڪر ڪنٽينر شامل نه ڪيو. اسان چاڪليٽ کي Azure DevOps لاءِ ايڪسٽينشن طور شامل ڪري سگھون ٿا. هن کي ڪرڻ لاء، اچو ته وڃو لنڪ. ڪلڪ ڪريو ان کي مفت حاصل ڪريو. اڳيون، جيڪڏهن توهان اڳ ۾ ئي بااختيار آهيو، صرف پنهنجو کاتو چونڊيو، ۽ جيڪڏهن نه، پوء اختيار ڪرڻ کان پوء ساڳيو ڪم ڪريو.

PVS-اسٽوڊيو هاڻي چاڪليٽي ۾ آهي: Azure DevOps جي هيٺان چاڪليٽ جي جانچ ڪندي

هتي توهان کي چونڊڻ جي ضرورت آهي جتي اسين واڌارو شامل ڪنداسين ۽ بٽڻ تي ڪلڪ ڪريو انسٽال ڪريو.

PVS-اسٽوڊيو هاڻي چاڪليٽي ۾ آهي: Azure DevOps جي هيٺان چاڪليٽ جي جانچ ڪندي

ڪامياب تنصيب کان پوء، ڪلڪ ڪريو تنظيم ڏانهن اڳتي وڌو:

PVS-اسٽوڊيو هاڻي چاڪليٽي ۾ آهي: Azure DevOps جي هيٺان چاڪليٽ جي جانچ ڪندي

توھان ھاڻي ونڊو ۾ چاڪليٽي ڪم لاءِ ٽيمپليٽ ڏسي سگھو ٿا ڪمن جڏهن هڪ ترتيب واري فائل کي تبديل ڪندي azure-pipelines.yml:

PVS-اسٽوڊيو هاڻي چاڪليٽي ۾ آهي: Azure DevOps جي هيٺان چاڪليٽ جي جانچ ڪندي

چاڪليٽ تي ڪلڪ ڪريو ۽ فيلڊ جي فهرست ڏسو:

PVS-اسٽوڊيو هاڻي چاڪليٽي ۾ آهي: Azure DevOps جي هيٺان چاڪليٽ جي جانچ ڪندي

هتي اسان کي چونڊڻ جي ضرورت آهي انسٽال ڪريو ٽيمن سان گڏ ميدان ۾. IN Nuspec فائل جو نالو ظاهر ڪريو گهربل پيڪيج جو نالو - pvs-studio. جيڪڏهن توهان ورزن جي وضاحت نه ڪريو، تازو هڪ نصب ڪيو ويندو، جيڪو اسان کي مڪمل طور تي مناسب آهي. اچو ته بٽڻ کي دٻايو شامل ۽ اسان ٺاهيل ڪم کي ترتيب واري فائل ۾ ڏسندا.

steps:
- task: ChocolateyCommand@0
  inputs:
    command: 'install'
    installPackageId: 'pvs-studio'

اڳيون، اچو ته اسان جي فائل جي مکيه حصي ڏانهن وڃو:

- task: CmdLine@2
  inputs:
    script: 

هاڻي اسان کي هڪ فائيل ٺاهڻ جي ضرورت آهي تجزياتي لائسنس سان. هتي PVSNAME и PVSKEY - متغيرن جا نالا جن جا قدر اسان سيٽنگون ۾ بيان ڪيون ٿا. اهي ذخيرو ڪندا PVS-اسٽوڊيو لاگ ان ۽ لائسنس جي چيڪ. انهن جي قيمتن کي سيٽ ڪرڻ لاء، مينيو کوليو متغير-> نئون متغير. اچو ته متغير ٺاهي PVSNAME لاگ ان ۽ PVSKEY تجزيي جي ڪنجي لاءِ. دٻي کي چيڪ ڪرڻ نه وساريو ھن قدر کي راز ۾ رکو لاء PVSKEY. حڪم ڪوڊ:

сall "C:Program Files (x86)PVS-StudioPVS-Studio_Cmd.exe" credentials 
–u $(PVSNAME) –n $(PVSKEY)

اچو ته منصوبي کي تعمير ڪريو بيٽ فائل استعمال ڪندي مخزن ۾ واقع:

сall build.bat

اچو ته هڪ فولڊر ٺاهيو جتي تجزيو ڪندڙ جي نتيجن سان گڏ فائلون محفوظ ڪيون وينديون:

сall mkdir PVSTestResults

اچو ته منصوبي جو تجزيو ڪرڻ شروع ڪريون:

сall "C:Program Files (x86)PVS-StudioPVS-Studio_Cmd.exe" 
–t .srcchocolatey.sln –o .PVSTestResultsChoco.plog 

اسان PlogSonverter يوٽيلٽي استعمال ڪندي پنھنجي رپورٽ کي html فارميٽ ۾ تبديل ڪريون ٿا:

сall "C:Program Files (x86)PVS-StudioPlogConverter.exe" 
–t html –o PVSTestResults .PVSTestResultsChoco.plog

هاڻي توهان کي هڪ ڪم ٺاهڻ جي ضرورت آهي ته جيئن توهان رپورٽ اپ لوڊ ڪري سگهو.

- task: PublishBuildArtifacts@1
  inputs:
    pathToPublish: PVSTestResults
    artifactName: PVSTestResults
    condition: always()

مڪمل ٺاھ جوڙ واري فائل هن طرح نظر اچي ٿي:

trigger:
- master

pool:
  vmImage: 'windows-latest'

steps:
- task: ChocolateyCommand@0
  inputs:
    command: 'install'
    installPackageId: 'pvs-studio'

- task: CmdLine@2
  inputs:
    script: |
      call "C:Program Files (x86)PVS-StudioPVS-Studio_Cmd.exe" 
      credentials –u $(PVSNAME) –n $(PVSKEY)
      call build.bat
      call mkdir PVSTestResults
      call "C:Program Files (x86)PVS-StudioPVS-Studio_Cmd.exe" 
      –t .srcchocolatey.sln –o .PVSTestResultsChoco.plog
      call "C:Program Files (x86)PVS-StudioPlogConverter.exe" 
      –t html –o .PVSTestResults .PVSTestResultsChoco.plog

- task: PublishBuildArtifacts@1
  inputs:
    pathToPublish: PVSTestResults
    artifactName: PVSTestResults
    condition: always()

اچو ته ڪلڪ ڪريو محفوظ ڪريو->محفوظ ڪريو->چلايو ڪم کي هلائڻ لاء. اچو ته رپورٽ ڊائون لوڊ ڪريون ٽاسڪ ٽيب تي.

PVS-اسٽوڊيو هاڻي چاڪليٽي ۾ آهي: Azure DevOps جي هيٺان چاڪليٽ جي جانچ ڪندي

چاڪليٽي پروجيڪٽ ۾ صرف 37615 لائينون C# ڪوڊ آھن. اچو ته ڏسجي ته ڪجهه غلطيون مليون.

ٽيسٽ جا نتيجا

خبردار N1

تجزيي جي خبرداري: V3005 'Provider' متغير پاڻ کي لڳايو ويو آهي. 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

public static PlatformType get_platform()
{
  switch (Environment.OSVersion.Platform)
  {
    case PlatformID.MacOSX:
    {
      ....
    }
    case PlatformID.Unix:
    if(file_system.directory_exists("/Applications")
      & file_system.directory_exists("/System")
      & file_system.directory_exists("/Users")
      & file_system.directory_exists("/Volumes"))
      {
        return PlatformType.Mac;
      }
        else
          return PlatformType.Linux;
    default:
      return PlatformType.Windows;
  }
}

آپريٽر فرق & آپريٽر کان && اهو آهي ته جيڪڏهن اظهار جي کاٻي پاسي آهي ڪوڙي، پوءِ ساڄي پاسي اڃا به ڳڻيو ويندو، جيڪو ھن صورت ۾ غير ضروري طريقو ڪالن جو مطلب آھي system.directory_exists.

غور ڪيل ٽڪرا ۾، هي هڪ معمولي نقص آهي. ها، هي حالت بهتر ٿي سگهي ٿي & آپريٽر کي && آپريٽر سان بدلائي، پر عملي نقطي نظر کان، اهو ڪنهن به شيءِ تي اثر انداز نٿو ٿئي. جڏهن ته، ٻين حالتن ۾، ۽ ۽ ۽ ۽ جي وچ ۾ مونجهارو سنجيده مسئلا پيدا ڪري سگهي ٿو جڏهن اظهار جي ساڄي پاسي کي غلط/غلط قدرن سان علاج ڪيو ويندو آهي. مثال طور، اسان جي غلطي گڏ ڪرڻ ۾، سڃاڻپ V3093 تشخيصي استعمال ڪندي، اتي هي ڪيس آهي:

if ((k < nct) & (s[k] != 0.0))

جيتوڻيڪ انڊيڪس k غلط آهي، اهو استعمال ڪيو ويندو هڪ صف جي عنصر تائين رسائي ڪرڻ لاء. نتيجي طور، هڪ استثنا اڇلايو ويندو IndexOutOfRangeException.

ڊيڄاريندڙ N3, N4

تجزيي جي خبرداري: V3022 [CWE-571] اظهار ’شارٽ پرامپٽ‘ هميشه سچو هوندو آهي. InteractivePrompt.cs 101
تجزيي جي خبرداري: V3022 [CWE-571] اظهار ’شارٽ پرامپٽ‘ هميشه سچو هوندو آهي. InteractivePrompt.cs 105

public static string 
prompt_for_confirmation(.... bool shortPrompt = false, ....)
{
  ....
  if (shortPrompt)
  {
    var choicePrompt = choice.is_equal_to(defaultChoice) //1
    ?
    shortPrompt //2
    ?
    "[[{0}]{1}]".format_with(choice.Substring(0, 1).ToUpperInvariant(), //3
    choice.Substring(1,choice.Length - 1))
    :
    "[{0}]".format_with(choice.ToUpperInvariant()) //0
    : 
    shortPrompt //4
    ? 
    "[{0}]{1}".format_with(choice.Substring(0,1).ToUpperInvariant(), //5
    choice.Substring(1,choice.Length - 1)) 
    :
    choice; //0
    ....
  }
  ....
}

انهي صورت ۾، ٽرينري آپريٽر جي آپريشن جي پويان هڪ عجيب منطق آهي. اچو ته هڪ ويجهي نظر رکون: جيڪڏهن مون نمبر 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);
  }
}

تشخيص لائن لاء ڪم ڪيو:

while (start >= 0 && j != 0 ? description [j++ - 1] == '{' : false)

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);
    }
    ....
  }
  ....
}

هتي هڪ عجيب گهريلو حالت آهي: InstallPackageVersions.Count != 1جيڪو هميشه هوندو سچ. گهڻو ڪري اهڙي ڊيڄاريندڙ ڪوڊ ۾ هڪ منطقي غلطي کي ظاهر ڪري ٿو، ۽ ٻين حالتن ۾ اهو صرف اشارو ڪري ٿو بيڪار چيڪنگ.

خبردار N7

تجزيي جي خبرداري: V3001 اتي هڪجهڙا ذيلي اظهار آهن 'commandArguments.contains("-apikey")' کاٻي ۽ ساڄي طرف '||' آپريٽر ArgumentsUtility.cs 42

public static bool arguments_contain_sensitive_information(string
 commandArguments)
{
  return commandArguments.contains("-install-arguments-sensitive")
  || commandArguments.contains("-package-parameters-sensitive")
  || commandArguments.contains("apikey ")
  || commandArguments.contains("config ")
  || commandArguments.contains("push ")
  || commandArguments.contains("-p ")
  || commandArguments.contains("-p=")
  || commandArguments.contains("-password")
  || commandArguments.contains("-cp ")
  || commandArguments.contains("-cp=")
  || commandArguments.contains("-certpassword")
  || commandArguments.contains("-k ")
  || commandArguments.contains("-k=")
  || commandArguments.contains("-key ")
  || commandArguments.contains("-key=")
  || commandArguments.contains("-apikey")
  || commandArguments.contains("-api-key")
  || commandArguments.contains("-apikey")
  || commandArguments.contains("-api-key");
}

پروگرامر جنهن ڪوڊ جي هن حصي کي لکيو، آخري ٻن لائينن کي ڪاپي ۽ پيسٽ ڪيو ۽ انهن کي ايڊٽ ڪرڻ وساري ڇڏيو. انهي جي ڪري، چاڪليٽ استعمال ڪندڙ پيٽرول لاڳو ڪرڻ کان قاصر هئا apikey ڪجھ وڌيڪ طريقا. مٿي ڏنل پيٽرولن سان ملندڙ، مان هيٺين اختيارن کي پيش ڪري سگهان ٿو:

commandArguments.contains("-apikey=");
commandArguments.contains("-api-key=");

ڪاپي پيسٽ جي غلطين کي جلدي يا بعد ۾ ظاهر ٿيڻ جو هڪ وڏو موقعو آهي ڪنهن به منصوبي ۾ سورس ڪوڊ جي وڏي مقدار سان، ۽ انهن کي منهن ڏيڻ لاءِ بهترين اوزارن مان هڪ آهي جامد تجزيو.

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" چاٻي سان لاڳاپيل بگ پسند ڪيو.

PVS-اسٽوڊيو هاڻي چاڪليٽي ۾ آهي: Azure DevOps جي هيٺان چاڪليٽ جي جانچ ڪندي

جيڪڏهن توهان هن مضمون کي انگريزي ڳالهائيندڙ سامعين سان حصيداري ڪرڻ چاهيو ٿا، مهرباني ڪري ترجمو لنڪ استعمال ڪريو: Vladislav Stolyarov. PVS-اسٽوڊيو هاڻي چاڪليٽ ۾ آهي: Azure DevOps تحت چاڪليٽ جي جانچ ڪندي.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو