آموزش تست واحد (Unit Testing)

دسته بندی: آموزش تست نرم افزار

آموزش تست واحد

آنچه در این صفحه می خوانید:

تست نرم افزار چیست؟

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

چرا تست نرم افزار ها امری ضروری است؟

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

انواع تست نرم افزار

آموزش تست واحد (Unit testing)

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

آموزش تست استاتیک (Static testing)

تکنیک تست نرم افزاری است که در آن نرم افزار بدون اجرای کد مورد تست قرار می گیرد.

آموزش تست یکپارچه سازی (Integration testing)

تست یکپارچه سازی فرآیند توسعه نرم افزاری است که واحدهای برنامه را به صورت چند گانه ترکیب و تست می کنند.

آموزش تست نفوذ (Penetration Testing)

Penetration testing یا pen testing به معنای تست نفوذ، انجام تست سیستم کامپیوتری، شبکه یا برنامه وب برای شناسایی آسیب پذیری هایی است که مهاجم می تواند از آن استفاده کند.

آموزش تست خودکار (Automated Testing)

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

تست واحد (Unit Testing) چیست؟

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

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

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

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

نوشتن و نگهداری از تست های واحد با استفاده از تست های پارامتری (PUT) سریعتر انجام می شود. این روش باعث می شود تا چندین بار تست را با مجموعه های مختلف ورودی انجام دهید، بنابراین تکثیر کد آزمون کاهش می یابد. بر خلاف تست های واحد سنتی، که معمولاً روش های بسته و تست شرایط نامساعد هستند، PUT ها مجموعه ای از پارامترها را در نظر می گیرند. PUT توسط TestNG، JUnit و همتای دات نت آن، XUnit پشتیبانی می شود. پارامترهای مناسب برای تست واحد ممکن است به صورت دستی تأمین شود یا در برخی موارد بطور خودکار توسط فریمورک تست تولید می شود. در سال های اخیر پشتیبانی از نوشتن تست های قدرتمندتر (واحد)، اعمال نفوذ مفهوم تئوری ها، موارد تست که مراحل مشابه را اجرا می کنند، اما با استفاده از داده های آزمون تولید شده در ران تایم، برخلاف تست های پارامتری منظم که از مراحل اجرای مشابه با مجموعه های ورودی استفاده می کنند، از پیش تعریف شده اند.

کاربرد تست واحد (Unit Testing)

تست واحد سنگ بنای برنامه نویسی مفرط (Extreme programming) است که به یک فریمورک تست خودکار واحد متکی است. این فریمورک تست واحد اتوماتیک می تواند شخص ثالث باشد، به عنوان مثال xUnit یا در گروه توسعه ایجاد شود.

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

بیشتر کد در سیستم تست واحد انجام می شود. برنامه نویسی مفرط، روش "تست همه چیزهایی را که احتمالاً می توانند قطعه شوند" باشد، به روش سنتی "تست هر مسیر اجرا" تست می کند. این امر باعث می شود كه توسعه دهندگان تست های كمتری نسبت به روش های كلاسیك ایجاد كنند، اما این مسئله واقعاً مشكلی نیست، زیرا باز هم روش های كلاسیك به ندرت به طور كاملاً روشمند دنبال می شوند تا تمام راه های اجرای كاملاً تست شده باشند. برنامه نویسی مفرط به سادگی تشخیص می دهد که تست به ندرت جامع است (زیرا اغلب اقتصادی بودن آن بسیار گران و وقت گیر است) و راهنمایی هایی در مورد نحوه تمرکز مؤثر بر منابع محدود ارائه می دهد.

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

مزایای تست واحد (Unit Testing)

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

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

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

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

تست واحد ممکن است عدم اطمینان در واحدها را کاهش دهد و در یک روش سبک تست از پایین به بالا قابل استفاده است. با تست قسمت های اولیه یک برنامه و سپس تست مقدار قطعات آن، تست یکپارچه سازی آسان تر می شود. تست واحد نوعی مستندات زنده از سیستم را ارائه می دهد. توسعه دهندگان به دنبال یادگیری چه عملکردی توسط یك واحد و چگونگی استفاده از آن می توانند برای دستیابی به درک اساسی از رابط واحد (API) به تست واحد نگاه كنند.

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

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

فریمورک های تست واحد (Unit Testing)

فریمورک های تست واحد اغلب محصولات شخص ثالث هستند که به عنوان بخشی از مجموعه کامپایلر توزیع نمی شوند. آنها برای ساده سازی فرایند تست واحد، که برای طیف گسترده ای از زبان ها ایجاد شده اند، کمک می کنند. نمونه هایی از فریمورک های تست شامل راه حل های اوپن سورس مانند فریمورک های مختلف تست محور کد که به طور جمعی به عنوان xUnit شناخته می شوند، و راه حل های اختصاصی / تجاری مانند: Cantata برای سی و سی پلاس پلاس و دات نت، ++TBrun ،JustMock ،Parasoft ،Testwell CTA و ++VectorCAST/C .

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

آیا این نوشته را دوست داشتید؟
linkedin-building-react-and-django-apps

ساخت اپلیکیشن های React و Django


کشف کنید که چگونه می توان قدرت عملکرد فرانت اند فریمورک React را با بهترین بک اند های Django برای ساخت اپلیکیشن های فول استک ترکیب کرد. در این دوره، ب...

