زندگی برنامه نویس ها همیشه با چرخه ها(loop) درگیر هستش. TDD هم یه چرخه توسعه نرم افزار هستش که توی روند توسعه تکرار میشه.
اگر بخوام خلاصه بگم: TDD یعنی ترکیب سه عمل طراحی،تست (Unit Test) و کدنویسی.
ولی با این تفاوت که بعد از استخراج نیازمندی های پروژه، باید در اولین مرحله، تست های پروژه نوشته بشه و بعد روند توسعه ادامه داده بشه.
یکی از اصلی ترین مزیت های این روش اینه که همین اول مسیر تکلیف خروجی نهایی پروژه مشخص میشه و کاملا واضح هستش که چه انتظاراتی از برنامه دارین و اگر سوال یا ابهامی وجود داره، قبل از شروع کد نویسی رفع میشه.
مزیت بعدی اینه که شمارو مجبور میکنه از SOLID Principles پیروی کنید.
معمولا اگر به نقطه ای رسدید که میخواید TTD رو درک کنید. باید قبلش یکم تست نویسی کار کرده باشین.
پس در نتیجه الان باید بدونین که چجوری تست نوشته میشه.
تو این تست شما باید انتظاری که از برنامه دارید رو پیاده بکنید.
یعنی چی؟
برای مثال، شما از یک متد انتظار دارید که دو تا عدد صحیح از ورودی بگیره و حاصل ضرب این دو عدد رو توی خروجی به شما بده.
پس باید توی تستی که مینویسید، با انواع مختلف ورودی، حالت های امکان پذیر رو پیاده کنید و نتجیه ها رو چک کنید.
یه مثال برای متد ضرب توی سی شارپ:
Assert.Equal(6, Multiply(2, 3));
Assert.Equal(24, Multiply(-8, -3));
Assert.Equal(10680, Multiply(30, 365));
تست رو اجرا کنید، با این که میدونم قرار نیست پاس بشه، چون هنوز کدی که قرار انتظارات مارو رفع کنه ننوشتیم.
ساده ترین کدی رو بنویسید که فقط تست پاس بشه. نه کمتر نه بیشتر.
نکته: طبق encapsulate کردن کدها ما فقط Public متد هارو رو تست می کنیم و به مکانیزم داخل و متدهای private کاری نداریم
برای مثال همون متد ضرب:
ریفکتورینگ اصولا به هر کاری گفته میشه که در این مرحله کد قبلی که نوشتید رو بهتر کنه .مثلا اسم متغیر ها، کلاس ها، توابع یا هرچیز دیگه ای.
کد رو تا حدی تغییر بدید که که قوانین سادگی کد توش رعایت بشه.
مثال:دیگه واسه ریفکتور a*b چه مثالی بزنم؟
دوباره تست رو اجرا کنید. و این بار باید تست پاس بشه.
همین! بازم همین چرخه از اول تکرار میشه.