شما اغلب اصطلاح "تحلیل استاتیک" را میشنوید که به یک ابزار یا تکنیک شناختهشده اشاره دارد، به طوری که مطمئن میشویم تمام کدهای ما قبل از انتشار از تجزیه و تحلیل استاتیک عبور میکنند. اما نوع تحلیل استاتیکی که استفاده میکنید مهم است.
متداولترین نوع ارجاعشده SAST (static application security testing) نامیده میشود که بهترین عمل در تست امنیت برنامه است. اما شما میتوانید جدا از امنیت نیز تحلیل استاتیک را انجام دهید. پوشش تمام کلاسهای خطا اغلب به معنای استفاده از ابزارهای متعدد است، زیرا ابزارهای مختلف تمایل به دریافت انواع مختلفی از خطاها دارند.
در این مقاله چهار نوع تحلیل کد وجود دارد که باید آنها را بدانید و هر کدام مزایایی برای تیم توسعه نرمافزار دارد.
عملکرد و کارایی
ابزارهای تحلیل استاتیک میتوانند به گرفتن الگوهای کدگذاری متداول که منجر به عملکرد ضعیف میشوند کمک کنند.
با استفاده از ابزارهای تحلیل استاتیک برای به دست آوردن این الگوهای ضد عملکرد، اطمینان حاصل میشود که آنها نمیتوانند وارد کد پایه (codebase) شما شوند. اما این ابزارها یک مزیت آموزشی مهم نیز دارند: آنها به توسعهدهندگان قبلی نشان میدهند که بهترین روشها تغییر کرده است و به توسعهدهندگان جدید نشان میدهند این راهی بهتر برای انجام یک کار مشخص است.
قابلیت اطمینان
مواردی مثل نشت منابع در C به طور معمول بر امنیت تأثیر نمیگذارند. اما با این وجود موضوع مهمی برای پیگیری و تصحیح است، زیرا این مشکل میتواند منجر به رفتار غیر منتظره یا خرابی شود.
هیچ کس دوست ندارد پیام "سرویس از کار افتاده است" را دریافت کند. ابزارهای تحلیل استاتیک که بر روی قابلیت اطمینان تمرکز دارند میتوانند به پیشگیری از این مساله کمک کنند. مثلا ابزار Infer فیسبوک میتواند مشکلات مربوط به اشارهگر null، نشت حافظه و مسائل مربوط به امنیت/همزمانسازی threadها را کشف کنند.
از آنجا که پیدا کردن و دیباگ کردن مسائل مربوط به نشت حافظه و threadها سخت است، ابزارهای استاتیک میتوانند برای این نوع خطاها مفید باشند، و باعث صرفهجویی در وقت توسعهدهنده و افزایش بهرهوری در طولانی مدت شوند.
امنیت
طیف گستردهای از مسائل امنیتی وجود دارد، و این با طیف وسیعی از الگوریتمهای مختلف تحلیل استاتیک که برای گرفتن آنها طراحی شده است، مطابقت دارد. مثلا تکنیکهای متمرکز بر یافت آسیبپذیریهای جریان اطلاعات، لزوما برای یافت مسائل ایمنی حافظه خوب نیستند.
این بدان معناست که استفاده از ابزارهای متعدد حتی اگر در درجه اول به امنیت توجه کنید، ایده خوبی است.
ابزار Infer فیسبوک، که در بالا به آن اشاره شد، میتواند در گرفتن آسیبپذیریهای جریان اطلاعات مانند حملات تزریق دستورات یا شکست در رمزگذاری دادهها کمک کند. کانفیگ کردن Infer برای آگاهی از برنامه و فریمورکهای شما میتواند به گرفتن خطاهای بیشتر و بهبود نسبت سیگنال به نویز کمک کند.
ابزار منبع باز FindSecBugs میتواند مسائل مربوط به کانفیگ کردن، استفاده از رمزگذاری ضعیف، و مسائل مربوط به تزریق دستورات فریمروک خاصی را بگیرد. این ابزار بدون تنظیمات خاصی کار میکند.
سبک
یک روش خوب دیگر، تشویق توسعهدهندگان برای پذیرش یک سبک کدنویسی یک شکل در تیم است. این سوال که باید از چه سبکی استفاده شود به اندازه اطمینان از اینکه توسعهدهندگان یک سبک ثابت را دنبال میکنند، مهم نیست.
دو دلیل مهم برای خودکارسازی تشخیص تخلفات سبک با استفاده از تحلیل استاتیک وجود دارد. اول اینکه خودکارسازی تضمین میکند که قوانین سبک هرگز نقض نمیشوند و کد شما را ثابت نگه میدارد. دومین مورد اینکه اگر ابزاری به نقض سبک اشاره کند، پس توسعهدهنده مجبور نیست این پیگیری را انجام دهد.
یکپارچهسازی
با بسیاری از ابزارهای ضروری برای دستیابی به پوشش گسترده در طیف وسیعی از انواع خطاها، ادغام ابزارها در فرآیندهای DevOps از اهمیت ویژهای برخوردار است. اگر آنها در یک روش ثابتی متحد شوند، ابزارهای چندگانه میتوانند یکپارچه و سبک ساخته شوند.
برای گام نهادن به سمت استفاده بیشتر از تحلیل استاتیک، با FindSecBugs و PMD شروع کنید، که مسائل امنیتی و سبک را پوشش میدهد و ادغام آنها بسیار آسان است. Infer و ErrorProne نیاز به ساخت یکپارچهسازی سیستم دارند، اما تحلیل بسیار عمیقتری را نیز انجام میدهند. با توجه به بهبود بهرهوری و قابلیت اطمینانی که این ابزارها ارائه میدهند، یافتن راهی برای ادغام همه آنها ارزش سرمایهگذاری دارد.
نظرات کاربران در رابطه با این دوره