مقدمه
امروزه بسیاری از کارها در زندگی شخصی، صنعت، امور نظامی و غیره به نرم افزارها سپرده شده است. گاهی یک اشتباه کوچک نرمافزاری میتواند سبب خسارات جبران ناپذیری شود.
همیشه یکی از مهم ترین بحث ها در طراحی و پیاده سازی نرم افزارها، کارکرد درست سیستم طراحی شده می باشد. با رشد سیستم و توسعه چندین ساله آن توسط تیم های نرم افزار، کارکرد درست و بدون اشکال همه قسمت های آن همیشه یکی از دغدغه های برنامه نویسان می باشد.برای همین تست های مختلف تعریف و طراحی شده اند که به تیم های نرم افزاری کمک می کنند نرم افزاری های کم اشکال یا بی اشکالی را تولید نمایند.
1- تعریف:
آزمون نرمافزار(تست و ارزیابی نرمافزار) به منظور اطمینان از عملکرد صحیح آن در رویدادهایی مختلفی که ممکن است در دوره استفاده از نرمافزار با آن مواجه شود میباشد و به عبارت دیگر پیدا کردن خطاهایی احتمالی یک نرمافزار برای عملکرد درست، صحیح و بهینه آن در طول استفاده از آن است. هر چقدر نرمافزار بتواند با رویدادها مختلف به صورت مطلوب تر و قابل پذیرش تری چه از نظر عملکرد و چه از راحتی کاربر داشته باشد میتوان انتظار داشت نرمافزار دارای عملکرد بهتری میباشد. آزمون برنامه شامل اجرای بخش هایی (کامپوننت هایی) از برنامه یا بخش هایی از سیستم میشود تا مشخصات موردنظر سیستم را ارزیابی کند. بصورت کلی این مشخصات مشخص میکنند که هرکدام از بخش های برنامه ویژگی های زیر را تحت عملیات آزمون کردن دارند :
• به نیازمندی هایی که توسعه و طراحی نرم افزار را جهت دهی کرده اند رسیده است؟
• به انواع ورودی ها پاسخ مناسبی میدهد؟
• عملکرد خود را در زمان قابل قبولی انجام میدهد؟
• به اندازه کافی کارآمد است؟
• آیا میتوان آن را روی محیطی که برای آن برنامه ریزی انجام گرفته است نصب و اجرا کرد؟
• به نتیجه کلی که مطلوب سرمایه گذاران است دست پیدا کرده است؟
همانطور که تعداد تست های ممکن حتی برای مولفه های برنامه های ساده اغلب نامحدود هستند، تمامی تست کننده های برنامه از روشی استفاده میکنند که تست هایی ساده و در عین حال مناسب برای زمان و منابع سیستم را انجام دهند. در نتیجه، تست کردن برنامه عموما در تلاش است تا برنامه یا اپلیکیشن را با رویکرد یافتن حفره های برنامه اجرا کند.فرایند تست کردن، پروسه ای همراه با تکرار است یعنی که هنگامیکه یکی از حفره های برنامه درست شد فرایند تست کردن باید مجددا انجام پذیرد زیرا درست کردن این حفره میتواند حفره های دیگر، عمیق تر یا حتی جدیدی را نمایان کند. آزمون نرم افزار میتواند اطلاعات حیاتی و مستقلی درباره کیقیت برنامه و میزان ریسک شکست یا عدم موفقیت آن در مقابل استفاده کنندگان یا اسپانسرهای سیستم را ارائه دهد. آزمون نرم افزاری میتواند در زمانیکه برنامه بصورت کامل یا حتی قسمتی از آن در دسترس بود انجام پذیرد. فرایند توسعه نرم افزار عموما مشخص میکند چه زمانی و به چه صورتی آزمون نرم افزرا صورت پذیرد. برای مثال در فرایند فاز بندی شده، بیشتر تست کردن ها زمانی انجام میگیرد که پیش نیاز های سیستم پیدا شده و سپس در برنامه ای قابل آزمون پیاده سازی شده اند.البته در رویکرد Agile نیازمندی ها، برنامه نویسی و آزمون نرم افزاری عموما بصورت همزمان انجام میپذیرند.
در سالهای اخیر آمارهای شگفتآوری از سوی مؤسسه NIS،National Institute of Standards and تست نرمافزارTechnologyدربارهٔ شکست سیستمهای نرمافزاری ارائه شدهاست. در کشور ایالات متحده، این شکستها سالیانه حدود ۵۹٫۵ میلیارد دلار به اقتصاد این کشور صدمه میزند. طبق بررسیهای انجام شده با بکارگیری تست در تمام فازهای تولید نرمافزار ۲۲٫۲ میلیارد دلار از این خسارت را میتوان کاهش داد. طبق آمارهای ارائه شده از سوی مؤسسه(IDC )International Data Corporation، چهل درصد از بودجه نرمافزارها صرف تست آن میگردد. در کشور ما نیز، با توجه به رشد فن آوری اطلاعات و ارتباطات در طی چند سال گذشته و تولید بومی بسیاری از نرمافزارهای مورد نیاز، نیاز به این فرایند بیش از پیش احساس شده و در صورت عدم توجه به آن، کاهش کیفیت سیستمهای ارائه شده، عدم رضایت مشتری و در نهایت از دست دادن بازار را به همراه خواهد داشت. تست خوب: احتمال پیدا کردن خطاهای کشف نشده توسط ارزیابی زیاد است. تست موفق: که حداقل یک خطای کشف نشده را بیابد تست فقط وجود خطا را نشان میدهد 0پیدا نشدن خطا در تست به معنای بدون خطا بودن برنامه نیست. اصول تست با توجه به نیازمندیهای کاربر برنامهریزی قبل از اجرا (test plan) نوشتن برنامه تست قانون پارتو %۸۰ خطاهای کشف نشده در ۲۰٪ کد است تست باید از اجزای کوچک شروع شود، ممکن نیست (exhaustive) تست کامل برای مؤثر بودن باید توسط شخص ثالث بیطرف انجام شود،