مهدی عادلی فر
بنیانگذار توسینسو و برنامه نویس

یونیت تست چیست؟ معرفی تست واحد یا Unit Testing به زبان ساده

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

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

هر واحد برنامه نویسی معمولا یک یا چند ورودی و یک خروجی دارد. از مفاهیمی که در تست واحد استفاده می شود می توان به فریمورک های تست واحد، درایور ها، استاب ها و mock ها و همچنین اشیا fake(تقلبی) نام برد. مفاهیمی مانند mock ها و اشیا تقلبی بیشتر برای تولید اشیا و محیط های مورد نیاز برای تست یک واحد استفاده می شوند به طوری که به بدنه اصلی برنامه تغییری تحمیل نشود ولی انجام تست درست باشد.

برای مثال در یک زبان شی گرا در نظر بگیرید که یک متد داده  ها را از دیتابیس دریافت کرده و پردازشی روی آن انجام می دهد. حال برای این که محیط دیتابیس شبیه سازی شود ولی تغییری بر روی دیتابیس اصلی به وجود نیاید از mock استفاده می شود و داده های غیر لازم تولید شده و به متد برای تست ارسال می شود.

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

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

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

برنامه نویسی با وجود تست واحد سریع تر انجام می شود. شاید تجب کنید و بگویید این جمله حقیقت ندارد زیرا نوشتن تست واحد هزینه و زمان پروژه را اضافه می کند و برنامه نویس باید علاوه بر بدنه اصلی برنامه تست نیز بنویسند. ولی اینطور نیست. دلیل هم این است که درست است که نوشتن تست واحد به زمان انجام پروژه کمک می کند ولی بعدا با توجه به این که قسمت زیادی از زمان برنامه نوسی را خطایابی و debug می گیرد نوشتن تست باعث می شود که زمان خطایابی بسیار کم شود.

نکاتی برای نوشتن تست واحد

در ادامه نکاتی را آورده ایم که رعایت کردن آن ها باعث راحت تر شدن نوشتن تست واحد می شود.

  • یک ابزار یا فریمورک تست مناسب برای زبانی که با آن کار می کنید پیدا کنید.
  • برای هرچیزی تست ننویسید. سعی کنید که تمرکز شما روی رفتار اصلی برنامه و واحدهای اصلی باشد.
  • محیط برنام نویسی را از محیط تست جدا کنید
  • اگر خطایی در برنامه پیدا کردید قبل از این که خطا را رفع کنید اول یک تست بنویسید که آن خطا را آشکار کند. دلیل این کار این است که اگر این خطا را به درستی رفع نکرده باشید بعدا تست به شما یادآوری می کند. همچنین ممکن است که بعد از این که مشکل حل شد برای نوشتن تست متناسب با آن خطا احساس تنبلی کنید.
  • تست ها را طوری بنویسید که به هم وابسته نباشند.
  • در نوشتن تست ها سعی کنید همه مسیر هایی را که به واحد شما متنهی می شوند را در نظر داشته باشید و مقادیر ورودی آنها را ارزیابی کنید. دقت خاصی به حلقه های تکرار داشته باشید.
  • برای داشتن تاریخچه تست ها از ورژن کنترل (version control) استفاده کنید.
  • علاوه بر این که تست هایی می نویسید که رفتار یک واحد را ارزیابی کند تست هایی هم بنویسید که برای یک واحد سرعت و کارایی را نیز ارزیابی کنند.
  • تست های نوشته شده را به صورت مرتب و تکراری اجرا کنید. برای مثال در اول یا آخر روز تست ها را اجرا کنید و نتیجه اجرا را بررسی کنید.

با وب سایت tosinso همراه باشید.

نویسنده: مهدی عادلی فر

منبع: tosinso.com

هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی می باشد.


مهدی عادلی فر
مهدی عادلی فر

بنیانگذار توسینسو و برنامه نویس

مهدی عادلی، بنیان گذار TOSINSO. کارشناس ارشد نرم افزار کامپیوتر از دانشگاه صنعتی امیرکبیر و #C و جاوا و اندروید کار می کنم. در زمینه های موبایل و وب و ویندوز فعالیت دارم و به طراحی نرم افزار و اصول مهندسی نرم افزار علاقه مندم.

نظرات