با بزرگ شدن پروژه های نرم افزاری و پیشرفت علم مهندسی نرم افزار ، روش های سازمان یافته ای برای توسعه نرم افزارها ابداع شد که هر کدام بسته به نوع پروژه و محدودیت های آن در جای خاصی کاربرد دارد. برخی روش ها مانند R.A.D به دلیل کمبود زمان تولید، برخی مانند spiral به دلیل مشخص نبودن نیازمندی های اولیه نرم افزار و برخی مانند X.P برای کسانی که کار طراحی نرم افزار را با کدنویسی شروع میکنند ابداع شدند. ایجاد پروژه های بزرگ بدون بکارگیری یکی از روش های مهندسی نرم افزار ممکن نیست.

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


2 - روش افزایشی (Incremental): این روش برای زمانی است که نیازمندی های نرم افزاری که باید نوشته شود تشخیص داده شده است ، اما امکان استفاده از روش رو به جلوی آبشاری وجود ندارد.به همین دلیل با ترکیب چند پروسه ی آبشاری، روش افزایشی ایجاد میشود. بطور مثال شما میخواهید یک نرم افزار مانند word بنویسید. در هر مرحله بخشی از نرم افزار را از آنالیز تا پیاده سازی و تست پیش می برید و بار بعدی امکانات جدیدی را در نظر میگیرید تا به نرم افزار اضافه کنید. امکانات ضروری تر در اولویت بالاتر اجرا قرار می گیرند.



3 - روش R.A.D : این روش زیر مجموعه روش افزایشی است و بر روی چرخه ی کوتاه مدت تولید نرم افزار تاکید دارد. در این روش از برنامه نویسی با استفاده از کامپوننت های آماده بیشترین بهره را می بریم تا سرعت تحویل پروژه را افزایش دهیم . معمولا پروژه هایی با این روش اجرا میشوند که کمتر از 90 روز وقت می گیرند و برای افزایش سرعت از تیم های موازی نیز برای اجرا کمک میگیریم تا هر تیم بخشی از نرم افزار را اجرا کند و نهایتا آن بخش ها را با هم یکپارچه میکنیم. با توجه به اهمیت سرعت در این مدل ، افراد تیم باید همگی زبده باشند تا بتوانند بدون هدر رفتن وقت پروژه را در موعد مقرر تحویل دهند. همانطور که در تصویر زیر میبینید پروژه توسط چند تیم در حال پیشبرد است:



4 - روش الگویی (prototyping) : این روش معمولا زمانی بکار گرفته میشود که مشتری مجموعه ای از نیازها را بیان میکند ، اما از ورودی و خروجی ها و الگوریتم های داخلی اش اطلاع کافی ندارد. با توجه به اینکه معمولا اولین نسخه ی هیچ نرم افزاری کامل نیست و نیازمند بازنگری است، این روش با چرخه ی تولید و تست خود باعت میشوند ایرادات نرم افزار استخراج و رفع شود. اما گاهی خارج شدن از این سیکل (با توجه به بالارفتن سطح توقع مشتری) سخت میشود.



5 - روش حلزونی (spiral) : این روش ترکیبی از روش سیستماتیک آبشاری و روش prototyping است. در این روش نرم افزار طی چندین نسخه ی ارائه شده به تکامل می رسد. در هر مرحله ریسک های پروژه با جزئیات بررسی میشوند. همانطور که درنمودار زیر میبینید، کلیه ی مراحل انجام پروژه در هر گردش در سایز بزرگتری اجرا میشوند.




6 - روش مهندسی همزمان (concurrent development) : این روش شامل یکسری فاز اجرایی است. هر فاز خود شامل یکسری وضعیت (state) است. هر یک از اینstate ها بر اساس event هایی که برایشان تعریف میکنیدم تغییر میکنند و به وضعیت دیگری می روند. در عکس زیر بخش آنالیز را در این مدل مهندسی مشاهده میکنید. اگر در موقعیت development باشیم و تغییری در نیازمندی های تعریف شده توسط مشتری ایجاد شود، به وضعیت awaiting changes می رویم. زیرا تغییراتی در ساختار پروژه ایجاد شده که میتواند منجر به تغییر در فاز development شود. این روش معمولا برای نرم افزارهایی که بصورت کلاینت سروری کار میکنند بکار می رود.