سیستم کمپانی MIT می‎تواند باگ‎های نرم افزاری شما را به خودی خود رفع کند

CodePhage یک ابزار نرم افزاری از MIT است که طبق گفته‎ها انواع متداولی از باگ‎های نرم افزاری کامپیوتری را با قرض گرفتن از نرم افزار دیگر، رفع می‎کند.

automated-software-bug-fix
نرم افزار جدیدی که توسط MIT توسعه یافته است، ثابت شده است که قادر به رفع باگ‎های نرم افزاری به صورت خودکار با قرض گرفتن از دیگر برنامه‎ها و از بین زبان‎های برنامه نویسی مختلف، بدون نیاز به دسترسی به کد منبع، است. این امر می‎توانید در هزاران ساعت وقت برنامه نویسی صرفه جویی کند و منجر به ایجاد یک نرم افزار پایدارتر شود.

باگ‎ها قاتل زندگی توسعه‎ دهنده‎ی نرم افزار به شمار می‎روند.

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

اما حالا نرم افزار جدیدی که توسط MIT عرضه شده است، این مشکل و بسیاری از موارد دیگر را رفع می‎کند. این سیستم که در قالب اسم CodePhage بیان شده است، می‎تواند باگ‎هایی که در رابطه با بررسی متغیر‎ها هستند را رفع کند و به زودی برای اصلاح بسیاری از انواع اشتباهات توسعه داده می‎شود.

طبق محقق MIT، Stelios Sidiroglou-Douskos، این نرم افزار می‎تواند این نوع ترجمه‎ی پویای کد را، بدون نیاز به دسترسی به کد منبع و از میان زبان‎های مختلف برنامه ریزی، با آنالیز مستقیم فایل قابل اجرا، انجام دهد.

نحوه‎ی عمل نرم افزار

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

اجازه دهید همچنین تصور کنیم، که در کد شما، شما فراموش می‎کنید که عدد دوم را که صفر نیست چک کنید (تقسیم بر صفر از نظر ریاضی غیر تعریف شده است).

CodePhage با یک اپلیکیشن و دو ورودی – یکی که هیچگونه خطایی را بوجود نمی‎آورد (ورودی امن) و دیگری که بوجود می‎آورد (ورودی غیر امن)، کار را شروع می‎کند. با استفاده از یک دیتابیس بزرگی از اپلیکیشن‎ها، این نرم افزار می‎تواند اپلیکیشنی که به درستی ورودی‎‎ها را بخواند و پردازش را انجام دهد، پیدا کند.

در مثال ما، این سیستم یک مخزن عظیم را برای تابعی که بتواند دو عدد را به صورت امن و بی دردسر تقسیم کند، مورد جستجو قرار می‎دهد.

Stelios Sidiroglou-Douskos می‎گوید “ما در مخازن متن باز خود بی شمار کد منبع، میلیون‎ها پروژه داریم و بسیاری از این پروژه‎ها مشابه با مورد خاص اجرا می‎شوند.

حتی اگر عملکرد اصلی برنامه نباشد، آن‎ها به طور مکرر زیر اجزا‎هایی دارند که عملکرد را در بین تعداد زیادی از پروژه‎ها به اشتراک می‎گذارند.”

سیستم بین یک برنامه‎ی “دهنده” – نرم افزاری که از آن رفع باگ قرض گرفته می‎شود – و یک برنامه‎ی “پذیرنده” – نرم افزاری که سیستم MIT سعی در رفع باگ آن

می‎کند – فرق می‎گذارد و آن‎‎ها را تشخیص می‎دهد.

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

نقاط دور شونده بین این دو شناسایی کننده‎ی محدودیتی است که با داده‎ی امن برخورد شده است، ولی نه توسط مورد غیر امن، و بنابراین باید یک بررسی امنیتی باشد که در کد دریافت کننده‎ فراموش شده است.

در مقال ما، داده‎ی امن غیر صفر بودن مقسوم علیه است، و داده‎ی غیر من صفر بودن آن خواهد بود. سیستم MIT شرایطی که “مقسوم علیه باید متفاوت با صفر باشد” را که با ورودی امن مطابقت پیدا می‎:ند را کشف می‎کند، و به درستی شناسایی می‎کند که بررسی این وضعیت خاص از کد پذیرنده فراموش شده است و مورد محتمل

این باگ است.

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

به سمت نرم افزار عاری از باگ؟

پروفسور مارتین رینارد (Martin Rinard) از کمپانی MIT می‎گوید که “رویایی دور دست تر این است که شما هرگز کدی ننویسید که شخص دیگر آن را نوشته است”، او قسمتی از این تحقیق بوده است. این سیستم که قطعه کد را پیدا می‎کند و به صورت خودکار آن را در کنار هرکدام از قطعات کدی که شما نیاز دارید قرار می‎دهد برای کار کردن برنامه‎ی شما است.”

رینارد و این تیم می‎گویند که یک توسعه‎ دهنده می‎تواند به عنوان مثال، تلاش‎های لازم برای توسعه و تست را با حذف بررسی‎ها برای ورودی‎های غیر امن، کاهش دهد و

سپس از ابزار آن‎‎ها برای به صورت خودکار انتقال بررسی‎‌ها از نرم افزار قوی تر، از جمله نرم افزار‎های متن بسته، اپلیکیشن‎های اختصاصی، را انجام دهد.

طبق گفته‎ی این محققین، در نرم افزار تجاری مدرن، بررسی‎‌های امنیتی می‎تواند 80 درصد کد را به خود اختصاص دارد، بنابراین تاثیر این امر بر روی زمان برنامه نویسی، حداقل از نظر تئوری، می‎تواند کاملا مهم باشد.

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

سیستم MIT همچنین می‎تواند برای انتقال بررسی‎ها بین نسخه‎های متفاوتی از همان اپلیکیشن به کار گرفته شود، تا سعی شود جلوی بسته‎های امنیتی به تازگی

عرضه شده و آپدیت‎ها از معرفی باگ‎های جدید، گرفته شود.

زمانی که CodePhage روی هفت برنامه‎ی متن باز متداول تست شد، گفته می‎شود قادر به رفع باگ‎ کد آسیب پذیر در هر زمان بوده است، به طوری که برای هر رفع باگ چیزی نزدیک به 10 دقیقه صرف شده است.

در نسخه‎های آتی این برنامه، محققان امید دارند که این زمان را تا جای ممکن کاهش دهند.

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