فایل پایان نامه با فرمت word : پایان نامه درباره ارائه یک روش تولید ... |
در ادامه هر کدام از بخشها را به طور جداگانه توضیح میدهیم و در انتها با جمع بندی بخشها مدل نهایی را ارائه خواهم نمود.
ابزارهای ارائه شده مبتنی بر جاوا
Jester [۵۱]: این ابزار توسط Ivan Moore بین سالهای ۲۰۰۰ تا ۲۰۰۵ ایجاد شد به گفته ی سایت Jester این ابزار بخشی از کد های نرمافزار را میابد که با تست های معمولی پوشش داده نشدهاند. یکی از مشکلات عمدهی این ابزار کند بودن آن است که با تحقیقات انجام شده مشخص شد کندترین بخش درآن کامپایل کد است زیرا این ابزار تغییرات را بر کد منبع اعمال می کند که نیاز به کامپایل مجدد دارد.
Jumble[52]: Jumble به شما از صفر تا صد را میگوید! Jumble، یک ابزار تست جهش است که در بین سالهای ۲۰۰۳ تا ۲۰۰۶ توسعه یافته است که در سطح کلاس عمل کرده و با Juint تجمیع شده است. هدف این ابزار اندازه گیری کارائی داده های ورودی است. در این ابزار برای اولین بار جهش ها با بهره گرفتن از ترجمه بایت کد با بهره گرفتن از ابزار BCEL اعمال شد از سوی دیگر از روشهای اکتشافی برای چک کردن جهشها استفاده شده است.
( اینجا فقط تکه ای از متن فایل پایان نامه درج شده است. برای خرید متن کامل پایان نامه با فرمت ورد می توانید به سایت feko.ir مراجعه نمایید و کلمه کلیدی مورد نظرتان را جستجو نمایید. )
Judy [46]: یک ابزار مدرن برای تست جهش است که از ۲۷ عملگر پشتیبانی می کند. برای کاهش هزینه کامپایل Judy از یک روش به نام FAMTA [۵۳]رونمایی کرد عملگرهای جمعی و اسکیما استفاده می کند که در مجموعه تعداد کامپایلها را به یک کاهش میدهد در بخش ارزیابی این ابزار نیز نتایج خوبی حاصل شده چنان که برای برنامهای با ۴۲۲۱۲ خط کد پوشش ۹۵% بدست آمده است.
PIT[54]: تست جهش واقعی! PIT یک ابزار تجاری در زمینه تست جهش است که به نقل از وب سایت آن سرعت، راحتی استفاده، توسعه پویا و پشتیبانی پویا را میتوان به عنوان مزایای آن دانست. اما مزایای آن به همین جا ختم نمی شود PIT از یک مکانیزم افزایشی برای بهینه سازی استفاده می کند به گونه ای که با ذخیره نتایج تست قبلی و مقایسه آن با پیش فرضهایی که از قبل دارد نتایج برخی از اجرایهای کد را پیش از اجرای آن حدس میزند در نتیجه آنها را اجرا نمیکند.
Bacterio [47]: بیشتر روشهای تست جهش از جهشهای قوی ضعیف تا اجرای موازی در این ابزار پیاده سازی شده است.
Javalanche [48]: یکی از ابزارهای آکادمیک در زمینه تست جهش است، که براساس عملگرهای جهش انتخابی به منظور کاهش تعداد عملگرها، اجرای موازی جهشها، اسکیما، ترجمهی بایت کد به منظور جلوگیری از کامپایل مجدد کد جهش یافته و بهینه سازی تولید ورودی ها از طریق ذخیره سازی اطلاعات پوشش هر ورودی، به جهت پوشش بخش جهش یافته عمل می کند. یکی از مزایای عمدهی این ابزار تولید بسیار کم جهشهای برابر است.
Mujava [۵۵] [۱۰]: پس از تستی که ما بر روی این ابزار انجام دادیم میتوان برخی از مزایا و معایب آن را ذکر کرد، از مزایای آن میتوان به ۱- استفاده از روش ترجمه بایت کد جاوا که از ابزار BCEL [۵۶][۴۹] و همچنین تولید تابع ابر جهش است (که در بخش روش اسکیما در فصل۲ توضیح داده شده است) که سبب کاهش تعداد دفعات کامپایل به دو مرتبه می شود یک مرتبه برای کامپایل کد برنامهی اصلی و یک مرتبه برای کامپایل ابر برنامهی جهش یافته۲ - پیاده سازی عملگرهای تست جهش در سطح کلاس اشاره کرد و در سطح تابع به طور کامل ۳- واسط کاربری مناسب ۴- و در دسترس بودن ( بسیاری از ابزارهایی که تاکنون پیاده سازی شده اند در دسترس قرار ندارند)۵-پشتیبانی از Junit [۵۷]که از طرفی هم می تواند مزیت باشد هم عیب باشد زیرا استفاده از Junit نیاز به دانش خاصی دارد. اشاره کرد. از معایب آن میتوان ۱-عدم ارائه مکانیزمی برای جلوگیری از ورود جهشهای برابر ۲- عدم ایجاد جهشهای سطحهای بالاتر ۳- عدم تولید داده های تست به صورت خودکار اشاره کرد.
تولید کننده جهشها
در ابزار ارائه شده برای تولید جهشها نیازی به کد برنامه نداریم و تنها با دستکاری بایت کدهای جاوا، جهشها را به کد برنامه اعمال میکنیم برای این امر به طور خودکار یک نسخه کپی از بایت کد برنامه اصلی تهیه میکنیم سپس یک نسخه از آن را پس از آماده سازی* که در بخش دستیاران به آن خواهیم پرداخت به عنوان فایل اصلی نگهداری کرده و نسخه دیگر را پس از اعمال جهشهای لازم به محل مناسبی کپی میکنیم.
برای اعمال جهشها از پنج عملگر کلیدی که در بخش پیشین مطرح شد استفاده کردیم ABS، UOI، ROR، AOR وLOR همانطور که در فصل دوم اشاره شد این عملگرها توانایی تولید ۹۵% جهشها را دارند[۱۹]. از طرف دیگر ماژول تولید کننده جهش می تواند هر سطحی و هر ترکیبی (البته به تعدادی که سبب جلوگیری از کارکرد برنامه نشود و به بیان دیگر نقصها سبب از کار افتادگی برنامه نشود) از جهشها را بر روی یک فایل اعمال کند. برای افزایش سرعت و جلوگیری از کامپایل مجدد کد جهش یافته ما از ترکیب سه روش کامپایل جداگانه، ترجمهی بایت کد و اسکیما استفاده کردیم بر
ای این کار ابتدا توابعی از پیش کامپایل شده را به عنوان عملگر جهش ایجاد کردیم که متغییرهای قطعه کدی از برنامه را به عنوان ورودی دریافت می کنند و با توجه به ارگومان انتخاب عملگر که با مشخص شده است جهشها اعمال میشوند. مقدار برابر تعداد حالتهای ممکن برای ایجاد جهش است به عنوان مثال در زیر شبه کد این تابع را برای عملگر AOR نشان دادیم در این تابع مقدار است(لازم به ذکر است که در حال حاضر این تابع برروی قطعه کدهایی از برنامه که شامل حداکثر دو متغییر هستند و یا عملگرهای میانشان یکسان است قابل اعمال است):
-
- Int AOR(, ,…,i)
-
- {
-
- switch(i){
-
- case1:
-
- return + + …
-
- case 2:
return - -…
-
- case 3:
return …
-
- case 4:
return …
}
}
اعمال این توابع به بایت کد برنامه اصلی، ما را از داشتن کد آن بی نیاز می کند که سبب می شود حتی برنامههایی که به صورت کد منبع بسته [۵۸] ارائه شده اند را تست کنیم و از طرف دیگر تنها نیازی به کامپایل کد آن نداریم (گرچه این شرایط زمانی محقق خواهد شد که در کد برنامه تغییراتی به وجود آید که با روش ما سازگار شود) برای شروع این کار باید با ساختار بایت کد در جاوا آشنایی داشته باشیم که البته آشنایی با بایت کد بدون واسطه کار دشواری است زیرا بایت کدها جاوا قابلیت خواندن و درک توسط انسان را ندارند بنابراین برای تغییر بایت کدهای جاوا ناگزیر به استفاده از ابزارهای واسط هستیم که میتوان به BCEL ، ASM [50] و SERP[51] اشاره کرد. ما برای تزریق جهشها به کد برنامه به علت افزایش سرعت و کارایی بیشتر از ASM استفاده کردیم.
از طرف دیگر با بهره گرفتن از این روش برای اعمال جهشها نیازی به لود مداوم بایت کد برنامه نداریم تنها با یک بار لود میتوانیم به تعداد محلهای مناسب از یک نوع جهش بر روی یک فایل جهش اعمال کنیم.
پس از انجام جهشهای لازم ماژول تولید کننده جهش آدرس های فایلهای جهش یافته و جهشهای موجود در هر یال را برمیگرداند[۵۹] تا توسط تابع تولید کننده و اجرا کننده تست مورد استفاده قرار گیرد از طرف دیگر این اطلاعات را درون لاگ [۶۰]فایل ذخیره می کند تا در صورت تمایل کاربر بتواند بدون ایجاد جهشهای جدید تست جهش را با داده های متنوع دیگری اجرا کند. در شکل(۳-۶) این کلاس و زیر بخشهای آن نشان داده شده است.
شکل(۳‑۵): ماژول تولید کننده جهش
تولید کننده ورودیهای تست
این بخش یکی از مهمترین مراحل انجام تست است و به عبارت دیگر عامل تعیین کننده موفقیت یا شکست یک تست است به طور کل برای تولید ورودی تست دو روش پویا و ایستا وجود دارد. روش ایستا مشابه آنچه که در بخش دوم تحت عنوان روش اجرای سمبلیک مطرح شده است که بدون استفاده از روش پویا قادر به حل برخی از مسائل نیست و روش پویا اجرای واقعی برنامه و استفاده از الگوریتمهای جستجو برای یافتن بهترین ورودیهای تست است که هردو روش دارای مزایا و معایب خود هستند [۴۳]. روش تولید داده ما مشابه روش ارائه شده در [۵۲] که برای تولید ورودیهای تست به جهت پوشش گراف کنترل جریان از الگوریتم کلونی زنبور [۵۳] بهره برده است.
الگوریتم کلونی زنبور
الگوریتمهای مبتنی بر هوش جمعی در سالهای اخیر در شاخه های مختلفی از علوم مورد توجه بوده است. یکی از ویژگیهای مشترک این الگوریتمها خاصیت مدیریت خود مختار [۶۱]است که خود دارای ۴ ویژگی است: ۱- بازخورد مثبت[۶۲]: یک قانون سرانگشتی[۶۳] است که برای ارتقاء در تولید ساختارهای مناسب استفاده می شود مانند مسیر به جای مانده از برخی گونه های مورچهها.۲- بازخورد منفی: ایجاد توازن برای بازخورد مثبت و کمک به حفظ ماندگاری ساختاری که براساس الگوهای جمعی کار می کند.۳- روشهایی مانند قدم زدن تصادفی و یا جابه جایی وظایف میان مولفههای جمعی برای انجام کار خلاقانه ضروری است. ۴- در کل خاصیت مدیریت خود مختار کمترین تقابل در انجام کارها را در سطح مولفههای اولیه تحمل می کند که به آنها این امکان را میدهد که همانگونه که از نتایج خود استفاده می کنند از نتایج دیگران نیز استفاده کنند. در این سیستمها چون کارها توسط موجودیتهای منحصربفرد انجام میگیرد اغلب، قابلیت انجام کارها به صورت موازی نیز وجود دارد.
در الگوریتم کلونی زنبور سه مولفهی اساسی وجود دارد: ۱- مواد غذایی که همان جوابهای مساله هستند. ۲-کارگران مستخدم ۳- کارگران غیر مستخدم، از طرف دیگر مولفههای الگوریتم کلونی زنبور میتوانند در دو مد کار کنند، جستجو برای پیدا کردن یک منبع شهد و ترک یک منبع غذایی. ارزش منابع غذایی به فاکتورهای زیادی وابسته است از جمله میتوان به میزان انباشت انرژی و میزان انرژی که میتوان از آن استخراج کرد اشاره کرد. زنبورهای مستخدم زنبورهایی هستند که به یک منبع غذایی مشخص منتصب شده اند در
این وضعیت دو حالت ممکن است رخ بدهد استفاده از آن منبع و یا به اصطلاح استخدام شده در منبع. این زنبورها حامل اطلاعاتی در مورد یک منبع غذایی خاص شامل فاصله، جهت تا کندو و شایستگی منبع غذایی هستند که این اطلاعات را با احتمال مشخصی با زنبورهای دیگر به اشتراک میگذارند. زنبورهای غیر مستخدم این دسته از زنبورها به طور پیوسته به دنبال یک منبع غذایی برای استفاده هستند به طور کلی دو دسته زنبور غیر مستخدم وجود دارد دستهی اول زنبورهای پیشاهنگ هستند که اطراف کندو را برای منابع غذایی جدید جستجو می کنند. دستهی دوم زنبورهای ناظر هستند که در کندو منتظر اطلاعات زنبورهای مستخدم هستند این اطلاعات در بخشی به نام سالن رقص [۶۴]مبادله می شود تا با بهره گرفتن از آن یک منبع غذایی جدید را انتخاب کنند. به طور کلی الگوریتم کلونی زنبور در مراحل زیر خلاصه می شود
-
- ارسال پیشاهنگ به برای یافتن محل غذا
-
- فرستادن زنبورهای مستخدم بر منبع غذایی و اندازه گیری مقدار شهدشان
-
- اندازه گیری مقدار احتمال انتخاب یک منبع غذایی با توجه به ترجیحات زنبورهای ناظر
-
- توقف استفاده فرایند استفاده از منابع غذایی و ترک آنها توسط زنبورها
-
- ارسال زنبورهای پیشاهنگ برای جستجوی منطقه برای یافتن منابع غذایی بهتر به صورت تصادفی
- به خاطر سپردن محل بهترین منبع غذایی
فرم در حال بارگذاری ...
[یکشنبه 1400-09-28] [ 10:43:00 ب.ظ ]
|