آنالیزور استاتیک یا static analyzer چیست؟

آنالیزور استاتیک یا static analyzer چیست؟

شاید درمورد آنالیزور های استاتیک شنیده باشین یا شاید هیچ ایده ای ندارین که چی هست. شاید هم می دونین اما هنوز فرصت نکردین درموردش بیشتر مطالعه کنین. من سعی دارم طی چند مطلب به سوال هایی که ممکنه در این مورد پیش بیاد پاسخ بدم و بهتون نشون بدم که این روز ها آنالیزور های استاتیک تو دنیای PHP چقدر خوب عمل می کنن.

شاید بپرسین فایدش برای من چیه؟

  • باگ های کمتری به مرحله production پروژه می رسه
  • کد های تمیز تر و سالم تری می نویسین
  • اجازه می دین کامپیوتر نگران این باشه که کدتون کار می کنه یا نه و خودتون روی مسائل مهم تر تمرکز می کنین

بریم سر اصل مطلب! هدف آنالیزور های استاتیک چیه؟ سعی می کنم پایه ای ترین تعریفم رو ارائه بدم:

هدف آنالیز استاتیک اینه که بدون اجرای کد، از برنامه ای برای تحلیل کد استفاده کنه تا باگ های اون برنامه مشخص بشه.

چطور چنین چیزی ممکنه؟ بیاین برای چند لحظه وانمود کنیم یک آنالیزور استاتیک هستیم و به این تابع نگاه کنیم:

function foo(array $input): void {}

تصور کنید این تابع رو صدا می زدیم اما اشتباها به جای آرایه یک رشته بهش می دادیم.

foo('wrong input');

به طور قطع این تابع موقع اجرا خطای TypeError میده. البته تنها با نگاه کردن بهش می تونستیم بگیم که اشتباه نوشته شده. تابعی که ورودیش آرایه type شده هرگز رشته رو قبول نمی کنه.

این اصل کار آنالیزور های استاتیک هست: نگاه کردن به type های تعریف شده و تابع های صدا زده شده و مشخص کردن این که اون ها درست هستن یا نه. 

ممکنه کار راحتی به نظر برسه اما اگر این فرآیند رو اتوماتیک کنین و همه سورس کد پروژه بررسی بشه، آنالیزور های استاتیک می تونن موارد عجیبی که شما جا انداختین رو تشخیص بدن.

بهای کمی بابت استفاده از خوبی های آنالیز استاتیک وجود داره. باید از سیستم type زبان PHP به خوبی استفاده کنین. در واقع بیشتر آنالیزور های استاتیک فقط از سیستم type خود PHP استفاده نمی کنن. بلکه از docblock (کامنت هایی که ساختار مشخصی دارن) هم بهره می برن. هرچی اطلاعات بیشتری موجود باشه بهتره.

این فرآیند خسته کننده نمیشه؟ این که کدمون رو اجرا کنیم تا ببینیم کار میکنه یا نه سریع تر نیست؟ در مقیاس کوچک شاید جواب مثبت باشه. امیدوارم بتونم در انتهای این رشته مطالب شما رو قانع کنم که اینطور نیست!

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

در مطلب بعدی سعی می کنیم کار با آنالیزور های استاتیک رو شروع کنیم.

از بهترین نوشته‌های کاربران سکان آکادمی در سکان پلاس


online-support-icon