منظور از تست واحد، تستهایی هستند كه در سطح مولفههای پیاده سازی شده توسط تولید كنندگان سیستم جهت بررسی عملكرد و كارایی آن مولفهها صورت میگیرد. در زبانهای شیگرایی همچون جاوا، منظور از مولفه همان كلاسها هستند.
در SDLC ، STLC ، V Model ، تست واحد اولین سطح تست است که قبل از تست ادغام انجام می شود. تست واحد تکنیکی برای آزمایش WhiteBox است که معمولاً توسط توسعه دهنده انجام می شود. اگرچه ، در یک دنیای عملی به دلیل تنگ شدن زمان یا عدم تمایل توسعه دهندگان به آزمایشات ، مهندسان QA همچنین واحد را انجام می دهند.
تست واحد از این جهت مهم است که توسعه دهندگان نرم افزار گاهی اوقات سعی در صرفه جویی در وقت می کنند و حداقل تست واحد را انجام می دهند و این افسانه است زیرا تست واحد نامناسب منجر به هزینه بالای رفع نقص در هنگام تست سیستم ، یکپارچه سازی تست و حتی تست بتا بعد از ساخت برنامه می شود. اگر تست واحد مناسب در اوایل توسعه انجام شود ، در نهایت در وقت و هزینه صرفه جویی می شود.
در اینجا ، دلایل اصلی برای انجام تست واحد در مهندسی نرم افزار وجود دارد:
تست واحد به رفع اشکالات در اوایل چرخه توسعه و صرفه جویی در هزینه کمک می کند.
تست واحد به توسعه دهندگان کمک می کند تا پایه کد تست را درک کنند و این باعث می شود که بتوانند به سرعت تغییرات ایجاد کنند
تست های واحد خوب به عنوان مستندات پروژه عمل می کنند
تست های واحد به استفاده مجدد از کد کمک می کند. هم کد و هم تست های خود را به پروژه جدید خود منتقل کنید. کد را تغییر دهید تا آزمایش دوباره اجرا شود.
چگونه تست واحد را انجام دهیم
به منظور انجام تست واحد، توسعه دهندگان بخشی از کد را برای آزمایش عملکرد خاص در نرم افزار می سنجند. توسعه دهندگان همچنین می توانند این تابع را برای آزمایش دقیق تر جدا کنند که این امر وابستگی های غیرضروری بین عملکرد مورد آزمایش و سایر واحدها را نشان می دهد تا وابستگی ها از بین بروند. توسعه دهندگان عموماً از چارچوب UnitTestبرای توسعه موارد آزمایشی خودکار برای تست واحد استفاده می کنند.
تست واحد بر دو نوع است:
دستی
خودکار
آزمون واحد معمولاً خودکار است اما هنوز هم ممکن است به صورت دستی انجام شود. مهندسی نرم افزار یکی را بر دیگری ترجیح نمی دهد اما اتوماسیون ارجح است. یک رویکرد دستی برای تست واحد ممکن است از یک سند گام به گام آموزشی استفاده کند.
تحت رویکرد خودکار
یک توسعه دهنده فقط برای آزمایش عملکرد بخشی از کد را در برنامه می نویسد. آنها بعداً اظهار نظر کرده و سرانجام هنگام اجرای برنامه ، کد آزمون را حذف می کنند.
همچنین یک توسعه دهنده می تواند عملکرد را برای تست دقیق تر آن جدا کند. این یک روش دقیق تر تست واحد است که شامل کپی و چسباندن کد در محیط تست خود از محیط طبیعی آن است. جداسازی کد به کشف وابستگی های غیرضروری بین کد مورد آزمایش و سایر واحدها یا فضای داده در محصول کمک می کند. سپس می توان این وابستگی ها را از بین برد.
یک کدنویس به طور کلی از UnitTest Framework برای توسعه موارد آزمایشی خودکار استفاده می کند. با استفاده از یک چارچوب خوذکارسازی ، توسعه دهنده برای بررسی درستی کد ، معیارها را برای تست کد می کند. در حین اجرای موارد آزمایشی ، چارچوب موارد ناموفق را ثبت می کند. همچنین بسیاری از چارچوب ها به طور خودکار این موارد آزمایشی ناموفق را پرچم گذاری و گزارش می کنند. بسته به شدت خرابی ، چارچوب ممکن است آزمایش بعدی را متوقف کند.
مزیت های تست واحد
توسعه دهندگانی که می خواهند بدانند چه کارایی توسط یک واحد ارائه می شود و چگونه می توان از آن استفاده کرد ، می توانند با استفاده از تست های واحد درک درستی از API واحد پیدا کنند.
تست واحد به برنامه نویس این امکان را می دهد که کد را دیرتر بازسازی نماید ، و اطمینان حاصل کنید که ماژول همچنان به درستی کار می کند (یعنی تست رگرسیون). روش کار این است که موارد آزمایشی را برای همه توابع و روش ها بنویسید تا هر زمان که تغییری باعث ایجاد خطا شد ، به سرعت شناسایی و برطرف شود.
با توجه به ماهیت ماژولار تست واحد ، ما می توانیم قسمت هایی از پروژه را بدون انتظار برای تکمیل سایر قسمت ها آزمایش کنیم.
معایب تست واحد
از تست واحد نمی توان انتظار داشت که هر خطایی را در یک برنامه مشاهده کند. ارزیابی همه مسیرهای اجرا حتی در پیش پا افتاده ترین برنامه ها امکان پذیر نیست.
تست واحد واحد براساس ماهیت خود بر روی یک واحد کد متمرکز است. از این رو نمی تواند خطاهای یکپارچه سازی یا خطاهای سطح گسترده سیستم را پوشش دهد.
توصیه می شود از تست واحد همراه با سایر فعالیت های آزمایش استفاده شود.