لوگو اجیلیتی
توسعه فیچر محور

توسعه فیچر محور | چطور FDD را در رویکرد اجایل به کار بگیریم؟

13 ساعت پیش
زمان مطالعه:
16 دقیقه

در دنیای چابک همه حواس‌ها معمولاً معطوف به اسکرام و کانبان است اما این دو فریمورک همیشه بهترین گزینه نیستند. برای پروژه‌های بزرگ، پیچیده و مبتنی بر «فیچر / Feature» که نیاز به ساختار، مدل‌سازی و پیش‌بینی‌پذیری دارند، «توسعه مبتنی بر فیچر / Feature Driven Development» یک جایگزین قدرتمند است.

FDD در اجایل برای سیستم‌ها و تیم‌های بزرگ، پیچیده و در مقیاس سازمانی طراحی شده و نرم‌افزار را در فرایندی پیوسته در قالب بخش‌های کوچک و ارزشمند - یعنی همان فیچرها - تحویل می‌دهد.

در این مقاله، توسعه فیچر محور را - از چرخه‌ عمر آن گرفته تا نقش‌های FDD - همراه با مثال‌های واقعی بررسی می‌کنیم و در نهایت سعی می‌کنیم به این سؤال پاسخ دهیم که آیا این فریمورک برای تیم شما مناسب هست یا خیر. 

روش FDD چیست؟

«توسعه مبتنی بر فیچر / Feature Driven Development» یکی از انواع متدولوژی های اجایل است که حول یک ایده ساده شکل گرفته: تحویل نرم‌افزاری کارآمد به کاربر در قطعه‌های کوچک و ارزشمندی به نام فیچر. 

برخلاف عمده چارچوب‌های ذهنیت اجایل، روش FDD در توسعه چابک نرم افزار، بسیار ساختارمند است؛ چیزی که برای سیستم‌های بزرگ و پیچیده که یکپارچگی و هماهنگی تیم ضروری است، بسیار مناسب است.

FDD در اواخر دهه 1990 توسط Jeff De Luca و با همکاری Peter Coad - دو متخصص حوزه IT و توسعه نرم‌افزار - در حین کار بر روی یک پروژه عظیم توسعه نرم‌افزار برای یک بانک سنگاپوری توسعه داده شد.

لوکا و کواد در مواجهه با یک سیستم بسیار وسیع، یک تیم بسیار بزرگ و انتظارات بسیار دقیق، برای ایجاد نظم، مسئولیت‌پذیری و پیش‌بینی‌پذیری، مدل Feature Driven Development را طراحی کردند. توسعه فیچر محور خود به‌دنبال خلق آن چیزی است که برای کاربر دارای ارزش و اهمیت است و از طرفی سعی دارد مهار پیچیدگی‌های فنی را به‌دست بگیرد.

روش FDD در متد چابک را می‌توان این‌طور توصیف کرد: چارچوبی برای کسانی که به نقشه نیاز دارند، نه صرفاً قطب‌نما. 

توسعه فیچر محور مناسب چه پروژه‌هایی است؟

توسعه مبتنی بر فیچر مناسب سازمان‌ها و پروژه‌هایی است که پیچیدگی بالایی دارند و به مقیاس‌پذیری و ساختارمندی نیاز دارند. این رویکرد معمولاً توسط تیم‌های بزرگ و پراکنده و به‌ویژه در صنایعی مانند فین‌تک، بانکداری، مخابرات و فناوری اطلاعات دولتی به‌کار گرفته می‌شود؛ یعنی در پروژه‌هایی که دامنه کار گسترده است اما الزامات کسب‌وکار انعطاف‌پذیر نیستند.

شاید تا اینجا بیشتر از جواب، برایتان سؤال و ابهام ایجاد شده باشد! نگران نباشید، به‌صورت گام‌به‌گام مباحث و اصطلاحاتی که در هر بخش به آن اشاره می‌شود را با زبانی ساده و شفاف شرح خواهیم داد و این نوید را به شما می‌دهیم که در پایان این یادداشت، FDD و جوانب مختلف آن را به خوبی درک خواهید کرد. 

توسعه مبتنی بر ویژگی برای سیستم‌های نرم‌افزاری بزرگ و پیچیده که نیاز به پیش‌بینی‌پذیری، مقیاس‌پذیری و «مدل‌سازی دامنه‌» دارند، بسیار مناسب است.

