بررسی مقاله

نام مقاله:تولید خودکار داده برای تست نرم افزار بر اساس الگوریتم ژنتیکنام کنفرانس:APEIEمسئله‌ای که در تست نرم‌افزار برای همگان بوجود می‌آید این است که تست، کاری که محصول مشخصی ندارد، در حقیقت چه نتیجه‌ای را در بر خواهد داشت.‌ به طور مثال شما نمی‌توانید ببینید هنگامی که تستی انجام می‌پذیرد، چه پروسه‌ای بر روی محصول یا کد اعمال می‌شود. به همین جهت توجیه اهمیت تست نرم‌افزار توسط شخصی که تست را انجام می‌دهد از دشواری بسیاری برخوردار است. در صورت عدم انجام تست نرم‌افزار، این احتمال وجود دارد که در ادامه هزینه‌های زیادی به شرکت یا محصول وارد شود و یا حتی در صورتی که کالا باعث صدمه به فرد یا از دست رفتن اطلاعات شخصی افراد شود، موجبات نابودی شرکت را فراهم کند، همچنین در سیستم‌های ایمنی حیاتی[1]که از حساسیت به مراتب بالاتری برخوردار هستند باعث اتفاقات ناگوارتر شود.در حالت کلی تست را می‌توان به بخش های مختلفی تقسیم‌بندی کرد، به صورتی که‌ یکی از بخش های تست، مورد تست[2] می‌باشد. همچنین خود مورد تست شامل دو بخش است: داده تست[3] و نتایج مورد انتظار[4]. موضوعی که در این مقاله مورد بحث واقع شده است مبحث تولید داده تست می‌باشد. برای انجام این کار از الگوریتم ژنتیک که دسته‌ای از الگوریتم های تکاملی [5]و فراکاوشی[6] است استفاده شده است.بحث تست نرم‌افزار و ایده تست نرم‌افزار در تاریخچه‌ی خود به دو بخش تقسیم می‌شود. در اوایل دهه هفتاد میلادی که دید متخصصین به تست به عنوان ابزاری بود که با استفاده از آن صرفا تشخیص کارکرد صحیح یا غلط نرم‌افزار صورت می‌پذیرد. اما در اواخر دهه هفتاد میلادی متخصصین، تست را به عنوان پروسه‌ای که با استفاده از آن خطاهای نرم‌افزار را تشخیص می‌دهند در نظر گرفتند.اولین گونه از تست نرم‌افزار که به دسته‌ی اول بر می‌گردد، تست کامل[7] بود که تمامی شاخه‌های یک برنامه را مورد بررسی قرار می‌دادند و از هیچ الگوریتم کاوشی برای انجام این کار استفاده نمی کردند. در گذشته تست به عنوان بخشی از کد نویسی مطرح می شد به علاوه فقط در پایان مرحله‌ی توسعه‌ی نرم افزار کار تست انجام می‌گرفت.ما می‌دانیم امروزه تعویق تست نرم‌افزار به انتهای کار توسعه‌ی نرم افزار، راهکار مناسبی به حساب نمی‌آید، به این دلیل که ممکن است مشکلات زیادی در حین توسعه نرم‌افزار پیش آید که به آخر کار سپرده شود و هنگامی که کار تست در انتها صورت پذیرد این احتمال وجود دارد که مشکلات زیادی از ابتدای کار تا انتهای آن کار منتقل شود که ممکن است به کل برنامه صدمه بزند و رفع خطا‌ها را سخت و بسیار پر هزینه کند. مسئله‌ای که در اینجا مطرح شده و بر مبنای آن کارها انجام شده‌است مسئله محاسبه میانگین است. یکی از رویکردهای نمایش تصویری مسئله و کد، نمودار کنترل جریان [8]است که کمک می‌کند نودها و شاخه‌ها را به خوبی تشخیص دهیم. به این منظور، از الگوریتم ژنتیک برای بهینه سازی استفاده می‌شود به این معنا که جواب‌های شما را به جواب بهینه نزدیک و نزدیک‌تر می‌کند، اما جواب قطعی و بهینه ترین‌جواب را نمی‌دهد. در اینجا ورودی برنامه که تست دیتاها هستند جواب مسئله خواهند بود که ما دنبال آن هستیم. ما دنبال بهترین تست‌هایی هستیم که از شاخه‌های بیشتری گذر کرده و شاخه‌های بیشتری را پوشش دهند و تلاش کنند تا با کمترین تست دیتا، شاخه‌های مسئله را تست کنند. برای انجام تست و بررسی روش، از یک تکه کد محاسبه میانگین استفاده شده است و با کنترل جریان مسیرها نمایش داده شده‌اند. برای نمایش ورودی‌های مسئله از یک سه تایی (x,y,z) استفاده شده است و ترکیب[9] و جهش‌های[10] مختلفی روی آن‌ها اعمال شده و نسل‌های مختلف را ایجاد کرده و تست‌های مختلفی را تولید کرده است.برازندگی تست‌ها نیز به این صورت است که چه پوششی از شاخه‌ها را در بر گرفته است و با استفاده از آن تست‌ها را طبقه‌بندی کرده و برازندگی آن‌ها را مقدار دهی کرده است. نحوه ترکیب در این مسئله به این ترتیب است که اگر ما دو ترکیب (۱,۲,۳) و (۴,۵,۶) را داشته باشیم، آن‌ها را با هم مخلوط کرده و به طور مثال (۱,۲,۶) را خروجی می‌دهد. جهش نیز به این صورت است که یکی را عوض کرده و آن‌ها را هم با نسل‌های مختلف بررسی کرده است.کاری که در این مقاله نسبت به کارهای دیگر انجام شده است وزن دهی به هر شاخه داده است و اینکه مثلا اگر یک شاخه چندین بار تست شود وزن آن شاخه زیاد می‌شود و در مراحل بعد داده‌ها طوری باهم ترکیب می‌شوند که از این شاخه کمتر گذر کنند. یعنی به گونه‌ای تشخیص نیز می‌دهد که داده هایی با ویژگی X باعث همگرایی به شاخه Y می شوند. این مقاله تمرین درس اشکال زدایی دانشگاه شهید بهشتی، جهت انتشار محتوای فارسی بیشتر است.[1] Safety critical systems[2] Test case[3] Test data[4] Expected results[5] Evolutionary algorithm[6] Meta heuristics[7] Exhaustive[8] Control flow[9] Cross over[10] Mutation