شهریور
۱۰
۱۳۹۷

آشنایی با ابزارهای تحلیل کد

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

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

دانشجویان ما اکثرا تا قبل از اینکه وارد بازار کار بشن کارهای گروهی جدی انجام نمیدن.(مثل خودم)

همچنین بیشتر پروژه هایی که توسط اساتید ما تعریف میشوند عمر کوتاه در حد همون یک ترم دارند و کارها و پروژه ها ادامه دار و هم افزا نیستند.

این موضوع باعث بروز چندین ضعف میشه:

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

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

پروژه ها در دانشگاه های ما عموما به صورت تکی یا حداکثر دو سه نفره انجام میشود.

همچنین عمر پروژه ها معمولا برای یک ترم بیشتر نیست و دانشجویان جدید اکثرا پروژه جدید را آغاز میکنند.

این در حالیه که پروژه های بسیار عالی با داکیومنتیشن کامل توسط دانشگاه های جاهای دیگر دنیا انجام شده و داره انجام میشه که امیدوارم ما هم به زودی مثل اونها بشیم.

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

پروژه های نرم افزاری همیشه با کیفیت بالا و با دقت انجام نمیشن. به همین علت کدی که تبدیل به محصول شده و با ارزش هم هست (چون به هر حال داره کار میکنه) نقطه ضعف های بالقوه زیادی میتونه داشته باشه. اکثرا کارفرماها و مدیران پروژه زیر بار طراحی مجدد و اصلاح ساختاری پروژه به علت زمانبر بودن نمیرن.

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

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

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

لیستی از این ابزارها را برای زبان های مختلف به همراه مقایسه بین آنها در این لینک میتوانید ببینید.

قابلیت این ابزارها ممکن است با یکدیگر متفاوت باشند. برخی از آنها توانایی بررسی و انجام برخی تحلیل های پیچیده را بر روی کد شما دارند. برخی از آنها پولی هستند و برخی هم رایگان. همچنین برخی از آنها فقط بر روی پلتفرم های خاصی اجرا میشوند و برخی هم مالتی پلتفرم هستند. به طور مثال ابزار Frama-C که یک ابزار معروف برای تحلیل کدهای C (و نه C++) است در لینوکس قابل استفاده است.

با بررسی دقیقتر مستندات هر کدام از آنها میتوانید به نقاط قوت هر کدام پی ببرید.

این ابزارها معمولا نتیجه بررسی کد شما را در چند سطح ارایه میکنند. مثلا خطاهای مهلک یا هشدارها و حتی خطاهای نوشتاری و ظاهری را در سطوح مختلف نشان میدهند تا بتوانید به ترتیب اولویت آنها را برطرف کنید.

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

مثلا نرم افزار PCLint که یکی از ابزارهای مهم تحلیل کد زبان سی است به صورت پیشفرض به صورت Command line قابل استفاده است ولی اگر نرم افزار Visual Lint را نصب کنید میتوانید به صورت گرافیکی از قابلیت های آن استفاده کنید.

همچنین برخی از IDE ها در درون خود به صورت Builtin این ابزارها را دارند مثل Visual Studio ماکروسافت.

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

نکته مهمی که وجود دارد این است که نباید کورکورانه هر موردی که این ابزارها نشان دادند را درون کد خودتان دستکاری کنید.

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

حتی یک خاطره خنده دارتر هم دارم. برنامه ای بر روی سخت افزاری کار میکرد. بعد از اینکه یکی از همکارانم ابزار تحلیلگر را بر روی کد قدیمی آن برنامه اجرا کرد تعداد زیادی unused variable را در کد شناسایی کرد. با حذف این متغیر های بدون استفاده برنامه در لحظات مختلفی دچار crash میشد ! این موضوع به علت وجود خطاهای پیچیده تر در زمینه استفاده از حافظه در آن سخت افزار بود که نیاز به زمان بیشتری برای رفع مشکلات داشت.

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

مثلا اگر کدی که نوشتید قرار است با کامپایلر سی پلاس ورژن ۱۱ کامپایل شود و یا به عبارت دیگر کد شما مطابق با این استاندارد نوشته شده است توسط گزینه های موجود در ابزار تحلیل کد تنظیمات صحیح را انجام دهید.

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

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

موفق و سربلند باشید

 

اشتراک گذاری این مطلب:

نوشته‌های مرتبط

درباره نویسنده

برنامه‌نویس ++‏C/C‏ - برنامه‌نویس سیستم‌های گرافیکی با استفاده از کتابخانه ‏OpenGL - برنامه‌نویس #‏C و ..‏



فرستادن دیدگاه