تشخیص کد تصحیح

تشخیص کد تصحیح

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


در جریان این تحقیقات سیستم های زیادی با مجموعه ای از خطاهای برنامه نویسی مورد آزمایش قرار گرفتند که این برنامه های در واقع گلچینی از برنامه های واقعی منبع آزاد بودند . هدف از انجام این آزمایشات و تست کردن سیستم ها با خطاهای مختلف به منظور آزمودن نحوه عملکرد سیستم های تعمیر باگ اتوماتیک و ارزیابی آنها بوده است . جالب است بدانید که در حالت هایی که برای مثال سیستم های اولیه تنها قادر به تعمیر و تصحیح یک یا دو باگ بودند ، سیستم MIT به طور متوسط چیزی حدود 15 تا 18 مورد را تعمیر و تصحیح می کرد زیرا بر اساس نوع طراحی که بر روی آن صورت گرفته است و یادگیری اتوماتیکی که این سیستم دارد می تواند چندین خطای جدید را نیز با توجه به جزئیات عمومی یادگرفته شده تعمیر نماید و همین امر سرعت کار تصحیح و تعمیر را نیز بالا می برد .
با وجود این که کار این سیستم برای همگان روشن شده است و قابلیت های سیستم تعمیر باگ اتوماتیک با موفقیت از آزمون خارج شده اند ، اما Martin Rinard استاد مهندسی الکتریک و علوم کامپیوتر که تیم وی این سیستم جدید را توسعه داده اند معتقد است که می توان همین سیستم را به زمینه های دیگر نیز گسترش داد .
Martin Rinard می گوید : " یکی از جنبه های این تحقیق که بسیار برانگیزنده و وسوسه کننده است این است که قطعا ویژگی های عمومی از کد تصحیح وجود دارند که شما می توانید از یک مجموعه برنامه کاربردی بیاموزید و سپس آن را به مجموعه نرم افزار ها و برنامه های کاربردی دیگری نیز تعمیم بدهید زیرا همان ویژگی های عمومی که ذکر شد در تمامی این نرم افزار ها یکسان هستند و بدین ترتیب کد تصحیح آنها نیز مشترک خواهد بود . " وی در ادامه گفته هایش اشاره می کند که " اگر شما بتوانید کد تصحیح را پیدا بکنید به این معنی خواهد بود که این کد همان دستاورد مهمی است که می تواند برای تصحیح خطا در بسیاری از برنامه های کاربردی از آن استفاده بکنید . و این تنها اولین برنامه ای از آن برنامه هایی است که ما انتظار داریم با همان کد تصحیح بتوانیم خطا های آنها را نیز تصحیح و در نتیجه دستگاه و برنامه آن را تعمیر نماییم . "
یکی از دانشجویان رشته علوم کامپیوتر و مهندسی الکترونیک در MIT به نام Fan Long هفته گذشته گزارشی در رابطه با همین کار و در واقع تشریح سیستم جدید در Symposium on Principles of Programming Languages ارائه داده و به بسط و تشریح کل مساله پرداخته است . وی و مشاورش  Rinard در این کار با یکدیگر همکاری داشته اند و این گزارش نتیجه کار این دو است .
کاربران برنامه های منبع آزاد می توانند در وب سایت های پروژه ، کاتالوگ و فهرست باگ های مربوط به خود را که از آنها استفاده می کنند مشاهده نمایند و همچنین در همین وب سایت ها توزیع کننده های تصحیح کد های قبلی نیز آورده شده است که در سایت های مشابه به " پچ " نیز معروف هستند . بدین ترتیب Long با استفاده از این اطلاعات و نیز داده های دیگر موفق شد تا یک نسخه نوشتاری کامپیوتری تهیه نماید که در آن هم کد تصحیح نشده و هم پچ های 777 خطا در 8 برنامه رایج منبع آزاد در مخزن GitHub آنلاین ذخیره سازی شده است .


ویژگی های عملکردی :
همانند آنچه که در سیستم های یادگیری ماشینی مشاهده می شود ، بخش مهم طراحی انجام گرفته توسط Long و Rinard مربوط به گلچین " مجموعه ویژگی " هایی بود که سیستم بایستی به تحلیل آن می پرداخت . تحقیقات انجام گرفته بیش از پرداختن به متغیر های مختلف بر روی کمیت های ذخیره شده در حافظه تمرکز کرده است که خود می تواند در خلال اجرای نرم افزار تصحیح بشود و یا می تواند بدون تغییر بماند که در این حالت تصحیح اتفاق نخواهد افتاد . آنها با تحقیقات مهمی که انجام دادند در نهایت توانستند تعداد 30 ویژگی مهم را در این کمیت های داده شده تشخیص بدهند : ممکن است موردی که روی آن کار می شود در یکی از کارها و اعمال سیستم دخالت داشته باشد ، مانند اضافه کردن و یا ضرب کردن . یا بحث مقایسه نیز در این حالت وجود دارد که مثال آن همان بزرگتر و یا مساوی بودن است . حتی ممکن است مورد ما منطقه ای نیز باشد : به این معنی که فقط و فقط در درون یک بلاک واحد از کد اتفاق بیافتد و یا حتی می تواند کلی و عمومی نیز باشد ، یعنی اینکه برای تمامی برنامه به صورت عمومی در دسترس باشد . ممکن است حتی متغیر نیز باشد که در این حالت نتیجه نهایی محاسبات را نشان خواهد داد . و حالت های دیگری نیز وجود دارند که برای آن متصور است .
Long و Rinard یک برنامه کامپیوتری نوشته اند که تمامی حالت های ارتباطی ممکن بین این ویژگی ها و خصیصه ها در خطوط متوالی کد را ارزیابی می نماید . بیش از 3500 مدل از این ارتباطات در مجموعه ویژگی های آنها وجود دارند و برنامه مذکور را تشکیل می دهند . الگوریتم یادگیری ماشینی آنها در نهایت به این صورت است که می تواند تشخیص بدهد که کدام رابطه و کدام ویژگی ها می توانند با ترکیب با یکدیگر خطای بوجود آمده را تعمیر و کد مربوط به پچ را اصلاح نمایند .
خود Long می گوید : " تمامی ویژگی هایی که ما در تیم خودمان به دنبال بررسی آنها بودیم در واقع رابطه هایی هستند بین پچی که شما وارد می کنید و آن کدی که قصد پچ کردن آن را دارید . " Longدر ادامه صحبت های خود با اشاره به تحقیقات انجام گرفته می گوید : " به طور معمول در پچ های صحیح ارتباطات خوبی وجود دارد که با زبان برنامه کاربردی و پربازده سازگاری دارد . "


