تغییر توصیف کننده تابع (Modifier method change)
تکینکهای کاهش هزینه
در روشهای سنتی برای کاهش هزینه تست، ابتدا برنامه جهش یافته از روی کد برنامهی اصلی ایجاد شده سپس به صورت جداگانه با ورودیهای تست کامپایل می شود و در نهایت نتایج خروجی بدست آمده از آنها با یکدیگر مقایسه میشد. اگرنتایج بدست آمده، متفاوت بود جهش از میان رفته بود و در غیر این صورت باید فرایند جستجو برای جهش برابرآغاز میشد که انجام این فرایند، نیازمند تلاش انسانی و صرف هزینه میشد. به همین دلیل تا قبل از آنکه تکنیکهایی برای خودکارسازی فرایند تست عرضه شود این روش، به عنوان یک روش گران قیمت و ناکار آمد شناخته میشد تا آن زمان که تکنیکهای کاهش هزینه را به سه دستهی انجام کمتر، انجام هوشمندانه و انجام سریعتر تقسیم شد [۱۱]. در این پایان نامه، مشابه [۲] آنها را به دو دستهی تولید کمتر جهش و کاهش هزینه اجرا تقسیم میکنیم. همانطور که در شکل(۲-۲) [۲] (که حاصل بررسی ۳۹۰ مقاله است) مشاهده می شود تاکنون تکنیکهای جهش انتخابی و جهش ضعیف در مقایسه با سایر روشها بیشتر مورد توجه بوده است.( سایر روشها اغلب حاصل کمتر از ۵ مقاله بوده است.)
(( اینجا فقط تکه ای از متن درج شده است. برای خرید متن کامل فایل پایان نامه با فرمت ورد می توانید به سایت feko.ir مراجعه نمایید و کلمه کلیدی مورد نظرتان را جستجو نمایید. ))
شکل(۲‑۲): درصد استفادهی مقالات از تکنیکهای کاهش هزینه [۲]
تولید جهش کمتر
یکی از ابتدایی ترین روشهای کاهش هزینه، تولید جهش کمتر است. زیرا هر چه تعداد جهشهای موجود در کد برنامه بیشتر باشد به همان نسبت نیاز به تولید داده های تست بیشتری داریم این کار هزینه بر است اما از طرف دیگر کاهش تعداد جهشها ممکن است اثر بخشی فرایند تست را پایین بیاورد. در این زمینه تلاش شده تا ضمن حفظ یا کاهش حداقل اثر بخشی تعداد جهشها را نیز کاهش داد. در زیر به چند روش اشاره میکنیم:
نمونه برداری از جهشها: در این روش، تمرکز بر پیدا کردن مجموعه ای از موارد تست است که با وجود موارد تست کمتر معیار پوشش را حفظ کند. در اینجا لازم است کمی در مورد معیار پوشش توضیح دهیم: هر کد برنامه را میتوان به صورت یک گراف نمایش داد که هر گره ی آن، بخشی از کد است که قابلیت اجرا در یک واحد زمانی را داشته باشد. از طرف دیگر یالها نیز نحوی ارتباطات این گرهها با یکدیگر را نشان می دهند. در هرگراف، مسیرهایی وجود دارد که دنبالهای از گرهها را شامل می شود. هر مسیر، شامل چندین زیر مسیر است که برخی از آنها مسیر تست هستند. مسیرهای تست مسیرهایی هستند که از گره آغازین گراف شروع و به گره پایانی آن ختم میشوند. در هر بار فرایند تست، تنها یکی از مسیرهای تست اجرا خواهد شد. پس در حقیقت داده های ورودی که بتواند مسیرهای تست بیشتری را اجرا کند، بهتر خواهد بود. برای پوشش، به طورکلی دو معیار وجود دارد: ۱- ساختیافته ۲-جریان داده، معیارهای ساختیافته تنها برروی گرافی تعریف میشوند که شامل گره و یال است و میتوان به عنوان مثال به معیارهای NC [۱۶](پوشش تمامی گرههای گراف) EC [۱۷](پوشش تمامی یالهای گراف) و… . معیار جریان داده ها تنها برروی گرافهایی، قابل تعریف است که در آن منبع هر متغییر ذکر شده باشد. هدف این معیار ردگیری محل تعریف def [۱۸]و استفادهی use متغییرها، جهت کسب اطمینان از استفادهی درست از آنها استdef (n). و def (e) به متغییرهایی گفته می شود که در یال e و یا گره n تعریف میشوند و متقابلا use (n) و use (e) به متغییرهایی گفته می شود که در گره n و یا یال e استفاده میشوند.
- Horgan [12] با ایجاد مجموعه تستهای کمینه سعی در کاهش هزینه تست دارد بگونهای که در عین کاهش تعداد موارد تست بتوانند کیفیت تست را ثابت نگاه دارد. در این تحقیق برای تولید مجموعه تستهای کمینه از ابزاری به نام ATACMIN استفاده می شود که با بهره گرفتن از آن در ابتدا برای ۱۰۰۰ جهش مورد تست، تولید می شود سپس آنها را براساس پوشش بلاکها در دستههای (۵۰-۵۵)% ، (۶۰-۶۵)%، (۷۰-۷۵)%، (۸۰-۸۵)% و (۹۰-۹۵)% قرار میگیرند پس از بررسیهایی که بر روی ۱۰ نرمافزار انجام شد چهار نتیجه دست آمد که عبارت است از:
- کاهش اثر بخشی: کاهش مقدار اثر بخشی بر اثر کاهش کمینه سازی دسته های تست (۵۰-۵۵)% ، (۶۰-۶۵)%، (۷۰-۷۵)%، (۸۰-۸۵)% و (۹۰-۹۵)% به ترتیب برابر است با: ۰%، ۰٫۰۳%، ۰٫۰۱%، ۰٫۳۸%و۱٫۴۵% است که این مقدار در کاهش اثر بخشی قابل چشم پوشی است.
- کاهش اندازه: کاهش اندازه برای هر دسته تست (۵۰-۵۵)% ، (۶۰-۶۵)%، (۷۰-۷۵)%، (۸۰-۸۵)% و (۹۰-۹۵)% به ترتیب برابر است با: ۱٫۱۹%، ۴٫۴۶%، ۷٫۷۸%، ۱۷٫۴۴% و ۴۴٫۲۳% است که در برابر کاهش اثر بخشی ناچیز آن، قابل توجه است.
- تاثیر سختی نقصها: در این بخش نویسنده به بررسی ارتباط میان نقصهای پیچیده و کمینه سازی مجموعه تست پرداخته است. برای این کار در ابتدا نقصها را به چهار دسته از ۱تا۴ به از پیچیده تا ساده تقسیم می کند و نشان میدهد کاهش اثر بخشی برای هر دسته به ترتیب ۰٫۳۹%، ۰٫۶۶%، ۰٫۰۹۸% و ۰% است این مساله نشان میدهد نقصهایی که توسط تعداد محدود
ی از موارد تست کشف می شود ممکن است در صورت کاهش مجموعه تست قابل کشف نباشند. در این مورد نیز کاهش اثر بخشی آنقدر نیست که قابل ملاحظه باشد [۱۳].
در روش دیگر از روشهای تصادفی برای انتخاب بخشی از داده های تست مناسب استفاده می شود (به عنوان مثال از ۱۰% تا ۴۰% از داده های تست را انتخاب می شود) سپس با انجام آزمایشهای مختلف به این نتیجه میرسد که برای پوشش تمام معیارها، تنها کمتر از ۱۴% درصد تمام موارد تست نیاز است [۱۴].
روش دستهبندی: ایده اصلی این روش ابتدا توسط S. Hussain[15] مطرح شد در این روش جهشهای تولید شده را براساس ویژگیهای مشترک دستهبندی میشوند سپس از میان آنها چند جهش انتخاب شده و برای هر دسته به طور مجزا داده های تست تولید می شود. برای دستهبندی جهشهای پنج برنامه از دو روش K-means ، Agglomerative (که در فصل ضمایم توضیح داده شده اند) و کد فاصله همینگ استفاده شده است. با بهره گرفتن از این فاصله میتوانیم فاصلهی بین جهشها را اندازه گیری کرده و جهشهای مشابه را در یک دسته قرار دهیم برای این کار به عنوان مثال سه جهش و به صورت جدول(۲-۳) در نظر بگیرید.
جدول(۲‑۳): سه جهش و [۱۵]
۱
۰
۱
۰
۰
۱
۱
M1
۰
۰
۱
۱
۱
۱
۱
M2
۰
۰
۱