برنامه نویسی

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

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


چرا تست مهم است: یک داستان سریع

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


1. تست های واحد: پایه و اساس کیفیت

تست های واحد چیست؟

تست های واحد قطعات جداگانه کد – معمولاً توابع یا روشها – را در انزوا بررسی کنید. مانند یک بررسی با کیفیت در هر قسمت قبل از مونتاژ.

چرا تست های واحد را می نویسیم؟

  • گرفتن اشکالات زود هنگام ، نزدیک به جایی که معرفی شده اند.
  • بازپرداخت را ایمن تر و سریعتر کنید.
  • مستندات زندگی را برای رفتار کد خود تهیه کنید.

مثال:
آزمایش a sum(a, b) عملکرد برای ورودی های مختلف و موارد لبه.

# Python example with pytest
from mymath import sum

def test_sum():
    assert sum(2, 3) == 5
    assert sum(-1, 1) == 0
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

بهترین روشها:

  • تست ها را کوچک و متمرکز نگه دارید.
  • از وابستگی های خارجی (مانند بانکهای اطلاعاتی یا API) خودداری کنید.
  • آنها را به طور مکرر اجرا کنید – در واقع در هر تغییر کد.

مشکلات مشترک:

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

ابزارها:

  • پایتون: pytestبا unittest
  • جاوا اسکریپت: Jestبا Mocha

2. تست های ادغام: اطمینان از کار اجزا با هم

تست های ادغام چیست؟

تست های ادغام تأیید می کنند که ماژول ها یا خدمات مختلف در برنامه شما به درستی تعامل دارند. مانند آزمایش لوله کشی و سیم کشی بعد از ساخت خانه.

چرا تست های ادغام را می نویسیم؟

  • در نحوه برقراری ارتباط یا به اشتراک گذاری اطلاعات مؤلفه ها ، مسائل را جلب می کند.
  • اعتبار گردش کار را که چندین واحد دارند ، تأیید کنید.

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

// JavaScript example with supertest and Jest
const request = require('supertest');
const app = require('../app');

test('registers a new user and sends welcome email', async () => {
  const res = await request(app).post('/register').send({ email: 'test@example.com', password: 'pass' });
  expect(res.statusCode).toBe(201);
  // Assume email service is mocked
});
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

بهترین روشها:

  • از داده ها و سناریوهای واقع گرایانه استفاده کنید.
  • سیستم های خارجی را با مسخره یا تست در صورت امکان جدا کنید.
  • روی تعاملات کلیدی تمرکز کنید ، نه هر مسیر ممکن.

مشکلات مشترک:

  • آزمایشات بیش از حد گسترده یا کند.
  • تمیز کردن داده های آزمون.

ابزارها:

  • پایتون: pytest (با وسایل) ، nose2
  • جاوا اسکریپت: Jestبا Mocha (با supertest)

تست های پایان به پایان (E2E): شبیه سازی سفرهای کاربر واقعی

تست های E2E چیست؟

تست های E2E اقدامات کاربر واقعی را با آزمایش کل سیستم – از UI از طریق API ها به پایگاه داده و بازگشت ، شبیه سازی می کند.

چرا تست های E2E را می نویسیم؟

  • تأیید کنید که کل برنامه مطابق آنچه در نظر گرفته شده است کار می کند.
  • موضوعاتی را که فقط در سناریوهای دنیای واقعی ظاهر می شوند ، بگیرید.

مثال:
خودکار کردن یک مرورگر برای پر کردن و ارسال فرم ثبت نام ، سپس تأیید کاربر در سیستم ظاهر می شود.

// Example with Cypress
cy.visit('/signup');
cy.get('input[name=email]').type('user@example.com');
cy.get('input[name=password]').type('securepassword');
cy.get('button[type=submit]').click();
cy.contains('Welcome, user@example.com');
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

بهترین روشها:

  • روی سفرهای مهم کاربر (ثبت نام ، پرداخت و غیره) تمرکز کنید.
  • آزمایش های E2E را پایدار و حفظ کنید – آزمایش از جزئیات جزئی UI.
  • آزمایشات E2E را در یک محیط تولید مانند اجرا کنید.

مشکلات مشترک:

  • بیش از حد در تست های E2E (آنها کند و شکننده هستند).
  • جدا کردن داده های آزمون.

