تست نرم افزار چیست؟

تست نرم افزار فعالیتی است که به کمک آن به بررسی نتایج واقعی و تطبیق آن با نتایج مورد انتظار می پردازیم تا مطمئن شویم که سیستم نرم افزاری مورد نظر بی عیب است. این فعالیت معمولا شامل اجرای بخشی از سیستم یا نرم افزار برای ارزیابی یک یا چند خصیصه ی مورد نظر است.

تست نرم افزار همچنین به یافتن اشکالات، شکاف ها، و نیازمندی های از قلم افتاده در مقایسه با نیازمندی های واقعی کمک می کند. این فعالیت می تواند به صورت دستی یا خودکار (به کمک ابزارها) انجام شود. در مجموعه آموزش های آتی به معرفی تست نرم افزار و بررسی اهمیت و انواع آن خواهیم پرداخت.

چرا تست نرم افزار مهم است؟

تست مهم است چون باگ های نرم افزاری میتوانند موجب تحمیل خسارت های مالی و حتی جانی فراوانی شوند. به ویژه در 20 سال گذشته نمونه های فراوانی از فجایعی که به خاطر اشکالات نرم افزاری به بار آمده قابل ملاحظه هستند:

- در آوریل 2015 ترمینال بلومبرگ در لندن به خاطر قطعی نرم افزار ازکار افتاد و بیش از 000,300 معامله گر را در بازارهای مالی تحت تاثیر قرار داد. این اتفاق دولت را مجبور کرد خرید 3 میلیارد پوند اوراق را به تاخیر بیاندازد.

- شرکت نیسان مجبور به جمع آوری یک میلیون خودرو به خاطر مشکل نرم افزاری مربوط به حسگر کیسه هوا شد. گزارش شده بود که دو تصادف به خاطر این مشکل نرم افزاری اتفاق افتاده است.

- برند استارباک (شرکت تولید قهوه در سیاتل) مجبور شد به خاطر مشکل نرم افزاری در سیستم پایانه فروش خود، 60 درصد فروشگاه های خود را در آمریکا و کانادا موقتا تعطیل کند. در یکی از مغازه ها قهوه به صورت رایگان سرو شد چون سیستم قادر به پردازش تراکنش نبود.

- بعضی نماینده های فروش آمازون مشاهده کردند که قیمت محصولاتی از آنان به خاطر اشکال نرم افزاری تا 1 پوند کاهش یافته و این موجب خسارت سنگین به آنها شد.

- آسیب پذیری ویندوز 10 : نقص موجود در سیستم win32k به کاربران اجازه میداد از از سندباکس ها امنیتی عبور کنند.

- در سال2015هواپیمای جنگیf-35 قربانی باگ نرم افزاری شد و نتوانست اهداف را به درستی مورد هدف قرار دهد.

- ایرباسA300 هواپیمایی چین (China Airlines) در آوریل 2016 به خاطر نقص نرم افزاری سقوط کرد و 264 انسان بی گناه کشته شدند.

- در آوریل 1999 یک باگ نرم افزاری موجب شکست در پرتاب ماهواره نظامی شد تا یکی از گرانترین اتفاقات در این زمینه با هزینه 1.2 میلیارد دلار رقم بخورد.

انواع تست های نرم افزار

تست نرم افزار نوعا در سه دسته اصلی طبقه بندی می شود:

1- تست کارکردی

2- تست غیرکارکردی یا تست عملکرد

3- نگهداری (نگاهداشت و سنجش پسرفت)


گروه تست

انواع تست در این گروه

تست کارکردی

- تست واحد

- تست جامعیت و یکپارچگی

- تست مطلوبیت برای کاربر

- بومی سازی

- جهانی سازی

- ...

تست غیرکارکردی یا تست عملکرد

- عملکرد

- تحمل

- بار

- مقیاس پذیری

- قابلیت استفاده

- ...

نگهداری

- نگهداری

- سنجش پسرفت


لیست ارائه شده در جدول به هیچ عنوان کامل نیست چون چیزی حدود 150 نوع تست معرفی و تدوین شده و شاید هر روز کامل تر شود. هم چنین باید توجه داشت که همه انواع تست قابل اِعمال به هر نوع پروژه ی نرم افزاری ای نیست و انتخاب نوع تست بستگی به ماهیت و وسعت پروژه دارد.

7 اصل تست نرم افزار همراه با مطالعه موردی برای یادگیری بهتر

