مجتبی مرادی
مجتبی مرادی
خواندن ۸ دقیقه·۳ سال پیش

آشنایی با مفاهیم و ابزار Static Code Analysis

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

به همین دلیل است که تیم های توسعه از ابزارهای تحلیل استاتیک استفاده می کنند. در اینجا، تجزیه و تحلیل استاتیک و مزایای استفاده از ابزار تجزیه و تحلیل کد استاتیک را مورد بحث قرار می دهیم.

تجزیه و تحلیل استاتیک

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

این نوع تجزیه و تحلیل نقاط ضعف در کد منبع را که ممکن است منجر به آسیب‌پذیری شود، برطرف می‌کند. البته، این امر ممکن است از طریق بررسی کدهای دستی نیز حاصل شود. اما استفاده از ابزارهای خودکار بسیار مؤثرتر است.

تجزیه و تحلیل استاتیک معمولاً برای مطابقت با دستورالعمل های کدگذاری - مانند MISRA استفاده می شود. و اغلب برای انطباق با استانداردهای صنعتی - مانند ISO 26262 استفاده می شود.

تجزیه و تحلیل استاتیک چه نوع مشکلاتی را می تواند پیدا کند؟

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

  • آسیب پذیری های امنیتی بالقوه
  • خطرات باگ و ضد الگوها
  • نقض دستورالعمل های سبک کد
  • مسائل مربوط به عملکرد
  • کد مرده یا استفاده نشده

تحلیل کد ایستا در کدام مرحله انجام می شود؟

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

تفاوت بین تجزیه و تحلیل استاتیک و تحلیل پویا چیست؟

هر دو نوع عیوب را تشخیص می دهند. تفاوت بزرگ در جایی است که آنها نقص هایی را در چرخه عمر توسعه پیدا می کنند. تجزیه و تحلیل استاتیک، قبل از اجرای یک برنامه، نقص ها را شناسایی می کند (به عنوان مثال، بین کدگذاری و تست واحد). تجزیه و تحلیل کد پویا پس از اجرای یک برنامه (به عنوان مثال، در طول آزمایش واحد) نقص ها را شناسایی می کند. با این حال، برخی از خطاهای کدگذاری ممکن است در طول آزمایش واحد ظاهر نشوند. بنابراین، ایراداتی وجود دارد که آزمایش پویا ممکن است آن‌ها را که تجزیه و تحلیل کد استاتیک می‌تواند پیدا کند، از دست بدهد.

مزایای ابزارهای تحلیل استاتیک چیست؟

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

سرعت

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

عمق

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

دقت

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

چگونه یک ابزار تحلیل کد استاتیک انتخاب کنیم؟

در اینجا چند نکته وجود دارد که باید هنگام تصمیم گیری اینکه کدام ابزار برای شما مناسب است در نظر بگیرید.

زبان برنامه نویسی

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

استانداردها

یکی از کاربردهای اصلی آنالایزرهای استاتیک، رعایت استانداردها است. بنابراین، اگر در یک صنعت تنظیم شده هستید که به استاندارد کدنویسی نیاز دارد، باید مطمئن شوید که ابزار شما از آن استاندارد پشتیبانی می کند.

ابزار

ابزار SonarQube

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

ویژگی های بیشتری:

  • ابزار SonarQube با چندین پلتفرم از جمله GitHub، Azure DevOps، Bitbucket، GitLab، Docker Support، و IDE های کدنویسی مانند Eclipse، Visual Studio و غیره ادغام می شود. کد ویژوال استودیو و IntelliJ IDEA.
  • همچنین از بیش از 25 زبان برنامه نویسی قابل توجه، از جمله C#، Python، Cobol، PHP و Java پشتیبانی می کند.
  • این ابزار به توسعه‌دهندگان کمک می‌کند تا با اجتناب از باگ‌ها یا رفتارهای تعریف‌نشده، نقض‌ها یا حملات، و کاهش به‌روزرسانی کد، و افزایش سرعت توسعه، یک حمله سه جانبه به کد خود را مشاهده کنند.
  • توسعه‌دهندگان می‌توانند به راحتی با خطاها و نادیده‌گیری‌های خود مقابله کنند، زیرا اشتباهات بر اساس شدت طبقه‌بندی می‌شوند، با استانداردهای کدگذاری امن (به عنوان مثال، CERT، MISRA و CWE) نقشه‌برداری می‌شوند، کاملاً مستند هستند و به طور کلی منجر به اجرای بهترین شیوه‌ها و بهبود کدنویسی می‌شوند.
  • همچنین کدهای تکراری، استانداردهای کدگذاری ضعیف، تست های واحد، پوشش کد، پیچیدگی کد و نظرات را گزارش می دهد.
  • اگرچه اکثر کاربران و حتی سازمان‌ها از نسخه رایگان SonarQube خوشحال خواهند شد، اما می‌توانند از میان چند نسخه پولی دیگر این نرم‌افزار که دارای ویژگی‌ها و قابلیت‌های پیشرفته هستند، انتخاب کنند.

نسخه های مختلف SonarQube را میتوان به صورت رایگان استفاده کرد.

ابزار Checkmarx SAST CxSAST

با Checkmarx، ما یک بازیگر پیشرو دیگر در بازار ابزار تحلیل کد استاتیک داریم. محصول آن - CxSAST - یک ابزار تجزیه و تحلیل استاتیک، انعطاف‌پذیر و دقیق در سطح سازمانی است.