1398/12/14 4184 بازدید زیرنویس دارد
teamtreehouse-getting-started-with-php-unit-testing

آموزش شروع کار با تست واحد PHP


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

1398/10/29 682 بازدید
laracasts-testing-jargon

آموزش تست Jargon


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

1398/10/14 369 بازدید
teamtreehouse-unit-testing-in-ios-2

آموزش تست واحد در iOS


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

1398/09/30 354 بازدید
linkedin-test-driven-development-in-django

توسعه تست محور در جنگو (Django)


در این دوره به بررسی اختلافات تست‌های عملکردی و تست‌های واحد در جنگو (Django) و همچنین روش‌های پیشرفته آزمایش، چارچوب تست Django، تست هش، درخواست‌های ...

1398/09/25 1682 بازدید زیرنویس دارد
packtpub-the-complete-javascript-unit-testing-guide

راهنمای کامل تست واحد جاوااسکریپت


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

1398/08/28 914 بازدید
pluralsight-architecting-an-asp-net-core-mvc-application-for-unit-testability

معماری اپلیکیشن ASP.NET Core MVC برای قابلیت تست واحد


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

1398/06/18 2705 بازدید
pluralsight-introduction-to-net-testing-with-nunit-3

مقدمه ای بر تست دات نت با NUnit 3


در این دوره به صورت حرفه‌ای و کامل با فرآیند ساخت و انجام تست در محیط دات نت آشنا خواهید شد. در ادامه درباره‌ی دلایل انجام تست خودکار، نحوه انجام آن د...

1398/06/13 796 بازدید
pluralsight-unit-testing-for-game-development-in-unity

آموزش تست واحد برای توسعه بازی در یونیتی


در این دوره، تست Unit برای توسعه بازی در Unity و دانش پایه ای را یاد می گیرید که با آن می توانید به پروژه های Unity خود، تست Unit را بیفزایید....

1398/03/13 1237 بازدید
unit-testing-tutorial-for-c-developers-mosh

آموزش تست واحد برای برنامه نویسان سی شارپ


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

1398/03/03 2180 بازدید زیرنویس دارد
pluralsight-getting-started-with-testng

شروع کار با TestNG


تست های اتوماتیک کلید تضمین کیفیت برای نرم افزار هستند. یاد بگیرید چگونه هر نوع تست واحد، کامپوننت و یا رابط گرافیکی بنویسید. فریمورک TestNG یک ابزار...

1397/10/23 1003 بازدید
pluralsight-microsoft-azure-developer-performing-unit-testing-integration-testing

آموزش Microsoft Azure Developer - انجام تست یکپارچه سازی و تست واحد


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

1397/10/15 708 بازدید
packtpub-master-java-unit-testing-with-spring-boot-and-mockito-video

آموزش تسلط بر تست واحد جاوا با Spring Boot و Mockito


محبوب ترین فریمورک برای توسعه سرویس های RESTful فریمورک Spring Boot نام دارد که دارای قابلیت های بی نظیری برای تست واحد از طریق Spring Boot Starter Te...

1397/07/17 2000 بازدید
packtpub-learn-java-unit-testing-with-junit-5-in-20-steps-video

آموزش تست واحد جاوا با JUnit 5 در 20 مرحله


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

1397/07/17 1620 بازدید
pluralsight-mutation-testing-in-java-with-pitest

آموزش تست تغییر در جاوا با Pitest


در این دوره با ارزیابی و بهبود تست های واحد با Pitest، تعریف تست تغییر و اهمیت آن، استفاده از Pitest برای معرفی تغیرات کوچک در برنامه، تحلیل نتایج تست...

1397/07/15 829 بازدید زیرنویس دارد
technicspublications-android-testing-with-junit-and-espresso

آموزش تست اندروید با JUnit و Espresso


چگونه می توان اطمینان حاصل کرد که اپلیکیشن شما همانطور که انتظار می رود کار می کند؟ در این دوره با فریمورک های تست اندروید یعنی JUnit و Espresso، خودک...

1397/06/24 1893 بازدید
pluralsight-tdd-with-junit-5

آموزش TDD با JUnit 5


در هسته هر پروژه، همیشه تست گسترده ای وجود دارد. در این دوره با مزایای TDD (توسعه مبتنی بر تست)، ایجاد اپلکیشن های TDD با فریمورک تست JUnit 5، توسعه ا...

1397/06/24 1481 بازدید زیرنویس دارد
pluralsight-sinonjs-a-very-popular-javascript-library

آموزش SinonJS - کتابخانه محبوب جاوااسکریپت


انجام تست واحد می تواند سخت باشد، به ویژه هنگامی که شما در برابر سیستم های زنده تست می کنید. داده پایگاه داده ها می توانند تغییر کنند، API ها می توانن...

1397/06/14 740 بازدید زیرنویس دارد
teamtreehouse-python-testing-course

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


هر پروژه می تواند از تست بهره مند شود و کتابخانه تست پایتون، قوی و آسان برای یادگیری و استفاده است. در این دوره با doctests، کتابخانه unittest پایتون،...

1397/05/27 1460 بازدید
tutsplus-testing-angular-end-to-end-with-protractor-and-cucumber

تست End to End انگولار با Protractor و Cucumber


  در این آموزش تصویری با تست End to End انگولار با Protractor و Cucumber آشنا می شوید. این دوره آموزشی محصول موسسه Tutsplus است. سرفصل های این...

1397/05/27 1679 بازدید