روش های توسعه محصول که باید بشناسید – موثرترین راهکارها


توسعه نرمافزار موفقیتآمیز، نیازمند اتکا بر استعداد، ابزار و مدیریت است. تمامی این موارد به یک اندازه اهمیت دارند و تردید نکنید که پروژه شما بدون آخری به هیچ موفقیتی نمیرسد. رویه مدیریتی شما در یک پروژه، بهشدت تاثیرگرفته از روششناسی توسعه محصول در کسبوکار خواهد بود. همین روششناسی است که فونداسیون را برای تعامل مهندسان، تسترها، مدیران و دیگر ذینفعان پروژه با یکدیگر و همینطور با فرایند توسعه نرمافزار بنا میکند. بعد از این باید از تفاوت میان روش های توسعه محصول باخبر باشید.
محبوبترین روش های توسعه محصول، ساختار «خطی» (آبشاری) و «تکرارشونده» (چابک) دارند و هرکدام با مجموعهای از مزایا و معایب از راه میرسند. اگر میخواهید بهرهوری نیروها و همینطور نرخ موفقیت کسبوکار را بالاتر ببرید، لازم است با انواع روششناسیها و زمان بهکارگیری هرکدام آشنا باشید. به مطالعه این مقاله ادامه دهید تا به شکلی عمیقتر به روش های توسعه محصول خطی و تکرارشونده بپردازیم و از اثر آنها بر کسبوکار بگوییم. اما پیش از هر چیز باید به چند سوال بنیادین پاسخ دهیم.
فرایند توسعه محصول چیست؟

فرایند توسعه محصول مجموعهای از جریانهای کاری و ابزارهایی است که در تولید نرمافزار به کار گرفته میشوند. قدمهای مختلفی که باید در توسعه محصول برداشت، چرخه عمر محصول را شکل داده و نقش ستون فقراتی را ایفا میکنند که به تیم جهت داده و مشارکت میان اعضا را بالا میبرند.
روش های توسعه محصول مختلف به تعیین این میپردازند که هر گام از جریان تولید چطور به گام بعدی متصل خواهد شد. برای مثال در روششناسی «چابک» یا «اجایل» (Agile)، همهچیز راجع به تمام کردن پروژه در برهههای توسعه مختلف و تغییر دادن دائمی پیشنیازها است. از سوی دیگر در روششناسی آبشاری، موضوع راجع به برداشتن مجموعهای از گامهای خطی است.
- مطالب پیشنهادی برای مطالعه:
گامهای مختلف توسعه محصول چیست؟
فازهای مختلفی که به هنگام توسعه محصول پشت سر میگذارید، همگی در این صنعت شکلی استاندارد دارند. در واقع تنها ترتیب و اولویت این مراحل است که بسته به روش های توسعه محصول دستخوش تغییر میشوند. گامهای اساسی در چرخه توسعه محصول شامل «پژوهش»، «طراحی»، «کدنویسی»، «تست» و «توزیع» میشوند.
- پژوهش: شرکت به ترسیم مفهومی واضح برای محصول مشغول شده و پیشنیازهای توسعه را جمعآوری میکند. تیم توسعه به تعریف ابعاد کار میپردازد که خود شامل اهداف، بودجه، موعدها، ابزارهای امنیتی و نرمافزارهای مورد استفاده در سراسر فرایند توسعه میشود.
- طراحی: تیم توسعه، ساختار کلی پروژه را براساس پیشنیازهای تعریف شده برای سیستم شکل میدهد. نتیجه نهایی هم مجموعهای از مشخصات برای طراحی سطح بالای محصول (مانند داده راجع به کارکرد ماژول، وابستگیها و نمودارهای معماری) و طراحی سطح پایین (داده راجع به رابط کاربری، وابستگیها و منطق کاربردی میان واحدها) خواهد بود.
- کدنویسی: در مرحله کدنویسی، مهندسان به گردآوری ماژولهای سیستم، با توجه به پیشنیازها و مستندات طراحی تایید شده میپردازند. این مرحله با اختلاف فراوان، طولانیترین مرحله در فرایند توسعه محصول به حساب میآید. کدنویسی معمولا به صورت موازی با فاز تست پیش میرود.
- تست: این مرحله شامل جستجو برای باگها و خطاهای گوناگون در بخش جلویی و پشتی سیستمها میشود. برای حصول اطمینان از ثبات محصول نهایی، اکثر شرکتهای فعال در حوزه توسعه محصول نرمافزاری به سراغ دو نوع تست میروند: تست واحد (بررسی جداگانه و ایزوله واحدها در سراسر توسعه) و تست یکپارچهسازی (تایید اینکه تمام اجزا چگونه درون یک نسخه آزمایشی با یکدیگر تعامل میکنند).
- توزیع: تیم به عرضه محصول نهایی میپردازد یا آن را برای بازنگری در دسترس مشتریان قرار میدهد. محصول نرمافزاری حتی بعد از عرضه هم نیاز به پشتیبانی و نگهداری دارد. در گذر زمان باگها از بین میروند و بهبودهای نرمافزاری از راه میرسند.
چرا باید به یکی از روش های توسعه محصول پایبند باشیم؟