ابزارها:

  • سرو
  • سلنیوم
  • نمایشنامه نویس

4. انواع دیگر تست

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

  • بدون توجه به اجرای ، ویژگی های خاص یا داستانهای کاربر را تأیید کنید.
  • اطمینان حاصل کنید که برنامه ارزش مورد انتظار را به کاربران ارائه می دهد.

آزمایش دود

  • بررسی های سریع برای تأیید اینکه مهمترین قسمت های سیستم پس از استقرار یا تغییرات اساسی کار می کنند.
  • مانند چرخاندن سوئیچ اصلی برای دیدن اینکه آیا چراغ ها روشن می شوند یا خیر.

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

  • اطمینان حاصل کنید که تغییرات جدید ویژگی های موجود را خراب نمی کند.
  • اغلب به صورت خودکار و به عنوان بخشی از خطوط لوله ادغام مداوم (CI) اجرا می شود.

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

  • نحوه رفتار سیستم شما تحت بار (سرعت ، مقیاس پذیری ، ثبات) را ارزیابی کنید.
  • ابزارها: jmeter ، ملخ ، K6

مسخره ، جاسوسان و خرد: ابزارهایی برای آزمایش جدا شده

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

  • MOCKS: اشیاء جعلی که جایگزین موارد واقعی هستند ، به شما امکان می دهند رفتار آنها را کنترل کرده و استفاده را تأیید کنید. به عنوان مثال ، می توانید یک تماس API را برای بازگشت یک پاسخ خاص در حین آزمایش مسخره کنید.
  • جاسوسان: توابع یا اشیاء که اطلاعاتی را در مورد چگونگی نامگذاری آنها ثبت می کنند – برای تأیید اینکه تعامل خاصی اتفاق افتاده است ، استفاده می کنند (به عنوان مثال ، یک عملکرد با آرگومان های صحیح فراخوانی شده است).
  • خردها: پاسخ های از پیش برنامه ریزی شده را به تماس های عملکردی ارائه دهید ، به شما امکان می دهد سناریوهای مختلف یا موارد لبه را شبیه سازی کنید (مانند یک پایگاه داده که یک خطا را برمی گرداند).

مثال:

// Jest spy example
const sendEmail = jest.fn();
sendEmail('hello@example.com');
expect(sendEmail).toHaveBeenCalledWith('hello@example.com');
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

چرا از این ابزارها استفاده می کنیم؟

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

مشکلات مشترک:

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

BDD: توسعه رفتار محور

توسعه رفتار محور (BDD) در مورد نوشتن تست هایی است که رفتار برنامه شما را به زبان ساده توصیف می کند و باعث می شود آنها برای همه افراد در تیم قابل خواندن و در دسترس باشند.

مثال:

Feature: User Login
  Scenario: Successful login
    Given a registered user
    When they enter correct credentials
    Then they see the dashboard
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

مزایا:

  • ارتباطات بهبود یافته بین توسعه دهندگان ، آزمایش کنندگان و ذینفعان.
  • آزمایشات دو برابر به عنوان مستندات.

ابزارها:

  • خیار (JS ، روبی)
  • رفتار (پایتون)
  • یاس (JS ، با سبک BDD)

تست هرم: اعتصاب تعادل مناسب

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

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

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


مشکلات و ضد الگوهای مشترک

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

جدول خلاصه

نوع تست هدف دامنه سرعت قابلیت اطمینان ابزارهای معمولی
واحد تست واحدهای انفرادی یک واحد سریع عالی پیتز ، این است
ادغام اتصالات آزمایشی ماژول واسطه واسطه Pytest ، Super Test
پایان به پایان سفرهای کاربر را آزمایش کنید کل برنامه آهسته پایین سرو ، سلنیوم
سیگار کشیدن بررسی سریع سلامتی مسیر بحرانی سریع واسطه مختلف
رگرسیون از اشکالات قدیمی جلوگیری کنید متفاوت است متفاوت است عالی مختلف
عمل محدودیت های سیستم را ارزیابی کنید کل برنامه آهسته n/a jmeter ، ملخ ، K6

پایان

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

بازتاب: ارزشمندترین آزمونی که نوشتید چیست؟ چگونه سرعت و پوشش را در پروژه های خود متعادل می کنید؟


خواندن و منابع بیشتر:

نوشته های مشابه

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

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

دکمه بازگشت به بالا