در اینجا قصد داریم برای شروع 7 اصل و قاعده ی مبنایی که بر تست نرم افزار حاکم است را بیان کنیم.

مقدمه

به دست آوردن نتایج بهینه هنگام انجام تست نرم افزار بدون انحراف از هدف مد نظر، بسیار مهم است. اما چطور مطمئن شویم که از راهبردی درست برای این منظور پیروی می کنیم؟ برای این منظور شما باید از قواعدی پایه ای کمک بگیرید. در اینجا هفت قاعده مشترک تست نرم افزار که به طور گسترده در صنعت نرم افزار استفاده می شود را بیان خواهیم کرد.

برای فهم بهتر موضوع یک سناریو را در نظر بگیرید که شما می خواهید یک فایل را از فولدر A به فولدر B انتقال دهید. به تمام حالت های ممکن که شما می توانید این عملیات را تست کنید فکر کنید. جدا از سناریوهای معمولی شما میتوانید شرایط زیر را نیز تست کنید:

- تلاش کنید فایل را هنگامی که باز است انتقال دهید!

- فرض کنید شما دسترسی امنیتی لازم به پوشه ی مقصد را ندارید.

- پوشه B در یک درایو مشترک قرار دارد و ظرفیت آن پر شده است

- پوشه B فایل همنام با این فایل دارد

- ....

در حقیقت لیست این شرایط می تواند بسیار طولانی شده و حالت های معتنابهی را ایجاد کند. یا فرض کنید 15 فیلد برای ورود اطلاعات دارید که هر کدام میتواند 5 حالت ممکن مقدار بگیرد. بنابراین کل حالت های ممکن 5^15 خواهد شد!

اگر شما بخواهید تمام حالت های ممکن در یک سناریوی نرم افزاری را در نظر بگیرید زمان و بودجه پروژه به اتمام خواهد رسید. بنابراین ما قواعد وراهبردهایی مشخص نیاز داریم تا تلاش در جهت تست نرم افزار را بهینه کنیم.

قواعد و اصول اساسی تست نرم افزار

1) تست کامل ممکن نیست

بله؛ تست کامل ممکن نیست. در عوض ما براساس ارزیابی ریسک نرم افزار به اندازه ی بهینه ای از تست نیاز داریم.

و سوال بسیار مهمی که ممکن است پیش بیاید اینکه: چطور این ریسک را اندازه گیری کنیم؟ برای پاسخ اجازه دهید تمرینی را انجام دهیم. به عقیده شما چه عملیاتی ممکن است با احتمال بالاتری موجب شود سیستم عامل شما دچار شکست، هنگ کردن و اشکال شود؟

.

.

.

هم چنان که اکثر شما اتفاق نظر دارید اجرای 10 برنامه مختلف به احتمال زیاد موجب اختلال در عملکرد سیستم عامل خواهد شد. بنابراین اگر شما بخواهید این سیستم عامل را تست کنید، شما متوجه شده اید که نقص ها و اشکالات به احتمال زیاد در فعالیت های چندکارِگی (multi-tasking) به وجود خواهند آمد و این بخش نیاز به تست کامل دارد و ما را به سمت قاعده دوم یعنی خوشه بندی عیب ها پیش می رویم.

2) خوشه بندی عیب ها

این قاعده یعنی تعداد کمی از ماژول های سیستم نرم افزاری بیشترین عیب ها و اشکالات را در خود دارند. این قاعده یک کاربرد از قاعده معروف 20-80 پارتو در زمینه تست نرم افزار است: تقریبا 80 درصد مشکلات در 20 درصد ماژول ها یافت میشوند. به تجربه شما می توانید این ماژول ها را شناسایی کنید. اما این رویکرد مسائل مربوط به خودش را دارد. اگر همان تست بارها و بارها تکرار شود، نهایتا همان موارد آزمون قبلی دیگر باگ های جدید تولید نخواهند کرد.

3) پارادوکس حشره کش

استفاده متناوب از یک محلول آفت کش برای ریشه کن کردن حشرات در زمان کشاورزی، در طی زمان موجب افزایش مقاومت حشرات در برابر آفت کش و بی تاثیری آن خواهد شد. همین قاعده به تست نرم افزار نیز قابل تسری است. اگر مجموعه ای تکراری از تست ها مورد استفاده قرار گیرد، روش مورد نظر برای کشف عیوب جدید ناکارمد خواهد شد.

برای غلبه بر این مشکل مجموعه موارد آزمون قبلی باید به طور منظم مرور و اصلاح شده و موارد جدیدتر برای کشف باگ های جدید به آن اضافه شود.

