Advantages

TDD یا Test Driven Development چیست؟

TDD یا Test Driven Development چیست؟

TDD مختصر شده عبارت Test Driven Development به معنی توسعه بر محور آزمون و تست میباشد.

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

مفهوم TDD توسط Kent Beck معرفی شده است. او در کتاب خود در مورد سختی های توسعه به سبک سنتی، چگونگی اتخاذ توسعه مبتنی بر آزمون را به همراه مبانی و مفاهیم کلیدی به وسیله نمونه کدهای مختلف، توضیح میدهد.

برای مثال عملیات تست کردن را با چاپ “hello world” شروع میکنیم:

1. نوشتن تست

در ابتدا باید به نتیجه و خروجی مورد نظر خود فکر کنیم و در رابطه با آن یک ادعا بنویسیم و سپس آن را تست کنیم. در این مثال از string یا رشته “hello world” استفاده میکنیم:

2. نوشتن یک کد کوتاه برای عبور از تست

3. refactor یا بازسازی تست و اجرا به صورت یکجا

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

اهمیت کیفیت

همان قدر که تولید کد مفید و درست اهمیت دارد، انجام تست های واحد هم اهمیت زیادی دارد.

چرا نوشتن تست های واحد و منحصر به فرد اهمیت زیادی دارد؟

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

یک تست TDD عالی و با کیفیت چه ویژگی هایی دارد؟

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

TDD Kata – ایجاد تمرینات عالی و کامل

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

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

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

مثال های TDD:

در این بخش یک کلاس به نام  TestPassword تعریف میکنیم که شرط زیر در آن برقرار شود:

  • به شرطی پسورد پذیرفته شود که دارای 5 تا 10 کاراکتر باشد.

در این مثال، کدها طوری نوشته میشوند که شرط بالا بر قرار شود:

سناریو شماره 1:

برای اجرای آزمون، ما یک کلاس به اسم ;() PasswordValidator ایجاد کرده ایم:

سپس کلاس ;() TestPassword بالا را اجرا میکنیم که خروجی آن به صورت زیر است:

سناریو شماره 2:

در متد () TestPasswordLength نیازی به ایجاد یک نمونه دیگر از کلاس PasswordValidator نیست. در واقع به معنی ایجاد یک شی از کلاس برای مراجعه به متدها و متغیرهای آن کلاس است.

سناریو شماره 3:

بعد از ریفکتور کردن، خروجی مانند تصویر زیر failed status را نمایش میدهد. زیرا ما نمونه ها را حذف کرده ایم. بنابراین چیزی به متد غیر استاتیک () isValid مراجعه نمی کند.

بنابراین نیاز است که با اضافه کردن کلمه static قبل از Boolean به عنوان public static boolean isValid ، متد را تغییر دهیم.

refactore کردن کلاس () PasswordValidator برای حذف خطای بالا و ادامه دادن آزمون و تست است.

خروجی :

اگر بعد از اعمال تغییرات در کلاس () PassValidator ، تست و آزمون را اجرا کنیم خروجی به صورت زیر نشان داده میشود.

مزایای استفاده از توسعه آزمون محور (TDD)

در این قسمت چند مورد از مزایای اصلی TDD در مهندسی نرم افزار را بیان میکنیم:

-اطلاع رسانی سریع اشکالات

-طراحی تمیز و قابل توسعه تر

-اطمینان به ریفکتور

-متناسب با کار تیمی

-مناسب برای توسعه دهندگان

 

بستن