هر کدام از بسترهای توسعه محصول، مقصودی واضح و مشخص را دنبال میکنند: اینکه از منابع خود به شکلی بهینه و موثر استفاده کنید تا در سریعترین زمان ممکن قادر به ارائه محصولی با کیفیت باشید. شرکتها نباید صرفا به مهارتهای تیم و تکنولوژیهای خود اکتفا کنند. بسیار مهم است که یک سیستم مدیریت پروژه صحیح و قدرتمند شکل بگیرد تا بتوان از منابع به درستی بهرهبرداری کرد.
نظرسنجی در سال ۲۰۱۹ میلادی نشان میدهد که عملکرد ضعیف ناشی از سوء مدیریت، علت هدررفت ۱۲ درصد از سرمایهگذاریها بودهاند. در گزارشی دیگر آمده که شرکتی که از روش های توسعه محصول صحیح استفاده میکند، به ۲۸ درصد منابع کمتر برای تکمیل پروژه نیاز خواهد داشت.
برای جمعبندی تمام اینها باید گفت که روش های توسعه محصول مختلف، مزایای متعددی برای پروژههای نرمافزاری شما به همراه خواهند آورد. چنین روشی:
- باعث میشود اهداف، ماموریتها و نقشه راه معماری شما کاملا واضح باشد.
- با اتوماسیون وظایف کمارزش، مدتزمان ورود شما به بازار را کاهش میدهد.
- با بهرهگیری از ابزارهای کامپیوتری، بهرهوری را به بیشینه میرساند.
- هزینهها را در فازهای طراحی، کدنویسی و تست کم میکند.
- باعث میشود قادر به تقویت فرایند توسعه از پیش تثبیت شده خود در سازمان باشید.
روش های توسعه محصول
اکنون وقت آن رسیده که نگاهی به روششناسیهای مختلف در توسعه محصول بیندازیم. در ادامه این مقاله به بررسی روش های توسعه محصول گوناگون میپردازیم، تفاوتهایشان را تشریح میکنیم و در آخر به سراغ مزایا و معایب هر یک میرویم.
۱. روششناسی آبشاری (خطی)

مزایا
- مستندسازی واضح برای پروژه با اهدافی مشخص.
- درکپذیری و تطبیقپذیری بالا برای تیمها.
- خروجیهای پیشبینیپذیر برای پروژههایی که برنامه زمانی و بودجه مشخص دارند.
- سازگاری با پروژههای تکراری که مشکلات آنها را به راحتی میتوان پیشبینی کرد.
معایب
- تاکید بیش از حد بر مستندسازی.
- در حین توسعه، جایی برای سنجش کار از سوی مشتریان نیست.
- امکان بازگشت به مراحل قبلی وجود ندارد.
- بهروزرسانی طراحی و پیشنیازها، هزینهبر است.
- نتایج کار را فقط میتوان در مراحل پایانی پروژه دید.
توسعه آبشاری را میتوان رویکردی متوالی در توسعه نرمافزار به حساب آورد. در این مدل، گامهای فرایند توسعه، جریانی رو به پایین و کاملا خطی را دنبال میکنند. هر فاز به دنبال هدفی جداگانه است که باید ۱۰۰ درصد کامل شود. تنها در این صورت است که فاز بعدی آغاز میشود: برای مثال، فاز کدنویسی تنها زمانی آغاز میشود که طراحی شکل نهایی به خود گرفته باشد.
توسعه آبشاری را میتوان مدلی سنتی در مدیریت توصیف کرد. به این معنا که برای اکثر مدیران، کمترین چالش را به همراه میآورد. در هر صورت اما با نقطه ضعفی بزرگ روبهرو خواهید شد: انعطافناپذیری. محدودیتهای طراحی همواره به قوت خود باقی میمانند و فریمورک هم اجازه نمیدهد که بازخوردهای مشتریان، راه خود را به فرایند توسعه محصول باز کنند.
با روششناسی آبشاری، بازگشت به مراحل قبل کاری بسیار هزینهبر و زمانبر خواهد بود. در هر صورت اما بسیار بعید است که بتوانید سمت و سوی حرکت یک پروژه آبشاری را تغییر دهید، حتی اگر حین تستها، متوجه وجود مشکلاتی حیاتی در طراحی باشید.
۲. روششناسی چابک (تکرارشونده)

مزایا
- بازخوردهای ذینفعان در سراسر چرخه عمر پروژه به کار بسته میشوند.
- ایجاد تغییر در حین توسعه آسان است.
- مشارکت و همکاری میان توسعهدهندگان، مدیران و ذینفعان بهبود مییابد.
- میتوان به تست و بهبود مداوم مشغول شد که معمولا محصول نهایی بهتری را پدید میآورند.
- سازگاری با پروژههای پیچیدهای که پیشنیازهای متغیر دارند.
معایب
- در نبود مدیران مجرب، تطبیق یافتن با این روش دشوار است.
- خبری از اسناد طراحی عمیق نیست.
- نیازمند تمرکز مضاعف بر برنامهریزی و هماهنگی است.
«اجایل» (Agile) یا «مدیریت چابک» به مجموعهای از روششناسیهای تکرارشونده گفته میشود که روی خودسازماندهی و کارکرد چند سویه تاکید دارند. برخلاف مدل آبشاری، فازهای مختلف به صورت یک به یک به جریان نمیافتند. در عوض شاهد تقسیم شدن فرایند توسعه به چرخهها یا برهههای خردتر هستیم.
هر برهه میتواند چندین مرحله توسعه را در بر بگیرد. بعد از جمعآوری پیشنیازها، طراحی معماری و کدنویسی، تیم تست وارد کار شده و نتیجه را ارزیابی میکند. بدین ترتیب توسعهدهندگان میتوانند در هر یک از برهههای جدید، براساس داده به دست آمده از برهههای قبلی، محصول را بهینهسازی کنند.
رویکردهای اجایل همواره بهرهوری بالاتر را به همراه آوردهاند. بنابر چهاردهمین گزارش سالانه وضعیت اجایل، ۵۸ درصد از شرکتکنندگان میگویند که با درپیشگیری رویکرد اجایل، شاهد افزایش محسوس بهرهوری تیمی بودهاند. پیادهسازی اجایل اما نیازمند تعهد و مهارتهای ارتباطی موثر است. مدیران بیتجربه به اجایل به چشم چالشی بزرگ نگاه میکنند و احتمال خطایشان در کار نیز بالاست. علاوه بر این، از آنجایی که پیشنیازهای محصول دائما دگرگون میشوند، هیچ سند طراحی مشخصی برای هدایت کردن تیم نخواهید داشت.

رویکرد اجایل، خود به روش های توسعه محصول خردتر تقسیم میشود. محبوبترین موارد به شرح زیر هستند:
- اسکرام (Scrum): فرایند توسعه در برهههایی تکرارشونده به نام «اسپرینت» اتفاق میافتد که میتوانند بین یک الی چند هفته طول بکشند. تیمها پیش از ورود به اسپرینت بعدی، خروجی کار را برای بازنگری در اختیار ذینفعان میگذارند. از آنجایی که این مدل بر همکاری دائمی استوار است، تمام اعضای تیم باید به نقشها و مسئولیتهای خود احترام بگذارند. برای مثال برگزاری جلسات روزانه برای صحبت راجع به موانع و اهداف، رویکردی کاملا رایج در اسکرام است.
- کانبان (Kanban): این مدل بر تصویرسازی جریان کاری تیم با استفاده از بردی متمرکز است که وظایف را درون دستهبندیهای گوناگون قرار میدهد. برد کانبان یک پروژه در واقع بازتابگر میزان پیشرفت آن پروژه است. کانبان دو هدف کلی را دنبال میکند. هدف نخست، جلوگیری از فرسودگی نیروها با مدیریت و محدودسازی باری است که بر دوش نیروها قرار گرفته. هدف دوم هم بهینهسازی فرایند توسعه محصول بهگونهای است که خبری از هیچگونه گلوگاه در جریان کاری نباشد.
- دوگانه (Bimodal): این رویکرد به مدیریت دو حالت کاری مختلف به صورت همزمان اشاره دارد تا بتواند ارزش بیشتری تولید کرد. برای مثال یک تیم ممکن است در چرخههای توسعه سنتی مشغول به کار باشد و تیم دیگر بر ارائه راهکارهای هوشمندانه از طریق رویکردی تکرارشونده تمرکز کند.
- ناب (Lean): این هم رویکردی منحصر به فرد است که با کاهش هدررفت مهندسی نرمافزار، در صدد بیشینهسازی ارزش برای مشتریان برمیآید. در دنیای روششناسی لین یا ناب، هدررفت به معنای هر فرایندی است که به اندازه کافی ارزشسازی نمیکند (یا اصلا ارزشسازی نمیکند) و منجر به شکلگیری گلوگاه در جریان کاری میشود (مثلا زمانی که افراد بیش از اندازه زیادی باید خروجیها را تایید کنند). این مدل به شرکتهای نرمافزاری اجازه میدهد که استراتژی «کمینه محصول پذیرفتنی» (Minimal Viable Product یا به اختصار MVP) را برای تحلیل بازخورد مشتریان در نخستین مراحل توسعه به کار ببندند.
- SAFe: رویکرد Scaled Agile Framework یا SAFe، روششناسیهای چابک، ناب و DevOps را با یکدیگر ادغام میکند. برنامهریزی، سنجش و هماهنگی را در هسته این رویکرد خواهید یافت. هدف غایی، استفاده از ابزارهای همگامسازی برای همسو کردن توسعهدهندگان، تسترها و مدیران با نیازهای مشتریان است.
۳. روششناسی ترکیبی (هیبرید)

مزایا
- توسعه انعطافپذیر با بهبود دائمی از طریق برهههای توسعه جدید
- مستندسازی دقیق برای تیمها
- سازگار با تغییرات بالقوه در پیشنیازها
- سازگاری با پروژههای کوتاهمدت و بلندمدت، با سطوح مختلف از پیچیدگی
معایب
- متکی بر برنامهریزی و مستندسازی دقیق
- نیازمند سازشگری و آزمون و خطا برای پیادهسازی صحیح
هیبرید (Hybrid) را میتوان نسبتا جدیدترین نمونه در میان روش های توسعه محصول به حساب آورد که بهترین ویژگیهای دو روششناسی آبشاری و اجایل را به یکدیگر پیوند میزند. یک پروژه ترکیبی از فازهایی خطی تشکیل شده که به اسپرینتهایی خردتر تقسیم میشوند. این اسپرینتها بیشتر از همتایان خود در اسکرام طول میکشند و گاهی چندین ماه زمان میبرند.
درست مانند رویکرد اجایل، خروجی هر اسپرینت مستقیما بر برهه بعدی توسعه تاثیر میگذارد. روششناسی هیبرید ضمنا به تیمها اجازه میدهد که فازهای مختلف را به صورت موازی با یکدیگر پیش ببرند.
پیادهسازی هیبرید نیزمند برنامهریزی سراسری و مقداری سازشگری است. در واقع لازم است نقطه تعادل صحیح میان رویکردهای خطی و تکرارشونده را بیابید و بدون چشمپوشی کردن از برخی مزایای اجایل، چنین کاری عملا غیرممکن است. در هر صورت اگر به اندازه کافی آزمون و خطا کنید، شاهد رشد چشمگیر بهرهوری خواهید بود.
جمع بندی روش های توسعه محصول
در مجموع باید گفت که هیچ روششناسی واحدی نداریم که برای تمام تیمهای توسعه جواب بدهد، عمدتا به این خاطر که هیچ دو مدل تجاری و دو شرکتی مثل یکدیگر نیستند. هنگام انتخاب از میان روش های توسعه محصول مختلف لازم است به موارد زیر فکر کنید:
- نیازهای مشتریان
- ابعاد تیم
- ابعاد و پیچیدگی پروژه
- احتمال ایجاد تغییر در پیشنیازهای پروژه
اگر به فکر استفاده از روششناسی جدیدی برای توسعه نرمافزار افتادهاید، میتوانید آنقدر با رویکردهای خطی و تکرارشونده آزمون و خطا کنید تا مشخص شود کدامیک بیشترین ارزش را در جریان کاری شما خلق میکند. یا حتی بهتر از این، میتوانید از مشاوران حرفهای کمک بگیرید.