
آموزش توسعه تست محور Test First Development در سی شارپ سری اول
آموزش توسعه تست محور Test First Development در سی شارپ سری اول یکی دیگر از آموزش های گروه آموزشی پرووید می باشد که در این قسمت آن را به شما معرفی می کنیم. این بسته ی آموزشی نیز یکی از دوره های آموزشی دیگر که در حوزه ی فارسی سازی آموزش های انگلیسی تنظیم شده است می باشد. عنوان این بسته ی آموزشی آموزش توسعه ی نرم افزار تست محور است که با نام اصلی Test First Development - Part 1 از شرکت Pluralsight منتشر شده است.
Test Driven Development چیست؟
Test-Driven Development یا TDD تکنیکی برای توسعه نرم افزار های میباشد. این روش به صورت بالا به پایین انجام میشود یعنی اول یک سری mock ساخته شده، کلیات پروژه به صورت نمونه اولیه پیاده سازی می شود و بعد از تایید شدن عملکرد برنامه کد های اصلی با mock ها جایگزین می شود. تست ها به صورت Test Case نوشته می شوند و در نهایت بعد از نوشته شدن کد ریفکتورینگ صورت می گیرد. این سیکل را Red-Green-Refactor می گویند.

TDD در واقع متدی برای طراحی نرم افزار است نه تست آن البته تست نرم افزار توسط TDD به صورت خیلی شیک انجام می شود. فرض کنید که یک Class دارید که انتظار دارید یک Object از نوع User برای شما ایجاد کند و در کل برنامه با این Object کار خواهید کرد. حال شما تغییری در پایگاه داده خود ایجاد می کنید که باعث می شود متد هایی از آین Object را دیگر نداشته باشیم. بنابراین جاهایی از برنامه که انتظار دارند این متدها وجود داشته باشند از کار خواهد افتاد ولی اگر از روش TDD استفاده کنیم و برای هر قسمت تست نوشته باشیم قبل از اینکه بعد از تغییرات ما همه سیستم از کار بیفتد ما با استفاده از تست ها میتوانیم متوجه تغییرات در جاهای مختلف سیستم بشویم. ضمناً سری دوم این آموزش تحت عنوان آموزش توسعه تست محور Test First Development در سی شارپ سری دوم پیش از این بر روی سایت منتشر شده است.
تست نرم افزار چیست؟
تست نرم افزار فرایندی است برای ارزیابی عملکرد یک برنامه نرم افزاری با هدف کشف اینکه آیا نرم افزار توسعه یافته از شرایط مشخص برخوردار است یا خیر و برای شناسایی نواقص به منظور اطمینان از بی نقص بودن محصول برای تولید یک محصول با کیفیت به کار می رود. بیایید در ابتدا به تعریف استاندارد انواع تست مانند تست دستی و تست اتوماتیک، روش های تست، رویکردهای تست و انواع تست جعبه سیاه بپردازیم.
تعریف تست نرم افزار
طبق استاندارد ANSI/IEEE 1059 - فرآیند تجزیه و تحلیل یک آیتم نرم افزار، برای تشخیص تفاوت بین شرایط موجود و مورد نیاز و نواقص و ارزیابی ویژگی های آیتم های موجود در نرم افزار است. چرا به تست نرم افزار نیاز داریم؟
مصاحبه کنندگان ممکن است از شما درباره علت نیاز به تست یا چرایی تست نرم افزار بپرسند. وقتی کارم را شروع کردم، نمی دانستم تست نرم افزار چیست و چرا لازم است. من همچنین نمی دانستم از کجا شروع کردم. شاید شما در همان وضعیتی باشید که من قبلا در آن بودم. راهنمایی های ما را در مورد چگونگی تبدیل شدن به یک آزمایش کننده نرم افزار و همچنین تغییر کار خود از تست دستی به تست اتوماتیک را از دست ندهید. اکنون من می گویم که ارزیابی کارایی یک برنامه نرم افزاری با هدف کشف اینکه آیا نرم افزار توسعه یافته از الزامات تعیین شده برخوردار است یا خیر و همچنین شناسایی نواقص آن برای اطمینان از اینکه آیا این محصول برای تولید محصولی با کیفیت بهتر بی نقص است یک هنر است.
توسعه تست محور چیست و چگونه کار می کند؟
توسعه تستمحور یا Test-Driven Development رویکردی برای ساخت نرمافزار است که در آن نوشتن تستها نقش مهمی در هدایت پیادهسازی دارد. بهجای آنکه ابتدا تمام کد نوشته شود و سپس به سراغ آزمون برویم، توسعهدهنده از تست برای مشخص کردن رفتار مورد انتظار و بررسی تدریجی راهکار استفاده میکند. این شیوه کمک میکند انتظارات از بخشهای مختلف برنامه روشنتر باشند و تغییرات کد با معیارهای مشخصتری ارزیابی شوند.
در فرایند توسعه تستمحور، تستها فقط ابزاری برای پیدا کردن خطا نیستند، بلکه در تصمیمگیری درباره طراحی و ساختار کد نیز نقش دارند. با تعریف رفتار مورد انتظار در قالب تست، میتوان مسئله را به بخشهای کوچکتری تقسیم کرد و هر بخش را مرحلهبهمرحله پیادهسازی کرد. این دوره مقدماتی با مفاهیم اولیه Test First Development آشنا میکند و زمینه لازم را برای درک ارتباط میان تستنویسی و توسعه برنامههای قابل نگهداری فراهم میسازد.
نوشتن Unit Test در پروژه های سی شارپ
Unit Test یا تست واحد برای بررسی رفتار یک بخش کوچک و مشخص از برنامه استفاده میشود. هدف این است که بتوان عملکرد آن بخش را در شرایط معین ارزیابی کرد و مشخص شود آیا نتیجه با انتظار تعریفشده مطابقت دارد یا خیر. در پروژههای C#، تست واحد میتواند به بررسی منطق متدها و اجزای مختلف برنامه کمک کند و امکان شناسایی برخی مشکلات را پیش از ترکیب بخشها در سیستم بزرگتر فراهم آورد.