تست کننده ها نباید به تکنیک های موجود بسنده کنند بلکه باید به طور مستمر روش های موجود را بهنیه کنند تا فرایند تست کارامدتر شود. اما پس از همه ی این زحمت های و تلاش های فراوان شما هرگز نمیتوانید ادعا کنید که محصول شما بدون باگ است. رونمایی از ویندوز 98 و بروز اشکال در محصول در همان زمان، از شرکتی مانند مایکروسافت نمایانگر این مساله است.

4) فرایند تست فقط وجود داشتن اشکالات را نشان می دهد

طبق این اصل، تست در مورد وجود و حضور باگ ها و اشکالات صحبت میکند و چیزی در مورد وجود نداشتن باگ ها نمی گوید. به عبارت دیگر تست نرم افزار امکان وجود اشکالات کشف نشده را پایین تر می آورد اما حتی اگر هیچ باگی یافت نشود، هیچ گواهی بر نبودن باگ نیست.

اما اگر شما همه ی اقدامات پیشگیرانه را انجام داده، و با تلاش فراوان موفق به یافتن 99 درصد اشکالات شدید اما نرم افزار نیازها و احتیاجات کاربران را برآورده نکند چه؟ به اصل بعدی دقت کنید:

5) نبودن اشکال

ممکن است شما نرم افزاری تا 99 درصد بدون اشکال تولید کنید و هنوز بلااستفاده باشد. این زمانی اتفاق می افتد که سیستم به طور کامل برای نیازمندی اشتباه تست شده باشد. «تست نرم افزار منحصرا در یافتن باگ ها نیست، بلکه چک کردن اینکه نرم افزار نیازهای کسب و کار را مد نظر قرار داده باشد نیز بخش مهمی از تست است». بنابراین نبودن اشکال یک سفسطه است یعنی در واقع اگر سیستمی که ساخته شده نیازهای کاربران را مورد توجه قرار ندهد، یافتن و رفع باگ ها به درد نخواهد خورد. برای حل مساله قاعده ی بعدی یعنی تست در زودهنگام را مورد توجه قرار دهید.

6) تست زودهنگام

در چرخه توسعه نرم افزار ،تست باید تا جای ممکن زود اتفاق بیفتد تا هر اشکالی در فاز نیازمندی ها و طراحی در همان مراحل اولیه با هزینه بسیار کمتر گرفته شود. اما چقدر زود باید این اتفاق بیفتد؟ پیشنهاد می شود همان زمانی که نیازمندی ها تعریف می شود شما شروع به یافتن باگ ها کنید.

7) تست وابسته به زمینه است

خلاصه ی این قاعده اینکه: روشی که شما برای تست یک سایت تجارت الکترونیکی انتخاب می کنید با یک اپلیکیشن تخت دسکتاپ مانند فوتوشاپ متفاوت است. همه ی نرم افزارهای توسعه داده شده، یکی نیستند و شما باید رویکردها، متودولوژی ها و ابزارهای متفاوتی بسته به نوع پروژه نرم افزاری برای تست انتخاب کنید.


خلاصه 7 قاعده تست نرم افزار

قاعده 1

تست وجود داشتن باگ ها را نشان می دهد

قاعده 2

تست کامل ممکن نیست

قاعده 3

تست زود هنگام

قاعده 4

خوشه بندی اشکالات

قاعده 5

پارادوکس حشره کش

قاعده 6

تست وابسته به زمینه است

قاعده 7

نبودن اشکال - یک سفسطه


عقیده نادرست: قواعد و اصول فقط برای کتاب ها و مقالات است و در عمل استفاده نمی شود

این عقیده خلاف واقع است و با رعایت اصول بیان شده شما می توانید راهبردی موثر همراه با موارد آزمون خطایاب طراحی کنید. با یادگرفتن این قواعد شما مانند کسی خواهید بود که تازه گواهی نامه رانندگی گرفته؛ مانند راننده ی تازه کار در ابتدا توجه به این اصول از شما انرژی خواهد گرفت اما تسترهای حرفه ای با نهادینه کردن این اصول با تکرار و تمرین، بدون فکر کردن به طور کارامدی این قواعد را رعایت می کنند.


آموزش برنامه نویسی سی شارپ، آموزش ASP.NET MVC، آموزش طراحی صفحات وب، آموزش برنامه نویسی موبایل (Xamarin) - از مقدماتی تا پیشرفته در سپیدآریا