در ادامه هر کدام از بخش­ها را به طور جداگانه توضیح می­دهیم و در انتها با جمع بندی بخش­ها مدل نهایی را ارائه خواهم نمود.
ابزارهای ارائه شده مبتنی بر جاوا
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 استفاده کردیم.
از طرف دیگر با بهره گرفتن از این روش برای اعمال جهش­ها نیازی به لود مداوم بایت کد برنامه نداریم تنها با یک بار لود می­توانیم به تعداد محل­های مناسب از یک نوع جهش بر روی یک فایل جهش اعمال کنیم.
پس از انجام جهش­های لازم ماژول تولید کننده­ جهش آدرس های فایل­های جهش یافته و جهش­های موجود در هر یال را برمی­گرداند[۵۹] تا توسط تابع تولید کننده و اجرا کننده­ تست مورد استفاده قرار گیرد از طرف دیگر این اطلاعات را درون لاگ [۶۰]فایل ذخیره می­ کند تا در صورت تمایل کاربر بتواند بدون ایجاد جهش­های جدید تست جهش را با داده های متنوع دیگری اجرا کند. در شکل(۳-۶) این کلاس و زیر بخش­های آن نشان داده شده است.
شکل(‏۳‑۵): ماژول تولید کننده­ جهش
تولید کننده­ ورودی­های تست
این بخش یکی از مهمترین مراحل انجام تست است و به عبارت دیگر عامل تعیین کننده­ موفقیت یا شکست یک تست است به طور کل برای تولید ورودی­ تست دو روش پویا و ایستا وجود دارد. روش ایستا مشابه آنچه که در بخش دوم تحت عنوان روش اجرای سمبلیک مطرح شده است که بدون استفاده از روش پویا قادر به حل برخی از مسائل نیست و روش پویا اجرای واقعی برنامه و استفاده از الگوریتم­های جستجو برای یافتن بهترین ورودی­های تست است که هردو روش دارای مزایا و معایب خود هستند [۴۳]. روش تولید داده ما مشابه روش ارائه شده در [۵۲] که برای تولید ورودی­های تست به جهت پوشش گراف کنترل جریان از الگوریتم کلونی زنبور [۵۳] بهره برده است.
الگوریتم کلونی زنبور
الگوریتم­های مبتنی بر هوش جمعی در سال­های اخیر در شاخه­ های مختلفی از علوم مورد توجه بوده است. یکی از ویژگی­های مشترک این الگوریتم­ها خاصیت مدیریت خود مختار [۶۱]است که خود دارای ۴ ویژگی است: ۱- بازخورد مثبت[۶۲]یک قانون سرانگشتی[۶۳] است که برای ارتقاء در تولید ساختارهای مناسب استفاده می­ شود مانند مسیر به جای مانده از برخی گونه­ های مورچه­ها.۲- بازخورد منفی: ایجاد توازن برای بازخورد مثبت و کمک به حفظ ماندگاری ساختاری که براساس الگوهای جمعی کار می­ کند.۳- روش­هایی مانند قدم زدن تصادفی و یا جابه جایی وظایف میان مولفه­های جمعی برای انجام کار خلاقانه ضروری است. ۴- در کل خاصیت مدیریت خود مختار کمترین تقابل در انجام کارها را در سطح مولفه­های اولیه تحمل می­ کند که به آن­ها این امکان را می­دهد که همانگونه که از نتایج خود استفاده می­ کنند از نتایج دیگران نیز استفاده کنند. در این سیستم­ها چون کارها توسط موجودیت­های منحصربفرد انجام می­گیرد اغلب، قابلیت انجام کارها به صورت موازی نیز وجود دارد.
در الگوریتم کلونی زنبور سه مولفه­ی اساسی وجود دارد: ۱- مواد غذایی که همان جواب­های مساله هستند. ۲-کارگران مستخدم ۳- کارگران غیر مستخدم، از طرف دیگر مولفه­های الگوریتم کلونی زنبور می­توانند در دو مد کار کنند، جستجو برای پیدا کردن یک منبع شهد و ترک یک منبع غذایی. ارزش منابع غذایی به فاکتورهای زیادی وابسته است از جمله می­توان به میزان انباشت انرژی و میزان انرژی که می­توان از آن استخراج کرد اشاره کرد. زنبورهای مستخدم زنبورهایی هستند که به یک منبع غذایی مشخص منتصب شده ­اند در
این وضعیت دو حالت ممکن است رخ بدهد استفاده از آن منبع و یا به اصطلاح استخدام شده در منبع. این زنبورها حامل اطلاعاتی در مورد یک منبع غذایی خاص شامل فاصله، جهت تا کندو و شایستگی منبع غذایی هستند که این اطلاعات را با احتمال مشخصی با زنبورهای دیگر به اشتراک می­گذارند. زنبورهای غیر مستخدم این دسته از زنبورها به طور پیوسته به دنبال یک منبع غذایی برای استفاده هستند به طور کلی دو دسته زنبور غیر مستخدم وجود دارد دسته­ی اول زنبورهای پیشاهنگ هستند که اطراف کندو را برای منابع غذایی جدید جستجو می­ کنند. دسته­ی دوم زنبورهای ناظر هستند که در کندو منتظر اطلاعات زنبور­های مستخدم هستند این اطلاعات در بخشی به نام سالن رقص [۶۴]مبادله می­ شود تا با بهره گرفتن از آن یک منبع غذایی جدید را انتخاب کنند. به طور کلی الگوریتم کلونی زنبور در مراحل زیر خلاصه می­ شود

    1. ارسال پیشاهنگ به برای یافتن محل غذا
    1. فرستادن زنبورهای مستخدم بر منبع غذایی و اندازه ­گیری مقدار شهدشان
    1. اندازه ­گیری مقدار احتمال انتخاب یک منبع غذایی با توجه به ترجیحات زنبورهای ناظر
    1. توقف استفاده فرایند استفاده از منابع غذایی و ترک آن­ها توسط زنبورها
    1. ارسال زنبورهای پیشاهنگ برای جستجوی منطقه برای یافتن منابع غذایی بهتر به صورت تصادفی
  1. به خاطر سپردن محل بهترین منبع غذایی
موضوعات: بدون موضوع  لینک ثابت


فرم در حال بارگذاری ...