نام پژوهشگر: عبدالله شحاده
عبدالله شحاده سعید جلیلی
در این پژوهش سعی کردیم یک روشی کارامد برای تشخیص الگوهای طراحی از روی کد برنامه ها با استفاده از رویکرد یادگیری ماشین ارائه دهیم. همچنین تلاش کردیم تا از روش های یادگیری دسته بند که برای مسئله الگوهای طراحی مناسب هستند، استفاده کنیم. علاوه بر آن تلاش کردیم یا مجموعه خصیصه های مناسب را برای هر نمونه کد برنامه تعریف کنیم. در این راستا، سعی کردیم معایبی که بقیه روش ها داشته اند را، جبران کنیم. این معایب عبارتند از: 1)عدم کفایت در تشخیص الگوهای طراحی که ساختار مشابهی دارند. 2)عدم کفایت در تشخیص نسخه های مختلف از یک الگوی طراحی ناشی از اختلاف پیاده سازی آنها. 3)عدم قابلیت توسعه پذیری روش برای تشخیص الگوهای طراحی جدید 4)هزینه زمانی و محاسباتی بالایی که معمولا با آن مواجه می شوند. نوآوری اصلی این پژوهش این است که بتوانیم مسأله تشخیص الگوهای طراحی از روی کد برنامه ها را به یک مسأله یادگیری ماشین تبدیل کنیم. می توان گفت که در این زمینه تا حد زیادی موفق بودیم. روش پیشنهادی روی سه مورد مطالعه (jhotdraw ، jrefectory ، juni) مورد ارزیابی قرار گرفته و نتیجه به دست آمده نسبت به بقیه روش ها که روی همان موردهای مطالعاتی ارزیابی شده اند، برای بعض الگوهای طراحی بهتر بوده است، ولی به دلیل بعضی دلایل نمی توان به مقایسه کمی دقیق دست یافت. روش پیشنهادی را با استفاده از روش های مختلف یادگیری ارزیابی کردیم، و به این نتیجه رسیدیم که روش یادگیری svm-phgs روش مناسبی برای مسأله کشف الگوهای طراحی از روی کد برنامه، می باشد. با این رویکرد توانستیم نرخ f-measure را تا حد 81% در فاز اعتبار سنجی ارتقا دهیم. و این رویکرد یادگیری از بقیه روش های یادگیری ماشین ارزیابی شده (درخت تصمیم و simple logistic) دقت و بازخوانی بهتری دارد. یادآوری می شود که از الگوریتم یادگیری simple logistic نتایج خوبی از لحاظ معیار مثبت کاذب کم و تعداد دفعات (اجراها) یادگیری کم، به دست آوردیم. در این پژوهش از گام پیش پردازش نسبتا ساده استفاده شده و این باعث می شود که هزینه محاسباتی مرحله تشخیص الگوی طراحی، پایین باشد. گام پیش پردازش، تعداد نمونه های الگوهای طراحی کاندید را به کمتر از 1% کاهش داده است. هرچند که مرحله سازماندهی الگوهای طراحی هزینه بر است ( مخصوصا که ما 30 بار اجرا انجام دادیم) اما این مرحله فقط یک بار انجام می شود، در حالی که مرحله تشخیص الگوهای طراحی که معمولا به تعداد زیادی انجام می شود، هزینه زیادی ندارد. نمونه های یادگیری که جهت یادگیری دسته بندها، مورد استفاده قرار گرفتند، نمونه هایی هستند که توسط برنامه نویسان مختلف و با سلایق مختلف پیاده سازی شده اند. دسته بندهای یادگیری شده توسط روش پیشنهادی این اختلافات پیاده سازی را یادگرفتند و برحسب این یادگیری، الگوهای طراحی را تشخیص داده اند. در نتیجه دسته بندهای یادگیری شده این امکان را داشته اند که نسخه های مختلف از همان الگوی طراحی را بشناسند. در این پایان نامه الگوریتم یادگیری svm-phgs را طوری توسعه دادیم که نه تنها برچسب نمونه های الگوهای طراحی را تشخیص دهد، بلکه نمونه هایی که جزو الگوهای طراحی نیستند را نیز تشخیص دهد. متاسفانه بدلیل کمبود داده نتوانستیم روش پیشنهادی را روی الگوهای طراحی که از لحاظ ساختاری با هم شبیه هستند اما رفتار متفاوتی دارند، ارزیابی کنیم.