راهنمای نهایی برای رفع اشکالات رایگان بدون مشکل در پروژه های حق بیمه پایتون توسط SonarCloud

0g امکان_خبرش +++++++++++++++++++++++++++++ “5.7909090909091”>  عکس پروفایل نویسنده

sonarsourceSonarSource

ما ابزار کلاس و کیفیت کد جهانی را تولید می کنیم: SonarQube ، SonarLint و SonarCloud < / p>

به عنوان توسعه دهندگان ، همیشه زمانی فرا می رسد که اشکالی در تولید پیدا می کنیم و متعجب می شویم که چگونه از همه بررسی های کیفیت ما عبور کرده است. حقیقت این است که ما هرگز نمی توانیم مطمئن باشیم که کد ما بدون اشکال است. ما فقط می توانیم ابزارها و گردش کارهایی را انتخاب کنیم که بیشترین اشکال را پیدا کنند بدون اینکه سرعت ما را خیلی کم کند.

SonarQube ، SonarLint و SonarCloud از این دست ابزارها هستند. ما در حین کارزار گزارش اشکالات اخیر خود از SonarCloud استفاده کردیم ، که روی پروژه های معروف مانند tensorflow ، numpy ، نمک ، نگهبانی و بیو پایتون متمرکز بود. نتیجه کارزار کاملا جالب بود ، از آنجا که اشکالاتی را نشان می دهد که ما می توانیم در یک پروژه پایتون پیدا کنیم حتی اگر روند کار توسعه آن شامل بهترین روش ها باشد: بررسی کد ، پوشش آزمایش بالا و استفاده از یک یا چند پرز (flake8 ، pylint) ، …).

بیایید چند اشکال را که با SonarCloud پیدا کرده ایم مرور کنیم و ببینیم چرا وقتی که پرزهای محبوب این کار را نمی کنند ، چرا قادر به شناسایی آنها است.

ارجاع به یک متغیر تعریف نشده

SonarCloud هنگامی که متغیرها در شاخه دیگری تعریف می شوند می تواند ارجاعات اشکالی به متغیرهای تعریف نشده را تشخیص دهد. این از نمودار جریان کنترل استفاده می کند تا استنباط کند که تعریف متغیر هرگز قبل از ارجاع اشکال رخ نخواهد داد.

> class = “paragraf”> تشخیص کد مرده زمانی آسان است که پس از بازپرداخت یا دستور افزایش باشد. هنگامی که بازگشت مشروط است ، کمی سخت تر است. ما برای تشخیص مواردی که چند شاخه درست قبل از رسیدن به یک عبارت خارج می شوند ، از یک نمودار جریان کنترل استفاده می کنیم.

خطاهای نوع

SonarCloud دارای یک موتور استنباط نوع است ، که به کمک آن می تواند تشخیص دهد خطاهای نوع پیشرفته از همه اطلاعاتی که می تواند برای استنباط نوع متغیر از جمله مقاله های خرد Typeshed ، تکالیف و حاشیه نویسی نوع شما استفاده کند ، استفاده می کند. در عین حال ، اگر از حاشیه نویسی نوع استفاده نکنید شکایت نمی کند ، و برای جلوگیری از مثبت های کاذب. تاپل این الگوریتم می تواند تکالیف لیست بعدی را به output_shape نادیده بگیرد.

<> پاراگراف بیشتر>> “<" پاراگراف "> <> پاراگراف> <> پاراگراف <> پاراگراف

نوع آرگومان اشتباه

SonarCloud از مقاله های خرد Typeshed برای شناخت انواع مورد انتظار توابع builtins استفاده می کند. بنابراین در اینجا این مسئله مسئله ای را ایجاد می کند زیرا اگر len داخلی را روی یک عدد صحیح فراخوانی کنید ، یک TypeError دریافت می کنید.

مقایسه هایی که منطقی نیستند

SonarCloud قوانین زیادی برای تشخیص کد دارد که ایجاد نمی کند احساس، مفهوم. مقایسه انواع ناسازگار با == هرگز شکست نخواهد خورد ، اما اگر False استفاده کنید همیشه False یا True برمی گردد! =. در اینجا می توانیم یک مسئله را مشاهده کنیم زیرا platform.architecture () یک جمع را برمی گرداند.