شاید بپرسید «مدل‌سازی دامنه‌» یعنی چه؟! مدل دامنه در مهندسی نرم‌افزار، مدلی مفهومی از دامنه است، که داده‌ها و رفتار آن را در خود جای می‌دهد.

پیچیده‌تر شد؟ حق دارید! مدل‌سازی دامنه به زبان ساده یعنی این: تصور کنید می‌خواهید یک شهر کامل را با قطعه‌های لگو بسازید. پیش از ساخت باید بدانید:

  • چه چیزهایی قرار است در این شهر خیالی وجود داشته باشند؟ درخت؟ تیر چراغ برق؟ آدمک‌ها؟ آپارتمان یا خانه‌های ویلایی؟ …

  • اجزای این شهر چگونه در کنار یکدیگر قرار می‌گیرند؟ آدمک‌ها در پیاده‌رو قرار داده می‌شوند یا ماشین‌ها و راننده‌های لگویی نیز لازم داریم؟ 

به این می‌گویند مدل‌سازی دامنه؛ مثل کشیدن یک نقشه ساخت یا Blueprint که همه جزئیات و اجزای مهم و مورد نیاز ساختن یک ساختمان در آن به‌دقت تشریح شده‌اند. 

در توسعه نرم‌افزار مدل‌سازی دامنه معنای زیر را پیدا می‌کند:

  • سیستمی که قرار است توسعه داده شود - حالا هرچه می‌خواهد باشد: سایت، اپلیکیشن، نرم‌افزار، … -  چه اجزایی خواهد داشت؟ 

  • ارتباط این اجزا در نرم‌افزار چگونه است؟ 

تصور کنید می‌خواهید یک اپلیکیشن برای سفارش پیتزا توسعه دهید؛ در این «سیستم» شما اجزای زیر را خواهید داشت:

  • مشتری (سفارش‌دهنده)؛

  • مشتری، سفارش خود را ثبت می‌کند؛

  • هر سفارش، شامل یک یا تعدادی پیتزا می‌شود؛

  • هر پیتزا شامل چند مورد افزودنی - قارچ، گوجه، فلفل، پنیر اضافه، حتی آناناس! - می‌شود که مشتری انتخاب می‌کند. 

این می‌شود فهرستی از آنچه سیستم مورد نظر ما به آن نیاز دارد و به این ترتیب دامنه سیستم را مدل‌سازی کرده‌ایم.

FDD برای چه نوع پروژه‌هایی مناسب است؟

مورد استفاده

توضیح

نمونه پروژه‌ها

پروژه‌های بزرگ سازمانی / Enterprise-Level

ساختار منظم FDD برای پروژه‌های چندتیمی و چندلایه با هزاران فیچر کارآمد است.

سیستم‌های بانکی، ERP، پلتفرم‌های مخابراتی

نرم‌افزارهای دارای ویژگی‌های زیاد / Feature-Rich

پروژه‌هایی که می‌توان آن‌ها را به فیچرهای کوچک و قابل‌تحویل شکست.

پلتفرم‌های SaaS، CMS، موتورهای رزرو آنلاین

پروژه‌های با دامنه ثابت و نیازمندی‌های مشخص

مناسب پروژه‌هایی با قوانین کسب‌وکار شفاف و پایدار، چون FDD از مدل‌سازی دامنه آغاز می‌کند.

نرم‌افزارهای بیمه، سیستم‌های اداری بیمارستان‌ها

پروژه‌های با دامنه ثابت و نیازمندی‌های مشخص

تقسیم‌بندی دقیق نقش‌ها مدیریت تیم‌های گسترده و دورکار را آسان می‌کند.

پروژه‌های برون‌سپاری‌شده، تیم‌های چندنقشی (تحلیلگر، طراح، برنامه‌نویس، تستر)

پروژه‌های نیازمند طراحی قوی و بدون خطا

تأکید FDD بر طراحی و بازبینی مکرر، ریسک خطا و بدهی فنی را کاهش می‌دهد.

سیستم‌های حیاتی: پزشکی، هوافضا، زیرساخت‌های صنعتی

