تی دی دی چیست و چرا بش نیاز داریم ؟

برنامه نویسی با محوریت تستخب چیزی درباره Test Driven Development یا به اختصار TDD میدونید ؟ اگر نمیدونید توصیه میکنم . چند دقیقه برای خوندن این نوشته وقت بزارید فکر کنم همه چی دستتون بیاد .خب بصورت کلی برای آشنایی با خیلی از مفاهیمی که اسمی شامل حروف مختلف دارن مثل همین TDD یا MVC یا BDD و ... بهترین راه اینه که بیاید بخش بخش اون رو معنی کنید . تست یا آزمایش کردن رو فکر کنم همتون بدونید به چه معناست . تست در فرایند نرم افزار هم وجود داره . خب آدمایی هستن که فکر میکنن با ورود به پنل کاربری وبلاگ ساده ای که نوشتن و ارسال یک پست وقتی پیام موفقیت آمیزی رو که طراحی کرده بودن میگیرن همه چیز به خوبی اجرا شده و وقتشه برن که قله های توسعه نرم افزار رو فتح کنن ! خب تستینگ قطعا به اون معنا نیست . بد نیست که از چیزی که نوشتید استفاده کنید و لذت ببرید و به خودتون افتخار کنید ولی این روش جالبی برای تست اپلیکیشن های بزرگ و متوسط نیست . راه حل درست چیه ؟ خب باید اپ رو با استاندارد ها و ابزار هایی که مخصوص اینکار طراحی شدن تست کنید . میپرسید چطور ؟ خب ابزار های مختلفی وجود داره که شما به عنوان توسعه دهنده اگر کار تست رو هم خودتون انجام میدید باید یکی از اونهارو انتخاب کنید . همین !به عنوان یک نیمه توسعه دهنده پی اچ پی من از دو ابزار PHP Unit و PHP Sepec استفاده میکنم . اگر تا حالا تجربه کار با PHP رو داشتید احتمالا حداقل اسم یکیشون به گوشتون خورده . خب تستینگ جذاب هست ولی وقتی جذاب تر میشه که متوجه بشید میشه با تست کردن اپ یک فرایند کامل برای توسعه طراحی کرد و طبق اون جلو رفت ! TDD یکی از همین روش ها و فرایند های توسعه هست که به چهار مرحله کلی تقسیم میشه :1.نوشتن تست هاخب میخواید شروع کنید ؟ چطوره یه تست بنویسید . نه تنها فعلا لازم نیست که تستتون موفق باشه بلکه باید یک تست ناموفق رو بنویسید ! خب هدفتون چیه ؟ شما در این مرحله مشخص میکنید که چه هدفی رو دنبال میکنید و این هدف طی چه مراحلی به دست میاد . یجورایی الگوریتم رو در ذهنتون ایجاد میکنید . برای مثال شما یک تست مینوسید برای اینکه مطمئن بشید مثلا کاربری که در سیستم شما لاگین نشده حق ارسال پاسخ به کاربران دیگه رو نداره ! خب مراحل این تست چی میتونه باشه ؟ به عنوان یک کاربر احراز هویت نشده وارد اپ شوبا ارسال یک درخواست HTTP به یک روت خاص تلاش کن که یک پاسخ برای یک کامنتی که قبلا منتشر شده ثبت کنی .منتظر یک خطا از طرف اپلیکیشن باش ( در اینجا باید انتظار خطا داشت چون در حقیقت نمیخوایم اپ ما اجازه بده کاربری که لاگین نشده بیاد چیزی بنویسه پس بش خطا میدیم و در تست هم میخوایم مطمئن بشیم که وقتی کاربر تلاش میکنه اینکار رو انجام بده یک خطای مشخص از اپلیکیشن ما میگیره ! )خب این هم از مراحل اولیه . ولی اگر دقت کنید گفتم این تست قطعا نباید با موفقیت روبرو بشه . چرا ؟؟؟ خب چون هنوز هیچ کدی ننوشتیم که این منطق رو در اپ ما ایجاد کنه . پس میریم سراغ مرحله دوم !2.بنویسیدخب الان وقتشه که انتظاراتی رو که توی تست از اپتون برآورد شده رو جواب بدید . کافیه با نوشتن کد بیاید و هر چیزی که توی تستتون بش اشاره کردید رو پیاده کنید . اگر تست جالبی طراحی کرده باشید احتمالا الان کدنویسی و الگوریتم انجام اون کار براتون خیلی واضح تر شده . کافیه ادیتورتون رو باز کنید و دوباره برید سراغ کدنویسی3.تست کنیدخب الان که کدتون رو نوشتید بهتره یه شات بش بدید ، نه !؟ خب پس دوباره تست هاتون رو اجرا میکنید و این دفعه باید منتظر پیام موفقیت باشید . الان دیگه کدتون نوشته شده و اگر به اندازه کافی دقت و حوصله به خرج داده باشید نگرانی از بابت تست نیست !ولی چیزی که هست انگار زیادی خوشبین بودیم ! اینطور نیست ؟ خب ممکنه کد شما یسری نواقصی داشته باشه که باعث بشه کار نکنه ( منظورم از نقص مشکلی هست که باعث بشه تست شما با موفقیت انجام نشه ... اینکه میتونید مصرف منابع رو بهینه تر کنید یا کد تمیز تر و خوانا تری بنویسید نقص حساب نمیشه ! اونو میزاریم برای مرحله چهارم ) خب اینجا باید به خودتون مسلط باشید و سعی کنید که با آرامش دوباره ادیتور رو باز کنید و اول یه نگاهی به کد بندازید . سعی کنید متوجه بشید که کجای کدتون خطا ایجاد کرده و اون رو اصلاح کنید . اینکارو اینقدر انجام بدید تا بلاخره پیام سبز رنگ تست موفقیت آمیز رو در خط فرمان خودتون ببینید . سعی کنید در این مرحله از اعصاب خوردی و باگ های مختلف چیزی رو نشکنید تلفات جانی هم وارد نکنید . حالا میرم سراغ بخش نهایی و چهارم !4.ریفکتور کنیدریفکتورینگ اصولا به هر کاری گفته میشه که در این مرحله کد قبلی که نوشتید رو بهتر کنه . اسم های جالبی برای کلاس ها انتخاب نکردید ؟ کدتون فشرده نیست ؟ مصرف منابع تون میتونست بهینه تر باشه ؟ میتونید کوئری های کمتری به دیتابیس بزنید ؟خب در این مرحله میتونید چیز هایی که فکر میکنید کدتون رو بهتر میکنه بش اضافه کنید یا اصلاحات لازم رو انجام بدید . این مرحله همیشه ضروری نیست ولی سعی کنید اعتماد به نفستون جلوی بقیه همکارا باعث نشه که فکر کنید کدی که نوشتید توسط CIA نوشته شده و اصلا قابلیت بهتر شدن رو نداره ! با انجام این چهار مرحله پشت سر هم برای هر یک از اجزای اپتون میتونید با افتخار بگید که دارید به روش TDD برنامه نویسی و توسعه رو انجام میدید . دیدید اصلا سخت نبود ؟؟ حالا اگر سوالی چیزی پیش اومده براتون چطوره از من همینجا ( در بخش کامنت های این نوشته ) بپرسید . منتظر نظرات ، سوالات و پیشنهاددتون هستم ;)