تست نرمافزار
در این مقاله قصد داریم نگاه عمیقتری به تست نرمافزار، شیوهها و کاربردهای آن داشته باشیم. اگر بخواهیم از تست نرم افزار تعریفی ساده داشته باشیم میتوان گفت" تست نرمافزار فرآیند اجرای یک برنامه کاربردی با هدف پیدا کردن اشکالات و متعاقبا بهبود کیفیت آن است". تست نرمافزار به عنوان يك فرايند كليدی در تضمين كيفيت سيستمهای نرم افزاری ايفاء نقش ميكند. در حال حاضر تست به عنوان يك صنعت در حوزه نرمافزار محسوب ميشود.
در سالهای اخير آمارهای شگفت آوری از سوی موسسه (NIST(National Institute of Standards and
Technologyدرباره شكست سيستمهای نرم افزاری ارائه شده است. در كشور ايالات متحده، اين شكستها ساليانه حدود 59.5 ميليارد دلار به اقتصاد اين كشور صدمه میزند. طبق بررسيهای انجام شده با بكارگيری تست در تمام فازهای توليد نرم افزار 22.2 ميليارد دلار از اين خسارت را میتوان كاهش داد. طبق آمارهای ارائه شده از سوی موسسه (IDC(International Data Corporation، چهل درصد از بودجه نرم افزارها صرف تست آن میگردد.در کشور ما نیز، با توجه به رشد فناوری اطلاعات و ارتباطات در طی چند سال گذشته و توليد بومی بسياری از نرم افزارهای مورد نیاز، نياز به اين فرايند بيش از پيش احساس شده و در صورت عدم توجه به آن، كاهش كيفيت سيستمهای ارائه شده، عدم رضايت مشتری و در نهايت از دست دادن بازار را به همراه خواهد داشت.
1.ریسک نرم افزار
امروزه بسیاری از کارها در زندگی شخصی، صنعت، امور نظامی و غیره به نرم افزارها سپرده شده است. گاهی یک اشتباه کوچک نرمافزاری میتواند سبب خسارات جبران ناپذیری شود. برای تشریح موضوع به چند نمونه اشاره میگردد.
- در سال 1994 خطای محاسبات اعشاری در پردازنده پنتیوم شرکت اینتل، علاوه بر کاهش فروش آن، اعتبار شرکت را تا مدتی خدشهدار کرد.
- در سال 1998 مدارگرد مریخ به دلیل یک خطا در محاسبات نرم افزاری، در جهت اشتباهی وارد اتمسفر مریخ شده و منفجر گردید. 327 میلیون دلار صرف این پروژه شده بود.
- در سال 1996 ماهواره بر آریان پنج، 38 ثانیه بعد از پرتاب در ارتفاع 3700 متری زمین منفجر شد. علت اصلی این حادثه در اثر سرریز در واحد ممیز شناور اندازهگیری شتاب افقی این ماهواره بر بود. 7 میلیارد دلار و 10 سال زمان برای ساخت این ماهواره بر هزینه شده بود. همچنین باری که این ماهواره بر حمل میکرد، 500 میلیون دلار ارزش داشت.
تنها 26% از پروژه های نرم افزاری دنیا با موفقیت اجرا میشوند. معیار های موفقیت پروژه عبارتنداز:
- اتمام به موقع
- با بودجه تعیین شده
- با تمام قابلیتها و عملکردهای مورد نظر
- بدون خطا (با خطای جزئی)
بسیاری از پروژههای تولید نرم افزار با شکست مواجه میشوند، هزینه بالایی صرف پروژههای شکست خورده میگردد.
- در آمریکا، بیش از 81 میلیارد دلار صرف پروژههای شکست خورده میشود
- در انگلیس، بیش از 33 میلیارد دلار صرف پروژههای شکست خورده میشود.
2.شیوه های تضمین کیفیت نرم افزار
برای تضمین کیفیت نرم افزار با توجه به شرایط، نوع و کاربرد آن از روشهای مختلفی استفاده میشود. در یک تقسیم بندی کلی می توان شیوههای تضمین کیفیت نرم افزار را به سه دسته تقسیم بندی نمود.
1. روشهای پیشگری از خطا از طریق حذف ریشه خطا
- آموزش
- بازبینی در ابتدای چرخه حیات (Inspection)
2. روشهای کاهش خطا از طریق تشخیص دلیل خطا
- تست
- بازبینی (در انتهای چرخه حیات)
3. روشهای حبس خطا از طریق موضعی کردن خطا
- تحمل خطا (fault tolerance)
3.تعریف کیفیت نرم افزار
کیفیت نرم افزار موضوعی است که مورد توجه تمامی تولید کنندگان و مصرف کنندگان سامانههای نرم افزاری است. کیفیت نرم افزار از دیدگاههای مختلفی قابل بررسی است.
1. کیفیت از دیدگاه کاربر
- برآورده شدن نیازهای کاربری
2. کیفیت از دیدگاه ساخت
- تبعیت از استاندارد
3. کیفیت از دیدگاه محصول
- ویژگیهای کیفی محصول
4.دلایل کاهش کیفیت نرمافزار
جهت بالابردن کیفیت یک محصول نرم افزاری ابتدا باید دلایل کاهش کیفیت و عوامل موثر بر آن را شناسایی نمود. عواملی که سبب کاهش کیفیت نرم افزار میشوند عبارتند از:
1. خطاهای انسانی
- سوء برداشت
- سوء درک
2. اشکال در نرم افزار
- اشکال در طرحی (Defect)
- اشکال در پیاده سازی (Bug)
3. شکست سیستم
- بروز اشکال در محیط عملیاتی
5.هزینه رفع خطا در چرخه حیات نرم افزار
هزینه برطرف کردن خطا در چرخه حیات نرم افزار با جلوتر رفتن مراحل تولید نرم افزار به صورت نمایی افزارش می یابد. برای مثال اگر در مرحله تحلیل نیازمندیها، شناسایی و رفع خطایی هزینه 100 دلاری داشته باشد، شناسایی و رفع آن خطا در مرحله انتشار هزینه 14000 دلاری میتواند داشته باشد. این مطلب در شکل زیر به تصویر کشیده شده است.
6.نسلهای مختلف تست نرم افزار
با گذشت زمان و پیشرفت صنعت نرم افزار، تست نرم افزار نیز تحولات بسیاری داشته است، بر همین اساس تست نرم افزار را میتوان در سه نسل دستهبندی کرد.
1. نسل اول (دهه هفتاد میلادی)
- تست=رفع خطا (debug)
1. نسل دوم (دهه هشتاد میلادی)
- تست یک فعالیتی است که در انتهای چرخه حیات نرم افزار و به منظور شناسایی خطا انجام میشود
1. نسل سوم (قرن بیست و یکم)
- تست یک فرایندی است موازی با فرایند تولید (شامل چهار فاز) که به منظور سنجش و بهبود کیفیت نرم افزار استفاده میشود.
7.استانداردها و متدولوژیهای تست نرم افزار
1. استانداردهای تست نرم افزار
- ISO-9126 : استاندارد ارزیابی محصولات نرم افزاری
- IEEE-829: استانداردی برای فرایند، مستندسازی و تکنیک های تست نرم افزار
- BS7925-1: واژه نامه تست نرم افزار
2. متدولوژیهای تست نرم افزار
- STEP
متدولوژی STEP كه حروف اختصاری Systematic Test and Evaluation Process است، یك متدولوژی برای تست سیستماتیك و مبتنی بر استانداردهای IEEE میباشد.
- (TDD(Test-driven development
8. سطوح تست نرم افزار و انواع آن طبق استاندارد IEEE
9.فازهای تست نرم افزار طبق استاندارد IEEE
1. فاز برنامه ریزی تست: در این فاز تصمیم گیریهای كلیدی بر روی فرایند تست نرم افزار صورت میگیرد كه اهم آنها عبارتند از:
- استراتژی تست
- ریسکهای نرم افزار
- زمانبندی و مسئولیتها
2. فاز طراحی تست: در این فاز روالهای تست و موارد تست مطابق تكنیكهای طراحی تست تهیه میگردد. منظور از روال تست، رویهای است كه برای اجرای تست باید دنبال گردد. منظور از موارد تست یك قابلیت، تعیین حالتهای مختلف جهت تست آن قابلیت میباشد كه با استفاده از تكنیكهای طراحی تست سعی در انتخاب كمترین حالتهایی داریم كه بیشترین پوشش تست را داشته باشند. در هر مورد تست، ورودی تست و نتیجه مورد انتظار تعیین میگردد.
- تهیه test-case ها
- تهیه test-procedure ها
3. فاز پیاده سازی تست: در این فاز محیط مورد نیاز برای اجرای تست راه اندازی میگردد.
- آماده سازی محیط تست
- تهیه test-script ها
4. فاز اجرای تست: در این فاز موارد تست طبق روالهای مربوطه مورد اجرا قرار میگیرد.
- اجرای دستی/خودکاری تست
- تهیه گزارش خطاها
- تهیه چکیده اجرایی تست
10.مراحل تست در قراردهای پیمانی
1. تست در محیط سازنده نرم افزار
- اثبات صحت عملکرد یک سیستم یا زیرسیستم نرم افزاری توسط تولید کننده آن
2. تست در محیط آزمایشگاهی
- تست یکپارچه سازی زیرسیستم های مختلف یک سیستم نرم افزاری
- تست های غیرعملکردی (کارایی و امنیت) زیرسیستم های نرم افزاری
3. تست در سایت مشتری
- جهت اطمینان از نصب و پیکربندی صحیح و عملکرد سیستم در محیط نهایی
- تست پذیرش نهایی (Final Acceptance Test)
- تست کل سیستم توسط کاربر نهایی و در محیط عملیاتی
11.ابزارهای مکانیزه کردن تست نرم افزار
امروزه ابزارهای مختلفی در زمینه مدیریت فرایند تست، انواع تست همچون تستهای كاركردی و غیر كاركردی، سطوح تست همچون تست واحد و غیره وجود دارد. در انتخاب ابزار تست پارامترهای مختلفی همچون هزینه خرید، هزینه آموزش، هزینه راه اندازی، قابلیتهای ابزار، قابلیت یكپارچه سازی ابزار با ابزارهای موجود،كاربرپسند بودن ابزار، مستندات راهنمای كاربری و فنی ابزار و عوامل متعدد دیگر دخالت دارند. بنابراین ابزارهای تست بسته به نیاز هر پروژه بایستی انتخاب گردند. شرکت مهندس پیشگان، ابزارهای پیشرفته زیر را در زمینههای مختلف تست سیستمهای نرم افزاری در اختیار قرار میدهد.
1. ابزارهای مدیریت تست و تضمین کیفیت
- TestLink, HP Quality Center, IBM Quality Manager
2. ابزارهای مکانیزه کردن تستهای عملکردی
- SOATest, Ranorex, QTP, Selenium
3. ابزارهای تست کارایی (تستهای بار و فشار)
- WPT (Web Performance Tester), LoadTester, Jmeter
4. ابزارهای تست برنامه نویسی
- Jtest, dotTest, C++Test
5. ابزارهای تحلیل کیفیت کدنویسی (تحلیل ایستا)
- Jtest, dotTest, C++Test, Sonar, Checkmarx
6. ابزارهای پروفایلر (تحلیل پویا)
- Yourkit Java Profiler, Yourkit dotNet Profiler, Jprofiler, Insure++Test
7. ابزارهای مانیتورینگ کارایی نرم افزار و زیرساخت آن
- AppDynamics, DynaTrace
نویسنده : تیم تست شرکت مهندس پیشگان
مراجع
[1]-Software Quality Engineering; Testing, Quality Assurance, and Quantifiable Improvement, Jeff Tian, IEEE
[2]-Software Testing 3.0: The Continuing Evolution of Software Testing
[3]-Art of Software Testing
[4]-Testing through Software Life Cycle
[5]-Happy About Global Software Test Automation, By Hung Q. Nguyen, Michael Hackett, Brent K. Whitlock