چه پروژه‌هایی برای FDD مناسب نیستند؟

نوع پروژه

علت ناکارآمدی FDD

مثال واقعی

پروژه‌های با اهداف مبهم یا تغییرات زیاد

FDD به مدل‌سازی اولیه نیاز دارد؛ تغییرات مداوم باعث بی‌فایده شدن مدل‌سازی می‌شود.

اپلیکیشن استارتاپی نوپا که هر هفته تغییرات اساسی در ویژگی‌ها دارد.

پروژه‌های با تمرکز زیاد روی طراحی یا UI/UX

FDD بیشتر بر منطق و Backend تمرکز دارد؛ در پروژه‌های اولویت‌محور طراحی چندان کارآمد نیست.

اپلیکیشن موبایل با تأکید بر رابط کاربری خلاقانه و انیمیشن‌های پیچیده.

پروتوتایپ‌ها یا MVPهای سریع

ساختار و مدل‌سازی FDD سرعت را پایین می‌آورد؛ مناسب تست ایده‌های سریع نیست.

نمونه اولیه برای تست ایده در کمتر از دو هفته به‌منظور جذب سرمایه‌گذار.

پروژه‌هایی که خروجی آن‌ها فیچرمحور نیست

چون FDD حول فیچرهاست، در پروژه‌هایی بدون فیچر مشخص کارایی ندارد.

پروژه‌های تحقیقاتی، مهاجرت داده یا کارهای زیرساختی.

پروژه‌های خلاقانه یا اکتشافی

FDD به تحلیل و مدل‌سازی از ابتدا نیاز دارد؛ اما این نوع پروژه‌ها بر آزمایش و خطا و تغییر مداوم متکی هستند.

توسعه یک دستگاه پوشیدنی جدید با هوش مصنوعی و حسگرهای در حال تحقیق

چرخه عمر FDD: پنج مرحله کلیدی

چرخه عمر توسعه مبتنی بر فیچر شامل پنج مرحله اصلی است که هرکدام برای اطمینان از پیشرفت تدریجی به سوی یک محصول کامل طراحی شده‌اند. برای درک ساده‌تر این فرایند، اجازه بدهید با همان مثال «معماری یک شهر لگویی» پیش برویم تا هر مرحله را راحت‌تر درک کنیم. 

اولین گام شامل ایجاد یک مدل است؛ یعنی طرح یا نقشه‌ای سطح بالا از اجزای اصلی سیستم که کمک می‌کند دامنه کار شفاف شود. به‌عنوان معمار و سازنده محصول، پیش از آنکه کاری را شروع کنید، باید مدل و نقشه محصول خود را با جزئیات طراحی کنید. 

در این مرحله، باید تعیین کنیم سیستم یا محصول چه اعمالی باید انجام دهد تا برای کاربر مفید واقع شود و او را به هدف خود نزدیک کند. در روش FDD، هر فیچر یک فانکشن یا کاربرد معنادار و ساده است مثل «محاسبه مجموع مبلغ سفارش» یا «ارسال پیامک کد تأیید». 

فیچرها در این مرحله در یک «دسته فیچر یا Feature Set» قرار می‌گیرند؛ مثلاً فیچر ست «مدیریت سفارشات» می‌تواند شامل «ثبت سفارش»، «لغو سفارش» و «بررسی وضعیت پرداخت» باشد. زمان توسعه و تحویل هر فیچر باید زیر دو هفته باشد.

هر فیچر محصول به توسعه‌دهندگانی مشخص اختصاص می‌یابد که بر اساس تخصص خود مسئول توسعه و تحویل آن فیچر خواهند بود. زمان تحویل هر فیچر را بر اساس وابستگی‌های موجود و همچنین ارزش تجاری‌ای که به‌همراه دارند، اولویت‌بندی کنید.

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

پیش از توسعه هر فیچر نیز باید ببینید آن فیچر چگونه با دیگر فیچرها و بخش‌های سیستم کار خواهد کرد و آیا به‌درستی با آنها هماهنگ خواهد شد یا خیر. 

وارد فاز عملی می‌شویم و توسعه‌دهندگان هر فیچر را به‌صورت تدریجی کدنویسی، تست و با سیستم ادغام می‌کنند. هر فیچر دو آزمایش را پشت سر خواهد گذاشت: تست واحد یا Unit Testing که آن فیچر را به‌تنهایی بررسی می‌کند و تست ادغام یا Integration Testing که آن فیچر را در تعامل با دیگر فیچرها و بخش‌های سیستم تست می‌کند. کد نوشته‌شده تنها پس از پشت سر گذاشتن تمام این آزمایش‌ها به کدبیس اضافه خواهد شد. 

در نهایت مراحل چهار و پنج را برای هر فیچر مجدداً تکرار کنید و آرام‌آرام محصول خود را توسعه دهید. به‌این‌ترتیب هر یک یا نهایتاً دو هفته یک خروجی قابل ارائه دارید که ارزشی مشخصی برای کاربر/مشتری خلق می‌کند و در عین حال همراه با ارزش تجاری کسب‌وکار است. 

فرایند توسعه فیچرمحور

این فرایند پنج مرحله‌ای چرا انقدر خوب کار می‌کند؟ چون همه اعضای تیم می‌دانند دقیقاً چه چیزی در حال توسعه است؛ همه اعضا و ذی‌نفعان پروژه هر هفته پیشرفتی تازه می‌بینند؛ مشکلات و چالش‌ها سریع شناسایی و برطرف می‌شوند و محصول شما درست مثل یک شهر لگویی، قطعه‌قطعه ساخته و توسعه داده می‌شود.

ساختار تیم و نقش‌های کلیدی Feature Driven Development

فرض کنید محصول دیجیتال شما قرار است درست مثل یک ماشین اسپرت طراحی و ساخته شود. در تیمی که مسئولیت ساخت این ماشین را بر عهده دارد بعضی‌ها طراحی می‌کنند، بعضی موتور را می‌سازند، بعضی ایمنی خودرو را بررسی می‌کنند و عده‌ای مطمئن می‌شوند که خودرو همان چیزی است که رانندگان و سرنشینان آن می‌خواهند.

با این فرض بیایید نقش افراد حاضر در تیمی که بر مبنای توسعه فیچر محور کار می‌کند را به‌ زبانی ساده بررسی کنیم.

نقش

چی کار می‌کنه؟

مثال

نقش مشابه

معمار ارشد / Chief Architect

ساختار کلی سیستم را طراحی می‌کند.

تصمیم می‌گیرد که رابط کاربری، بک‌اند و پایگاه داده چطور با هم کار کنند.

مثل کسی که نقشه کلی ماشین را طراحی می‌کند.

برنامه‌نویس ارشد / Chief Programmer

برنامه‌های فنی را از روی معماری استخراج و تیم فنی را هدایت می‌کند.

فیچر بزرگی مثل «داشبورد نرم‌افزار» را به بخش‌های کوچک‌تر تقسیم و مسئولیت هر یک را به دولوپرهای مختلف می‌سپارد.

مثل مکانیکی که می‌داند هر قطعه چطور کار می‌کند.

صاحبان کلاس / Class Owners

مسئول بخش مشخصی از کد و نگهداری آن هستند.

یکی مسئول ماژول ورود کاربران است، دیگری مسئول سیستم اعلان‌ها.

مثل مهندسینی که هر کدام بخش خاصی از موتور ماشین را مدیریت می‌کنند.

رهبران تیم فیچر / Feature Team Leads

یک تیم موقت را برای ساخت یک ویژگی خاص هدایت می‌کنند.

رهبری تیمی که قرار است قابلیت «ایجاد تسک جدید» را بسازد.

مثل سرتیم‌هایی که مسئول تمام کردن یک بخش خاص از پروژه‌اند.

برنامه‌نویس‌ها / Developers

کدنویسی و تست بخش‌هایی از پروژه که به آن‌ها واگذار شده است.

کدنویسی «نمای تقویم» یا قابلیت «افزودن کامنت».

مثل کارگرانی که در خط تولید واقعاً ماشین را سر هم می‌کنند.

متخصصان دامنه / Domain Experts

دانش کسب‌وکار و نیازهای کاربر را در اختیار تیم می‌گذارند.

تسک‌ها را اینطور تعریف می‌کنند: «کاربر باید بتواند 1 تا 3 تسک مهم هر روز خود را روی داشبورد ببیند».

