آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

unit testing چیست و آیا ضروری است؟

Pouya Asgharnejad Tehran  9 سال پیش  9 سال پیش
0 0

با سلام؛

unit testing چیست؟ آیا ضروری است؟ آیا برای php در فریمورک استاد قابل استفاده هست؟

 برای این سوال 1 پاسخ وجود دارد. مشاهده پاسخ صحیح
پاسخ به سوال 
Mehrad  9 سال پیش
+1 0

 پاسخ صحیح

همانطور که می دانید مرحله آزمایش نرم افزار یکی از مراحل اصلی تولید است. این آزمایش و بررسی صحت عملکرد برنامه در سطوح مختلفی می تواند صورت گیرد. اما دو مرحله که معمولاً انجام می شود، چنین است:
1.آزمایش نهایی نرم افزار تولید شده بصورت جعبه سیاه که به آن Integration Testing هم گفته می شود. این آزمایش ها لازم است ولی کافی نیست و در سیستم های بزرگ اصلاً پاسخگو نیست.
2. آزمایش کوچک ترین قسمت های قابل آزمایش برنامه: به این نوع از آزمایش Unit Testing گفته می شود. در واقع در این روش تک تک اجزای برنامه بصورت جداگانه آزمایش می شوند تا مطمئن شویم که هر کدام درست کار می کنند. در این صورت می توان مطمئن بود که عملکرد کلی سیستم هم درست باشد. این نوع از آزمایش در دسته آزمایش های جعبه سفید قرار داده می شود.

در Unit Testing، معمولاً یک کلاس یا متد مورد آزمایش قرار می گیرد. اجزاء برنامه بصورت جداگانه مورد بررسی قرار می گیرند نه در ارتباط با دیگر قسمت. بدیهی است نمی شود یک قسمت از برنامه را بدون اتصال به دیگر اجزای برنامه و بصورت مستقل مورد آزمایش قرار داد. از سوی دیگر اگر قسمتی بصورت جداگانه مورد آزمایش قرار نگیرد، در صورت بروز خرابی نمی توان مطمئن شد که خرابی از آن قسمت باشد. برای انجام این کار روش هایی بوجود آمده است که سعی می شود تا اجزای دیگر برنامه شبیه سازی شوند. بدین ترتیب از عملکرد درست آنها در زمان آزمایش مطمئن هستیم.
البته معمولاً در خط تولیدهای پیشرفته نرم افزار، این آزمایش قسمت های در روال های build نرم افزار قرار داده می شود تا بصورت خودکار اجزای مختلف برنامه مورد آزمایش قرار داده شود. در صورت بروز مشکل به توسعه دهنده مربوطه اطلاع داده می شود تا قسمت مورد نظر را اصلاح نماید.
معمولاً آزمایش های قسمت ها توسط برنامه سازها نوشته می شود. این در حالی است که آزمایش برنامه از دید کاربر معمولاً توسط برنامه سازها انجام نمی شود. مباحث زیادی در مورد آزمایش نرم افزار مطرح می شود که در این جا نمی توان به همه آنها اشاره کرد. فقط اینکه برای بکار گیری Unit Testing باید از framework های جانبی در زبان های مختلف استفاده کنید. برای نمونه در جاوا یک نمونه کاملاً قوی و آسان JUnit و در net. همان NUnit است. البته بدون این framework ها هم می توانید آزمایش قسمت ها را انجام دهید. ولی با استفاده از این framework ها کارتا بسیار ساده تر می شود.
بعنوان آخرین نکته این که آزمایش قسمت ها را می توان در زمان های مختلفی در مراحل تولید نوشت. اما یکی از معروف ترین و موفق ترین روش های unit testing بنام TDD توصیه می کند تا آنها را پیش از نوشتن برنامه و کلاس ها بنویسید.

اما تفاوت Unit Testing و Debugging باید عرض کنم که این دو اصلاً کاربردهای متفاوتی دارند. اما به چند تفاوت زیر توجه کنید:
1. debug بصورت interactive و توسط توسعه دهنده انجام می شود. در حالیکه Unit Testing معمولاً بصورت خودکار و بدون دخالت برنامه ساز انجام می شود. (در موارد زیادی در مراحل Build این کار انجام می شود.)
2. debug برای رفع نهایی مشکل قسمت برنامه انجام می شود. یعنی برنامه ساز متوجه خطای برنامه شده است و سعی می کند با debug خطای برنامه را بصورت دقیق مشخص کند و رفع کند. ولی در Unit Testing هدف تنها این است که وجود خطا در یک قسمت برنامه به برنامه ساز اطلاع داده شود و هیچ صحبتی از نوع خطا و جزئیات آن نیست. تنها اینکه خطایی در قسمت مربوطه رخ داده است. 3. روش اشکالزدایی در debug بصورت جعبه سفید است یعنی برنامه ساز بصورت کامل می تواند جزئیات را مورد بررسی قرار دهد. در حالیکه در Unit Testing آزمایش بصورت جعبه سیاه انجام می شود. یعنی ورودی ها متد تأمین می شود و متد مربوطه باید خروجی ها را تحویل دهد.

منبع : hamcodi

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


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .