مقایسه Agile و Waterfall دو سبک توسعه نرم افزار

ترجمه و تالیف : علیرضا معمارزاده
تاریخ انتشار : 10 بهمن 98
خواندن در 5 دقیقه
دسته بندی ها : برنامه نویسی

موفقیت یک پروژه توسعه نرم‌افزار تا حد زیادی وابسته به روش توسعه‌ای است که انتخاب می‌شود. Agile و Waterfall دو تا از محبوب‌ترین روش‌های "SDLC" درحال حاضر هستند. از همین‌رو تیم توسعه‌دهنده همواره با این سؤال مواجه هستند: کدام‌یک را باید انتخاب کرد؟

مقایسه Agile و Waterfall دو سبک توسعه نرم افزار

هر دو روش Agile و Waterfall روش‌های کاملی برای توسعه نرم‌افزار هستند. اگرچه هردوی آن‌ها کمی شبیه هم هستند، اما این مدل‌های SDLC در چندین جنبه باهم متفاوت هستند؛ بنابراین این نکات را باید زمان انتخاب آن‌ها درنظر داشت.

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

Agile

مقایسه Agile و Waterfall دو سبک توسعه نرم افزار 

روش Agile برای توسعه نرم‌افزار روی تکرارهای مداوم حین توسعه و تست کردن طی فرایند کلی توسعه نرم‌افزار تمرکز دارد. در این مدل SDLC ارتباط بین کارفرما، توسعه‌دهنده و آزمایش‌کننده‌ها باهم زیاد است.

از اواسط پاییز سال 2000، "Scott Ambler" شروع به توسعه روش Agile کرد. اگرچه در ابتدا نام آن "Extreme Modelling" بود اما بعدها به پیشنهاد Robert Cecil" Martin" نام آن به "Agile Modelling" تغییر یافت.

روش Agile یک روش براساس تکرار و وابسته به گروه برای توسعه نرم‌افزار است. این یک روش برجسته برای مدل توسعه سریع برنامه کاربردی (RAD) است. اگرچه روش جدیدی نیست، اما نسبتاً در مقایسه با مدل قدیمی "Waterfall" جدیدتر است.

به‌جای ایجاد برنامه و وظایف، کل زمان موجود برای یک پروژه Agile به فازهایی به نام sprints تقسیم می‌شود.

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

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

در مواردی که به دلایلی کار برنامه‌ریزی‌شده برای یک sprint خاص تکمیل نمی‌شود، کل کار مجدداً اولویت‌بندی می‌شود و از اطلاعات به‌دست‌آمده برای برنامه‌ریزی بعدی sprint استفاده می‌شود.

کار تکمیل‌شده، توسط اعضای گروه توسعه‌دهنده پروژه و کارفرما بررسی می‌شود. این کار به‌صورت روزانه و در پایان دموی sprint انجام می‌شود.

مزایا

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

معایب

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

Waterfall

مقایسه Agile و Waterfall دو سبک توسعه نرم افزار 

به‌عنوان رویکرد سنتی توسعه نرم‌افزار شناخته می‌شود و مدل Waterfall رویکرد خطی برای توسعه نرم‌افزار دارد. به‌همین دلیل با عنوان مدل چرخه عمر خطی – ترتیبی هم شناخته می‌شود.

اولین معرفی رسمی Waterfal، جدا از خود کلمه Waterfall، در مقاله‌ای در سال 1970 توسط "Winston W.Royce" انجام گرفته است. باور مردم این است که مقاله متعلق به "Bell" و "Thayer" در سال 1976 برای اولین بار مشخصات و ویژگی‌های Waterfall را بیان کرده است.

ازآنجایی‌که مدل Waterfall نظم ترتیبی مؤکدی را پیروی می‌کند، اعضای تیم توسعه پروژه تنها زمانی می‌توانند به مراحل بعدی بروند که مراحل قبلی با موفقیت تکمیل‌شده باشد. معمولاً بین هر مرحله از رویکرد Waterfall، یک محافظ مرحله وجود دارد.

مزایا

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

معایب

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

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

Agile در برابر Waterfall

سطح انعطاف‌پذیری

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

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

تقسیم کل فرایند

رویکرد Agile کل چرخه عمر توسعه را به sprint‌ها تقسیم می‌کند. در مقابل، رویکرد Waterfall فرایند تقسیم مشابهی دارد و به مراحل مشخصی تقسیم می‌شود.