برخی از فراخوانی های عملکردی هیچگونه عارضه جانبی ندارند ، یعنی به خودی خود تغییری ایجاد نمی کنند و تنها هدف آنها بازگرداندن یک مقدار است. بنابراین همیشه هنگام استفاده از نتیجه آنها یک اشکال وجود دارد. SonarCloud لیست گسترده ای از این توابع را می داند. در این مثال دو رشته بهم پیوسته نیستند. روش قالب در رشته دوم فراخوانی می شود و نتیجه کنار گذاشته می شود ، بنابراین مقدار warning_msg “اطمینان حاصل کنید که مجموعه داده شما می تواند حداقل تولید کند” است.

c79143b6″> 117863b6 “> e7” 8743114 “077243b6” za7 “cz7243b5″> c7863b6 “> c7903a4”

استثناهای ردیابی نشده

هنگام بازبینی کد ، معمولاً کلاسها ، متغیرها و سایر نمادهای معنی دار را بررسی می کنیم و فراموش می کنیم جزئیات کمی را بررسی کنیم ، از جمله “آیا وجود دارد کلمه کلیدی را قبل از استثنا my من مطرح کنید “. SonarCloud برای استخراج سلسله مراتب نوع ، کل پروژه شما را تجزیه و تحلیل می کند. بنابراین وقتی استثناهای سفارشی کنار گذاشته می شود ، نه فقط موارد ساخته شده را تشخیص می دهد.

لکه های [SonarCloud] قابل توجه هستند (احتمالاً توسط برخی از درون نگری و / یا استنباط نوع به وجود می آیند) ، نه فقط تطبیق الگوی ساده ای که من در اکثر اکوسیستم flake8 به آن عادت کرده ام.
– Peter J. A. Cock – نگهدارنده BioPython (پست اصلی در اینجا)

این یکی از بازخوردهای خوبی است که در طی گزارش گزارش اشکالات خود دریافت کردیم. (موارد بیشتری وجود دارد!).

همه پروژه هایی که بررسی کردیم از یک یا چند پرز استفاده می کنند ، مانند Flake8 که بسیار محبوب است و اغلب در گردش کار CI گنجانده می شود. دلایل بسیار خوبی برای استفاده گسترده Flake8 وجود دارد:

  • بر قوانین غیر بحث برانگیز متمرکز است که چند مثبت نادرست ایجاد می کند
  • این سبک pep8 را بررسی می کند
  • این است سریع

SonarLint ، SonarCloud و SonarQube از همان فلسفه در مورد سرعت و مثبت کاذب برخوردارند. هر سه توسعه دهنده هدف ، این بدان معنی است که ما سخت تلاش می کنیم تا “سر و صدا” را به حداقل برسانیم. علاوه بر این ، SonarCloud و SonarQube می توانند هر دو شماره Flake8 را وارد کنند. اما مهمتر از همه:

  • آنها طیف گسترده تری از مسائل را تشخیص می دهند. نه تنها تطبیق سبک و الگو ، بلکه طیف گسترده ای از اشکالات ، بوی کد و آسیب پذیری کد ها.
  • آنها به شما کمک می کنند تا در دستیابی به کیفیت بالا در تغییرات اخیر تمرکز کنید (به عنوان مثال “همانطور که تمیز می کنید”) به جای اینکه حواس شما را با کارهای کوچک پرت کند. نقص در کد قدیمی
  • آنها از تمام زبانهای پروژه شما پشتیبانی می کنند. به عنوان مثال اگر JavaScript یا TypeScript را در کنار پایتون خود داشته باشید ، به طور همزمان تجزیه و تحلیل می شود ، بدون اینکه تنظیمات و زیرساخت های بیشتری داشته باشید.

می توانید از SonarCloud بصورت رایگان استفاده کنید هر پروژه منبع باز و فقط با چند کلیک شروع کنید. SonarQube Community Edition همچنین برای استفاده در فضای داخلی نامحدود رایگان است. دریغ نکنید که نظرات خود را ، خوب یا بد ، در انجمن جامعه ما به اشتراک بگذارید. این به ما کمک می کند تا ابزارهای خود را هر روز بهبود ببخشیم.

قبلاً در https://blog.sonarsource.com/sonarcloud-finds-bugs-in-high-bigh-python-projects