مثل مشتری یا مدیر محصولی که می‌دانند ماشین دقیقاً چه کاری باید انجام بدهد.

نقش های توسعه فیچرمحور

11 نکته طلایی در توسعه محصول به روش فیچرمحور

تا اینجا باید به خوبی پنج مرحله از چرخه عمر روش Feature-Driven Development و همچنین نقش‌های این روش را درک کرده باشید. حالا وقت آن است که سریع و کوتاه چند نکته مهم را گوشزد کنیم تا از اهمیت هر یک از مراحل FDD غافل نمانید.

مدل دامنه همان نقشه ساخت شهر لگویی شماست؛ آن را خیلی جدی بگیرید. هیچ ساختمان منسجم و قابل اتکایی بدون یک نقشه ساخت دقیق ساخته نمی‌شود. خشت اول، مهم‌ترین قطعه است.

مدل‌سازی، کار راحتی نیست و بهتر است از همان ابتدای کار از متخصصین مدل‌سازی دامنه کمک بگیرید. مدل‌سازی را به‌صورت تصویری پیش ببرید و برای این کار از ابزارهای مدل‌سازی مانند دیاگرام‌های UML استفاده کنید و مدل خود را با هر بینش تازه‌ای که به دست‌می‌آورید، بهینه کنید.

نکته کنکوری: عبارت UML مخفف Unified Modeling Language به معنای «زبان مدل‌سازی یکپارچه» است. یک زبان بصری منسجم که از نمادهای خاص خود استفاده می‌کند. این زبان‌های مدل‌سازی کمک می‌کنند سیستم‌های پیچیده، به‌سادگی قابل درک باشند؛ این زبان‌ها ارتباط بین اعضای تیم را آسان و در طول فرایند توسعه از آشفتگی و هدررفت زمان جلوگیری می‌کنند.

مدل FDD بر مبنای بخش‌های کوچک و قابل ارائه بنا شده است. اگر فیچری که می‌خواهید توسعه دهید از حد مشخصی بزرگ‌تر باشد، راه را اشتباه رفته‌اید. برای اینکه از انتخاب فیچر درست اطمینان حاصل کنید، می‌توانید روش زیر را به کار ببندید:

“[Action] the [result] [object]”
e.g., “Calculate monthly revenue”


مدل «[شی] [نتیجه] [عمل]» که چیزی شبیه به مفهوم یوزر استوری است، کمک می‌کند آنچه می‌خواهید بسازید را به شکلی شفاف دربیاورید. این فرمول سه بخش ساده دارد:
بخش Action یا عمل: این فیچر باید چه کاری انجام دهد؟ (این فیچر باید «بسازد؟»، «باز کند؟»، «پاک کند؟»)
بخش Result یا نتیجه: خروجی کاری که این فیچر انجام می‌دهد، چیست؟ («تأییدیه؟»، «خالی کردن؟»، «کامل کردن؟»)
بخش Object یا شی: تعیین می‌کند اصلاً درباره چه چیزی صحبت می‌کنیم! («سفارش؟»، «پیامک؟»، «قیمت؟»)

به این مثال دقت کنید تا این فرمول کاملاً برایتان شفاف شود: «پیامک تأییدیه ارسال کن.»

چرا این فرمول خوب جواب می‌دهد؟ جواب این سؤال پنج بخش دارد:

  • شفاف و مشخص است؛ مثلاً «پیامک ارسال کن» یا «تأییدیه ارسال کن» کمکی به اعضای تیم نمی‌کند!

  • کوچک و متمرکز است؛ مثلاً «برای تأیید سفارش مشتری، پیامکی به شماره همراه ثبت‌شده او ارسال کن.» اطلاعات زیادی می‌دهد اما بخش مفید آن چقدر است؟

  • رصد و اولویت‌بندی آن آسان است؛ وقتی فیچرها در این قالب نوشته شوند، مدت زمان انجام، تکمیل و تحویل آنها و همچنین میزان اهمیت آنها به‌راحتی قابل انجام است. 

  • همه اعضای تیم را هماهنگ می‌کند؛ مدیر محصول، دولوپرها، کارشناس تست، طراحان محصول و ذی‌نفعان با خواندن همین سه کلمه می‌توانند سریعاً بفهمند چه چیزی در حال توسعه است.

  • کدنویسی را به ارزش تجاری متصل می‌کند؛ در این فرمول، ارزشی که هر فیچر در اختیار کاربر قرار می‌دهد بسیار واضح است. 

