Sokan Academy

Test Driven Development یا به اختصار TDD یکی از پارادایم‌های توسعهٔ نرم‌افزار است که کاملاً مبتنی بر یونیت تست (Unit Test) است. در این رویکرد، تیم‌های نرم‌افزاری قبل از آنکه اقدام به کدنویسی کنند، تست‌های مربوطه را طراحی و پیاده‌سازی می‌کنند!

در عین حال، توجه داشته باشیم که Unit Testing با TDD یکسان نیست. در حقیقت، زمانی که اقدام به نوشتن کدهای اصلی اپلیکیشن کرده سپس تست‌هایی برای اطمینان حاصل کردن از صحت عملکرد آن‌ها می‌نویسیم، چنین رویکردی Unit Testing نامیده می‌شود اما TDD حاکی از آن است که ابتدا به ساکن اقدام به نوشتن یکسری یونیت تست نموده سپس دست به نوشتن کدهای اصلی اپلیکیشن بزنیم به گونه‌ای که در نهایت باید منجر به پاس شدن کلیهٔ تست‌ها شوند که در ادامه با ذکر یکسری مثال فرضی، سعی خواهیم نمود تا این تفاوت‌ها را بهتر نشان دهیم.

فرض کنیم که قصد داریم برای نرم‌افزارمان یک یونیت تست بنویسیم و به عنوان یک واحد کوچک از نرم‌افزار داریم:

function calculateLoan(int $amount, int $months, double $interestRate)
{
    // some code
}

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

function testCalculateLoan()
{
    calculateLoan(10000, 12, 10.5);
}

در واقع، فانکشنی نوشته‌ایم تحت عنوان ()testCalculateLoan که این وظیفه را دارا است تا صحت عملکرد فانکشن ()calculateLoan را بسنجد و همان‌طور که می‌بینیم، آرگومان‌هایی بر اساس تایپ مشخص‌‌شده در فانکشن اصلی در نظر گرفته‌ایم که در چنین شرایطی تست به راحتی پاس می‌گردد.

حال برسیم به بررسی به مقولهٔ توسعهٔ نرم‌افزار تست‌محور یا اصطلاحاً TDD که در آن دقیقاً عکس مراحل فوق رخ خواهد داد به طوری که ابتدا به ساکن تست‌ها نوشته می‌شوند به طوری که مثلاً داریم:

function testCalculateLoan()
{
    calculateLoan(10000, 12, 10.5);
}

نتیجهٔ اجرای فوق مسلماً Fail است چرا که اساساً چنین فانکشنی وجود خارجی ندارد. حال اقدام به نوشتن تابع ()calculateLoan می‌کنیم و آن را متناسب با نیازهای تست، مرحله‌به‌مرحله توسعه می‌دهیم تا در نهایت تست موردنظر با موفقیت (Pass) اجرا شود.

👈 مطالعه بیشتر: هنر ظریف تست نویسی، TDD را بشناسیم و در دام های آن نیافتیم!

 

unit testیونیت تستتست نرم‌افزار

sokan-academy-footer-logo
کلیه حقوق مادی و معنوی این وب‌سایت متعلق به سکان آکادمی می باشد.