رده بندی کاندید ها :
در پروژه قبلی ، Long  الگوریتمی را ارتقاء داد که برای تعمیر باگ های برنامه کاربرد داشت و به صورت اتوماتیک و خودکار کد برنامه را تصحیح می کرد . کد تصحیح شده پس از آن بایستی از یک سری تست های مخصوص که برای آشکار کردن رفتار اتفاقی و غیر منظم طراحی شده بود ، عبور می کرد .  این کد اگر چه در نهایت ممکن بود به موردی برسد که توانسته باشد از تست ها سربلند بیرون بیاید اما نباید فراموش کرد که انجام این کار و تست کردن های متعدد و طولانی زمان بسیار قابل توجهی را می گیرد که قطعا مانع بزرگی برای پیشرفت کار محسوب می شود . و علاوه بر این کد تصحیح شده خود نیز ممکن است دارای یک سری خطاها باشد که تست ها نتوانسته اند آن را نشان بدهند .
سیستم  یادگیری ماشینی Long و Rinard هم هماهنگ و متقارن با همین الگوریتم قدیمی کار می کند و طرز کار آن بر اساس احتمال اینکه کد ها پیش از انجام آزمایش های متعدد و زمان بر صحیح هستند ، به رتبه بندی تصحیح های پیش فرض می پردازد .
محققان سیستم خود را که Prophet نامیده می شود بر روی مجموعه ای از 69 خطای برنامه ای که خطا های رایج بر روی 8 نوع از برنامه های معمولی منبع آزاد هستند مورد آزمایش قرار داده و به تست آن پرداخته اند .  از این موارد تعداد 19 عدد مخصوص آزمون تصحیح هایی هستند که الگوریتم Long از آن بهره می برد : اما 50 مورد دیگر که در این بررسی وجود دارند برنامه هایی هستند که کمی پیچیده تر می باشند و مربوط به ناهمسانی هایی هستند که در خلال قطعه های بزرگتری از کد ها به چشم می خورند .
زمانی که Long و Rinard کار خود را برای اولین سیستمی که تست های ظاهرسازی باگ را پشت سر گذاشته بود پیکر بندی کردند ، سیستم آنها قادر بود تا به طور موفقیت آمیزی تعداد 15 عدد از 19 خطای موجود را تصحیح نماید : و زمانی که این محققان اجازه دادند تا سیستم در مدت زمان طولانی تری یعنی 12 ساعت به کار بر روی هر یک مساله ادامه دهد ، در نهایت تعداد 18 مورد از این خطا ها تصحیح شد .
البته کاملا مشهود است که این سیستم هنوز نتوانسته است همه انتظارات را برآورده سازد و هنوز تعداد 50 خطا از خطا هایی که گفته شد دست نخورده باقی مانده اند . اما با این وجود Long در یک فعالیت دائمی در حال کار بر روی یک سیستم یادگیری ماشینی است که قادر خواهد بود تا تعداد خیلی بیشتری از کمیت های برنامه ای بر روی کد های بزرگتر و با طول بیشتر را دست کاری نماید . و البته تمام امیدواری او به این است که در آینده بتواند سیستم تعمیر باگ مطلوبی ایجاد نماید که قادر باشد خطا های پیچیده بیشتری را مدیریت نماید .
Eran Yahav ، که یک استاد یار علوم کامپیوتر است چنین می گوید که " جنبه انقلابی و در واقع مهم پروژه Prophet در نحوه به کار گیری اطلاعات پچ های موفقیت آمیز پیشین در نمونه های جدید و کاملا نوین می باشد که سیستم قبلا با آن آشنایی نداشته است . " وی در ادامه می گوید : " در این سیستم بر خلاف تفاوت های موجود بین پروژه های نرم افزاری ، آن دسته از پچ هایی که بر روی پروژه اجرا شده اند دارای نقاط مشترک و قابل تعمیمی هستند که با استفاده از آنها می توان ویژگی های عمومی را به برنامه های دیگر نیز تعمیم داد . استفاده یادگیری ماشینی از " کد بزرگ " ( کد عمومی ) این تضمین را بوجود می آورد که در آینده بتوان بسیاری از کار های برنامه نویسی در زمینه تکمیل کد ، مهندسی معکوس و بسیاری زمینه های دیگر را با استفاده از آن انجام داد و در واقع در این بخش از کار ها نوعی انقلاب بوجود آورد . "


0 نظر درباره‌ی این پست نوشته شده است.

ثبت نظر