بخشی از مقاله
ارائه رویکرد جدید جهت تولید خودکار ورودیها برای آزمون نرم افزارهای شئگرا با استفاده از الگوریتم ژنتیک و آزمون جریان داده
چکیده
در این مقاله، چارچوبی برای آزمون نرمافزارهای شئگرا و افزایش قابلیت اطمینان آن با استفاده از تولید خودکار ورودیها ارائه شده است. هدف، ارائه راهکاری است که بتواند مسیرهای موجود در نرمافزار تحت آزمون را بررسی نماید و از این طریق قابلیت اطمینان نرمافزار را افزایش دهد. به دلیل مشکلات موجود برای آزمون تمامی مسیرهای برنامه و از طرفی مزایای استفاده از آزمون جریان داده برای برنامههای شئگرا، معیار آزمون جریان داده بررسی میشود. در ادامه با استفاده از معیار آزمون جریان داده و الگوریتم ژنتیک، داده آزمون به صورت خودکار تولید میشود. تابع برآزندگی مطرح شده در این مقاله قادر است با توجه به میزان اختلاف مکانی گرههای تعریف و استفاده در مسیر پیمایش شده توسط داده آزمون، به سنجش کروموزومهای تولید شده بپردازد. سپس از طریق عملیات ژنتیک، داده آزمون مناسب را برای واحد تحت آزمون طی نسلهای مورد نیاز تولید نماید. این روش هدایت کروموزومها، سبب میشود در نهایت نسلهای کمتری جهت تولید کروموزومها مورد نیاز باشد. نتیجه این امر، کاهش زمان و هزینه آزمون نرمافزار میشود.
کلید واژه- آزمون نرمافزار، خودکارسازی آزمون، الگوریتم ژنتیک، معیار آزمون جریان داده.
-1 مقدمه
امروزه آزمون نرم افزار نقش بسیار مهمی را در تضمین کیفیـت و قابلیت اطمینان نرم افزار ایفا مینمایـد. از سـوی دیگـر بـه دلیـل اسـتفادههــای گســترده از برنامــههــای شــئگــرا، نیــاز بــه ایجــاد استراتژیهای تولید آزمون، جهـت آزمـون برنامـه هـای شـئگـرا افزایش یافته و در این راستا مسئله تولید خودکار ورودیها جهت آزمون برنامههای شئگرا مطـرح مـیگـردد 2]،.[1 مسـئله تولیـد خودکار داده آزمون به صورت کلی بـه تولیـد داده آزمـون بـه دو صورت عملکردی و ساختاری قابل افراز مـیباشـد. وجـود تفـاوت بین این دو استراتژی به سطح دسترسی به کد بر مـی گـردد .[3] در استراتژی عملکردی تنها یـک نسـخه اجرایـی از نـرم افـزار در دسترس می باشد، هیچ دسترسی به کد منبع و منابع دیگر برنامه وجود ندارد. در این حالت سیستم نرمافزاری موجـود ماننـد یـک جعبه سیاه عمل می کند که نمیتوان درون آن را مشاهده کـرد و به آن دسترسی داشت. حال با توجه به این شرایط بـا تمرکـز بـر ورودی ها و خروجی ها، عمل آزمون انجام می شـود .[4] در مقابـل در آزمون ساختاری نرم افزار، به کد منبع، طراحی و منـابع دیگـر
نرم افزار دسترسی وجود دارد. در این حالت می توان سیستم را به یک جعبه شیشه ای تشبیه کرد به این معنی که محتویات داخـل و نحوه عملکرد آن قابل مشاهده است. آزمون ساختاری دقیقـا از دیدگاه توسعه دهنده، نرم افزار را مورد آزمـایش قـرار مـی دهـد؛ یعنی با این فرض که به منطـق داخلـی و سـاختار کـد برنامـه و چگونگی پیاده سازی آن، دسترسـی و احاطـه وجـود دارد. تولیـد خودکار داده آزمـون بـه روش سـاختاری نـه تنهـا اثـر پـذیری و کارایی نرم افزار را بالا می برد بلکه هزینه آزمـون نـرم افـزار را نیـز کاهش میدهد .[1]
آزمون ساختاری نرم افزار در حالت کلی به دو روش ایسـتا و پویـا صورت میپذیرد .[5] از جمله روش های ایستا می توان به اجـرای نمادین [6] و استنتاج دامنه [7] اشاره نمود. این روشها به جـای مقادیر واقعی با مقادیر نمادین کار می کنند. به این ترتیب با پایان یافتن اجرای برنامه یک سری معـادلات پیچیـده چنـد مجهـولی ایجاد می شوند که نحـوه نگاشـت ورود ی هـا را بـه خروجـی هـای برنامه نشان می دهند. روش های پویا شامل آزمـون تصـادفی [8]، جستجوی مبتنی بر هدف [9] و رویکرد تکاملی [5] میباشـد. در سال های اخیر تکنیک های پویای مختلفـی بـرای تولیـد خودکـار
5
داده آزمون مطرح شده است. اغلب این تکنیک ها از الگوریتمهای جستجو اکتشافی استفاده می نماینـد کـه در ایـن حالـت مسـئله تولید داده آزمون به یک مسئله بهینه سازی تبدیل مـیشـود .[5] دراین میان الگوریتم ژنتیک به عنوان یک الگوریتم فرا اکتشافی و به عنوان یک روش جستجوی هوشـمند، اثـر پـذیری خـود را در حل مسائل با فضای بزرگ، غیرخطی و پیچیـده نشـان مـی دهـد 11]،10،.[7 هدف از این مقاله ارائه راهکاری در جهت تولیـد داده آزمون با استفاده از الگوریتم ژنتیک میباشد. مطالب این مقاله در ادامه به صورت زیر سازماندهی شده است. در بخـش دوم مسـئله آزمون نرم افـزار مطـرح شـده اسـت. در بخـش سـوم مـروری بـر الگوریتم ژنتیک و کاربرد آن مطـرح مـیشـود. در بخـش چهـارم راهکار پیشنهادی بیان شده است و بخش پنجم، بـه جمـعبنـدی مقاله اختصاص دارد.
-2 آزمون نرمافزار
به طور کلی داده آزمون از طریـق ابـزار تولیدکننـده داده آزمـون تولید میشود و معیار آزمون، کیفیت موردهای آزمون تولید شده را تضمین کرده و اطلاعاتی در مورد زمان خاتمه فرآینـد آزمـون می دهد. معیارها و روش های متفاوتی برای پوشش کد در آزمـون ساختاری وجود دارد که هـر کـدام از آنهـا بسـته بـه نـوع زبـان برنامهنویسی کاربرد دارد.
در حالت کلی شناسایی موردهای آزمـون خـوب دنبالـهرو برخـی معیارهای آزمون تعریف شده میباشد. برای نمونه پوشـش مسـیر 12]،[5، پوشش دستورالعمل [1]، پوشش انشـعاب [13]، پوشـش شرطی و پوشش چند شرطی .[1] همانگونه که از نـام معیارهـای مطرح شده مشخص است داده آزمون بایـد بـه نـوعی تولیـد و از فضای مسئله انتخـاب شـود کـه بـه ازای اجـرای برنامـه بـا داده تولیدی، معیار مورد نظر بطور کامـل پوشـش داده شـود. بعنـوان مثال در پوشش دستورالعمل کلیه دستورالعملها و یا در پوشـش شرطی تمامی شرطها (اعم از درست یا نادرست). اما آنچه مسـلم است با افزایش طول برنامه و پیچیدگی آن حجم خطاهای کشف شده کاهش یافتـه و تعـداد دادههـای آزمـون مـورد نیـاز جهـت پوشش به شدت افزایش خواهد یافت. نکته دیگر اینکه در برخـی موارد نظیر پوشش یک انشعاب خاص لازمـه رسـیدن بـه نتیجـه مطلوب قرار گرفتن در یک دنباله خاص میباشد. در مجموع می-توان گفت که کارایی تنزل مییابد .[6]
از آنجا که در بین معیارهای فوق پوشش مسیر کاملتـرین معیـار به نظر میرسد. با دقت بیشتری درباره این معیـار بحـث خواهـد
شد. هدف، انتخاب دادههای ورودی از فضای مسـئله بـه گونـهای است که تمامی مسیرهای موجود در گراف جریان کنترلی حداقل یکبار اجرا شوند. اما به دلیل مشکلات موجود، در عمل ایـن کـار امکانپذیر نمیباشد. برخی از مهمتـرین مشـکلات کـه در مـورد آزمون برنامههای مبتنی بر شیگرایی بیشتر نمود پیـدا مـیکنـد عبارتند از:
· وجود حلقه در برنامه باعث ایجاد تعداد نامتناهی مسیر می-گردد که پوشش تمامی آنها ممکن نیست.
· در یک برنامه با توجه به تعداد انشـعابات، تعـداد مسـیرها از مرتبه نمایی خواهد بود. بخشی از این مسیرها ممکـن اسـت دست نیافتنی باشد. نظیر بخش دوم (نادرست) یک دسـتور شرطی همیشه درست که هیچگاه اجرا نخواهد شد.
· برای پوشش یک مسیر ممکن است نیـاز بـه چنـدین مـورد آزمون مختلف باشد و این یعنی نیاز به تعداد بسـیار زیـادی مورد آزمون و در نتیجه رشد بیرویه هزینـه مـالی و زمـانی
آزمون.
بنابراین میتوان به این نتیجه رسـید کـه مسـئله آزمـون کامـل مسیر، یک مسئله ان پی کاملٌاست 15]،.[14 علیرغم آنچـه گفتـه شد تحقیقات در این زمینه همچنان ادامه دارد.
-1-2 معیار آزمون جریان داده
اکثر تکنیکهای معروف برای انتخاب مسیر آزمون، بر پایه آزمون جریان کنترل و آزمون جریان داده ٍمیباشـند. در واقـع ایـن نـوع آزمون ها تکنیک های مبتنی بر کد می باشند. در این میان، آزمون جریان داده از این لحاظ که در مورد چگونگی تعریـف و اسـتفاده متغیرها تمرکـز دارد، اهمیـت بـهسـزایی دارد. تجزیـه و تحلیـل جریان داده مشخص می نماید که متغیرها در چه مکانی و چگونه با مقادیر مورد نظر، تعریفَ و یا استفاده می شـوند. از اینـرو یـک
1
زوج "تعریف" و "استفاده"ُ، یک زوج مرتب )d-u( می باشد کـه d یک عبارت، شامل تعریف متغیر v و u یک عبارت، شامل استفاده از مقدار متغیر v میباشد. در این میان متغیـر v نبایـد بـازتعریف شود. در واقع تنها یک گره برای تعریف متغیر v در مسـیر وجـود داشته باشد.
انواع زوجهای تعریف-استفاده در کلاس
فرض میشود یک کلاس به نام C همانند شکل (5) موجود است. همچنین d نشان دهنده یک عبارت شـامل تعریـف متغیـر v و u نشان دهنده یک عبارت شامل استفاده از متغیر v مـی باشـد. سـه نوع زوج تعریف-استفاده به صورت زیر معرفی میشود:
زوج تعریف – استفاده برای یک متد منزویِ: در این حالـت فرض میشود M یک متد درکلاس C و d و u دستورالعملهـایی درمتد M باشند. اگر یک "زیر مسیر" قابل اجرا از d بـه u وجـود داشته باشد زوج (d-u) یک زوج تعریـف– اسـتفاده در یـک متـد محسوب میشود .[7] بعنوان مثال در خـط 95 از برنامـه نمونـه متغیر item تعریف (مقداردهی) شده اسـت و در خـط 99 مـورد استفاده واقع شده است.
زوج تعریف – استفاده برای یک متد تعاملیّ:در ایـن حالـت هر متد عمومی در کلاس همراه با متدهای دیگـر کـلاس کـه بـه صورت مستقیم یا غیرمستقیم صدا زده میشود، مورد آزمون واقع مـیگــردد. فــرض مــیشـود M0 یــک متــد عمــومی در C باشــد. {M1,M2, … ,Mn} یک مجموعه از متدها هستند که توسـط M0 به صورت مستقیم یا غیرمستقیم صدا زده میشـوند. همچنـین d یک دستورالعمل تعریف در Mi و u یک دستورالعمل اسـتفاده در Mj میباشد و .i,j ϵ {0,1,2 ,... n} در این حالـت اگـر یـک " زیـر مسیر" قابل اجرا از d به u وجود داشته باشد آنگاه (d-u) یک زوج تعریــف– اســتفاده متــد تعــاملی اســت. (Mi,Mj) ممکــن اســت فراخوانی های مستقلی از یک متـد باشـند .[7] بـرای مثـال متـد Store متد Push را فراخوانی می کند. در این حالـت در خـط 99
متغیر Avg تعریف میشود، در ادامه با اجرای خط 93 این متغیر به تابع Push تحت نام item ارسال میگردد، بنابراین اسـتفاده از item، استفاده از Avg خواهد بود.
زوج تعریف – استفاده متدهای سریال در یک کـلاسْ: در این حالت تعامل و اثر متقابل متدهای عمومی در کلاس هنگـامی که آنها در یک دنبالهی دلخواه صدا زده میشوند، مورد
آزمون واقع میشود. فرض میشود M0 و N0 متد های عمـومی در کـلاس C هسـتند و {M1,M2, … ,Mn} متـدهایی هسـتند کـه توسط M0 به صورت مستقیم یا غیرمستقیم فراخوانی مـی شـوند. همچنین {N1,N2, … ,Nn} متدهایی هستند کـه توسـط N0 بـه صورت مستقیم یا غیرمستقیم صدا زده می شوند. در این حالت d