شیوه های بحث شده در بخش قبل قادر به تشخیص الگوهایی که از نظر ساختاری یکسان اما رفتار متفاوتی دارند نظیر الگوی” استراتژی” در مقابل الگوی"وضعیت ” نیستند. شیوه هایی که جنبه های رفتاری را هدف قرار می دهند، سعی می کنند این مساله را با بهره گرفتن از یادگیری ماشین، تحلیل پویا[۷] [۲۴] یا تحلیل ایستا[۸] حل کنند [۵].
تجزیه و تحلیل پویا
این شیوه ها از داده های زمان اجرا[۹] برای تشخیص جنبه های رفتاری الگوها استفاده می کنند. کی تی [۲۲]، تنها از تجزیه و تحلیل پویا برای تشخیص الگوی “زنجیره مسئولیت ها[۱۰]” استفاده کرد اما نتیجهاش موفقیتآمیز نبود (به دلیل نامناسب بودن مکانیزم رخداد نگارى کردن پیام[۱۱] و ناکافی بودن داده آزمایش). تجزیه و تحلیل پویا به پوشش خوبی از داده آزمایش به منظور اعمال هر مسیر اجرایی ممکن نیازمند است. چنین داده آزمایش اغلب موجود نیست. حتی اگر داده آزمایش هم موجود باشد، نتایج زمان اجرا ممکن است گمراه کننده باشند. چون چنین دادههایی اصولا برای تشخیص دادن رفتار الگوهای خاص، طراحی نشدهاند [۵].
تجزیه وتحلیل ایستا
این روشها اصولا شیوه های تجزیه و تحلیل ایستا را به درخت معنایی منتزع[۱۲] در بدنه متدها اعمال می کنند. مرجع [۲۵] بیانیههای “ایجاد شی غیرحساس به مسیر”[۱۳] را برای تشخیص الگوهای “[۱۴]کارخانه انتزاعی” و"متد کارخانه”[۱۵] استفاده کرد. برای شناسایی الگوها با ساختار و عملکرد مشابه، بیرون کشیدن هدف الگو در پیادهسازی، به منظور متمایزسازی آنها بسیار مهم است. اما اکثر چنین شیوه هایی قادر نیستند هدف برنامه را بیرون بکشند [۵].
در این کار، ابزارهای خودکار شناسایی الگوهای طراحی با دو عمل “پالایش” و “تصحیح برچسب” گسترش مییابند. عمل پالایش، بیشترین یا حتی همه مثبت کاذبهای تولید شده در خروجی ابزارهای خودکار را شناسایی می کند. درحالیکه تصحیح برچسب، هویت صحیح نمونه مثبت کاذب را (بر حسب اینکه مثبت کاذب، به دلیل شباهت با کدام الگو مثبت کاذب شده است) با بهره گرفتن از معیارهای تعریف شده در این کار و روشهای داده کاوی شناسایی می کند. به طور مثال اگر نمونه شناسایی شده توسط ابزارهای خودکار، با برچسب “استراتژی” شناسایی شده است اما در حقیقت این نمونه استراتژی نبوده، ابتدا به عنوان مثبت کاذب شناخته می شود (پالایش)، سپس برچسب صحیح آن (بر حسب مقادیر معیارها) تشخیص داده می شود.
به طورمثال برچسب صحیح آن ممکن است الگوی “وضعیت” باشد. بنابراین برچسب استراتژی به وضعیت تغییر می کند. با استفاده از این معیارها و روشهای داده کاوی علاوه برنمونههای مثبتکاذب، نمونههای منفیکاذب نیز در برخی موقعیتها کاهش مییابند. چون وقتی یک برچسب تصحیح می شود مثلا از استراتژی به وضعیت، ممکن است این نمونه وضعیت جزء نمونههای شناسایی شده برای الگوی وضعیت نباشد، بنابراین این نمونه وضعیت یک منفیکاذب شمرده شده که با شناسایی آن، یک منفی کاذب را حذف کردهایم.
با توجه به اینکه ابزارها و روشهای پیشین، بیشترین مثبت کاذب را در شناسایی الگوهای با ساختار و عملکرد مشابه تولید می کنند، در اینکار، سعی شده تا خروجی ابزارها با توانایی شناسایی چنین الگوهایی تصحیح گردد. لذا، تصحیح برچسب روی نمونههای استخراج شده الگوی استراتژی (به دلیل داشتن شباهتهای ساختاری و عملکردی با الگوهای دیگر، بر حسب خروجی ابزارها بیشترین مثبت کاذب در شناسایی آن تولید شده است) انجام می شود. ابتدا براساس روشهای عرف داده کاوی، با نمونههای مثبت کاذب و مثبت صحیح الگوی استراتژی بدست آمده توسط ابزارها، یک مجموعه داده تهیه شده است. سپس بر اساس مستندات موجود و همچنین بازبینی دستی، به منظور پیش بینی هویت صحیح هر نمونه، دو ستون در مجموعه داده تعیین شده است. یک ستون با “درست” و “نادرست” (درست، در صورت شناسایی صحیح توسط ابزارها و نادرست در صورت مثبت کاذب بودن) برچسب میخورد، و ستون دیگر با نام الگو صحیح آن نمونه یا در صورت ناشناس بودن، با بدون الگو برچسب میگیرد. سپس مقادیر معیارها یا پیشبینی کننده های استخراج شده در این کار، روی هر نمونه محاسبه میشوند و نهایتآَ مجموعه داده در اختیار الگوریتمهای داده کاوی جهت مدلسازی قرار میگیرند. در مدلسازی سعی می شود دانش موجود در داده ها، در قالب یک سری قوانین استخراج شوند. این قوانین برای شناسایی نمونههای ناشناخته (جدید) در مجموعه داده مورد استفاده قرار میگیرند.
آزمایشها، با بهره گرفتن از سه الگوریتم یادگیری ماشینC5.0 ، Boostingو SVMانجام شده است. روش پیشنهادی روی سه نرم افزارمتن باز jhotdraw6[6]، jrefactory[7] و javaio [8] انجام شده است. الگوهای پیاده شده در این پروژه ها از ساختار پایهای که برای آنها در کتابها معرفی شده است بسیار فاصله گرفتهاند (الگو ها بسیار انعطاف پذیر هستند و توسط هر برنامهنویس میتوانند به روشهای متفاوتی پیادهسازی شوند و هم چنین ترکیب شوند) بنابراین شناسایی چنین الگوهایی دشواریهای خاص خودش را دارد [۲].
در این کار، معیارهای جدید به عنوان پیشگویی کننده های عملیات تصحیح برچسب و پالایش، روی نمونههای خروجی الگوی طراحی “استراتژی” یافت شده توسط ابزارهای [۹] SSA و [۵] PINOT استفاده شده اند. ابتدا مثبت کاذبهای استراتژی تشخیص داده میشوند و سپس الگوی طراحی صحیح موجود در نمونه مثبت کاذب شناسایی می شود. نمونههای مثبت کاذب به سمت نمونههای مثبت صحیح با تشخیص آنها از الگوهای “وضعیت[۱۶]“، “استراتژی[۱۷]“، “تطبیقدهنده[۱۸]“، “فرمان[۱۹]“، “ملاقاتکننده[۲۰]“، “میانجی[۲۱]“، “آذیین کننده[۲۲]“، “ترکیب[۲۳]” و"کارخانه انتزاعی[۲۴]“حرکت می کنند. همچنین این معیارها میتوانند الگوهایی که ساختار کاملا مشابهی به یکدیگر دارند نظیر"وضعیت از استراتژی “، “تطبیق دهنده از فرمان"، “آذیین کننده از ترکیب” و استراتژی را از هشت الگوی دیگر مورد مطالعه در این تحقیق متمایز کنند. این الگوها در نظر گرفته شدند، چون بیشترین مثبت کاذب موجود در نتایج الگوی استراتژی با اشتباه گرفتن با این الگوها بر حسب ساختار و عملکرد مشابه تولید شده است.
به طور کلی غیر از الگوهایی که از پایه ساختار یکسانی دارند بقیه الگوها به دلیل انعطاف، وقتی که از ساختار پایه دور میشوند ساختار مشابهی به برخی الگوهای دیگر پیدا می کنند. در واقع معیارهای استخراج شده در این کار، با بهره گرفتن از الگوریتمهای داده کاوی، نقصها و کمبودهای دیده نشده در ابزارها را رفع می کنند.
ادامه این تحقیق به بخشهای زیر سازماندهی می شود. در بخش دوم بر چند مقاله که اهداف و شیوه مشابهای با شیوه و هدف این تحقیق دارند، مروری خواهیم داشت. در بخش سوم الگوهای مورد مطالعه در این تحقیق و معیارهای استخراج شده شرح داده میشوند. در بخش چهارم نگاهی بر شیوه های داده کاوی و مجموعه داده ایجاد شده خواهیم داشت. در بخش پنجم نتایج ارائه خواهند شد و نهایتا در بخش ششم نتیجه گیری و کارهای آتی پیشنهاد میشوند.
-
-
-
- فرضیات و محدودیت های مساله
الگوها با قرارگیری در موقعیتهای متفاوت مسائل حقیقی، در اکثر مواقع تا حد زیادی ممکن است از ساختار پایه خود فاصله بگیرند. الگوها با دست برنامه نویس برای حل یک مساله عمومی در یک زمینه خاص سمت و سو میگیرند. از طرفی الگوها علاوه بر جنبه ساختاری دارای جنبه های رفتاری متفاوتی نیز هستند. بطوریکه گاهی فقط رفتار است که دو الگو را از هم متمایز می کند. یکی از محدودیتهای الگوهای طراحی، انعطافپذیری و ساختار و عملکرد مشابه بین آنها است. بنابراین در این پایان نامه سعی شده است که مجموعه کاملی از انعطافپذیریهای هر الگو به علاوه یک سری ویژگیهای رفتاری متمایز کننده دیده شود و معیارهایی پابرجا برای بیان ثابتی از اینکه همه یک مجموعه انعطافات به کدام الگو مرتبط میشوند استخراج شود و نهایتا این معیارها به عنوان پیشگویی کنندهها همراه با تکنیکهای داده کاوی برای جستجو و تصحیح مثبت کاذبهای الگوهای شناسایی شده توسط ابزارهای خودکار استفاده شوند. در هر صورت این احتمال میرود که انعطافات بیشتری برای هر الگو موجود باشد که در این تحقیق دیده نشده است.
الگوهای طراحی راه حلهای اثبات شده و قابل اطمینان هستند که به منظور حل مسائلی که به طور مکرر در طراحی یک نرمافزار شیگرا رخ میدهد، مورد استفاده قرار میگیرند. بکارگیری صحیح الگوهای طراحی و سند کردن آنها می تواند به حد زیادی موجب بهبود صفات کیفیتی سیستم نظیر قابلیت استفاده مجدد و نگهداشت پذیری شود. اما بسیاری از سیستم های نرمافزاری بزرگ به ویژه سیستمهای نرم افزاری قدیمی یا اصلا سند نشدهاند و یا اینکه سندکامل و دقیقی ندارند. بنابراین خودکارکردن شناسایی الگوهای طراحی می تواند مطلوب و مفید واقع شود. تاکنون در زمینه شناسایی خودکار الگوهای طراحی شیوه های متنوعی پیشنهاد و پیادهسازی شده است اما هیچ یک از متدها نتوانستهاند خروجی بدون مثبت کاذب یا کمترین مثبت کاذب را داشته باشد. خصوصا برای الگوهایی که از نظر ساختاری با هم مشابه هستند و در رفتارشان متفاوت میشوند و یا اینکه عملکرد مشابهی دارند، مثبت کاذب بیشتری در خروجی این ابزارها دیده می شود. بنابراین وجود شیوهای که بتواند مثبت کاذب و منفی کاذب را در نتیجه شناسایی الگوها به حداقل برساند می تواند کمک بسیاری به حاصل شدن اطمینان توسعهدهنده در نگهداشت پذیری و قابلیت استفاده مجدد بهتر نرمافزار کند.
هدفی که در این پایان نامه دنبال می شود ارائه روشی برای رسیدن به حداکثر بهبود (حداقل مثبت و منفی کاذب) روی شناسایی الگوی طراحی و ایجاد خروجی بدون ابهام و صحیح برای استفاده توسط توسعه دهنده میباشد. به علاوه جهت تسهیل در امر نگهداشتپذیری و استفاده مجدد نرم افزار نه تنها از نظر فهم راحت طرح و هدف سیستم، بلکه از نظر صرف وقت و هزینه میباشد.
مطالب بیان شده در این پایان نامه در قالب شش فصل گردآوری شده اند که به طور خلاصه به شرح زیر است.
فصل دوم : تعاریف و مفاهیم اولیه
موضوعات: بدون موضوع
[پنجشنبه 1400-07-29] [ 06:40:00 ب.ظ ]