آشنایی با Unit Test و ابزار های آن

تست واحد یا Unit Testing نوعی تست نرم افزار است که در آن واحد ها یا اجزای جداگانه یک نرم افزار آزمایش می شوند. هدف این است که تأیید کنیم هر واحد نرم افزار ما وظیفه خود را مطابق انتظار عمل انجام می دهد. Unit test در هنگام فرآیند توسعه یک نرم افزار توسط توسعه دهندگان انجام می شود. تست واحد قسمتی از کد را ایزوله کرده و صحت اجرای آن را تأیید می کند. یک واحد می تواند یک تابع، متد، ماژول و یا یک شئ (object) باشد.

در مدل های توسعه چرخه حیات توسعه نرم افزار (STLC) ، مدل چرخه حیات تست نرم افزار و مدل V، تست واحد اولین سطح آزمایش است که قبل از تست ادغام (Integration Test) انجام می شود. تست واحد یک تکنیک تست جعبه سفید (WhiteBox) استکه توسط توسعه دهنده انجام می شود. البته در عمل به دلیل کمبود وقت و یا عدم تمایل توسعه دهندگان برای انجام تست، این کار توسط مهندسان تضمین کیفیت (QA) انجام می شود.

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

Unit testing از این جهت حائر اهمیت است که گاهی اوقات توسعه دهندگان نرم افزار سعی می کنند با انجام تست های کوچک و ناکافی، در وقت صرفه جویی کنند. این کار اصلا مناسب زیرا انجام unit test به صورت ناقص می تواند منجر به هزینه بالای رفع نقص آن در هنگام تست سیستم، یکپارچه سازی تست و حتی تست بتا (Beta) بعد از ساخت برنامه می شود. اگر unit test در اوایل زمان توسعه به خوبی انجام شود، در وقت و هزینه کل صرفه جویی خواهد شد.

برخی مزایای تست واحد:

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

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

به منظور انجام تست واحد، توسعه دهندگان کدی می نویسند تا یک تابع یا هر واحد دیگری را تست کند. همچنین توسعه دهندگان می توانند تابعی که قرار است تست شود را برای آزمایش دقیق تر ایزوله کنند که این کار می تواند وابستگی های غیر ضروری بین این واحد و سایر واحد ها را نشان دهد. بنابراین می توان آن ها را از بین برد. توسعه دهندگان عموما از فریم ورک UnitTest برای توسعه موارد آزمایش (test case) خودکار استفاده برای تست واحد استفاده می کنند.

تست واحد به دو صورت خودکار و دستی (manual) انجام می شود.

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

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

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

یک برنامه نویس معمولا از یک فریم ورک unit test برای توسعه موارد آزمایش (test case) استفاده می کند. با استفاده از یک چارچوب اتوماسیون، برنامه نویس معیار های آزمایش را مشخص می کند تا صحت اجرای کد را بررسی کند. در حین اجرای موارد آزمایش، فریم ورک موارد ناموفق را گزارش می کند. بسته به تعداد ناموفق موارد و خرابی، فریم ورک ممکن است آزمایش بعدی را متوقف کند.

تکنیک های تست واحد

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

  • تست جعبه سیاه: شامل آزمایش رابط کاربری به همراه ورودی و خروجی است
  • تست جعبه سفید: شامل آزمایش عملکرد و رفتار تابع ها، متد و سایر اجزاء داخلی نرم افزار است
  • تست جعبه خاکستری: این تست برای اجرای روش های آزمایش، موارد آزمایش و انجام تجزیه و تحلیل ریسک انجام می شود

ابزار های تست واحد

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

  • Junit: یک ابزار رایگان است که برای زبان جاوا استفاده می شود. این ابزار اعلانات و اطلاعاتی را برای شناسایی روش آزمایش ارائه می دهد. Junit ابتدا داده ها را آزمایش کرده و سپس در کد قرار می دهد
  • NUnit: این فریم ورک به طور گسترده ای توسط زبان های دات نت استفاده می شود. NUnit یک ابزار متن باز است که این امکان را میدهد تا اسکریپت ها را به صورت دستی (Manual) بنویسید. همچنین این ابزار از تست های داده محور که می توانند به صورت موازی اجرا شوند، پشتیبانی می کند.
  • JMockit: یک ابزار تست واحد منبع باز است. این محصول یک ابزار coverage کد است.
  • EMMA: یک مجموعه ابزار متن باز برای تجزیه و تحلیل و گزارش کد های نوشته شده به زبان جاوا است.
  • PHPUnit: یک ابزار تست واحد برای برنامه نویسان PHP است. این ابزار بخش های کوچکی از کد که واحد نام دارد را گرفته و هرکدام را جداگانه آزمایش می کند.

توسعه تست محور (TDD) و تست واحد

تست واحد در TDD شامل استفاده گسترده از فریم ورک ها و ابزار های آزمایش است. به منظور خودکارسازی تست های واحد، از فریم ورک های آن استفاده می شود. فریم ورک های تست واحد منحصر به TDD نیستند اما برای آن ضروری هستند.

مزایای unit test

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

معایب unit test

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

 

QR:  آشنایی با Unit Test و ابزار های آن
به اشتراک بگذارید