یکی از مهمترین مراحل در چرخه توسعه نرم افزار، تست نرم افزار است. انجام مرحله تست نرم افزار به صورت دقیق و اصولی باعث صرفهجویی در زمان و هزینه ساخت نرم افزار میشود. فرایند تست و ارزیابی نرم افزار چالش پیچیدهای است و باید اصول و روشهای آن را با دقت فرا گرفت. در این مطلب سعی شده است به طور جامع به این پرسش پاسخ داده شود که تست نرم افزار چیست و چرا اهمیت بسیار بالایی دارد، چگونه این تستها انجام میشوند، روشهای تست چگونه کار میکنند.
نرم افزار چیست ؟
نرم افزار مجموعهای از دستورالعملها و برنامهها است که به واسطه آنها کار و وظایف مشخصی را میتوان به وسیله کامپیوتر انجام داد. نرم افزار را به دو دسته اصلی یعنی نرم افزار سیستمی و نرم افزار کاربردی تقسیم کرد. نرم افزار سیستمی شامل سیستم عامل و تمام ابزارهایی است که به کار کردن رایانه کمک میکنند. نرم افزار کاربردی شامل برنامههایی است که وظایف خاصی مانند پردازش کلمه (مثل مایکروسافت Word) یا بازی کردن را انجام میدهند. انواع دیگر نرم افزارها شامل میان افزار، نرم افزار درایور و نرم افزارهای برنامه نویسی میشوند.
تست چیست ؟
تست عبارت است از معیاری بدون قصد و قرض از میزانی که سیستم به اهداف تعیین شده دست مییابد، سیستم میتواند حتی فراتر از سطح انتظار پیشروی کند یا در رسیدن به مقصود ناتوان شود. تست، فرایند تعیین میزان موثر بودن چیزی است که طی برخی آزمون و خطاها، مزایا و معایب یک برنامه را مشخص میکند. مرحله تست معمولاً در پایان فرایند توسعه انجام میشود و معیارهای پذیرش پروژه و شروع دوره پشتیبانی از سیستم را تعیین میکند.
تست نرم افزار چیست ؟
تست نرم افزار از بررسی محصولات و رفتار نرم افزار تحت آزمایش از طریق اعتبارسنجی و تایید تشکیل شده است. همچنین میتواند دیدی هدفدار و مستقل از نرمافزار ارائه دهد تا به کسب و کارها اجازه دهد ریسک اجرای نرم افزار را درک کنند. تست نرم افزار فرایندی است برای اطمینان از اینکه نرم افزار یا برنامه شما همانطور که باید، کار میکند. روشهای مختلفی وجود دارند که میتوان برای آزمایش کدهای خود از آنها استفاده کرد و هر روش تست، نیازمندیهای متفاوتی دارد.
به عنوان مثال، تست یونیت شامل نوشتن موارد آزمایشی برای اطمینان از کارکرد کد همانطور که باید باشد، و آزمایش بتا شامل آزمایش نسخه پیشنمایش نرم افزار یا برنامه است تا اطمینان حاصل شود کاربران میتوانند از محصول استفاده کنند. تست نرم افزار جز جدانشدنی فرایند ساخت نرم افزارهای باکیفیت است، نرم افزاری که دقیقاً مطابق انتظار عمل میکند. این تست همچنین به بهبود بهرهوری و عملکرد کمک میکند. تست بخش مهمی از چرخه حیات توسعه نرم افزار (SDLC) است. از دیگر مزایای تست نرم افزار میتوان به جلوگیری از اشکالات، کاهش هزینه و کاهش زمان توسعه اشاره کرد.
چرا تست نرم افزار مهم است ؟
انسانها در فرایند تولید نرم افزار اشتباه میکنند و این باعث ایجاد نقصی در برنامه میشود. این نقص همچنین باعث میشود نرم افزار کاری را که نیاز است انجام دهد به درستی انجام ندهد، یا کاری متفاوت از نیاز برنامه انجام دهد. این وضعیت عملکرد سیستم را دچار اختلال میکند. اگر تست نرم افزار با دقت انجام شود، از تبدیل شدن باگها به نقصهای بزرگ جلوگیری خواهد شد. علاوه بر این، تست نرم افزار کیفیت نیازمندیهای کاربردی و غیرکاربردی نرم افزار را تعیین میکند، همچنین تعداد و اهمیت خطاهای پیدا شده از طریق تست نرم افزار، اعتبار آن سیستم را مشخص میکند.
یک تست نرم افزار با طراحی خوب و موفق میتواند باعث کاهش برداشت منفی و دارای ریسک از نرم افزار شود. هنگامی که خطاهای پیدا شده در مرحله تست اصلاح میشوند، درمییابیم که برنامه به نرم افزاری با کیفیت بالاتر تبدیل شده است. با این حال فرایند توسعه نرم افزار را میتوان با تجربههای بدست آمده در طول جریان آزمون بهبود بخشید و به روند توسعه باتوجه به خطاها رسیدگی کرد.
از دلایل لزوم جدی گرفتن مرحله تست نرم افزار، میتوان به فعالیتهای مربوط به تضمین کیفیت اشاره کرد که بخشی از فرایند توسعه نرم افزار به حساب میآیند. ایده رایج به این صورت است که تست نرم افزار فقط و فقط فراهمسازی تعدادی تست یا آزمایش به حساب میآید. اجرای تست بخش مهمی از فرایند تست نرم افزار محسوب میشود، اما همه کار تست نرم افزار فقط اجرای تستها نیست. علاوه بر اجرا، اقدامات مرتبطی را باید قبل و بعد از اجرای تست نرم افزار انجام داد. این کارها و وظایف شامل موارد زیر هستند.
- برنامه ریزی و کنترل
- شرایط آزمون
- آماده سازی و اجرای سناریوهای آزمون
- بررسی نتایج
- ارزیابی شاخصهای خروجی
- گزارش فرایند آزمون و سیستم تست شده
- تکمیل آزمون
علاوه بر این، نیازمندیها، مستندات تجزیه و تحلیل، بررسی کد منبع و تجزیه و تحلیل استاتیک، مانند عملیات، بخشی از این آزمون هستند. آزمون باید از همان ابتدای فرایند توسعه نرم افزار درنظر گرفته و اجرا شود. به این ترتیب، از تبدیل شدن ایرادات کوچک به نقصهای بزرگ و رخ دادن آنها جلوگیری میشود.
همچنین در ریسمونک بخوانید:
چگونه از یک محصول جدید تعریف کنیم ؟
درس عبرتی از اهمیت تست نرم افزار
نرم افزارها بخشی جدانشدنی از زندگی روزمره ما (تلفن همراه، تلوزیون، اتومبیل، و سایر موارد) هستند. البته هنگام استفاده از آنها با چالشهایی مواجه میشویم. نرم افزارهای بسیاری هستند که خطاهای زیادی دارند و انتظارات ما را برآورده نمیکنند. گاهی این خطاها به ابعاد بزرگتری نیز میرسند. بنابراین پیادهسازی موثر و صحیح فرایند تست نرم افزار مسئله مهمی است. در این راستا و برای تثبیت این موضوع، میخواهیم داستان خطای نرم افزاری Threac-۲۵ را تعریف کنیم. یکی از بزرگترین خطاهای نرم افزاری که نمیتوان آن را فراموش کرد.
در سال ۱۹۸۶ شخصی به نام Ray Cox برای پرتو درمانی شانه خود به کلینیک رفت. تکنسین بخش بهطور تصادفی کلید «X» را فشار میدهد که باعث ارسال اشعه ایکس میشود. او فورا متوجه خطای خود شده و با یادآوری اینکه باید یک پرتو الکترونی به جای پرتو ایکس بفرستد، «X» را پاک کرده و در عوض «e» را چاپ میکند، با فشار دادن دکمه «Enter» ماشین روشن میشود. کامپیوتر یک سیگنال «پرتو آماده» منتشر میکند و تکنسین دکمه «b» را فشار میدهد. سپس کامپیوتر یک پیام خطا نمایش میدهد. براساس پیام نمایان شده، پرتو قابل انتقال نبوده است.
تکنسین فرایند را با بستن پیغام خطا تکرار میکند و یکبار دیگر اشعه درمانی را برای Ray Cox ارسال میکند. پیام خطا دوباره ظاهر میشود. در همین لحظه، ری دردی را در پشت خود احساس میکند و متوجه میشود که این درد با درمان عادی او بسیار متفاوت است. پس از سومین بار، او از تکنسین می خواهد که عملیات را متوقف و دستگاه را ترک کند.
در واقع، هر بار که Ray Cox در معرض اشعه قرار میگرفت، میزان اشعه اعمال شده بسیار زیاد بود. پرتوهای که از دستگاه خارج میشد ۲۵ هزار rads بود (حداکثر دز تنظیمی ۲۵ میلیون الکترون ولت و بیش از ۱۲۵ برابر از حالت معمول). پس از آن اتفاق، سلامتی Ray Cox رو به وخامت رفت و چهار ماه بعد بر اثر عوارض شدید درگذشت. داستان کامل Threac-۲۵ را میتوان از [+] مطالعه کرد.
چنین خطاهای ناشی از عملکرد نادرست نرم افزار میتوانند منجر به هدر رفتن هزینه، زمان یا اعتماد کاربران شوند. بدتر از آن مانند مثال بالا میتواند منجر به از دست دادن جان افراد شود. برای جلوگیری از این شرایط، باید نرم افزار خود را تست و با کمترین خطا آن را راهاندازی کنیم.
چرخه حیات تست نرم افزار چیست ؟
«چرخه حیات تست نرم افزار» (Software Testing Life Cycle) که با مخفف STLC شناخته میشود، مراحل مختلف فرایند تست نرم افزار به حساب میآید. با رعایت چرخه حیات تست نرم افزار اطمینان حاصل میشود که نرم افزار ساخته شده کیفیت و کارایی لازم را دارد و تمام نیازمندیهای تعیین شده را پوشش میدهد. مراحل مختلف درگیر در چرخه حیات تست نرم افزار به شرح زیر است.
- «جمعآوری نیازمندیها» (Requirement Analysis): در اینجا نیازمندیهای قابل توسعه نرم افزار مورد بحث قرار میگیرند، برای مثال میتوان به پارامترهایی مانند کیفیت، نیازهای کاربران و تخصیص منابع اشاره کرد.
- «برنامهریزی آزمون» (Test Planning): در این مرحله از STLC، تمام موارد آزمایش، برنامهریزی میشوند و منابع براساس پتانسیل موارد آزمایش، اختصاص داده میشوند.
- «توسعه موارد آزمون» (Test Case Development): این مرحله مربوط به ساخت موارد آزمایش براساس برنامهریزی انجام شده در مرحله قبل است و توسط تیم تضمین کیفیت تایید میشود.
- «تنظیمات محیط آزمایش» (Test Environment Setup): محیط آزمایش در این مرحله از STLC تنظیم میشوند، اما این مرحله مستقل از باقی فازها است و میتواند در هر مرحله از چرخه حیات تست نرم افزار انجام شود.
- «اجرای تست» (Test Execution): در مرحله اجرا، تمامی موارد تستهای آماده شده اجرا و نتایج آن یادداشت میشود.
- «خاتمه چرخه آزمون» (Test Cycle Closure): در آخرین مرحله چرخه حیات تست نرم افزار، تمام نتایج جمعآوری شده تجزیه و تحلیل و مستندسازی میشوند.
چه زمانی تست نرم افزار را شروع کنیم ؟
بر اساس انتخاب مدلهای مختلف چرخه حیات توسعه نرم افزار برای پروژه، فعالیتهای آزمایش را میتوان در مراحل مختلف چرخه حیات نرم افزار انجام داد. یک افسانه نرم افزاری وجود دارد که آزمون باید تنها هنگامی نوشته شود که بخشی از نرم افزار توسعه داده شده باشد، این در حالی است که تست میتواند حتی پیش از نوشتن یک خط کد نیز شروع شود. همچنین میتوان به موازات مرحله توسعه، تست را نیز پیش برد. به عنوان مثال در یکی از روشهای تست نرم افزار، فعالیتهای توسعه و آزمایش با یکدیگر ادغام میشوند.
فاز تست | فاز توسعه |
ایجاد آزمون پذیرش | طراحی نیازمندیها |
ایجاد موارد تست عملکردی | مشخصات عملکردی |
ایجاد موارد آزمون هر واحد | پیاده سازی |
اجرای موارد تست | تکمیل کدها |
چه موقع باید تست نرم افزار را متوقف کنیم ؟
پاسخ دادن به سؤالهای «چه موقع باید تست را متوقف کنیم؟» یا «چقدر تست کافی است؟» بسیار دشوار بوده زیرا هرگز نمیتوان مطمئن شد که سیستم ۱۰۰ درصد بدون اشکال خواهد بود. اما با این حال برخی از نشانگرها وجود دارند که به ما در تعیین مرحله توقف در آزمایشهای چرخه توسعه نرم افزار کمک میکنند.
- درصد قبولی کافی: بسته به نوع سیستم، با دستیابی به درصد قبولی از پیش تعیینشده، میتوان تست را متوقف کرد.
- پس از اجرای موفقیتآمیز نمونه تستها: زمانیکه یک چرخه کامل از موارد آزمون اجرا شود و بعد از رفع آخرین خطای شناخته شده، فاز آزمایش را میتوان متوقف کرد.
- در زمان مهلت تحویل: فرایند تست میتواند پس از فرا رسیدن مهلت تحویل کار، در صورت نبود هیچ مشکل با اولویت بالا در سیستم، متوقف شود.
- میانگین زمان بین شکست: شاخص MTBF یا همان «میانگین زمان بین شکست» (Mean Time Between Failure) فاصله زمانی بین دو عدم موفقیت است. براساس تصمیمات دستاندرکاران مختلف، اگر MTBF بسیار بزرگ باشد، میتوان آزمون را متوقف کرد.
انواع تست نرم افزار چیست ؟
یادگیری تست نرم افزار تنها با مطالعه تعریف اولیه آن کافی نیست، ما باید دانش عمیقتری از مفاهیم مرتبط و روشهای تست داشته باشیم. نرم افزار باید به گونهای توسعه یابد که تمام موارد آزمایشی واقعی و سناریوهای احتمالی را پوشش دهد. بر این اساس زمونهای نرم افزار به چندین دسته تقسیم میشوند. در اینجا دو نوع تست عمده نرم افزار وجود دارد، تست عملکردی و غیرعملکردی که در ادامه به شرح آنها میپردازیم.
تست عملکردی (Functional)
تست عملکردی یک روش تست نرم افزاری است که سیستم را برای برآورده کردن نیازمندیهای مشتری ارزیابی میکند. این نوع آزمون، با هدف آزمایش هر عملکرد نرم افزار با ارائه ورودی مجاز و اطمینان از درست بودن خروجی انجام میپذیرد. برای مثال، یک «مورد تست» (Test Case) برای آزمایش قابلیت ایجاد کاربر مینویسیم. این تست کیس، ورودی درستی را به سیستم ارائه میدهد و سپس اطمینان حاصل میکند که خروجی هم درست باشد؛ خروجی درست در اینجا اعلان موفقیتآمیز بودن ایجاد کاربر جدید است. تست عملکردی با تقلید سناریوهای واقعی، بررسی میکند تا همهچیز براساس پیشنیازهای قابل اجرا به درستی عمل کند.
تست غیرعملکردی (Non-Functional)
تست غیرعملکردی روش دیگری برای تست نرم افزار است که برای ارزیابی تجربههای کاربر نهایی مانند سنجش کارایی و قابلیت اعتماد تحت بار زیاد مورد استفاده قرار میگیرد. این تست میتواند تجربه یک کاربر نهایی را محک زند. هنگامی که کد شما در آزمونهای غیرعملکردی موفق نمیشود، ممکن است مشکلی ایجاد نکند که مورد توجه کاربر قرار گیرد، اما میتواند مشکلی را در سیستم نشانهگذاری کند. تست غیرعملکردی فقط مربوط به آن است تا بدانید که سیستم چگونه در مواجهه با حجم بالای ترافیک، عمل خواهد کرد. در این مطلب، تمرکز موارد مطرح شده، روی تست نرم افزار عملکردی خواهد بود.
انواع مختلف تست نرم افزار عملکردی
انواع مختلفی از تست نرم افزار عملکردی وجود دارد که هر یک از آنها هدف خاصی را دنبال میکنند. برخی از تستها حین توسعه نرم افزار و برخی پس از اتمام کل روند پروژه انجام میشوند. اکنون هر یک از آنها را به صورت اجمالی بررسی خواهیم کرد.
تست واحد Unit Testing
تست یونیت نوعی تست نرم افزار است که نحوه عملکرد هر واحد نرم افزاری را ارزیابی میکند و بررسی میکند که آیا آن قطعه خاص کد درست کار میکند یا خیر. هر واحد، کوچکترین مؤلفه قابل تست یک برنامه به حساب میآید. هدف این است که ارزیابی کنیم هر واحد از کد نرم افزاری همانطور که انتظار میرود عمل میکند. شما تست یونیت را در مرحله توسعه انجام خواهید داد. توسعهدهندگان این تستها را همگام با توسعه، ایجاد میکنند. تستهای یونیت امکان بررسی اشکالات احتمالی در کد را به صورت جداگانه فراهم و به اصلاح آنها کمک میکنند. و به اصلاح آنها کمک میکنند. یک واحد میتواند یک تابع، متد، ماژول یا شی باشد.
تصویر بالا قطعه کدی از تست یونیت در زبان برنامه نویسی پایتون را نشان میدهد.
در تصویر بالا قطعه کدی از تست یونیت در زبان برنامه نویسی جاوا را مشاهده میکنیم.
تست یکپارچگی Integration Testing چیست؟
تست یکپارچگی، نوعی تست نرم افزار است که هدف از آن بررسی نحوه عملکرد اجزا و توابع نرم افزاری در کنار یکدیگر است. این دومین مرحله از فرایند تست نرم افزار است که پس از تست یونیت انجام میشود. در این نوع تست، یونیتها یا اجزای نرم افزاری جداگانه در گروهها تست میشوند. این روش تست عمدتاً بر بررسی نقص در تعامل بین اجزای یکپارچه و یونیتها متمرکز است.
تست سیستم System Testing
تست سیستم شامل فرایند تست نرم افزار یکپارچه بوده و هدف آن، ارزیابی انطباق سیستم با پیشنیازهای مشخص است. در تست سیستم، تیم کنترل کیفیت چگونگی کارکرد هر مؤلفه برنامه یا نرم افزار را در یک محیط کامل و یکپارچه ارزیابی میکند.
تست پذیرش Acceptance Testing
تست پذیرش روشی در تست نرم افزار است که در آن، یک سیستم برای پذیرش، آزموده یا بررسی میشود. این آزمون، تطبیق سیستم را با نیازمندیهای تجاری، ارزیابی و بررسی میکند که آیا برای تحویل قابل قبول است یا خیر. این تست، تعیین میکند که آیا سیستم معیارهای استاندارد تجاری را برآورده میکند یا اینکه کاربران یا مشتریان قادر به پذیرش آن هستند یا خیر. تست پذیرش آخرین مرحله تست نرم افزار است که پس از تست سیستم و پیش از ایجاد سیستم برای مصارف عمومی انجام میشود.
تست رگرسیون Regression Testing
تست رگرسیون تضمین میکند که یک جز پس از افزودن اجزای دیگر در برنامه، وظیفه خود را همچنان انجام میدهد. شما هنگام تغییرات در برنامه، مانند اضافه کردن یک ماژول جدید به آن، میبایست تست رگرسیون را انجام دهید. این نوع تست نشاندهنده تست کامل موارد تستهای اجزای از پیش امتحان شده سیستم است که مجدداً اجرا میشود تا اطمینان حاصل شود که عملکردهای فعلی همچنان به درستی کار میکنند.
تست آلفا و تست بتا
تست آلفا که به عنوان تست اعتبارسنجی اولیه نیز شناخته میشود، وجهی از تست پذیرش است که پیش از آن که محصول به مصرفکنندگان یا کاربران ارائه شود، انجام میپذیرد. تستکنندگان QA (تضمین کیفیت) معمولاً این وظیفه را انجام میدهند. تست آلفا توسط تیم QA در داخل مجموعه انجام میشود. این در حالیست که تست بتا که به عنوان مرحله دوم تست اعتبارسنجی شناخته میشود، در خارج مجموعه انجام میپذیرد، به این معنی که کاربران عادی این نوع تست را انجام میدهند. کدها یا نرم افزار در این مرحله از آزمون برای تعداد محدودی از کاربران، به منظور آزمایش در یک سناریوی دنیای واقعی منتشر میشود.
۸ روش کلیدی تست نرم افزار
اهمیت و نحوه تست نرم افزار چیست؟ به همان اندازهای است که شما میخواهید برای آزمون از آن استفاده کنید. روشهای مختلفی برای تست نرم افزار وجود دارد که میتوان هر کدام را اتخاد کرد. هر یک از این روشها باتوجه به نوع نرم افزار و برنامهای که قرار است مورد آزمایش قرار گیرد، میتواند استفاده شود.
- «جعبه سیاه» (Black Box): آزمون جعبه سیاه بدون اطلاع از محتویات داخل نرم افزار انجام میشود و رفتار با آن به گونهای است که گویا یک جعبه سیاه در مقابل شما قرار گرفته است و نمیتوان داخل آن را دید. آزمایشکننده ممکن است بداند نرم افزار باید چه کاری انجام دهد، اما نه اینکه چگونه انجام میشود.
- «جعبه سفید» (White Box): آزمایش جعبه سفید با آگاهی از نحوه عملکرد نرم افزار انجام میشود. همچنین به عنوان «جعبه واضح» (Clear Box)، «جعبه شیشهای» (Glass Box)، «جعبه شفاف» (Transparent Box) و «تست ساختاری» (Structural Testing) شناخته میشود. هنگام استفاده از این روش، از چگونگی کارکرد نرم افزار مطلع بوده و طی آزمونهای متعدد، اطمینان از عملکرد برنامه حاصل میشود.
- «اسکریپت شده» (Scripted): در تست «اسکریپتشده» (از پیش آماده | Scripted) گامهای مشخص شده توسط تست کننده دنبال میشوند. این روش تست، به خوبی مستندسازی میشود. مستندسازی شامل یک «تست کیس» و مراحل شفاف تست است. در صورتی که تستها برای برآورده کردن یک نیازمندی خاص استفاده شوند، اغلب آنها را به صورت از پیش آماده یا همان اسکریپت شده حاضر میکنند. این روش هم در تستهای عملکردی و هم غیر عملکردی قابل استفاده است.
- «اکتشافی» (Exploratory): آزمون اکتشافی به آزمونگر این امکان را میدهد تا نرم افزار را بر اساس غریزه خود بررسی کند. این روش آزمایش برای یافتن خطاهای پنهانی یا خطراتی عالی است که در آزمون اسکریپتشده معمولی ممکن است فراموش شده باشد.
- «دستی» (Manual): تست دستی به معنای آزمایش دستی یک برنامه کاربردی توسط انسان است. یک متخصص تضمین کیفیت «آزمونگر» که آزمایشهای دستی را انجام میدهد، با پیروی از شرایط نوشته شده در موارد آزمایشی، اطمینان حاصل میکند که یک برنامه به درستی کار میکند. آزمایشکننده ممکن است طبق یک اسکریپت تستی یا مراحل آزمایشی این روش را پیش ببرد، یا آزمون اکتشافی خود را به صورت دستی انجام دهد. تست دستی زمانی مفید است که تست خودکار امکان پذیر نباشد.
- «خودکار» (Automated): آزمون خودکار توسط اسکریپتها یا ابزارها انجام میشود. آزمایشکننده ممکن است ابزار یا اسکریپت را راهاندازی کند، اما آزمایش به صورت خودکار مراحل خود را طی میکند. در تست خودکار، تستهای از پیش تعیین شدهای وجود دارد که به صورت خودکار اجرا میشوند. این آزمایشها برای مقایسه نتایج واقعی با نتایج مورد انتظار انجام میشوند. تستهای خودکار به تعیین اینکه آیا برنامه مطابق انتظار عمل میکند یا خیر کمک میکنند.
- «آبشاری» (Waterfall): آزمایش آبشاری پس از تکمیل مرحله توسعه انجام میشود. آزمون به تنهایی یک مرحله است. هنگامی که یک طرح آزمایشی در تست آبشاری تنظیم میشود، معمولاً تغییر نمیکند.
- «چابک» (Agile): تست چابک به طور مداوم توسط توسعهدهندگان سازنده نرم افزار انجام میشود و معمولا در دورههای سریع و کوتاه مدت گرفته میشوند. برنامههای تست چابک میتوانند با تکامل خود باعث تکامل نرم افزار شوند.
اصول تست نرم افزار چیست ؟
همه چیز در حوزه فناوری باید طبق اصول مشخصی پیشرفت کند و شامل دستورالعملهایی برای توسعه نرم افزاری بهتر و همچنین جلوگیری از خطا هستند. در اینجا برخی از اصول تست نرم افزار آورده شده است که باید هنگام نوشتن تست برای کد خود دنبال کنید.
تست نرم افزار با هدف نشان دادن وجود نقص، نه عدم وجود آن
هدف از تست نرم افزار نشاندادن، ایرادهای نرم افزار است. این باعث کاهش نقصها و خطاها خواهد شد. تست نرم افزار تضمین میکند که ایرادها برای توسعهدهنده قابل مشاهده هستند، اما نرم افزار بدون نقص را تضمین نخواهد کرد. حتی اجرای انواع مختلف تست نیز نمیتواند رسیدن به نرم افزاری بدون خطا را تضمین کند. تست فقط میتواند تعداد خطاها را کاهش دهد.
عدم امکان پذیر بودن تست جامع
تست جامع فرایند تست نرم افزار برای همه ورودیهای معتبر و نامعتبر و پیششرطها است. این روش تست واقعبینانه نیست، زیرا اگر واقعاً سعی کنید هر وجه را در نرم افزار خود تست کنید، زمان و تلاش زیادی مورد نیاز خواهد بود و این کار عملی نیست.
انجام تست های اولیه
تست نرم افزار در مرحلهٔ اولیه به جلوگیری از اشکالات یا خطاهای جزئی کمک خواهد کرد. وقتی بتوانید خطاها را در مرحله اولیه چرخهٔ توسعه نرم افزار مشاهده کنید، بسیار کمهزینهتر خواهد بود. در حالت کلی، بهتر است تست نرم افزار را از ابتدای پروژه شروع کنید.
خوشه بندی عیوب
خوشهبندی نقصها به شرایطی اشاره دارد که بیشتر مشکلاتی که پیدا میکنید فقط در چند قسمت از برنامه یا نرم افزار رخ میدهند. اگر بتوانید ماژولها یا مناطقی را که این ایرادها در آن رخ میدهند شناسایی کنید، میتوانید بیشتر تستهای خود را روی آنها متمرکز کنید. هنگام تست کد، اصل «پارِتو» (Pareto) را در خاطر داشته باشید: ۸۰ درصد از ایرادهای نرم افزار در ۲۰ درصد از ماژولها به وجود میآید.
دوری کردن از پارادوکس آفتکش
این اصل مبتنی بر یک تئوری است: «هرچه بیشتر از سموم دفع آفات بر روی محصول استفاده کنید، در نهایت آفات، ایمنتر خواهند شد و سموم دفع آفات نیز تأثیری نخواهند داشت.» هنگامی که نمونههای آزمون خاص را بارها و بارها تکرار میکنید ، اشکالات جدید را کمتر مشاهده خواهید کرد. بنابراین برای یافتن اشکالات جدید، موارد آژمون خود را بهروز کنید و پس از اضافه کردن موارد تست جدید، آنها را اجرا کنید.
وابسته بودن تست به زیرساخت
تست وابسته به زیرساخت است، به این معنی که شما باید نرم افزار خود را براساس نیازمندیها، کارکردها و پیشنیازهای آن آزمایش کنید. رویکرد تست شما باید به آنچه نرم افزار شما انجام میدهد بستگی داشته باشد. هر نرم افزاری به نوع یا روش یکسانی از تست نیاز ندارد، زیرا هر برنامه دارای ویژگیهای منحصر به فرد خود است.
به عنوان مثال، هنگام تست یک وبسایت تجارت الکترونیکی، شما روی عملکرد آن برای نمایش محصولات تمرکز خواهید کرد، بنابراین شما چگونگی نمایش محصولات را به کاربران نهایی ارزیابی خواهید کرد. همچنین هنگام برخورد با API، شما روی پاسخ API، هنگام فراخوانی یک (نقطه انتهایی) «Endpoint»، تمرکز خواهید کرد.
به طور واضح شما از نمونه تستهای یکسانی برای هر دو مورد بالا استفاده نخواهید کرد. این به این معنی است که تست وابسته به زیرساخت و بستر مناسب خود است.
باور اشتباه به عدم وجود خطا
اگر نرم افزاری را ایجاد کنید که ۹۹ درصد بدون اشکال باشد، ولی نیازهای کاربر را برآورده نکند، برای کاربران نهایی قابل استفاده نخواهد بود. نرم افزار ۹۹ درصد بدون اشکال شما میبایست، نیازهای کاربران را برآورده کند. نوشتن نمونههای تست برای یافتن خطاها در کد بسیار مهم است. البته که باید نرم افزار خود را برای کاربران نهایی مورد آزمایش قرار دهید (با آنها و چگونگی استفاده آنها). بهترین راه برای انجام این کار، انجام تست بتا است.
نکات مهم تست نرم افزار
به منظور اجرای یک فرایند تست موثر، نیاز است برخی موارد رعایت شوند تا خروجی آزمون بهترین نتیجه ممکن باشد. به چند نکته مهم از جمله کیفیت، رویکرد، گستره، روش رفع اشکال، سهولت، تعامل، مستندات، مدیریت زمان و ارزیابی در ادامه اشاره میکنیم.
کیفیت Quality
آزمونهای نرم افزاری برای ارائه یک برنامه کاربردی باکیفیت به مشتری انجام میشوند. البته کیفیت در اصل یک مفهوم نسبی است، در واقع همه آن مواردی را دارای کیفیت مطلوب در نظر میگیریم که باعث خشنودی کاربران در هنگام استفاده از برنامه شوند.
رویکرد Approach
برنامهها میتوانند به روشهای مختلفی آزمایش شوند. بسیار مهم است که قبل از آزمایش، نوع آزمون را مشخص کنیم. در برخی موارد، آزمون برنامهریزی شده ضروری است و در موارد دیگر ممکن است از آزمونهای تکموردی به طور تصادفی استفاده کنیم. به همین ترتیب، ما برنامههای تلفن همراه را برخلاف برنامههای وب، مورد آزمایش قرار میدهیم. رویکرد ما بسته به برنامه، زمان و پروژهای که در حال آزمایش است، امکان دارد متفاوت باشد.
گستره Scope
هرچه بیشتر ویژگیهای یک برنامه کاربردی را آزمایش کنیم، برنامه قدرتمندتر و مطلوبتر میشود. در این مرحله، تعیین گستره اهداف آزمایشها همراه با استدلال مربوط به آن، ضروری است.
روش رفع اشکال Error Handling
خروجی اصلی یک آزمون عموماً به عنوان ارائه گزارشی حاوی خطاها قابل مشاهده است. اما نکته اصلی اینجاست که اطمینان حاصل شود تا خطاهای یافت شده توسط اشخاص مرتبط رسیدگی شوند. یعنی سعی کنیم خطای شناسایی شده اما حل نشده نداشته باشیم.
سهولت Simplicity
فراهم کردن کاربردی که کاربر بتواند به سادهترین شکل با آن کار کند، مشکلی در درک و فهم کاربرد ایجاد شده نداشته باشد و تنها دغدغه او باید امتحان کردن برنامه باشد. سهولت و سادگی در کاربرد بوجود آمده، باید در تست نرم افزار گنجانده شده باشد.
تعامل و همکاری Collaboration
اگرچه تست نرم افزار عموما به عنوان آخرین فعالیت در نظر گرفته میشود، اما در واقع فرایندی تعاملی است. این مسئله در آمادهسازی نیامندیها، مرحله کدگذاری، و پذیرش کاربران قابل مشاهده است. خطایی که در یک مرحله قابل تشخیص نباشد، در مرحله بعدی هزینه بیشتری خواهد داشت. بنابراین، دانستن نیازمندی، عملکرد یا دلیل طراحی بسیار ارزشمند است. در این راستا، در ارتباط بودن دستاندرکاران درگیر در بخشهای فرایند تولید برنامه میتواند درک مشکلات حاصل از آزمونها را تسهیل کند.
مستندسازی Documentation
مستندسازی نقش بسیار مهمی در فرایند تست نرم افزار دارد.
- مستندسازی سناریوهای آزمایش
- ایجاد ماتریسی با قابلیت پیگیری
- ساخت چک لیست
- گرفتن اسکرین شات
- ضبط کردن ویدیو
و سایر مواردی که در لیست ممکن است ادامه داشته باشد. این نوع از مستندسازی در تکرار آزمایش یا رفع خطاها بسیار سودمند هستند. البته باید دقت کافی به خرج داد، مقدار متناسب مستندسازی از پروژهای به پروژه دیگر، از مشتری به مشتری و از برنامهای به برنامه دیگر متفاوت است.
مدیریت زمان Time Management
هزینه ازبین بردن خطاهای موجود در محیط بیرونی و خارج از تست، به طور طبیعی بالاتر از رفع مشکلات موجود در محیطهای آزمایشی یا توسعه خواهد بود. هرچه زودتر بتوان به خطاها پی برد و آنها را برطرف کرد، موفقیت بیشتری حاصل میشود. بدیهی است که در این مرحله، در مدیریت زمان با مشکل مواجه خواهیم شد. به نظر میرسد اگر زمان کارهای زیر را به خوبی مدیریت کنیم، مدیریت زمان کل فعالیت آزمون راحت تر خواهد بود.
- آمادهسازی دادههای آزمون
- نظارت بر وضعیت سناریوهای آزمون
- نظارت بر خطاها
- برطرفسازی خطاها
- ساخت و اصلاح مشخصههای اطلاعات آزمایشهای برگشتی
ارزیابی Measurement
مانند بسیاری از فعالیتها، ارزیابی نیز در سیر آزمون بسیار مهم است. فرایند آزمایش باید به طور مداوم بهبود یابد و بهتر است آن را در گوشهای از ذهن خود به خاطر بسپاریم.
لزوم وجود تست نرم افزار در فرایند توسعه
با توجه به روند فعلی، به دلیل تغییر مداوم و پیشرفت در دیجیتالی شدن امور، زندگی ما در همه زمینهها در حال تغییر است. در نتیجه نحوه کار ما نیز تغییر میکند. به عنوان مثال، ما به بانک خود بهصورت آنلاین دسترسی پیدا میکنیم، بهصورت آنلاین خرید میکنیم، غذا را بهصورت آنلاین تهیه میکنیم و سایر موادی که در زندگی دیجیتالی امروزه انجام میشود. ما به نرم افزارها و سیستمها وابسته هستیم.
اگر هر یک از این سیستمها معیوب باشند، چه خواهد شد؟ همه ما میدانیم که یک اشکال کوچک، ضرر مالی و اعتباری قابل توجهی برای کسب و کارها خواهد داشت. برای ارائه یک محصول باکیفیت، ما باید در فرایند توسعه، نرم افزار را تست کنیم. برخی از دلایلی که تست نرم افزار به بخشی بسیار مهم و جداییناپذیر از زمینه فناوری اطلاعات تبدیل شده است و از مزیتهای این آزمون به شمار میرود؛ مقرون به صرفه بودن، رضایت مشتری، امنیت، کیفیت محصول است که در ادامه به بررسی بیشتر آنها میپردازیم.
- مقرون به صرفه: در حقیقت، نقص طراحی هرگز نمیتواند به طور کامل برای هر سیستم پیچیدهای رفع شود. به این دلیل نیست که توسعهدهندگان بیدقت هستند، بلکه به این دلیل است که پیچیدگی یک سیستم قابل توجه است. اگر مشکلات طراحی کشف نشده باشند، ردیابی ایرادات و اصلاح آن دشوارتر خواهد شد. همچنین رفع آن نیز پرهزینهتر میشود. برخی اوقات، رفع یک اشکال، ممکن است منجر به ایجاد اشکالی دیگر در برخی از ماژولها شود. اگر اشکالات در مراحل اولیه توسعه شناسایی شوند، رفع آنها بسیار کمهزینهتر خواهد بود. به همین دلیل، مهم است که در مراحل اولیه چرخه توسعه نرم افزار، ایرادها را پیدا کنیم. یکی از مزایای آزمون، مقرون به صرفه بودن آن است. بهتر است آزمون را زودتر شروع کنیم و آن را در هر مرحله از چرخه توسعه نرم افزار انجام دهیم. آزمون منظم لازم است تا اطمینان حاصل شود که این برنامه، طبق نیازمندی اولیه، توسعه یافته است.
- رضایت مشتری: در هر شغلی، هدف نهایی، جلب رضایت مشتری است. بله، رضایت مشتری بسیار مهم است. تست نرم افزار تجربه کاربر یک برنامه را بهبود میبخشد و موجب رضایت مشتری خواهد شد. رضایت مشتری به معنای درآمد بیشتر برای یک کسب و کار است.
- امنیت: این احتمالاً حساسترین و آسیبپذیرترین قسمت آزمون است. تست (تست نفوذ و تست امنیتی) به امنیت محصول کمک خواهد کرد. هکرها دسترسی غیرمجاز را به دادهها به دست میآورند؛ اطلاعات کاربران را سرقت کرده و از آن برای منافع خود استفاده میکنند. اگر محصول شما امن نباشد، کاربران محصول شما را ترجیح نخواهند داد. کاربران همواره به دنبال محصولات قابل اعتماد هستند. تست به از بین بردن آسیبپذیری در محصول کمک خواهد کرد.
- کیفیت محصول: تست نرم افزار هنری است که به ارائه یک محصول با کیفیت به مشتریان، طبق پیشنیازها در اسناد مشخصات و همچنین تقویت اعتبار کسب و کار کمک خواهد کرد. به همین دلایل، تست نرم افزار به بخشی بسیار مهم و یکپارچه از فرایند توسعه نرم افزار تبدیل شده است.
جمع بندی
در این مطلب دانستیم که تست نرم افزار چیست ، درباره انواع و روشهای آن صحبت کردیم و متوجه شدیم چرا تست و آزمایش نرم افزارها امری ضروری است. حال در انتهای این مطلب به عنوان جمعبندی میتوان گفت که تست نرم افزار بخش حیاتی از مراحل توسعه است و میتواند کل تیم درگیر پروژه را از مشکلات زیادی نجات دهد. در نهایت ایجاد یک محصول قابل استفاده و بدون اشکالی که کاربران از آن لذت میبرند و به دیگران توصیه میکنند، بسیار عالی بوده و هدف نهایی هر تیم موفقی است.