تستهای واحد زمانی ارزشمندتر میشوند که واضح، قابل تکرار و متمرکز بر رفتار مورد انتظار باشند. تستی که به جزئیات غیرضروری پیادهسازی وابسته باشد، ممکن است با هر تغییر داخلی بیدلیل نیاز به اصلاح پیدا کند. در این آموزش با نوشتن Unit Test در چند مرحله آشنا میشوید و میآموزید چگونه تستها را به بخشی از جریان توسعه تبدیل کنید. این مهارت برای برنامهنویسانی که میخواهند با اطمینان بیشتری کد خود را تغییر دهند، مفید است.
Refactoring و بهبود ساختار کد
Refactoring به فرایند بهبود ساختار داخلی کد گفته میشود، بدون آنکه رفتار قابل مشاهده برنامه تغییر کند. ممکن است یک بخش از نرمافزار از نظر عملکرد درست باشد، اما ساختار پیچیده، تکرار کد یا نامگذاری نامناسب، تغییر و نگهداری آن را دشوار کند. در چنین شرایطی، بازآرایی کد میتواند خوانایی و سازماندهی آن را بهتر کند. در توسعه تستمحور، تستها راهی برای بررسی این موضوع فراهم میکنند که تغییرات ساختاری باعث خراب شدن رفتار قبلی برنامه نشده باشند.
استفاده از تستها هنگام Refactoring به توسعهدهنده امکان میدهد پس از تغییر کد، رفتارهای مهم را دوباره بررسی کند. به این ترتیب، میتوان ساختار داخلی را بهبود داد و همزمان از طریق آزمونها بررسی کرد که قابلیتهای موجود همچنان درست کار میکنند. این دوره به معرفی Refactoring و ارتباط آن با طراحی برنامه میپردازد. درک این ارتباط به شما کمک میکند بهجای انباشته کردن اصلاحات موقت، کدی بسازید که فهمیدن و توسعه دادن آن در آینده سادهتر باشد.
نقش Isolation در تست نرم افزار
در تست نرمافزار، Isolation به جدا کردن بخشی که قرار است بررسی شود از وابستگیهایی اشاره دارد که ممکن است نتیجه آزمون را تحت تأثیر قرار دهند. برای مثال، اگر منطق یک بخش به سرویس یا منبع داده دیگری وابسته باشد، بررسی مستقل آن میتواند دشوار شود. با شناخت وابستگیها و مدیریت نحوه تعامل آنها، میتوان تستهایی نوشت که تمرکز بیشتری بر رفتار موردنظر داشته باشند و نتایج آنها به شرایط غیرمرتبط وابسته نباشد.
جداسازی کد در تستنویسی فقط برای سادهتر شدن اجرای آزمونها نیست؛ این کار میتواند نقاط اتصال میان اجزای برنامه را نیز آشکار کند. وقتی وابستگیها مشخص و قابل کنترل باشند، بررسی و اصلاح بخشهای مختلف سیستم آسانتر میشود. در این دوره با مفهوم Isolation و نقش آن در توسعه تستمحور آشنا میشوید و یاد میگیرید چرا توجه به وابستگیهای کد میتواند در نوشتن تستهای مؤثر و طراحی بهتر برنامههای C# اهمیت داشته باشد.
سرفصل مطالب آموزش ویدئویی Test First Development در سی شارپ سری اول
فصل اول: معرفی Test First Development- مقدمه
- انجام تست نرم افزار توسط برنامه نویس
- بررسی روش سنتی تست کردن توسط برنامه نویس
- بررسی مزایا
- تعریف کردن Unit Testing
- تست کردن کدهای از قبل موجود و کدهای جدید
- بررسی Framework های انجام Unit Testing
- بررسی عملکرد و نحوه کار کردن Unit Testing Framework ها
- Run کردن تست ها
- بررسی Test Runner های مختلف برای .NET
- بررسی Test First Development
- انجام Test-Driven Development به صورت عملی
- دیگر نکات مربوط به Test-First Development
- جمع بندی
- مقدمه
- راه اندازی یک Test Project
- ایجاد کردن تست ها
- اجرا کردن تست ها
- مشکلاتی که باید حل و فصل شود.
- نوشتن اولین تست
- بررسی سیکل Red Green Refactor
- نوشتن کد برای Pass شدن اولین تست
- بررسی یک Logical Assert
- نوشتن تست دوم
- Refactore کردن یک تست
- بررسی کیفیت های تست
- جمع بندی
- مقدمه
- سازماندهی Test Project
- مقایسه Unit Test ها و Integration Test ها
- سازماندهی پروژه و تست ها
- بررسی Organizational Model مربوط به xUnit
- بررسی Unit Test Lifecycle
- بررسی TestFixture و Category ها
- تست کردن Sad Path
- پیاده سازی Assert ها
- سازماندهی پروژه نهایی
- جمع بندی
- مقدمه
- آیا کار ما تا به اینجای کار به اتمام رسیده است؟
- چرا نیاز است که Refactore کنیم؟
- چه زمانی باید Refactore تکرار کنیم؟
- بررسی تکنیک های ساده Refactoring
- انجام Refactoring to Abstraction
- انجام Refactoring to Design Pattern
- پیاده سازی یک استراتژی
- معرفی Code Smell ها
- جمع بندی
- مقدمه
- از تغییرات موجود در طراحی نترسید.
- کار کردن با Singleton ها
- تست کردن با یک پیاده سازی جایگزین
- بررسی چالش مربوط به HttpContext
- انجام Decoupling بر روی Dependency مربوط به HttpContext
- دیگر مزایای طراحی
- جمعبندی
- مقدمه
- انجام عملیات Fake کردن برای SUT Code ها
- بررسی Test Double ها
- بررسی Dummy ها
- بررسی Stub ها
- بررسی Fake ها
- پرسی Spy ها
- بررسی Mock ها
- مقدمهای بر نرم افزار پیاده سازی شده
- بررسی سازماندهی کد
- اضافه کردن یک View برای Edit Owner
- استفاده از اولین Test Double
- نیاز برای استفاده از یک Stub
- مقایسه Stub ها و Spy ها
- استفاده کردن از یک Mock
- جمع بندی







