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

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

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


Public float CalculateTax(int input) 
{
    if (x) return ...;
    if (y) return ...;
    Return ...;
}

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

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

تست خودکار بصرفه تر است!

تصویر - نمودار تست

همانطور که می بینید، تست دستی خیلی وقت گیر است. این کار برای آزمایش این تابع ممکن است هر بار چند دقیقه طول بکشد! و زمانی بدتر می شود که این تابع، تنها تابع برنامه ی شما نباشد؛ یعنی اغلب اوقات! در یک برنامه واقعی، شما ده ها یا صدها تابع مثل این دارید! همانطور که برنامه شما در اندازه و پیچیدگی رشد می کند، زمان لازم برای تست دستی تمام بخش های برنامه ی شما بسیار زیاد خواهد بود. بنابراین، از تست خودکار استفاده می کنیم.

با تست خودکار، شما یک پروژه جداگانه برای نوشتن تست ها ایجاد می کنید. در این پروژه کد می نویسید و به طور مستقیم این تابع را با ورودی های مختلف فراخوانی و بررسی می کنید که این تابع خروجی درست را باز می گرداند یا خیر. به این نوع آزمون ها به عنوان تست واحد (Unit Test) اشاره می کنیم. با تست واحد، یک واحد از برنامه را در انزوا و بدون وابستگی های خارجی مانند فایل ها، پایگاه های داده، وب سرویس ها و … تست می کنیم. تست هایی که شامل این وابستگی های خارجی هستند، تست های یکپارچه (integration tests) نامیده می شوند.

تست واحد قابلیت تکرار دارد!

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

تست واحد به شما کمک می کند با خیال راحت نرم افزار را منتشر کنید!

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

آیا تا به حال در وضعیتی قرار گرفته اید که نرم افزار را منتشر کرده و با خیال اینکه همه چیز رو به راه است دفتر کارتان را ترک کرده اید؛ سپس تماسی از رئیس یا کاربر نهایی خود دریافت می کنید که بخش مهمی از نرم افزار شما مشکل دارد؟! سپس مجبور شدید به دفتر برگردید و فکر کردید که این یک تعمیر سریع است! اما تا نیمه شب آنجا ماندید!!!

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

تصویر - اجرا کردن تست ها

تست واحد به شما کمک می کند به راحتی باز آرایی کد را انجام دهید!

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

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

تست واحد در ایجاد کد بهتر کمک می کند!

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

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

بنابراین، برای تکرار، تست واحد به شما کمک می کند:

  • کد خود را به طور مرتب و در زمان کمتری آزمایش کنید
  • قبل از انتشار اکثر باگ ها را شناسایی کنید
  • کد خود را با اطمینان بازنویسی کنید
  • کد های تمیز و قابل نگهداری تری را بنویسید

شما باید تست واحد را در رزومه خود ذکر کنید!

اگر شما یک توسعه دهنده ارشد هستید، باید چگونگی نوشتن تست واحد را بدانید. اگر شما یک توسعه دهنده متوسط هستید و می خواهید یک توسعه دهنده ارشد باشید، باید تست واحد را در رزومه ی خود ذکر کنید تا شانس بیشتری برای انتخاب شدن به عنوان توسعه دهنده ارشد داشته باشید. امروزه شرکت های بسیار خوب، از برنامه نویسان خود انتظار دارند تست واحد را آموخته باشند.

 

منبع : https://goo.gl/Jk4pwb