در این پست از وبسایت پرووید در رابطه با انواع سطوح مختلف در تست نرم افزار صحبت خواهیم کرد.

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

تست عملیاتی (Functional Testing)

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

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

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

تست واحد (Unit Testing)

این نوع از تست توسط برنامه نویس اجرا می شود و قبل از اینکه نرم افزار به طور رسمی تحویل تیم تست کننده برای اجرای موارد تست داده شود صورت می پذیرد. تست واحد (Unit Test) توسط برنامه نویس بر روی واحدهای کوچک و تکی نرم افزار مثل ماژول ها، متدها و یا تکه های کد انجام می شود. داده های تستی که برنامه نویس برای انجام تست‌های واحد از آنها استفاده می‌کند از داده های تست تیم تضمین کیفیت متفاوت است.

هدف از تست واحد تفکیک کردن قسمت های مختلف نرم افزار و اطمینان حاصل کرن از صحت عملکرد نرم افزار از نظر نیازمندی ها و عملیات است.

محدودیت های تست واحد

تست واحد نمی تواند تمامی اشکالات درون نرم افزار را کشف کند. علاوه بر این ارزیابی کردن تمامی مسیرهای اجرا در یک نرم افزار غیر ممکن است و تست واحد از این موضوع مستثنا نیست.

بدون شک تعداد سناریوها و داده های تستی که یک برنامه نویس برای ارزیابی عملکرد سورس کد از آنها استفاده می‌کند محدودیت دارد و نمی تواند تمامی موارد را شامل شود. با این وجود نوشتن تست های واحد توسط برنامه نویس و رسیدن به سطح مناسبی از پوشش تست می تواند بسیار با ارزش باشد.

تست یکپارچه سازی (Integration Testing)

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

تست های یکپارچه سازی پایین به بالا: این نوع از تست با تست‌ های واحد آغاز می‌شود و پس از آن قسمت ها و ترکیب های سطح بالاتر از نرم افزار شبیه ماژول ها تست می شوند

تست یکپارچه سازی بالا به پایین: در این نوع از تست ابتدا ماژول های سطح بالا و در ادامه ماژول های سطح پایین تست می شوند.

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

تست سیستم (System Testing)

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

دلایل مختلفی بر اهمیت تست سیستم وجود دارد که برخی از آنها عبارت اند از:

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

تست رگرسیون (Regression Testing)

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

برخی از دلایل اهمیت تست های رگرسیون عبارتند از:

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

بسته ی آموزش ویدئویی Automated Testing از ابتدا تا پایان

از شما دعوت می کنیم که از بسته ی آموزش ویدئویی Automated Testing از ابتدا تا پایان دیدن کنید.

تست پذیرش (Acceptance Testing)

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

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

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

تست آلفا (Alpha Testing)

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

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

تست بتا (Beta Testing)

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

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

تست غیر عملیاتی (Non-Functional Testing)

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

در ادامه به بررسی مهمترین و معمول ترین انواع تست های غیر عملیاتی می پردازیم.

بسته ی آموزش ویدئویی Unit Testing برای برنامه نویسان سی شارپ

از شما دعوت می کنیم که از بسته ی آموزش ویدئویی Unit Testing برای برنامه نویسان سی شارپ دیدن کنید.

تست کارآیی (Performance Testing)

این تست اغلب برای کشف گلوگاه ها و مسائل مربوط به کارایی نرم افزار است. بعضی از عواملی که منجر به کاهش کارایی نرم افزار می شوند عبارتند از:

  • تاخیر شبکه (Network delay)
  • پردازش سمت کلاینت (Client-side processing)
  • پردازش تراکنش های دیتابیس (Database transaction processing)
  • تعادل بار بر روی سرورها (Load balancing between servers)
  • رندر کردن داده ها (Data rendering)

تست کارایی به عنوان مهم ترین و اجباری ترین نوع تستها از جنبه های زیر است:

  • سرعت (Speed)
  • ظرفیت (Capacity)
  • پایداری (Stability)
  • مقیاس پذیری (Scalability)

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

تست بار (Load Testing)

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

اغلب ابزارهای مختلفی در انجام تست بار استفاده می شود. نام بعضی از این ابزارها عبارت اند از:

  • Load Runner
  • AppLoader
  • IBM Rational Performance Tester
  • Apache JMeter
  • Silk Performer
  • Visual Studio Load Test

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

تست استرس (Stress Testing)

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

این روش تست برای کشف کردن نقاط شکست نرم افزار انجام می‌شود. تست استرس می تواند توسط سناریوهایی که در ادامه آورده شده اند انجام می شود:

  • بستن یا راه اندازی مجدد کردن پورت های شبکه به طور تصادفی
  • خاموش کردن و یا روشن کردن سرور بانک اطلاعاتی
  • اجرا کردن فرایندهای مختلفی که منابعی از قبیل پردازنده حافظه و غیره را قبضه می‌کند

تست قابلیت استفاده (Usability Testing)

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

تست قابلیت استفاده را اغلب از نقطه‌ نظر پنج عامل مورد بررسی قرار می دهند که عبارتند از:

  • کارآمدی
  • قابلیت استفاده
  • قابلیت یادگیری
  • قابلیت کار کردن با حافظه
  • خطاها و ایمنی
  • رضایت

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

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

  • یادگیری و کار کردن با آن آسان باشد.
  • به یاد آوردن قسمت های مختلف و کلیدی آن آسان باشد.
  • استفاده از آن کارآمد و سریع باشد.
  • استفاده از آن رضایت بخش باشد.
  • فهمیدن آن آسان باشد.

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

تست امنیت (Security Testing)

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

  • یکپارچه سازی
  • هویت شناسی
  • در دسترس بودن
  • مسائل مربوط به مدیریت نشست
  • امنیت داده های نرم افزار
  • اعتبارسنجی ورودی
  • حملات مربوط به دستورات SQL

تست قابلیت جابجایی (Portability Testing)

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

  • انتقال یک نرم افزار نصب شده از یک کامپیوتر به کامپیوتر دیگر
  • ساختن فایل اجرایی برنامه و اقدام به اجرای آن بر روی پلتفرم های مختلف

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

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

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

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *