چرخه‌ی عمر توسعه‌ی نرم‌افزار (Software Development Life Cycle) مراحلی را شامل می‌شود که نرم‌افزار در طی آن‌ها توسعه می‌یابد یعنی از زمانی که ایده آن مطرح می‌شود تا زمانی که استفاده از آن متوقف می‌گردد.

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

مراحل چرخه‌ی عمر توسعه‌ی نرم‌افزار

برنامه‌ریزی

در مرحله‌ی برنامه‌ریزی، مهندسان نرم‌افزار با تجربه، مشکل و دامنه‌ی سیستم‌های موجود را تعریف نموده و اهدافی را برای ساخت سیستم‌های جدید تعیین می‌کنند. مهم‌ترین هدفی که مرحله‌ی برنامه‌ریزی به آن می‌رسد این است که برنامه‌ی زمان‌بندی و هزینه‌ی پروژه را ارائه می‌دهد. عدم برنامه‌ریزی یکی از رایج‌ترین دلایلی است که باعث می‌شود توسعه‌ی نرم‌افزار با شکست مواجه شود.
طراحی تضمین کیفیت نرم‌افزار و همچنین شناسایی ریسك‌ها و خطرات بالقوه پروژه نیز در مرحله برنامه‌ریزی انجام می‌گیرد. نتیجه‌ی مطالعات و امکان‌سنجی‌ها موجب بدست آوردن دیدگاه‌های مختلف فنی خواهد بود كه می‌تواند باعث پیاده‌سازی موفقیت‌آمیز پروژه با حداقل ریسک گردد. ###تحلیل تحلیل‌گران سیستم، نیازمندی‌هایی را جمع‌آوری می‌کنند که محدوده‌ی مسئله‌ی مورد نظر را مشخص کند. فرایند جمع‌آوری نیازمندی‌ها یک عمل پایه‌ای در مرحله‌ی تحلیل از چرخه‌ی عمر توسعه‌ی نرم‌افزار است. در مرحله‌ی تحلیل، مهندسان نرم‌افزار یک سند “مشخصات نیازمندی‌های نرم‌افزار” (Software Requirement Specification) یا به اختصار (SRS) ایجاد می‌کنند. سند SRS شامل تمامی نیازهای نرم‌افزار، سخت‌افزار و شبکه خواهد بود که در نرم‌افزار سفارشی ایجاد‌‌شده مورد نیاز خواهد بود. SRS چگونگی تعامل نرم‌افزار را با سخت‌افزار، رابط‌های خارجی، سرعت کار، زمان پاسخ‌گویی سیستم، قابلیت حمل نرم‌افزار در سیستم‌عامل‌های مختلف، قابلیت اطمینان‌، سرعت بازیابی پس از خرابی‌، امنیت‌، کیفیت‌، محدودیت‌ها و غیره را تعریف می‌کند.

طراحی

مهندسان نرم‌افزار (اگر بخواهیم دقیق‌تر بگوییم، طراحان سیستم) باید سند نیازمندی‌ها را مورد تحلیل قرار داده و سیستم را قبل از پیاده‌سازی طراحی نمایند. در طی این مرحله، طراحان سیستم بر روی درک سند نیازمندی‌ها تمرکز می‌کنند تا الگوی سطح بالایی تولید نمایند که کارهای خواسته‌شده از سیستم را تشریح نماید. خروجی مرحله‌ی طراحی باید نحوه‌ی ساخته‌شدن سیستم را به صورت واضحی مشخص کند تا این نیازمندی‌ها را برآورده سازد. مدل‌های مختلفی به منظور طراحی نرم‌افزارها وجود دارد که طراحان سیستم برای طراحی نرم‌افزارها از آن استفاده می‌کنند.
تحلیل و طراحی شی‌گرا (OOAD) یکی از مدل‌هایی است که با استفاده از آن می‌توان سیستم را از دیدگاه شی‌گرایی مورد تحلیل و طراحی قرار داد. در حالت ایده‌آل، یک گروه باید بر روی یک روند کاملا مشخص در حل مسئله و یک روش واحد برای مرتبط ساختن نتایج آن رویکرد به دیگر قسمت‌ها به توافق دست یابد. با توجه به اینکه نحوه‌ی استفاده از تحلیل و طراحی شی‌گرا بسیار متنوع است، امروزه از زبان مدل‌سازی یکپارچه (UML) به منظور مرتبط ساختن نتایج کارها با یکدیگر استفاده می‌شود.
طراحان سیستم معمولا براساس نیازمندی‌های مندرج در مستند SRS، یك و یا دو طرح پیشنهادی را جهت تعیین نهایی معماری مورد نیاز انتخاب و در مستند دیگری بنام “سند مشخصات طرح” (Document Design Specification) یا با اختصار (DDS) ارائه و پیشنهاد می‌نمایند. سند مذکور توسط همه‌ی ذینفعان و براساس معیارهای گوناگون نظیر ارزیابی ریسک، پیمانگی طرح (modularity)، قابلیت استفاده در شرایط مختلف، محدودیت زمانی و بودجه مورد بررسی و ارزیابی قرارگرفته و سرانجام بهترین طراحی جهت تولید نرم‌افزار انتخاب می‌گردد.
در طراحی نرم‌افزار تمامی جنبه‌های معماری و همچنین روش‌های ارتباطی و جریان ارسال و دریافت داده‌ها از سامانه‌های دیگر (در صورت وجود آن‌ها) مد نظر قرار می‌گیرد. در معماری پیشنهادی، می‌باید طراحی داخلی همه‌ی مدل‌ها و پیمان‌ها به‌نحوی کاملا واضح و آشکار و با ذکر تمامی جزییات در سند مشخصات طرح (DDS) درج شود.
در برخی موارد نیز در این مرحله یک به اصطلاح نمونه‌ی اولیه‌ی محصول (Prototype) تولید می‌شود تا بدین وسیله مناسب‌ترین روش برای توسعه‌‌ی محصول نهایی اتخاذ گردد که خروجی این مرحله مستنداتی شامل لیستی از الگوها و کامپوننت‌های انتخاب‌شده برای توسعه‌ی محصول و در برخی موارد قطعه‌ کدی مربوط به نمونه‌ی اولیه می‌باشد که به عنوان نقطه‌ی شروعی برای پیاده‌سازی نرم‌افزار مورد استفاده قرار می‌گیرد.

پیاده‌سازی

این مرحله شامل ساختن نرم‌افزار می‌شود. در این مرحله از چرخه‌ی حیات توسعه‌ی نرم‌افزار، روند عملیاتی آغاز و نرم‌افزار تولید می‌گردد. مدل‌های مختلف پیاده‌سازی نرم‌افزار وجود دارد که تیم توسعه برای ساخت نرم‌افزار از آن‌ها پیروی می‌کند (مانند برنامه‌نویسی شی‌گرا (OOP)). مهندسین نرم‌افزار تخصصی برای درک بهتر ساخت‌وساز به مستندات تهیه‌شده در مراحل قبل مراجعه می‌کنند. در حالت ایده‌آل، تمام برنامه‌ریزی‌های قبلی که در مراحل قبلی انجام شده باید فرایند ساخت نرم‌افزار واقعی را نسبتا آسان کند.
یک پروژه‌ی کوچک ممکن است توسط یک توسعه‌دهنده نوشته شود، در حالی که یک پروژه‌ی بزرگ ممکن است بین چندین تیم تقسیم گردد. در این مرحله از برنامه Source Code Management استفاده کنید. این سیستم‌ها به توسعه‌دهندگان کمک می‌کنند تا تغییرات کد را پیگیری کنند. آن‌ها همچنین به اطمینان از سازگاری بین پروژه‌های مختلف تیمی و اطمینان از تحقق اهداف کمک می‌کنند.

تست و اشکال‌زدایی

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

استقرار

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

نگهداری و پشتیبانی

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