مدل آبشاری (Waterfall Model) در توسعه نرم ‌افزار

در این قسمت در رابطه با مدل آبشاری و یا waterfall model صحبت خواهیم کرد. مدل آبشاری اولین مدل فرآیندی و یا process model تعریف شده و معرفی شده بود. این مدل تحت عنوان linear-sequential life cycle model نیز شناخته می‌شود. درک و استفاده کردن از مدل آبشاری بسیار ساده است. در مدل آبشاری هر فاز باید قبل از شروع فاز بعدی تکمیل و کامل شود و بین فازها هیچ همپوشانی خاصی اتفاق نمی ‌افتد.

مدل آبشاری جزء اولین روش های SDLC در صنعت نرم ‌افزار بود که برای توسعه نرم ‌افزار استفاده می‌شد. مدل آبشاری نشان می‌دهد که فرآیند توسعه نرم افزار در یک جریان ترتیبی و خطی اتفاق می‌ افتد. به عبارت دیگر هر فاز در این فرآیند توسعه فقط زمانی آغاز می شود که فاز بعدی کامل بگردد. در این جمله منظور از فاز همان مراحل مربوط به این مدل می باشد. ضمناً در مدل آبشاری فازها با یکدیگر هم پوشانی ندارند.

مدل آبشاری: طراحی (design)

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

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


در ادامه در رابطه با فازهای مربوط به مدل آبشاری کمی صحبت خواهیم کرد.

فاز requirement gathering and analysis و یا جمع آوری و تجزیه و تحلیل نیازمندی ها: در این فاز تمامی نیازمندی های سیستم که باید در نرم ‌افزار نهایی قرار بگیرند کشف شده و همچنین در درون سند requirement specification و یا تعریف نیازمندی ها ثبت می گردد.

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

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

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

فاز integration and testing و یا یکپارچه سازی و تست: تمامی Unit Test های توسعه داده شده در فاز implementation که فاز قبلی بود به درون سیستم، یکپارچه و یا integrate می‌شود. این موضوع دقیقاً بعد از تست کردن تک تک unit ها اتفاق می افتد. در این مرحله کل سیستم مورد تست و ارزیابی قرار می گیرد و شکست ها و ایرادات سیستم مشخص می گردد.

فاز deployment of system و یا استقرار نرم ‌افزار: زمانی که تست functional و non-functional انجام بشود محصول آماده deployed و یا استقرار در محیط نهایی و و انتشار در بازار است.

فاز maintenance و یا نگهداری: طبیعتاً هر سیستم نرم‌ افزاری پس از deploy شدن به بازار دچار مشکلاتی خواهد بود که به مرور متوجه خواهیم شد. برای حل و فصل کردن این مشکلات و منتشر کردن آپدیتهای مربوطه از این فاز استفاده می‌کنیم. علاوه بر این برای بهبود شرایط محصول نرم افزاری در قالب نسخه های جدیدتر، عملیات نگهداری و یا maintenance انجام می پذیرد. در فاز نگهداری و یا maintenance تغییرات مربوط به محصول نرم افزاری در محیط مشتری و یا اصطلاحاً production لحاظ خواهد شد.

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

مزیت های مدل آبشاری

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

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

  1. استفاده کردن از آن ساده و فهمیدن آن آسان است.
  2. به راحتی می توان آن را به خاطر سخت گیری که در عمل از خود نشان می دهد مدیریت کرد.
  3. هر فاز deliverable های خاص و همچنین فرآیند بازبینی منحصر به فردی دارد. منظور از deliverable چیزی است که از هر فاز تحویل و یا عاید ما می‌شود.
  4. فازها یکی بعد از دیگری و به صورت ترتیبی پردازش و کامل می شوند.
  5. این مدل آبشاری برای پروژه‌های کوچک که در آنها نیازمندی ها به طور ساده درک و ارزیابی می‌گردند بسیار مفید است.
  6. مراحل و یا فازها به صورت مشخص تعریف می گردند.
  7. وmilestone ها و یا نقاط تکمیل مربوط به هر کدام از فازها به صورت صریح مشخص می گردند.
  8. به راحتی می توان وظایف و یا task ها را در این مدل سازماندهی کرد
  9. فرآیندها و نتایج موجود در این مدل به سادگی مستند سازی می‌شوند.

معایب مدل آبشاری

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

  1. هیچ نرم افزار عملیاتی تا قبل از به پایان رسیدن مرحله آخر این مدل توسعه، تحویل مشتری داده نخواهد شد.
  2. سطح ریسک و عدم قطعیت بسیار بالاست.
  3. برای پروژه های پیچیده و شی گرا مناسب نیست. ضمناً توصیه می کنیم از بسته ی آموزش ویدئویی شی گرایی در سی شارپ استفاده کنید.
  4. برای پروژه‌های نرم ‌افزاری که قرار است برای مدتی طولانی مورد استفاده قرار بگیرند، مناسب نمی باشد.
  5. برای پروژه های نرم افزاری که در آن ها نیازمندی ها تغییر می کنند مناسب نمی باشد.
  6. در این مدل، اندازه گیری پیشرفت پروژه در هر کدام از مراحل دشوار است.
  7. تغییر در نیازمندیها را نمی ‌توان به سادگی در نظر گرفت و لحاظ کرد.
  8. یکپارچه سازی و یا integration فقط در مرحله آخر از این فرآیند اتفاق می‌ افتد که در آن ممکن است چالشها و مشکلات فنی و تجاری خاصی ناگهان ظاهر بشود.



پرووید: مرکز آموزش تخصصی برنامه نویسی و توسعه نرم افزار