روش FDD به همکاری بر اساس «نقش‌ها» متکی است؛ مثل «معمار شهر»، «کارگر» و «شهردار» که نقش‌هایی به هم متصل دارند. شما نیز در تیم توسعه محصول خود باید نقش‌ها و مسئولیت‌هایی کاملاً مشخص داشته باشید.

نقش‌هایی مثل «معمار ارشد»، «مالک کلاس»، «لید تیم فیچر»،… باید مشخص باشند. فراموش نکنید که آشپزهای متعدد و مسئولیت‌های ناواضح غذا را یا شور می‌کند یا بی‌نمک.

با عجله به دست گرفتن لگوها و شروع به ساخت کردن، نتیجه دلخواهتان را به همراه نخواهد داشت؛ پس برای ساخت محصول دیجیتال خود نیز سریعاً به سراغ کدنویسی نروید!

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

باز هم تأکید می‌کنیم که بر مبنای فیچرها - یعنی قطعه‌قطعه - پیش بروید؛ در یک شهر لگویی اول تمامی جاده‌ها را نمی‌سازید تا بعد بروید سراغ ساختمان‌ها! هر تکه از محصول دیجیتال شما در فرایند توسعه باید «قابل استفاده» و «قابل آزمایش» باشد.

برخی از تیم‌ها برای توسعه یک اپلیکیشن در هفته اول  تمامی دکمه‌ها را طراحی می‌کنند، سپس در هفته بعد منطق back-end را به‌صورت کامل می‌نویسند و تازه در هفته سوم این موارد را به هم وصل می‌کنند! در این فرایند سه هفته تا رسیدن به یک خروجی قابل ارائه زمان سپری می‌شود.

به جای این کار بخش به بخش پیش بروید؛ مثلاً برای یک اپلیکیشن سفارش غذا ابتدا قطعه مربوط به ثبت سفارش را کامل کنید:

  • یک دکمه برای ثبت سفارش

  • یک فرم برای انتخاب پیتزا

  • یک کد برای ذخیره‌سازی سفارش

  • صفحه نمایش پیام تأییدیه

پس از ساخت این قطعه به راحتی می‌توانید آن را تست و استفاده کنید.

توسعه فیچرمحور تیم‌ها را تشویق می‌کند به‌صورت منظم طراحی‌ها و کدها را بازبینی کنند. بازبینی منظم و پیاپی در روند پروژه باعث می‌شود تا حجم کم و سبکی از کار بازرسی شده و در صورت نیاز اصلاح و بهینه شود. بازبینی‌ها باید متناوب و کوتاه باشند و تمرکز هر بازبینی باید بر روی عملکرد و فیت بودن آن فیچر در معماری کل محصول باشد.

تیم‌های FDD باید فیچرها را با سرعت بالایی تحویل دهند؛ خودکارسازی کمک می‌کند سرعت و کیفیت کار در این فرایند حفظ شود. حین توسعه هر فیچر، تست آن را بنویسید و از پایپ‌لاین CI/CD برای خودکارسازی ادغام‌ هر فیچر در سیستم استفاده کنید؛ صحت کدها و فیچر هر تیم فیچر را به‌صورت مجزا بررسی کنید.

مسئولیت‌پذیری زمانی وجود دارد که شفافیت داشته باشیم. با استفاده از روش‌هایی مانند بورد کانبان، روند پیشرفت توسعه هر فیچر را به‌صورتی شفاف در برابر دید همه اعضای تیم قرار دهید تا همه افراد نسبت به مسئولیت‌های خود متعهد باشند. از توسعه فیچرهای جانبی یا هرگونه کار حاشیه‌ای جداً خودداری کنید!

8 نکته‌ای که تا اینجا بررسی کردیم به چگونگی اجرای روش FDD در عمل مرتبط بود؛ سه نکته بعدی اما که به‌اندازه تمامی نکات قبلی اهمیت دارند، به بعد فرهنگی و ذهنیت ماجرا می‌پردازد.

