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