می تواند صدها آسیب پذیری امنیتی را در هر کدی شناسایی کند. توسط DevOps و تیم‌های امنیتی برای اسکن کدهای اولیه در SDLC برای شناسایی آسیب‌پذیری‌ها، مسائل مربوط به انطباق و مشکلات منطق تجاری استفاده می‌شود - و همچنین توصیه‌هایی در مورد نحوه حل آنها ارائه می‌دهد.

ویژگی های بیشتری:

  • ابزار Checkmarx می تواند به راحتی در IDE ها، سرورها و خطوط لوله CI/CD ادغام شود، به این معنی که می تواند آسیب پذیری های امنیتی را در کدهای کامپایل شده (DAST) و منبع (SAST) شناسایی کند. همچنین با بیش از 25 زبان و فریمورک سازگار است.
  • با ادامه رشد برنامه‌ها، به راحتی مقیاس‌پذیر می‌شود و به تیم‌های DevOps اجازه می‌دهد تا بدون نگرانی در مورد کدهای قدیمی‌تر، روی بخش‌های جدیدتر برنامه خود تمرکز کنند.
  • توسعه دهندگان می توانند اسکن های افزایشی سریع و دقیق را هر زمان که نیاز داشته باشند، بدون اتلاف وقت روی کدهایی که قبلاً بررسی شده است، اجرا کنند.
  • دارای پرس و جوهای قابل تنظیم برای رسیدگی حتی منحصر به فردترین کدها، بینش عملی برای اشکال زدایی سریعتر، و یک رابط کاربری وب ساده برای رفع مشکلات ردیابی.
  • ویژگی Best Fix Location این ابزار به توسعه‌دهندگان اجازه می‌دهد تا آسیب‌پذیری‌های متعدد را در یک نقطه از کد برطرف کنند – آن‌ها می‌توانند به راحتی متوجه شوند که همه باگ‌ها کجا هستند و به سرعت آن‌ها را برطرف کنند.

نسخه ی آزمایشی Checkmarx SAST (CxSAST) را میتوان به صورت رایگان امتحان کرد.

ابزار Synopsis Coverity

با Synopsis Coverity Static Analysis، توسعه‌دهندگان می‌توانند مشتاقانه منتظر یافتن و رفع سریع اشکالات در کد خود باشند. Coverity نقایص مهم کیفیت نرم افزار و آسیب پذیری های امنیتی در کد و هرگونه نقص در استانداردهای انطباق صنعت را شناسایی می کند.
این ابزاری با کاربری آسان، دقیق و مقیاس‌پذیر است که باگ‌ها را در مراحل اولیه SDLC برطرف می‌کند.

ویژگی های بیشتری:

  • به لطف افزونه Code Sight IDE، Coverity به توسعه دهندگان این امکان را می دهد تا هنگام نوشتن کد خود، مشکلات امنیتی یا کیفیت را در زمان واقعی پیدا کرده و برطرف کنند.
  • توسعه‌دهندگان همچنین از آنالیزهای بی‌درنگ، دقیق و تدریجی برخوردار هستند که به‌طور یکپارچه در پس‌زمینه اجرا می‌شوند. همچنین به آنها نشان داده می شود که چگونه مشکلات را برطرف کرده و کد خود را از داخل IDE خود ایمن کنند.
  • ابزار در حال اجرا به زمین برخورد می کند زیرا می تواند بلافاصله شروع به شناسایی و رفع اشکالات در خارج از جعبه کند - بدون نیاز به تنظیم.
  • از طریق API های REST به خوبی با خطوط لوله DevOps ادغام می شود و یکپارچه سازی مداوم (CI) و مدیریت پیکربندی نرم افزار (SCM) را ارائه می دهد.
  • همچنین، این ابزار یک نمایه ریسک انباشته متمرکز از کل پورتفولیوهای برنامه را ارائه می دهد، در حالی که API ها امکان صادرات نتایج به سایر ابزارهای گزارش ریسک را فراهم می کنند.
  • توسعه‌دهندگان می‌توانند آسیب‌پذیری‌های شناسایی‌شده را بر اساس دسته‌بندی فیلتر کنند، آسیب‌پذیری‌ها را بر اساس اهمیت آن‌ها اولویت‌بندی کنند، و انطباق با سیاست‌های امنیتی را در میان تیم‌ها و پروژه‌ها مدیریت کنند.
  • آنها همچنین می‌توانند به گزارش‌های روند، یا حتی گزارش‌هایی که سطوح شدت را در زمان‌های مختلف نشان می‌دهند، دسترسی داشته باشند تا اطلاعات مربوط به وضعیت امنیتی پروژه‌ها را تجزیه و تحلیل کنند. این گزارش‌ها را می‌توان برای اثبات انطباق در زمان ممیزی صادر کرد.

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

معرفی شرکت‌ها در این حوزه در ایران

متاسفانه شرکت‌های زیادی نیستند که به طور مشخص تجزیه و تحلیل ایستا را انجام دهند. اما تا جایی که بنده مطلع هستم شرکت تست ایران تجزیه و تحلیل را برای برنامه‌های ما ارائه می‌دهد.

«این مطلب، بخشی از تمرینهای درس معماری نرم‌افزار در دانشگاه شهیدبهشتی است»

مراجع

https://www.whitehatsec.com/glossary/content/static-analysis

sqmtest.ir

https://www.perforce.com/blog/sca/what-static-analysis

https://www.comparitech.com/net-admin/best-static-code-analysis-tools/

Static Code Analysisتحلیل استاتیک برنامهتست نرم‌افزارمعماری_نرم_افزار_بهشتی
شاید از این پست‌ها خوشتان بیاید