توسعه تست محور / Test-Driven Development (TDD)

متدولوژی های زیادی وجود دارن که میتونن توسط شرکت ها بدون توجه به تکنولوژی های استفاده شده در طراحی و ساختن اپلیکیشن ها پیاده سازی بشن. شرکت های بزرگ حاوی صد ها کارمند معمولا از راه مستندات (documentation) برای توسعه اپلیکیشن ها استفاده میکنن، این یعنی اینکه قبل از هر چیزی اول بار اپلیکیشن ها اصطلاحا روی کاغذ با استفاده از یک شیوه مدل سازی توصیفی معتبر مثل Universal Modeling Language / UML (زبان مدل سازی یکپارچه) طراحی میشن. اصطلاحا به این روش document-driven development / DDD (توسعه مستند محور) گفته میشه. اغلب توسعه برنامه به این روش ضروریه و دلیلشم اینه که ممکنه نیاز باشه قبل از اینکه پروسه توسعه شروع بشه طراحی برنامه توسط بخش های مختلف شرکت که ممکنه هیچ دانشی از کدنویسی و برنامه نویسی نداشته باشن مورد بررسی قرار بگیره. هدف روش DDD اینه که کد یک بار به بهترین شکل ممکن نوشته بشه و این در حالی اتفاق بیافته که زمان مورد نیاز برای توسعه برنامه به کمترین مقدار ممکن برسه.

موقع طراحی اپلیکیشن ها به این روش، نیاز به تحقیق، برنامه ریزی و مستندسازی زیادی وجود داره، که این مراحل اغلب توسط یک یا چند معمار نرم افزار (software architect) انجام میشه. این افراد ممکنه خودشون هیچ کدی ننویسن، اما مسئولیت تعیین و شناسایی هر متد، کلاس، فانکشن و متغیر در اپلیکیشن رو بر عهده دارن، این در حالیه که همزمان باید سخت افزاری که کد روش اجرا میشه و سرویس های خارجی که ممکنه برنامه بهشون نیاز داشته باشه رو هم باید در نظر بگیرن. معماران نرم افزار توی حوزه کاری خودشون افراد متخصصی هستن و در بعضی مواقع حقوقشون میتونه از مهندسایی که وظیفه نوشتن خود کد رو بر عهده دارن هم بیشتر باشه.

زمانی که شرکت های کوچک تر به سراغ طراحی نرم افزار هاشون میرن، ایده استفاده از DDD دیگه منطقی به نظر نمیاد. دلیلش اینه که شرکت های کوچک تر معمولا شرایط اقتصادی مناسب و کافی برای سرمایه گذاری روی یک محصول بلندمدت که ممکنه سود زودهنگامی نداشته باشه ندارن. این یعنی اینکه برای اینکه بشه روی مرحله بعدی توسعه نرم افزار تولید شده سرمایه گذاری کرد، باید هرچه زودتر به نقطه ای برسه که کاربردی باشه و بشه ازش استفاده کرد. این مورد مخصوصا برای توسعه وب اپلیکیشن صدق میکنه که میتونه در زمان خیلی کمتری نسبت به یک نرم افزار به بازار ارائه بشه و اغلب هم بعد از اولین انتشار مرحله پروداکشن راحت تر و بهتر گسترش پیدا میکنه.

با توجه به شرایط شرکت های کوچک تر و کمتر شدن زمان توسعه یک محصول، یک متدولوژی جدید به نام Agile Development (توسعه چابک نرم افزار) به وجود اومد که البته قبل از اون هم میشه گفت به توسعه دهنده هایی اشاره میکنه که توی اتاق خواب خونه خودشون در حال کد زدن بودن! اینجور توسعه دهنده معمولا در کمترین بازه زمانی ممکن برنامه هایی مینویسن که کاری که ازشون انتظار میره رو انجام میدن. اینطوری میشه نرم افزار مورد نظر رو خیلی سریع تر به یک یا چند مشتری خریدار تحویل داد و درآمد کافی برای ادامه توسعه رو به دست آورد. اگر هم پس از انتشار باگی در برنامه مشاهده شد، توسعه دهنده انگیزه کافی برای ادامه پشتیبانی و بهبود یک محصول سودآور رو پیدا میکنه. توسعه agile با گسترش اینترنت هم عملی تر شده، چون دیگه با یک بار دیپلوی کردن میشه محصول رو با کمترین تلاش و زمان مورد نیاز به کاربران همه پلتفرم ها ارائه داد.

اصطلاح Agile Development تقریبا در سال 2001 توسط نویسندگان Agile Manifesto ابداع شد. مفهوم توسعه agile روی برنامه ریزی تطبیقی، چرخه های توسعه رو به تکامل و ایجاد زودهنگام و مکرر قابلیت های جدید در محصول تاکید داره. با این حال پیاده سازی هر کدوم از اینها، مخصوصا قسمت "برنامه ریزی تطبیقی" بستگی به نظر خود فرد داره. پس از اینکه این روش ابداع شد یک متدولوژی سطح بالاتر دیگه هم بر اساس اون به وجود اومد که بیشتر نیازمندی های مرحله "برنامه ریزی تطبیقی" رو با تست ها برطرف میکرد، که چیزی نیست جز TDD که بهتون معرفیش کردیم.