اعضای تیم باید در همکاری و رقابتی سالم با یکدیگر فعالیت کنند. هیچکس به تنهایی نمی‌تواند یک شهر کامل - حتی یک شهر لگویی -  را بسازد. فرایند FDD تنها با همکاری مؤثر بین افراد به نتیجه می‌رسد.

در گفتگوها و جلسات تیمی در مورد کاری که انجام می‌هید صحبت نکنید، درباره آنچه کاربر از کار شما به دست خواهد آورد حرف بزنید! یعنی به جای اینکه بگویید «من ده تست نوشتم.» باید بگویید «امکان اضافه کردن کد تخفیف در زمان پرداخت را تست و تأیید کردم و حالا کاربران می‌توانند از این گزینه استفاده کنند.»

کدنویسی به‌تنهایی دردی از هیچکس دوا نمی‌کند. همه انرژی شما باید متمرکز بر خروجی‌های ارزشمندی باشد که یک درد واقعی از کاربر را دوا کند. هر هفته - و در برخی محصولات گاهی شاید حتی هر روز - باید در تلاش باشید چیزی را به کاربر تحویل دهید که او می‌تواند ببینید، استفاده کند و از آن سود ببرد.

کاربران اهمیتی نمی‌دهند که شما چند خط کد نوشته‌اید؛ آنها فقط فیچرهایی می‌خواهند که کارشان را راحت کند.

11 نکته طلایی در توسعه فیچرمحور

مقایسه FDD با TDD و BDD

هر سه رویکرد توسعه رفتار محور یا Behavior Driven Development، توسعه تست محور یا Test Driven Development و توسعه فیچر محور یا FDD با هدف بهبود کیفیت و تحویل نرم‌افزار به کار می‌روند، اما تمرکز، هدف و کاربرد آن‌ها با هم متفاوت است؛ جدول زیر به‌طور ساده و خلاصه تفاوت‌های کلیدی این سه رویکرد را بررسی کرده است.

 

تمرکز بر

مسئول اصلی

خروجی کلیدی

مناسب برای

FDD
توسعه مبتنی بر فیچر

تحویل فیچرها

توسعه‌دهندگان، معماران

فهرست فیچرها

تیم‌های بزرگ و ساختاریافته با دامنه‌های مشخص

BDD
توسعه مبتنی بر رفتار

رفتار کاربر

توسعه‌دهندگان، تسترها، ذی‌نفعان تجاری

سناریوهای Gherkin

هماهنگ‌سازی توسعه با منطق تجاری

TDD
توسعه مبتنی بر تست

صحت کد

توسعه‌دهندگان

تست‌های واحد / Unit Tests

پیشگیری از باگ و بازسازی ایمن کد

چارچوب توسعه ویژگی محور یک روش برنامه‌ریزی و تحویل است که ساختار و نحوه سازماندهی تیم برای توسعه فیچرها را مشخص می‌کند؛ اما BDD و TDD روش‌های توسعه‌ای هستند که معمولاً در دل چارچوب‌های دیگر مثل اسکرام، کانبان یا FDD قابل استفاده‌اند.

در عمل، تیم‌هایی که از FDD استفاده می‌کنند، ممکن است برای حفظ کیفیت کدنویسی‌های خود از TDD یا BDD نیز بهره ببرند. این روش‌ها مکمل هم هستند، نه جایگزین هم. FDD مثل نقشه راه پروژه است و BDD/TDD ابزارهایی هستند برای اطمینان از اینکه در مسیر درستی حرکت می‌کنید.

جمع‌بندی

در دنیای Agile که انعطاف‌پذیری حرف اول و آخر را می‌زند، توسعه مبتنی بر فیچر چارچوبی مقیاس‌پذیر و ساختارمند را ارائه می‌دهد. FDD رویکردی ایده‌آل برای تیم‌ها و پروژه‌هایی است که مقیاس‌پذیری، ساختارمندی و پیش‌بینی‌پذیری نتایج در اولویت آنهاست.

تفکر چابک فقط یک متدولوژی نیست، یک نگاه متفاوت به کار تیمی و حل مسئله است. در اجیلیتی، آموزش Agile با رویکردی عملی، تدریجی و متناسب با فضای کاری تیم‌های ایرانی طراحی شده است.

سوالات متداول

FDD یا توسعه مبتنی بر فیچر یک متدولوژی چابک است که بر تحویل نرم‌افزار از طریق فیچرهایی با تعریف و ارزش مشخص برای کاربر تمرکز دارد. این متد با استفاده از چرخه‌های کوتاه و تکرارپذیر کمک می‌کند تا تیم‌های بزرگ و و پروژه‌های پیچیده به نتایج قابل‌پیش‌بینی و باکیفیت دست یابند.
برخلاف اسکرام یا کانبان، FDD متمرکز بر فیچرها و کاملاً ساختاریافته است. در حالی که اسکرام بر روی دوره‌های تکرارپذیر و کانبان بر مدیریت جریان تمرکز دارد، قدرت FDD در برنامه‌ریزی مبتنی بر ویژگی و تحویل تدریجی و افزایش فیچرها است.
فرایند FDD شامل پنج مرحله «توسعه مدل کلی»، «ایجاد فهرست فیچرها»، «برنامه‌ریزی بر اساس فیچر»، «طراحی بر اساس فیچر» و «توسعه بر اساس فیچر» است. در تمامی این مراحل همکاری، برنامه‌ریزی دقیق و توسعه تدریجی بالاترین اهمیت را دارند.
FDD ساختاری شفاف، مقیاس‌پذیر و پیش‌بینی‌پذیر را برای تیم‌های بزرگ فراهم می‌کند. این روش تحویل زودهنگام فیچرهای ارزشمند برای مشتری را تضمین می‌کند، ریسک را کاهش می‌دهد و تمرکز زیادی بر یکپارچگی معماری دارد که برای پروژه‌های پیچیده با نیازهای ثابت مفید است.
FDD با تمرکز روی ویژگی‌های کاربردی، توسعه نرم‌افزار را سریع‌تر و منظم‌تر می‌کند. کارها را به مراحل کوچک و قابل پیگیری تقسیم می‌کند، سردرگمی را کم می‌کند و در هر مرحله، خروجی قابل استفاده می‌دهد.
FDD در ابتدای پروژه نیاز به مدل‌سازی دقیقی دارد که باعث می‌شود برای پروژه‌های با تغییرات سریع یا مبتنی بر کشف چندان مناسب نباشد. FDD همچنین به شدت به معماران باتجربه وابسته است و بدون داشتن رهبری قوی، فرایند آن ممکن است دچار ناهماهنگی شده و کارایی لازم را نداشته باشد.
بله، FDD می‌تواند با اسکرام یا کانبان ادغام شود. برخی از ویژگی‌های FDD مانند فهرست فیچرها یا مالکیت کلاس‌ها را می‌توان با روند تکرارپذیر اسکرام و مدیریت جریان کانبان ترکیب کرد.
نرم‌افزارهایی مانند جیرا و UML برای ردیابی تسک‌ها، فیچرها و همچنین سیستم‌ها کنترل نسخه مانند Git در متد FDD به‌کار گرفته می‌شوند. این ابزارها به مدیریت فهرست‌ فیچرها، ردگیری روند کار اطمینان یافتن از هماهنگی در میان تیم‌های توسعه کمک می‌کنند.
FDD یا توسعه فیچر محور برای تیم‌های بزرگ و پروژه‌های پیچیده درست شده است. با اینکه تیم‌های کوچک می‌توانند برخی جنبه‌های FDD مانند فهرست فیچرها را در فرایندهای خود به کار ببرند، تمرکز FDD بر مدل‌سازی اولیه و نقش‌های کاملاً ساختاریافته آن ممکن است برای تیم‌های کوچک و پویاتر چندان کارآمد نباشد.

مقاله‌های مرتبط

00 توسعه تکراری و افزایشی در اجیلیتی

توسعه تکرارشونده و افزایشی / Iterative & Incremental Development با مثال‌های واقعی

3 ماه پیش
زمان مطالعه:
9 دقیقه
Agile Software Development   Cover

توسعه چابک نرم افزار | توسعه نرم افزار به روشی مدرن

3 ماه پیش
زمان مطالعه:
14 دقیقه
عضو خبرنامه اجیلیتی شوید تا مقالات تخصصی، راهکارهای به‌روز و ابزارهای کاربردی را در باکس خود دریافت کنید.