اولویت بودجه و منابع

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

مدل Agile برای پروژه‌های با قیمت ثابت مناسب نیست. فرایندهای با قیمت ثابت، باعث افزایش استرس در پروژه Agile می‌شوند. رویکرد Agile بهترین روش برای پروژه‌هایی با بودجه‌های غیرثابت و متغییر است.

اجرای مراحل

ازآنجایی‌که مدل Agile یک روش توسعه براساس تکرار را دنبال می‌کند، مراحل مختلف مثل برنامه‌ریزی، توسعه و ساخت نمونه ممکن است بیش از یک بار در کل فرایند توسعه نرم‌افزار ظاهر شوند.

در رویکرد Waterfall برای توسعه نرم‌افزار، تمام مراحل فقط یک‌بار طی فرایند کلی اجرا می‌شوند.

آماده‌سازی ملزومات

برای استفاده از رویکرد Waterfall، جهت آماده‌سازی ملزومات برای توسعه پروژه نرم‌افزاری نیاز به تحلیل‌های تجاری گسترده است. لزومی ندارد که اعضای تیم توسعه درگیر شناخت ملزومات پروژه شوند.

در رویکرد Agile، کارفرما هم مانند اعضای تیم توسعه، تقریباً هرروز کنار هم می‌نشینند تا ملزومات پروژه را فراهم کنند. اعضای تیم آزمایش هم برای تغییر ملزومات شرکت می‌کنند.

تمرکز اولیه

تمرکز اولیه رویکرد Waterfall دستیابی به یک محصول است. تمرکز اولیه مدل Agile جلب رضایت مشتری از محصول است و مطابق با نیازهای بروز مشتری تغییرات را اعمال می‌کند.

توصیف جزئیات پروژه

در رویکرد Agile می‌توان در هر زمان از فرایند توسعه نرم‌افزار، توصیفات جزئیات پروژه را تغییر داد.

این موضوع در مدل Waterfall که هیچ شرطی برای تغییر توصیفات پروژه پس از شروع روند توسعه ندارد، صدق نمی‌کند.

چشم‌انداز پروژه

در رویکرد Waterfall پروژه توسعه نرم‌افزار مانند یک پروژه منفرد است. این کاملاً با روش Agile که با پروژه نرم‌افزار تحت توسعه، مانند تعدادی پروژه مختلف فرعی برخورد می‌کند، تفاوت دارد.

هماهنگی تیم

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

قابلیت تعویض تیم

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

در رویکرد Waterfall، مدیر پروژه مسئول زدن حرف آخر در تمام مراحل توسعه نرم‌افزار است. علاوه براین تعویض اعضای تیم ممکن نیست.

آزمایش

روش Waterfall یک مرحله تخصصی تست دارد که بعد از اتمام موفقیت‌آمیز مرحله توسعه، آغاز می‌شود. در رویکرد Agile، تست، هم‌زمان با توسعه نرم‌افزار انجام می‌شود.

انواع ملزومات

ملزومات مربوط به روش Waterfall قطعی هستند، به این معنی که هر تغییری در موارد مشابه، غیرمنتظره است. از طرف دیگر، هر پروژه‌ای که تغییر و تحول در ملزوماتش قابل‌انتظار باشد، برای توسعه با رویکرد Agile عالی است.

روش برخورد

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

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

نتیجه‌گیری

روش‌های Agile و Waterfall اشکال متمایز روش‌های توسعه نرم‌افزار هستند. ازهمین‌رو هرکدام از آن‌ها برای بعضی موارد مناسب و برای بعضی دیگر غیرعملی هستند.

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

امیدواریم که این مقایسه، انتخاب روش مناسب از بین این دو مدل SDLC را برای شما آسان کرده باشد. آرزوی بهترین‌ها را برای شما در پروژه توسعه نرم‌افزارتان داریم.

اگر مایل به شروع کار با برنامه‌نویسی هستید، در اینجا بهترین زبان‌های برنامه‌نویسی را معرفی کرده‌ایم.

منبع

گردآوری و تالیف علیرضا معمارزاده
آفلاین
user-avatar

Student of Software Engineering, python Developer, i love programming and game

دیدگاه‌ها و پرسش‌ها

برای ارسال نظر لازم است ابتدا وارد سایت شوید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید