تاریخ انتشار نسخه اصلی 6 دسامبر, 2016
وقتی در دوره کارشناسی در مورد روشهای مختلف توسعه نرم افزار مثل DSDM , SSADM و RUP میخواندیم، یکی از سوالایم همیشه این بود که افراد مختلف در یک شرکت که نقشهای مختلف را برعهده دارند چطوری با همدیگر ارتباط برقرار میکنند؟ آدمهای فنی و غیرفنی که دیدگاه و دایره لغات یکسانی ندارند چطور دچار سوء تفاهم نمیشوند؟ در واقع در روشهای بالا فازهای مختلف پروژه آنقدر از یکدیگر جدا و فاصله دار بودند که بنظر نمیرسید حتی زبانهای مدلینگ مثل UML هم کمک زیادی به ارتباط بهتر بکنند. زمانیکه شروع بکار کردم این قضیه بیشتر برایم روشن شد. احتمالا این تصویر معروف را همه دیده اید. درست است که خیلی تکراری شده و حقیقت دارد.
وقتی در سوئد مشغول بکار شدم و روش Agile را از نزدیک دیدم. احساس کردم که این مشکل ارتباطی تا اندازه ای بهبود پیدا کرده است. علت آن هم کوچک شدن تیم ها، کوتاه شدن چرخه بازخورد (feedback loop) و سرعت بیشتر در تولید محصول است که باعث میشود فرکانس و تناوب ارتباط تیم برنامه نویسی با تست کننده، مدیر نرم افزار بیشتر شده و در نتیجه به زبان مشترک نزدیکتر شوند. اما مسئله ارتباط هنوز هم سر جای خود است و هر چند سال یکبار هم شیوه ای جدید برای بهبود آن معرفی میشود. در میان این شیوه ها آنهایی موفق هستند که ماندگاری بیشتری دارند. شرکتهای زیادی آنها را پیاده سازی میکنند. ابزارهای زیادی ایده و مدلشان را پیاده سازی میکنند و در کل Community قوی حول آنها شکل میگیرد. یکی از این روشها Behavioral Driven Development یا توسعه مبتنی بر رفتار است. BDD که در غالب Agile اجرا میشود را میتوان در ادامه TDD و تحت تاثیر DDD دانست. پس بهتر است قبل از رفتن به جزئیات، با این دو روش مفهوم آشنا شویم:
روش BDD که در سال 2006 معرفی شد هدف اش آن است که روش TDD را ادامه دهد ولی برخلاف زبان تکنیکی آن که در نوشتن unit test استفاده میشود زبانی فراگیر را معرفی کند که تمامی افراد سهیم در پروژه (stakeholders) بتوانند از طریق آن با هم ارتباط برقرار و مستند سازی کنند. امروز برای این روش چهارچوبهای نرم افزاری در زبانهای مختلف برنامه نویسی وجود دارد. Cucumber در Ruby و SpecFlow در dotNet نمونه هایی از آن هستند. در پست بعدی در مورد جزئیات این روش بیشتر مینویسم و مثالهایی از SpecFlow میاورم.