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

در مراحل تولید و چرخه فرایندی توسعه نرم افزار مدل آبشاری یا Waterfall Model اولین مدل فرآیندی بود که معرفی شد. از مدل آبشاری به عنوان یک مدل چرخه زندگی خطی / ترتیبی یاد می‌شود.درک و استفاده از این مدل بسیار ساده است. در مدل آبشاری، هر فاز باید قبل از شروع فاز بعدی تکمیل شود و هیچ تداخلی در فازها وجود نداشته باشد.برای درک بهتر این مدل از فرآیند توسعه نرم افزار ادامه این مطلب را بخوانید. البته اگر می‌خواهید اطلاعات خود را در زمینه مرحل تولید و چرخه فرآیندی توسعه نرم افزار کامل کنید، مطلب مراحل تولید و چرخه فرایندی توسعه نرم افزار سفارشی چگونه است؟ را از وبلاگ یگانه مطالعه کنید. همچنین برای این که بدانید مدل اجایل که یکی از مدل‌های جدید در فرآیند توسعه نرم افزار است، می‌توانید مطلب توسعه نرم افزار چابک یا اجایل چیست؟ را در ویرگول مطالعه کنید.مدل آبشاری یا Waterfall Modelچیست؟مدل Waterfall اولین رویکرد SDLC است که برای توسعه نرم افزار استفاده شده است. مدل آبشاری فرآیند توسعه نرم افزار جدید یا ایجاد تغییرات خیلی مهم در یک نرم افزار قدیمی را در یک جریان متوالی خطی نشان می‌دهد. یعنی هر مرحله از فرآیند توسعه تنها در صورتی آغاز می‌شود که مرحله قبلی کامل شده باشد. نکته مهمی که در این شیوه وجود دارد این است که در مدل آبشاری، فازها با هم همپوشانی ندارند.رویکرد Waterfall اولین مدلی بود که به طور گسترده در مهندسی نرم افزار استفاده شد. این روش می‌توانست مدیران را از موفقیت پروژه مطمئن‌تر کند. در این روش کل فرآیند توسعه نرم افزار به فازهای جداگانه تقسیم می‌شود. در این مدل آبشار، به طور معمول، نتیجه یک فاز به عنوان ورودی برای فاز بعدی و به صورت متوالی عمل می‌کند.تصویر زیر نشان می‌دهد که درمدل آبشاری چه اتفاقی در تیم توسعه نرم‌افزار رخ می‌دهد.مراحل در توسعه نرم افزار به صورت آبشاری چه هستند؟1- جمع‌آوری و تجزیه و تحلیل نیازمندی‌ها Requirement Gathering and analysisدر این مرحله باید تمام الزامات احتمالی سیستمی که باید توسعه داده شود را جمع‌آوری کنید. این اطلاعات در یک سند که مثلاً اسم آن مشخصات نیازمندی‌هاست، مستند می‌شود.2- طراحی سیستم System Designمشخصات مورد نیاز که در فاز اول تشخیص داده شدند باید در این مرحله مطالعه شده و برای طراحی سیستم آماده شوند. فاز طراحی سیستم به تعیین سخت افزار و الزامات سیستم کمک می‌کند و به تعریف کلی معماری منجر می‌شود.3- پیاده سازی Implementationبا ورودی‌هایی که از فاز طراحی سیستم می‌آیند، سیستم ابتدا در برنامه‌های کوچکی به نام واحد توسعه داده می‌شود. این بخش باید در فاز بعدی یکپارچه شود. هر واحد برای عملکرد خود توسعه یافته و آزمایش می‌شود که به آن تست واحد گفته می‌شود.4- یکپارچه سازی و آزمایش Integration and Testingدر این مرحله تمام واحدهای توسعه یافته در مرحله اجرا و پس از آزمایش هر واحد در یک سیستم، یکپارچه می‌شوند. پس از ادغام این مرحله با خروجی 3 فاز قبلی، کل سیستم برای هر گونه عیب و نقص آزمایش می‌شود.5- استقرار سیستم Deployment of systemپس از انجام آزمایش عملکردی و غیرعملکردی. محصول در محیط مشتری مستقر شده یا به بازار عرضه می‌شود. البته در این مرحله ابتدا باید برای مدتی محصول در محیط آلفا (شرکت توسعه دهنده) تست شود، سپس به محیط بتا (محیطی که در آن تعداد بیشتری کاربر با نرم افزار کار می‌کنند) برود و در نهایت در محل اصلی مستقر شود.6- تعمیر و نگهداری Maintenanceبرخی از مسائل در محیط مشتری به وجود می‌آید یا بسیاری از باگ‌ها روی اطلاعات واقعی پدید می‌آیند. برای رفع این مشکلات است که پلاگین‌ها، سرویس پک‌ها یا ورژن‌های جدید منتشر می‌شوند. در چرخه فرایندی توسعه نرم افزار با مدل آبشاری تعمیر و نگهداری برای ارائه این تغییرات در محیط مشتری انجام می‌شود و تقریباً یک کار دائمی و مداوم است.همه این فازها به صورت آبشاری به یکدیگر متصل می‌شوند که در آن پیشرفت به صورت پیوسته به سمت پایین (مانند یک آبشار) در میان فازها جریان دارد. یعنی مرحله بعدی تنها در صورتی آغاز می‌شود که مجموعه اهداف تعریف شده برای فاز قبلی به دست آمده باشد.از مدل آبشاری برای توسعه چه نوع نرم‌افزارهایی می‌توان استفاده کرد؟قبل از توضیح این که مدل آبشاری برای توسعه چه نوع نرم افزارهایی مناسب است باید به این نکته اشاره کنیم که این که در فرآیند توسعه هر نرم افزار از کدام شیوه SDLC باید استفاده کرد، متفاوت است.مثلاً این که توسعه به شیوه اجایل در سال‌های اخیر خیلی مورد توجه بوده اصلاً دلیل بر این نیست که ما در توسعه همه نوع نرم افزاری از این شیوه استفاده کنیم.توسعه به شیوه آبشاری برای پروژه‌هایی عالی است که:- الزامات در آن بسیار جامع، مستند، واضح و ثابت هستند.- تعریف محصول کاملاً ثابت است.- فناوری مورد استفاده ثابت و قابل درک است و پویا نیست.- الزامات مبهمی در این خصوص وجود ندارد.- منابع کافی با تخصص مورد نیاز برای پشتیبانی از محصول در دسترس است.- پروژه کوتاه و محدود است.مزایای مدل آبشاری در سیستم SDLC چیست؟مهم‌ترین مزیت مدل آبشاری این است که امکان بخش‌بندی و کنترل روی همه فازهای پروژه را فراهم می‌کند. در ضمن می‌توان یک زمان بندی درست باضرب‌الاجل برای هر بخش آن تعیین کرد. به جز این:- در این مدل از فرآیند توسعه SDLC هر مرحله ازتوسعه به ترتیب و دقیق پیش می‌رود.- برای هرتوسعه دهنده‌ای این مراحل ساده و قابل درک است.- مدیریت پروسه آسان است چون هر مرحله استحکام بالایی دارد.- هر مرحله دارای تحویل‌های خاص و یک فرآیند بررسی است.- مراحل پله به پله پردازش و تکمیل می‌شوند.- برای پروژه‌های کوچک‌تر که نیازها در آن به خوبی درک شده اند، عالی کار می‌کند.- مراحل در آن به وضوح تعریف شده است.- نقاط عطف در آن به خوبی درک شده است و زحمات هر بخش از پروژه کامل دیده می‌شود.- وظایف را به راحتی می‌توان در این مدل تقسیم کرد.- فرآیند و نتایج به خوبی مستند شده‌اند.معایب مدل آبشاری در سیستم SDLC چیست؟مهم‌ترین عیب توسعه به شیوه آبشاری این است که اجازه بازتاب یا تجدید نظر زیادی در آن وجود ندارد. همچنین وقتی که یک برنامه در مرحله آزمایش باشد، بازگشت به عقب و تغییر چیزی که به خوبی مستند نشده یا در مرحله مفهومی به آن فکر نشده، بسیار دشوار است.به جز معایب عمده این شیوه را می‌توان در موارد زیر خلاصه کرد:- هیچ نرم‌افزاری تا همه مراحل به پایان برسند، عملاً و به صورت ملموس تولید نشده است.- میزان ریسک و عدم اطمینان در این شیوه خیلی زیاد است.- مدل خوبی برای پروژه‌های پیچیده و شی گرا نیست.- برای پروژه‌های خیلی طولانی، بزرگ و با رشد مداوم نمی‌توان از آن استفاده کرد.- در چند مرحله از کار دیدن مسیر پیشرفت بسیار دشوار است.- یکپارچه‌سازی به‌عنوان یک حرکت سنگین و خیلی بزرگ در پایان پروژه انجام می‌شود. این مسئله یعنی اجازه نداریم هیچ‌گونه تنگنا یا چالش‌های فنی یا تجاری را زود شناسایی کنیم.انتخاب این که برای توسعه نرم افزارهای خود از کدام شیوه برای طی کردن مراحل تولید و چرخه فرایندی توسعه نرم افزار سفارشی استفاده کنیم موضوعی بسیار تخصصی و جدی است و نیازمند تحقیقات گسترده و تسلط روی دورنمایی است که از پروژه مورد نظر داریم.پس نمی‌توان به صرف این که متد اجایل این روزها بیشتر برسرزبان‌هاست و پروژه‌های موفق زیادی با این شیوه به خروجی یا محصول مطلوب رسیده‌اند، فکر کنیم که ما هم باید از این شیوه برای توسعه نرم افزارهای خود استفاده کنیم.