تحلیل ایستای کد چیه و چطور کار میکنه؟
خلاصهٔ کاملتر
تو این مقالهٔ IBM اومده که تحلیل ایستای کد یا static code analysis یعنی بررسی سورسکد برای پیدا کردن باگ، حفرهٔ امنیتی و کد ضعیف، بدون اینکه برنامه اجرا بشه. فرقش با تحلیل پویا همینه: تحلیل پویا برنامه رو اجرا میکنه و رفتارش رو تماشا میکنه، ولی تحلیل ایستا کد رو مثل یه دادهٔ ساختاریافته میبینه و قبل از کامپایل و دیپلوی حدس میزنه برنامه چطور رفتار میکنه.
کار ابزار سه مرحله داره. اول کد به توکنها شکسته میشه و پارسر از روش یه AST (درخت نحوی انتزاعی، یعنی نمایش درختی و ماشینخوانِ ساختار برنامه) میسازه. بعد ابزار یه گراف جریان کنترل درست میکنه تا مسیرهای اجرا رو ببینه و کنارش جریان دادهها رو دنبال میکنه؛ همینجاست که چیزی مثل کد مرده (کدی که هیچوقت اجرا نمیشه) لو میره.
مرحلهٔ سوم اعمال قوانینه: از قراردادهای ساده مثل نامگذاری تا بررسیهای امنیتی جدیتر مثل taint analysis، که ورودیهای آلودهٔ کاربر رو دنبال میکنه تا ببینه جایی به یه نقطهٔ خطرناک مثل کوئری دیتابیس میرسن یا نه.
ریشهٔ ماجرا برمیگرده به سال ۱۹۷۸ و ابزار Lint که استیون سی. جانسون تو Bell Labs برای یونیکس ساخت تا قبل از کامپایل، ساختارهای مشکوک رو علامت بزنه و کامپیوترِ گرون اونموقع الکی مصرف نشه. اسمش هم از پرزهاییه که تو فیلتر خشککن جمع میشن. تو دههٔ ۹۰ و ۲۰۰۰ با رشد اینترنت، SAST و DAST اومدن، ولی اون ابزارها نرخ هشدار اشتباه بالایی داشتن چون درک درستی از زمینه نداشتن.
تو مقاله اومده که با اومدن یادگیری ماشین و مدلهای زبانی بزرگ تو دههٔ ۲۰۲۰، ابزارها تا حدی منظور توسعهدهنده رو هم میفهمن. جای اجرا هم عوض شده: بهجای یه دروازهٔ نهایی قبل از انتشار، حالا با فلسفهٔ shift left کل چرخهٔ توسعه رو پوشش میده. ابزارهایی مثل SonarQube و ESLint و GitHub Advanced Security هم داخل IDE موقع تایپ هشدار میدن، هم بهعنوان چک خودکار توی CI/CD اجرا میشن.
نکات کلیدی:
- تحلیل ایستا کد رو بدون اجرا بررسی میکنه؛ تحلیل پویا برنامه رو اجرا میکنه
- سه مرحله: ساخت AST، تحلیل جریان کنترل و داده، و اعمال قوانین
- taint analysis ورودی آلودهٔ کاربر رو تا نقطهٔ خطرناک دنبال میکنه
- Lint سال ۱۹۷۸ توسط استیون سی. جانسون تو Bell Labs ساخته شد
- ابزارهای امروزی مثل SonarQube و ESLint هم تو IDE و هم تو CI/CD اجرا میشن




