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

TDD در واقع متدی برای طراحی نرم افزار است نه تست آن البته تست نرم افزار توسط TDD به صورت خیلی شیک انجام می شود. فرض کنید که یک Class دارید که انتظار دارید یک Object از نوع User برای شما ایجاد کند و در کل برنامه با این Object کار خواهید کرد. حال شما تغییری در پایگاه داده خود ایجاد می کنید که باعث می شود متد هایی از آین Object را دیگر نداشته باشیم. بنابراین جاهایی از برنامه که انتظار دارند این متدها وجود داشته باشند از کار خواهد افتاد ولی اگر از روش TDD استفاده کنیم و برای هر قسمت تست نوشته باشیم قبل از اینکه بعد از تغییرات ما همه سیستم از کار بیفتد ما با استفاده از تست ها میتوانیم متوجه تغییرات در جاهای مختلف سیستم بشویم.
روش Outside-In در توسعه تست محور چیست؟
Outside-In رویکردی در توسعه تست محور است که از رفتار قابل مشاهده سیستم و نیازهای کاربر آغاز میشود و سپس به طراحی و پیادهسازی اجزای داخلی میرسد. در این روش، توسعهدهنده ابتدا مشخص میکند سیستم باید چه رفتاری ارائه دهد و بعد برای تحقق آن، بخشهای مختلف را بهتدریج پیادهسازی میکند. این شیوه کمک میکند ساختار نرمافزار از نیازهای واقعی آن شکل بگیرد و تصمیمهای مربوط به جزئیات داخلی، در ارتباط با رفتار مورد انتظار سیستم گرفته شوند.
در Outside-In TDD، تستها نقش راهنمای طراحی را دارند و میتوانند مشخص کنند کدام بخش از برنامه باید توسعه پیدا کند. توسعهدهنده با بررسی رفتار کلی، اجزای لازم را شناسایی میکند و سپس برای هر بخش تستهای متناسب مینویسد. استفاده از Test Doubleها یا Mockها در این فرایند میتواند وابستگی به اجزای دیگر را کنترل کند. این روش بهویژه در برنامههایی که اجزای متعددی با یکدیگر تعامل دارند، به روشنتر شدن مسئولیتها و ارتباط میان بخشهای مختلف کمک میکند.
Walking Skeleton و Spiking در فرایند توسعه نرم افزار
Walking Skeleton به نسخهای حداقلی از نرمافزار اشاره دارد که مسیر اصلی اجرای سیستم را از ابتدا تا انتها برقرار میکند، حتی اگر بسیاری از قابلیتهای نهایی هنوز پیادهسازی نشده باشند. هدف این است که اجزای اصلی و ارتباط میان آنها در یک ساختار قابل اجرا بررسی شوند. چنین نسخهای میتواند مشکلات معماری و یکپارچهسازی را زودتر آشکار کند و به تیم کمک کند پیش از گسترش قابلیتها، از برقرار بودن مسیر اصلی سیستم اطمینان پیدا کند.
Spiking نیز روشی برای بررسی یک ابهام فنی یا آزمایش یک راهکار احتمالی است. در این روش، توسعهدهنده یک پیادهسازی محدود انجام میدهد تا امکانپذیری یا رفتار یک فناوری و ایده را بهتر بشناسد. برخلاف کد نهایی محصول، هدف اصلی Spiking لزوماً تولید پیادهسازی قابل استفاده در نسخه نهایی نیست، بلکه کاهش ابهام پیش از تصمیمگیری است. ترکیب این رویکرد با توسعه تست محور میتواند به شناسایی زودهنگام ریسکها کمک کند و تصمیمهای طراحی را بر پایه شناخت دقیقتری قرار دهد.
تکنیک Triangulation در Test Driven Development
Triangulation یکی از تکنیکهای مورد استفاده در TDD است که با افزودن مثالهای بیشتر به تستها، به توسعهدهنده کمک میکند پیادهسازی عمومیتری برای رفتار مورد انتظار پیدا کند. در این روش، ابتدا ممکن است یک تست ساده نوشته شود و کد به کمترین شکل ممکن برای عبور از آن پیادهسازی شود. سپس با اضافه کردن تستی که شرایط متفاوتی را پوشش میدهد، نیاز به تعمیم منطق آشکار میشود و توسعهدهنده میتواند راهکاری متناسب با چند حالت مختلف ارائه کند.
این تکنیک به جلوگیری از پیچیده کردن زودهنگام کد کمک میکند، زیرا ابتدا رفتار مشخص و سپس نیاز به تعمیم بررسی میشود. برای مثال، اگر یک تابع در ابتدا فقط برای یک ورودی آزمایش شده باشد، افزودن تست با ورودی متفاوت میتواند نشان دهد که پیادهسازی باید از یک مقدار ثابت فراتر برود. هدف Triangulation صرفاً افزایش تعداد تستها نیست، بلکه استفاده از مثالهای معنادار برای شکل دادن به طراحی است. این روش در کنار بازنویسی کد میتواند به حفظ سادگی و صحت رفتار برنامه کمک کند.
Behavior Verification و بررسی رفتار اجزای نرم افزار
Behavior Verification به بررسی این موضوع میپردازد که یک جزء نرمافزار در شرایط مشخص چه رفتاری از خود نشان میدهد. در تستهای مبتنی بر رفتار، تمرکز بر تعاملات و نتایج مورد انتظار است؛ برای مثال، اینکه هنگام دریافت یک درخواست مشخص، متد مناسب فراخوانی شود یا نتیجه مورد انتظار تولید گردد. این رویکرد بهخصوص زمانی کاربرد دارد که رفتار یک جزء به همکاری با سرویسها یا اجزای دیگر وابسته باشد و لازم باشد تعاملات میان آنها بهدقت بررسی شود.
در توسعه تست محور، انتخاب سطح مناسب برای بررسی رفتار اهمیت زیادی دارد. اگر تستها بیش از حد به جزئیات داخلی پیادهسازی وابسته شوند، تغییر ساختار کد ممکن است باعث شکستن تستها شود، حتی زمانی که رفتار بیرونی سیستم تغییری نکرده است. به همین دلیل، بهتر است تستها تا حد امکان بر قراردادها و رفتارهای معنادار تمرکز کنند. استفاده درست از Mockها و سایر Test Doubleها میتواند بررسی تعاملات را آسانتر کند، اما نباید جایگزین تست رفتار واقعی اجزایی شود که نیازمند بررسی یکپارچه هستند.
سرفصل مطالب آموزش ویدئویی Test Driven Development پیشرفته در سی شارپ
فصل اول: مبحث Walking Skeleton
- مقدمه
- این دوره ی آموزشی یک مقدمه بر TDD نیست
- هدف این بسته ی آموزشی
- نگاهی اجمالی به این بسته ی آموزشی
- تست کردن به معنی خیلی چیزها است
- آیا TDD و BDD یکسان هستند
- یک چهارم تست چابک
- هرم تست
- تست کردن در Boundary ها و Test Level ها
- روش Outside-In و Bottom-Up
- مبحث Walking Skeleton
- Technical Constraint ها
- آموزش عملی به دست آوردن یک پاسخ از یک Walking Skeleton
- آموزش عملی Post کردن یک Entry
- آموزش عملی Post کردن و خواندن یک Entry
- آیا این تقلب است؟
- جمع بندی
فصل دوم: مبحث Spiking
- مقدمه
- دید Application ی
- مبحث FIRST
- تست چهار فازی
- Setup کردن و Tear Down کردن یک بانک اطلاعاتی
- آموزش عملی Setup کردن و Tear Down کردن یک بانک اطلاعاتی
- مبحث Backdoor Manipulation
- آموزش عملی Spiking
- آیا این تقلب است؟
- جمع بندی
فصل سوم: مبحث Triangulation
- مقدمه
- روش Outside-In در مقابل Bottom-Up
- زمان صحیح استفاده
- مبحث Stimulus و Response
- مبحث Triangulation
- مبحث Sampling
- Test Case ها به عنوان مثال
- آموزش عملی Serialize کردن یک Web Token ساده
- مبحث Devil's Advocate و Motivation
- مبحث Red - Green - Refactor
- مبحث Ping Pong
- مبحث Devil's Advocate
- مبحث Gollum Style
- آموزش عملی Parse کردن یک Web Token ساده
- استفاده از یک Web Token ساده در Spike
- نکات
- جمع بندی
فصل چهار: مبحث Behavior Verification
- مقدمه
- پیش نیازها
- روش Outside-In در مقابل Bottom-Up
- مبحث Behavior Verification
- چند چیز می توانند مشکل ساز باشند
- همه چیز را Triangulate کنید
- همه چیز را Triangulate نکنید
- مبحث Cyclomatic Complexity
- مبحث Code Coverage
- مبحث Componentization
- نیاز به Dependency Injection
- مبحث Formal Proof ها
- مبحث Data Flow
- Side Effect ها
- مبحث Observation
- مبحث Stimulus و Response
- پوشش اولیه از Outside-In
- تعداد تست ها به ازای Unit
- Characterization Test ها
- آموزش عملی Refactoring و Characterization Test ها
- آموزش عملی Data Flow و Side Effect ها
- آموزش عملی Robust کردن User Name
- مبحث Monolith
- جمع بندی







