چرخه عمر توسعه نرم افزار یا SDLC، فرایندی است که برنامهریزی، طراحی، توسعه، آزمایش و استقرار نرمافزار را با کیفیت بالا، کمترین هزینه ممکن و ترجیحا در کوتاهترین زمان شامل میشود. برای دستیابی به این هدف، تیمهای مهندسی نرمافزار باید یک مدل توسعه نرمافزار صحیح، متناسب با الزامات سازمان، انتظارات ذینفعان و پروژه انتخاب کنند. مدلهای توسعه نرمافزار بیشماری وجود دارند که هر کدام مزایا و معایب خود را دارند.
همچنین جزئیات پروژه، از جمله چارچوب زمانی و بودجه، از عوامل موثر بر انتخاب مدل تیم توسعه نرم افزار هستند. در نهایت هم هدف، انتخاب مدل توسعه نرم افزار است که موفقیت پروژه را تضمین کند. چرا که انتخاب مدل نادرست منجر به طولانی شدن زمانبندی، صرف بیش از حد بودجه، خروجیهای با کیفیت پایین و حتی شکست پروژه میشود.
مدلهای توسعه مهندسی نرمافزار
در بخش قبل به طور خلاصه در مورد اهمیت انتخاب یک مدل توسعه نرم افزار درست صحبت کردیم و به عواقب حالتی که مدل درست انتخاب نشود، اشاره کردیم. همچنین باید اشاره کنیم که مدلهای توسعه نرمافزار به شدت روی افزایش کیفیت پروژه، بودجه، جدول زمانی و رضایت نهایی ذینفعان (یا شاید فقدان آن) تاثیر میگذارند و به آنها کمک میکنند.
با در نظر گرفتن همه موارد ذکر شده، حال میخواهیم ۷ مورد از شناختهشدهترین و پرکاربردهای مدلهای توسعه نرمافزار را معرفی کنیم و به اختصار در مورد هر کدام توضیح دهیم. با ما همراه باشید.
۱- مدل توسعه نرم افزار آبشاری (Waterfall Model)
مدل آبشاری یا Waterfall اولین رویکرد برای توسعه نرمافزار است. همانطور که از نام آن مشخص است، این فرایند، حرکت خطی از بالا به پایین در مراحل توسعه است که به ترتیب تجزیه و تحلیل، طراحی، توسعه، آزمایش، استقرار و نگهداری را شامل میشود. هر مرحله هم با نتایج و نقاط عطف خاص به خوبی تعریف میشود.
مزایا و معایب مدل آبشاری در توسعه نرمافزار
روند تکمیل مدل Waterfall یک توالی خاص و خطی است؛ به این معنی که تا زمانی که مرحله فعلی کامل نشده، مرحله بعدی نمیتواند شروع شود. از طرف دیگر، یک مرحله زمانی کامل میشود که اهداف برآورده شوند و یک نفر پیشرفت پروژه را تایید کند.
هیچ انعطافی در این مدل وجود ندارد، زیرا نمیتوانید از هیچ مرحلهای بگذرید، به مرحله قبلی برگردید یا چند مرحله را به طور موازی و با هم پیش ببرید. در نتیجه، هماهنگی و پیش بردن پروژه دشوار و پرهزینه است. صرف نظر از اینکه چه زمانی خطاها پیدا میشوند، نمیتوانیم آنها را تا مرحله تعمیر و نگهداری برطرف کنیم.
این عدم انعطاف باعث میشود که این مدل نسبت به مدلهای دیگر هزینه و زمان بیشتری از تیمهای توسعه نرم افزار بگیرد. همچنین اگر الزامات نامشخص باشند یا اشتباه درک شوند، این مدل بسیار خطرناک است.
در نتیجه، مدل توسعه نرمافزار آبشاری یا همان Waterfall، برای پروژههای طولانی، پیچیده یا در حال انجام که در آن به انعطافپذیری بیشتری نیاز است، ایدهآل نیست.
اگرچه معایب این مدل توسعه نرم افزار برجسته و قابل توجه است، اما برای پروژههای کوچک و یکبار مصرف با نیازهای کم و زمانبندی کوتاه، میتواند مفید باشد؛ چرا که ساده است و میتوانیم آن را به سرعت شکل دهیم و استفاده کنیم. نکته مهم این است که تیم باید اطمینان حاصل کند که همه الزامات به خوبی تعریف شده، بدون ابهام و ثابت هستند.
با این حال، معایب مدل Waterfall بیشتر از مزایای آن است. بنابراین، این مدل محبوبیت خود را از دست داده و تیمهای IT، مدلهای توسعه نرمافزاری چابکتری را به کار میگیرند تا بتوانند به انعطافپذیری بیشتر، ارتباطات و بهبود مستمر دست پیدا کنند.
۲- مدل توسعه نرم افزار وی (V-Model)
مدل V یا مدل اعتبارسنجی (Validation) و تایید (Verification)، بر اساس مدل آبشاری و با اضافه کردن برنامههایی برای تست اولیه به آن، توسعه پیدا کرده است. در مدل وی، به جای حرکت خطی به سمت پایین در مراحل توسعه نرم افزار، V-Model تا مرحله کدنویسی به سمت پایین حرکت میکند، سپس میچرخد و شروع به صعود به سمت بالا میکند تا شکل V را تشکیل دهد.
مزایا و معایب مدل V
در مدل توسعه نرم افزار V، هر مرحله توسعه یک تست مربوط به خود دارد. این تستها، به تیم اجازه میدهد تا خطاها را در مشخص کردن نیازمندیها، کدها و معماری نرم افزار در اوایل توسعه پروژه تشخیص دهد. متاسفانه، رفع خطاها همچنان دشوار و پرهزینه است، زیرا راه روشنی برای حل این مشکلات وجود ندارد.
اضافه شدن برنامههای مشخص تست اولیه، به مدل V شانس موفقیت بیشتری نسبت به مدل آبشاری میدهد. با این حال، V-Model هنوز خطی است که باعث میشود غیر قابل انعطاف باشد.
مانند مدل Waterfall، یک تیم تنها زمانی میتواند مرحله بعدی را شروع کند که مرحله فعلی کامل شود. این امر هماهنگی و پیشرفت را دشوار، پرهزینه و زمانبر میکند.
در نتیجه، مدل توسعه V برای پروژههای کوتاه مدت با الزامات ثابت، مشخص و مستند، بهترین است؛ اما برای پروژههای طولانی، پیچیده یا در حال انجام، ایدهآل نیست.
۳- مدل تکراری و افزایشی (Iterative and Incremental Model)
مانند بسیاری از مدلهای توسعه نرم افزار دیگر، مدل تکراری و افزایشی هم برای رفع برخی از کاستیهای مدل آبشاری توسعه داده شد. این مدل توسعه نرمافزار هم مانند مدل Waterfall، با برنامهریزی شروع میشود و با استقرار به پایان میرسد. برخلاف مدل Waterfall، این مدل شامل چرخههای مکرر در طول فرایند توسعه است.
همانطور که از نام مدل پیداست، این چرخهها، تکرار شونده و افزایشی هستند و در کوتاهمدت اتفاق میافتند.
در مدل توسعه نرم افزار تکراری، فرایند توسعه نرم افزار با مجموعه کوچکی از الزامات آغاز میشود و مجموعه جدیدی از الزامات در هر چرخه اضافه میشود.
مزایا و معایب مدل تکراری و افزایشی
ماهیت تکراری مدل توسعه تکراری و افزایشی، به نرمافزار اجازه میدهد تا به تکامل و رشد ادامه دهد. چرا که در طول فرایند میتوانیم تغییرات کوچکی ایجاد کنیم و آخرین تکرار بر اساس تکرار قبلی ساخته میشود. همچنین توسعهدهندههای نرمافزار میتوانند تغییراتی را بر اساس آموختههای دورههای قبلی انجام دهند.
از طرفی از آنجایی که تمام الزامات در شروع پروژه مشخص نشده است و تغییرات زیادی در طول فرایند ایجاد میشود، کار میتواند به سرعت شروع شود. با این حال، منابع ممکن است به سرعت مصرف شوند، زیرا این فرایند به طور مکرر تکرار میشود و مدیریت پروژه پیچیدهتر میشود.
علاوه بر این، اگرچه در این مدل توسعه راه حلی برای برای برخی از درخواستهای تغییر وجود دارد، اما همچنان از فرایندهای تعریفشدهای تشکیل شده که بعضی مواقع منجر به انعطافناپذیری میشود. حتی با اینکه هزینه اعمال تغییرات در مدل توسعه تکراری و افزایشی کمتر از مدلهای Waterfall و V است، این مدل برای پروژههایی که الزامات و نیازمندیها در طول تکرارها هم تغییر میکنند ایدهآل نیست.
علاوه بر این، مدل تکراری میتواند با تغییرات مکرر، هزینههای ناشناخته و نیازمندیهای منابع و ضربالاجلهای نامشخص، خطرات بیشتری ایجاد کند.
۴- مدل نمونهسازی یا پروتوتایپینگ (Prototyping Model)
مدل توسعه نرم افزار پروتوتایپینگ یا نمونهسازی، حول محور افزایش درک تیم توسعه از خواستهها/نیازهای مشتری با ایجاد نمونههای اولیه است. با ایجاد یک نمونه کار در مقیاس کوچک از برنامه نرمافزاری مورد نظر، سوءتفاهمها یا سوء ارتباطات را میتوان قبل از توسعه کامل، حل کرد.
قبل از اینکه توسعهدهندهها کار روی محصول نهایی را شروع کنند، یک نمونه اولیه از آنچه که معتقدند مشتری میخواهد ایجاد میکنند. نمونه اولیه با توجه به بازخورد مشتری توسعه، آزمایش و پالایش شده است. هنگامی که نمونه اولیه پذیرفته شد، تیم شروع به توسعه محصول نهایی میکند.
مزایا و معایب مدل نمونه سازی
مدل توسعه نرمافزار نمونهسازی، به دلیل بازخورد اولیه مشتری میتواند تعداد تکرارهای مورد نیاز برای SDLC را به شدت کاهش دهد. این مساله باعث صرفهجویی در زمان و افزایش شانس رضایت مشتری میشود. اگرچه مقداری زمان صرفهجویی میشود، اما باید زمانی را که توسعهدهنده صرف توسعه نمونههای اولیه میکند را هم در نظر بگیریم.
اگر مشتری به تغییرات زیادی نیاز داشته باشد، نظر خود را به طور مکرر تغییر دهد یا درخواستهای غیرممکن مطرح کند، این زمان توسعه نمونه اولیه میتواند به سرعت زیاد شود. به همین دلیل، بهتر است قبل از پذیرفته شدن نمونه اولیه، روی تعداد تکرارهای مجاز محدودیت تعیین کنید. از طرف دیگر باید توجه داشته باشیم که هنگامی که نمونه اولیه نهایی در حال توسعه است، هیچ نیاز یا تغییر دیگری نمیتوان در طرح ایجاد کرد. این یک نقطه ضعف قابل توجه برای مدل توسعه نرم افزار نمونهسازی یا پروتوتایپینگ است.
۵- مدل توسعه نرم افزار مارپیچ (Spiral Model)
مدل توسعه مارپیچ، روی ارزیابی ریسک تمرکز دارد. در نتیجه، هر تیمی که به دنبال استفاده از این مدل است، باید افرادی با دانش و مهارت در این زمینه داشته باشد.
این مدل توسعه دارای چهار مرحله است که مدل را به چهار ربع تقسیم میکند: ۱- برنامهریزی، ۲- تحلیل ریسک، ۳- مهندسی و ۴- ارزیابی. تعداد حلقهها در مارپیچ به هر پروژه و صلاحدید مدیر پروژه بستگی دارد. به طور متوسط توسعه نرمافزار با این مدل ۶ ماه طول میکشد.
مدل توسعه نرمافزار مارپیچ، در واقع ویژگیهای مدلهای توسعه Waterfall و Prototyping را با تاکید بر طراحی، از جمله نمونهسازی (در مرحله مهندسی)، و با دنبال کردن مراحل مشابه با مدل Waterfall ترکیب میکند.
مزایا و معایب مدل اسپیرال یا مارپیچ
توسعه مداوم و مکرر به توسعهدهندههای نرمافزار این امکان را میدهد که در اعمال تغییرات دستشان بازتر باشد و در حین مدیریت ریسکها، قابلیتهای جدید اضافه کنند. علاوه بر این، توسعه سیستماتیک است که فرایند را ساده میکند. مشتری درگیر بررسی هر مرحله از چرخه است؛ البته اگر مشتری کند باشد یا بازخورد ندهد، میتواند برای فرایند توسعه دستوپاگیر باشد. با این حال، مشتری نمیتواند در مرحله مهندسی تغییرات جدید درخواست کند.
از آنجا که تعداد حلقهها یا تکرارها تعریف نشده است، خطر تجاوز از بودجه و عدم رعایت ضرب الاجل وجود دارد. همچنین دستیابی به محصول نهایی اغلب پرهزینه و زمان بر است. علاوه بر این، این مدل برای هر مشتری بسیار سفارشی شده است، بنابراین استفاده مجدد از کار تیم توسعه عملا غیرممکن است.
مدل توسعه نرمافزار متدولوژی اجایل یا چابک (Agile Methodology Development Models)
Agile یک روش مبتنی بر ۱۲ اصل است که در مانیفست چابک بیان شده است. در واقع اجایل یک طرز فکر است، تا مجموعه ای از پروتکلهای سختگیرانه! متدولوژی اجایل، برای ارائه نرمافزار بهتر، به طور موثرتر و كارآمدتر از روشهای قبلی، از جمله رویکرد آبشاری Waterfall، از طریق تمرکز بر همکاری، ارتباط و تغییر مداوم توسعه داده شد.
پذیرش Agile سریع و مستمر است. طبق گزارش موسسه مدیریت پروژه (pmi.org)، ۷۱ درصد از سازمانها برای پروژههای خود، گاهی، اغلب یا همیشه از رویکردهای چابک استفاده میکنند. چندین مدل توسعه نرم افزار Agile وجود دارد. تمام این مدلها بر کار تیمی، همکاری متقابل، توسعه تکراری و بازخورد اولیه مشتری تمرکز دارند. آزمایش، بازخورد و انجام تنظیمات به تیمها اجازه میدهد تا بهترین نرمافزار ممکن را توسعه و ارائه دهند.
در ادامه ۲ مدل توسعه نرمافزار Agile را بررسی میکنیم.
۶- مدل توسعه نرمافزار اسکرام (Scrum Model)
مدل اسکرام محبوبترین مدل Agile است. تکرارهای این مدل، در توسعه نرم افزار به عنوان اسپرینت شناخته میشوند. در طول این اسپرینتهای ۱ تا ۴ هفتهای، تیمها اسپرینت را ارزیابی میکنند، ویژگیهای جدید (قابلیتهای کدنویسیشده و آزمایششده) را اضافه میکنند و برای اسپرینت بعدی برنامهریزی میکنند. پس از تعریف فعالیتهای اسپرینت، تغییرات مجاز نیست.
پس از هر اسپرینت، قابلیتها/موارد جدید اضافه میشوند تا در اسپرینت بعدی کدنویسی و آزمایش شوند. این اتفاق آنقدر تکرار میشود تا که همه ویژگیها اضافه و پروژه آماده انتشار شود.
مزایا و معایب مدل اسکرام
افزایش همکاری بین تیمهای متقابل و بین سازمان و مشتری، باعث کاهش حدس و گمانها و خطاهایی میشود که اغلب ناشی از ارتباطات نادرست است. علاوه بر این، مراحل افزایشی زمان ورود به بازار را کاهش میدهد.
ارتباطات پیشرفته زمان صرف شده برای رفع خطاها را کاهش و احتمال رضایت کاربر نهایی از محصول را افزایش میدهد. با این حال، این همکاری نیاز به ورودی و زمان بیشتری از مشتری در طول فرایند دارد. اگر ویژگیهای زیادی درخواست و اضافه شود، تیم خطر عقب انداختن ضرب الاجلها را دارد.
۷- مدل توسعه نرم افزار کانبان (Kanban Model)
کانبان یک مدل چابک و مدل نهایی است که بر خلاف مدلهای دیگر، تکرار رسمی ندارد. اگر یک تیم تکرارهایی را برنامهریزی کند، معمولا اسپرینتهای فوق العاده کوتاه هستند؛ گاهی اوقات به کوتاهی یک روز.
یک تابلوی کانبان با یادداشتهای چسبی (Sticky Notes) برای ترسیم بصری پروژهها و جزئیات آنها، شامل ذینفعان پروژه و وضعیت پیشرفت استفاده میشود. این تجسم به تیم اجازه میدهد تا تمرکز خود را بر روی مهمترین ویژگی در حال توسعه معطوف کند.
به علاوه، برد Kanban ظرفیت باقیمانده را برای بهبود مستمر تا تکامل ویژگیها مشخص میکند.
مزایا و معایب مدل کانبان
اگرچه روش یادداشتهای چسبنده روی تخته به انگیزه تیم کمک میکند تا بر تکمیل کار مهمی که در دست دارد تمرکز کند، روش ضعیفی برای تعریف و حفظ بازههای زمانی است. به همین دلیل، برنامهریزی پروژههای طولانی با مدل توسعه نرمافزار کانبان بسیار دشوار است.
از آنجایی که هیچ مرحله برنامهریزی مشخصی وجود ندارد، میتوان تغییرات را در هر زمان انجام داد. با این حال، یکی از معایب رایج Kanban عدم وجود چارچوب زمانی است. اگر تغییرات به طور مداوم انجام شود، میتوان چارچوب زمانی دقیقتری به آن اضافه کرد.
سخن پایانی
هر مدل توسعه نرم افزاری با هدف بهبود فرایند توسعه و تحویل نرمافزار ایجاد شده است و برای انواع خاصی از پروژهها به خوبی کار میکند. با این حال، مدلهای دستی قدیمی، مانند مدل آبشاری، به سرعت در حال تبدیل شدن به مدلهای منسوخ هستند.
تیمهای فناوری اطلاعات و در کل کسبوکارها، باید سریعتر و موثرتر حرکت کنند تا نرمافزار ارائه دهند، کاربران نهایی خود را راضی کنند و با رقبا همگام باشند. فرایندهای توسعه نرمافزارِ سریعتر که قابلیت تکرار دارند و ایمنترند، معمولا از اتوماسیون یا خودکارسازی استفاده میکند.
البته این سطح از اتوماسیون و سرعت در بسیاری از مدلها قابل دستیابی نیست. در نتیجه، متدولوژی Agile به طور فزایندهای محبوب شده است. از این رو به نظر میرسد، تیمهای توسعه نرم افزار در حال تغییر به سمت توسعه نرمافزار چابک هستند. همچنین شرکتها، از فناوریها و فرایندهای قدرتمندی مانند یکپارچهسازی مداوم، تحویل مداوم، اتوماسیون انتشار و دواپس (DevOps) استفاده میکنند.
دیدگاهتان را بنویسید