روزی مرد عاقلی میگفت: «اگر در رسیدن به هدف خود شکست بخورید، پس در واقع هدفتان شکست خوردن بوده.» چرخه عمر توسعه سیستم (SDLC) ساختاری دارد که از ابتدا تا انتهای پروژه را شامل میشود. روشهای مختلف SDLC برای متخصصان این حوزه طبق مدلهای مبتنی بر پروژه تعریف میگردد که مراحل متعددی از شکلگیری فرآیند گرفته تا چگونگی انجام آن را در بر میگیرد. همچنین انتخاب مدل مناسب، تأثیر زیادی بر نتیجه و خروجی برنامه دارد.
در این مقاله قصد داریم انواع مختلف مدلهای SDLC، مزایا و معایب آنها و همچنین زمان استفاده از هر یک را بررسی کنیم. به عبارتی مدلهای SDLC را میتوان به عنوان ابزارهایی در نظر گرفت که بهترین پروژههای نرم افزاری را به همراه کاربرد آنها ارائه میدهند.
مدل توسعه نرم افزار چیست؟
مدل توسعه نرم افزار مفهومی انتزاعی از فرآیند توسعه نرم افزار است. مدلها مراحل را مشخص کرده و سفارش را پردازش میکنند. میتوانید مدل نرم افزاری را به عنوان نمایشی از ترتیب فعالیتهایی که به دنبال هم شکل میگیرند، در نظر بگیرید. به طور کلی یک مدل را میتوان به صورت زیر تعریف کرد:
- فرایندهایی که باید انجام شود
- شرایط قبل و بعد از هر فرایند
- ورودی و خروجی هر فرایند
- جریان و ترتیب هر فرایند
عوامل موثر بر انتخاب یک فرآیند نرم افزاری
انتخاب یک مدل توسعه نرمافزاری مناسب ممکن است کار سختی باشد. اما اگر الزامات خود را بدانید و از آنها اطلاع داشته باشید، انتخاب مدل مناسب برای نیازهای شما آسانتر خواهد بود. بدین منظور عوامل زیر را که به شما در انتخاب بهترین مدل توسعه نرم افزار کمک میکند، بررسی نمایید.
- نیازهای پروژه: قبل از انتخاب مدل، مدت زمانی را برای درک نیازهای پروژه اختصاص دهید. انتظارات سازمان و تیم را مشخص کنید. همچنین تغییرات مورد نیاز را در طول فرایند توسعه بررسی نمایید.
- مقیاس پروژه: اندازه پروژه را مشخص کرده و روی پروژههای بزرگ با تیمهای بزرگتر کار کنید. همچنین برنامههای مدیریتی گستردهتری به منظور اجرای بهتر روند توسعه داشته باشید.
- هزینه تاخیر: بررسی کنید که آیا تاخیر زیاد در پروژه با هزینه بالا همراه است یا خیر.
- پیچیدگی پروژه: ممکن است از پیچیدگی پروژه اطلاع نداشته باشیم، اما باید هزینههای تأخیر را در نظر بگیریم. پس اطمینان حاصل کنید که پروژه شما به صورت مداوم نظارت شود و از مشتری بازخورد بگیرید.
- مشارکت مشتری: بررسی کنید که آیا در طول فرآیند توسعه به دنبال یک مشورت کوتاه با مشتری هستید یا به کاربری نیاز دارید که در تمام مراحل مشارکت کند.
- آشنایی با فناوری: شامل دانش و تجربه در زمینه مربوط به پروژه، زبان نرمافزار و سایر روشهای مورد نیاز برای توسعه است.
- منابع پروژه: میزان و در دسترس بودن کارکنان، بودجه و سایر موارد را شامل میشود.
انواع چرخه عمر نرم افزار
مدل Waterfall
مدل Waterfall یک فرآیند برنامه محور است، مدلی منظم که برای همه فعالیتهای قبل از شروع پروژه برنامهریزی شده است. هر فعالیت در این مدل مشخص شده و نشان دهنده یک فاز جداگانه است که به ترتیب خطی در شکل بالا مشاهده میکنید.
مدل waterfall دارای مراحل زیر است:
- نیازمندی
- طراحی
- پیادهسازی
- تست
- نگهداری
- استقرار
هر یک از مراحل فوق نیاز به یک یا چند تأییدیه قبل از شروع مرحله بعدی دارد. درک این مدل بسیار آسان است و پس از تایید مراحل آن نیازی به مشارکت مشتری ندارد. همچنین هیچ راهی برای تست این مدل تا آخرین مرحله وجود ندارد. چرا که از نظر ساختاری بسیار سفت و سخت است و باید به طور کامل سنجیده شود.
مدل نرم افزار V-shaped
v-shaped به مدل تأیید و اعتبارسنجی شهرت دارد و به نوعی یک دنباله برای مدل waterfall است. بر این اساس باید نیازها را در ابتدا جمعآوری کرد، زیرا بعدا نمیتوان آنها را تغییر داد. همچنین باید برای هر مرحله فعالیت، تست مربوطه را انجام داد.
این مدل به راحتی قابل درک است، بسیار منظم است و مدیریت پروژه را آسانتر میکند. توجه داشته باشید که برای یک پروژه پیچیده مناسب نیست، زیرا در پروژههایی با مقیاس بزرگ ممکن است نیازهای متغیر و مفاهیم نامشخصی وجود داشته باشد. اما برای توسعه همه نرمافزارها در زمانهای خرابی و پروژههای شکست خورده انتخاب مناسبی است.
مدل RAD
فرایند توسعه سریع برنامه نیازمند بهرهگیری از مدل waterfall است که روند توسعه سریع نرمافزار را هدف قرار میدهد. مدل RAD به طور کلی مبتنی بر مفهومی با سیستم طراحی بهتر است، زمان کمتری هم میبرد و بر جمع آوری الزامات سیستم تمرکز دارد. همچنین موارد زیر را پوشش میدهد:
- مدل سازی دادهها
- مدل سازی کسب و کار
- تست و گردش مالی
- مدل سازی فرایند
- برنامههای کاربردی
RAD ممکن است منجر به سطح پایینتری از عدم پذیرش در مقایسه با یک مدل دیگر در زمان تولید شود. اما از بهترین رویکردی استفاده میکند که مخصوص توسعه نرم افزار است و نیازهای رابط کاربری را کاملا برطرف میسازد. توجه داشته باشید که تعداد کمی از سازندگان رابط کاربری گرافیکی را Rapid application development (RAD) مینامند.
مدل Prototype
این مدل بر پایه جمع آوری الزامات کار میکند که در آن توسعهدهنده و کاربر با یکدیگر مشارکت داشته و هدف نرم افزار و نیازهای آن را مشخص میکنند. با این کار یک طراحی سریع ایجاد میشود و بر جنبههای قابل مشاهده نرمافزار برای کاربر تمرکز میکند. این امر منجر به توسعه یک نمونه اولیه شده که در آن هرگونه تغییر لازم است تا در نمونه اولیه اعمال گردد.
همچنین به کاربران امکان میدهد تغییرات جدیدی را که در نمونه اولیه به روز شده، اضافه کنند. این روند آنقدر ادامه مییابد تا آنها را بینیاز کرده و راضی نگه دارد. سپس نمونه اولیه همراه با تمام ملاحظات مربوط به امنیت و کیفیت به برنامه نهایی تبدیل میشود.
مدل Spiral
این مدل یک فرآیند ریسک محور است و به صورت تکرارشونده روند توسعه را به شکل یک حلقه ارائه میدهد. بر خلاف مدلهای دیگر، مراحل آن به مشکلی که بیشترین خطر خرابی را دارد، میپردازند. برای هر چرخه میتوان به موارد زیر اشاره کرد:
- با تعیین راه حلها و اهداف جایگزین، مشکلات پرخطر را برطرف کنید.
- با تأیید اینکه آیا مورد قبول است یا نه، راهحلی ایجاد کنید.
- جایگزین را با شناسایی ریسک و ارائه راهحلهای ممکن ارزیابی کنید.
- برای چرخه بعدی برنامهریزی کنید.
مدل Incremental و Iterative
مدل Incremental به ذینفعان و توسعهدهندگان اجازه میدهد تا نتایج را با استفاده از اولین راهحل بررسی کنند. همچنین توسعهدهنده فقط بر تعریف واضح و کاملی از کل سیستم قبل از شروع کار تمرکز میکند. این مدل برای پروژههایی با قطعات کوچک و نیازهای دقیق عالی است.
در حالی که مدل Iterative سیستم را با ایجاد بخشهای کوچکی از ویژگیها توسعه میدهد که در آن به برآوردن نیازهای اولیه و انتشار سریع بازخورد کمک مینماید. هنگامی که پیادهسازی را شروع میکنید، تمام آنچه نیاز دارد از ابتدا تا زمان تکمیل سیستم به طور مکرر اضافه میشود. همچنین فرایند آن با بخشی از نرمافزار شروع شده که نیازها را پیادهسازی و مشخص میکند.
مشابه مدل Incremental، این مدل نیز امکان بررسی نتایج را در مراحل اولیه توسعه فراهم میکند که یک انتخاب خوب برای نیازهای مهم توسعه نرمافزار است و به راحتی میتواند به ماژولهای مختلف تقسیم شود.
مدل Agile
این مدل تکرارهای مستمر را در روند توسعه پیش میگیرد. هر قسمت به صورت افزایشی طراحی شده و توسعه داده میشود، از یک نمونه کوچک گرفته تا یک پروژه گسترده ظرف چند هفته تکمیل میگردد. این فرایند عمدتا بر پیادهسازی مجموعهای کوچک از ویژگیها با به حداقل رساندن مستندات استفاده از ارتباطات غیررسمی متمرکز است. موارد زیر را برای استفاده از فرایند توسعه agile باید در نظر بگیریم.
- فرض بر این است که نیازها تغییر میکنند.
- مشتری در طول هر فرایند مشارکت میکند
- هر فرایند در یک سری تکرارهای کوچک تکامل مییابد
- مستندسازی در مواقع ضروری انجام میشود.
فرایند توسعه چابک با یک رویکرد واقع بینانه همراه است که چندان هم پیچیده نیست. چالشهای کنونی آن در مرحله انتقال، به اسناد بسیار کمی نیاز دارد. آنها معمولا از روشهایی مانند Scrum، Extreme Programming و Kanban استفاده میکنند.
جمعبندی
بسیار خب، اگر تا انتهای این مقاله را کامل مطالعه کردهاید، امیدوارم انواع مدلهای بالا درک بهتری از توسعه نرم افزار را برای شما به همراه داشته باشند. در شرکتی مثل Agile Infoways بسته به نوع پروژهها، چندین گزینه SDLC وجود دارد. بیشتر اوقات آنها با استفاده از مدلهای انعطاف پذیرتر فرایند توسعه نرم افزار را بهینه سازی میکنند.
به طور خلاصه برای هر مدل در زیر مزایای آن را ذکر کردهایم:
- مدل waterfall برای پروژههای کوچکتر استفاده میشود و نیازها برای تغییرات سریع و غیر ضروری سازگار هستند. هر مرحله به خوبی تعریف شده و درک آن بسیار آسان است.
- مدلهای incremental و iterative برای پروژههای عظیم که نسخههای اولیه نرم افزار در آنها ابتدا تولید میشوند، سازگاری خوبی دارند.
- مدل agile بهترین گزینه برای پروژههای کوچک و متوسط است که در آنها تغییرات سریع مورد نیاز است. مشتری در هر مرحله مشارکت میکند که باعث صرفه جویی در زمان و هزینه میگردد.
- در مدل prototype میتوان برخی از اجزای نرم افزار را تجسم کرد که این امر به جلوگیری از سوء تفاهم بین مشتری و تیم توسعه کمک مینماید.
- مدل spiral به ترکیب عناصر prototype و agile میپردازد. این روش برای پروژههای بزرگ، پیچیده و پرهزینه مناسب است.