چرخهی توسعهی نرمافزار (Software Development Life Cycle) یا بهاختصار SDLC به دنبالهی ساختاریافته و کاملاً مشخصی از مراحل در مهندسی نرمافزار گفته میشود که برای توسعهی یک محصول نرمافزاری معین انجام میشوند.
فعالیتهای چرخهی توسعهی نرمافزار
چرخهی توسعهی نرمافزار یک سری از گامهایی را ارائه میکند که برای طراحی و توسعهی یک محصول نرمافزاری کارآمد باید انجام شوند. چرخهی توسعهی نرمافزار یا SDLC شامل گامهای زیر است:
ارتباطات | Communication
این اولین گام در چرخهی توسعهی نرمافزار است. جایی که کاربر برای ساخت محصول نرمافزاری موردنظر خودش درخواست ارائه میکند. او با سرویسدهنده تماس گرفته و سعی میکند در مورد خواستههای خودش مذاکره کند. همچنین احتمالاً او درخواستش را بهصورت کتبی به سازمان ارائهدهندهی خدمات نرمافزاری موردنظرش ارائه خواهد کرد.
جمعآوری نیازمندیها | Requirement Gathering
از این مرحله به بعد، تیم توسعهی نرمافزار برای انجام پروژه شروع به کار میکنند. تیم توسعه گفتگو با ذینفعان مختلف را ادامه میدهد. این گفتگوها برای فهمیدن مسائل پیرامون پروژه انجام میشود. آنها سعی میکنند تا آنجا که ممکن است اطلاعات بیشتری راجع به نیازمندیهای پروژه جمعآوری کنند. تمام نیازمندیها بهصورت کامل به نیازمندیهای کاربر، نیازمندیهای سیستمی و نیازمندیهای عملکردی تفکیک میشوند و روی آنها فکر میشود. جمعآوری این نیازمندیها به روشهای مختلفی انجام میشود. ازجمله:
- بررسی و مطالعهی سیستم یا نرمافزار قبلی در صورت وجود
- انجام مصاحبه برای کسب اطلاعات بین کارفرما و توسعهدهندهها
- بررسی پایگاه داده و دیتابیس موجود
- جمعآوری اطلاعات و نیازمندیها از طریق پرسشنامه
بررسی امکانپذیر بودن | Feasibility Study
بعد از جمعآوری نیازمندیها، تیم توسعه به سراغ یک برنامهی منسجم برای فرآیند ساخت نرمافزار میرود. در این گام، تیم بررسی میکند که آیا نرمافزاری برای برآورده سازی همهی نیازمندیهای کاربر قابل ساخت است یا خیر. همچنین آنها آنالیز میکنند که آیا احتمالی وجود خواهد داشت که این نرمافزار سودمند نباشد. وقتی این موارد معلوم شد؛ اگر انجام پروژه با توجه به تکنولوژیهای موردنیاز، ازنظر اقتصادی برای سازمان موردنظر عملاً ممکن باشد؛ توسعهی نرمافزار شروع میشود. الگوریتمهای زیادی در دسترس هستند که به توسعهدهندگان کمک میکنند تا امکانپذیری یک پروژه را بررسی کنند و به نتیجه برسانند.
تحلیل سیستم | System Analysis
در این مرحله، توسعهدهندگان یک نقشهی راه برای برنامهی خودشان ترسیم میکنند. آنها سعی میکنند مناسبترین و بهترین مدل توسعهی نرمافزار را برای پروژهی موردنظر انتخاب کنند. تحلیل و آنالیز سیستم شامل مواردی مانند:
- درک محدودیتهای محصول نرمافزاری
- یادگیری مشکلات مرتبط با سیستم
- تغییراتی که باید در سیستم قبلی اعمال شوند
- شناسایی و بررسیِ تأثیر پروژه بر سازمان و پرسنل آن
میباشد.
تیم توسعه، دامنهی پروژه را آنالیز کرده و بر اساس آن زمانبندی پروژه و منابع موردنیاز را برنامهریزی میکند.
طراحی نرمافزار | Software Design
مرحلهی بعدی آوردنِ تمام اطلاعاتِ نیازمندیهای جمعآوریشده و آنالیزها به روی میز، و طراحی نرمافزار است. اطلاعات ورودی از سمت کاربر و اطلاعات جمعآوریشده در فاز جمعآوری نیازمندیها، ورودیهای این مرحله هستند. خروجی این مرحله به شکل دو طراحی ارائه میشود؛ طراحی منطقی و طراحی فیزیکی. مهندسین نرمافزار در این مرحله متادیتاها و دادههای دیگر، دیاگرامهای منطقی، نمودارهای جریان داده و در بعضی موارد شبه کدهایی را تولید میکنند.
کدنویسی | Coding
این مرحله بهعنوان فاز برنامهنویسی هم شناخته میشود. پیادهسازی طراحی نرمافزار در این مرحله با شروع کدنویسی با استفاده از یک زبان برنامهنویسی مناسب برای پروژه شروع میشود. برنامهی قابلاجرا، کارآمد و بدون خطا در این مرحله توسعه پیدا میکند.
تست کردن | Testing
در یک تخمین از پروژههای نرمافزاری مشخص شده است که 50 درصد فرآیند چرخهی توسعهی نرمافزار به تست محصول نرمافزاری میگذرد. خطاها و ارورها (Errors) ممکن است با ایجاد مشکلات بحرانی برای نرمافزار، آن را کاملاً خراب کنند. اولین تستهای نرمافزار توسط خودِ توسعهدهندههای پروژه انجام میشود. همچنین کارشناسان تست نرمافزار پروژه را در سطوح مختلفی مانند تست ماژولها، تست برنامه، تست محصول نهایی، تست داخلی و تست محصول در شرایط استفادهی کاربر نهایی، مورد آزمون و بررسی قرار میدهند. هرچه خطاها زودتر پیدا و رفع شوند؛ محصول نرمافزاری نهایی بیشتر مورد اعتماد خواهد بود.
ادغام | Integration
ممکن است لازم باشد در نرمافزار در حال ساخت، دیتابیسها، کتابخانهها و یا برنامههای دیگری، ادغام شوند. این مرحله از چرخهی توسعهی نرمافزار مربوط به قرار دادن موجودیتهایی از خارج پروژه در آن است.
پیادهسازی و اجرا | Implementation
این مرحله به معنیِ نصب نرمافزار تولیدشده روی دستگاه کاربر است. گاهی اوقات، نرمافزار باید بعد از نصب روی سیستم کاربر نهایی، پیکربندی هم بشود. همچنین در طول مرحلهی پیادهسازی، نرمافزار از جهتِ سازگاری و قابلیت انتقال مورد تست قرار میگیرد. به همین جهت مشکلات موجود در این زمینهها نیز در این مرحله حل خواهند شد.
عملیاتی بودن نرمافزار و نگهداری | Operation and Maintenance
این فاز از چرخهی توسعهی نرمافزار، عملیاتی بودن نرمافزار را از جهت کارایی و نداشتن خطا تأیید میکند. اگر لازم باشد از کاربران خواسته میشود از نرمافزار استفاده کنند؛ یا به مستندسازیِ نحوهی استفاده از برنامه کمک کنند. نگهداری از نرمافزار با آپدیت کدهای آن در بازههای زمانیِ مشخص انجام میشود. این بهروزرسانیها بر اساس تغییراتی که در محیط کاری کاربر نهایی اتفاق میافتد یا برای استفاده از تکنولوژیهای جدید انجام میشوند. این فاز ممکن است با چالشهای خاصی مانندِ باگهای مخفی و مشکلات ناشناخته در محیط عملیاتی روبهرو شود.
جایگزینیِ نرمافزار | Disposition
با گذشت زمان، ممکن است بهرهوری و کارایی نرمافزار کاهش یابد. ممکن است نرمافزار بهطور کامل منسوخ شود یا هم ممکن است به آپدیتهای بزرگی نیاز پیدا کند. ازاینرو یک نیاز فوری برای از بین بردن قسمت عمدهای از سیستم به وجود میآید. این فاز شامل موارد زیر میشود:
- بایگانی دادهها و کامپوننتهای موردنیاز نرمافزار
- بستن کامل سیستم
- برنامهریزی برای جایگزینی و خاتمه دادن به کار سیستم فعلی در زمان مناسبی برای پایان دادن به کار آن
الگوهای چرخهی توسعهی نرمافزار
الگوهای توسعهی نرمافزار به توسعهدهندهها کمک میکند تا یک استراتژی مناسب را برای توسعهی نرمافزار انتخاب کنند. هر الگوی توسعهی نرمافزار دارای ابزارها، روشها و رویههای مختص خودش است. هرکدام از آنها بهطور واضح روند چرخهی توسعهی نرمافزار را تعریف میکنند. در ادامه چند مورد از الگوهای توسعهی نرمافزار یا مدلهای این فرآیند را باهم بررسی میکنیم.
مدل آبشاری | Waterfall
مدل آبشاری، سادهترین روش از الگوهای توسعهی نرمافزار است. در این مدل همهی فازهای چرخهی توسعهی نرمافزار در یک روند خطی پشت سر هم انجام میشوند. یعنی بهعنوان مثال در این روش وقتی فاز اول تمام میشود؛ فقط فاز دوم قابل انجام است و به همین ترتیب تا آخر.
در این مدل فرض میشود که همهچیز در هر فاز، بهصورت کامل و عالی و بر اساس برنامه انجام میشود. یعنی در هر فاز نیازی نیست به مسائل مربوط به فازهای قبلی فکر کنیم. زیرا این مشکلات در فازهای بعدی اتفاق نمیافتند. اگر در مراحل قبلی پروژه مشکلاتی باقیمانده باشد؛ این مدل قطعاً بهخوبی کار نخواهد کرد. به خاطر ماهیت سلسله مراتبی این مدل، شما برای لغو یا انجام مجدد کارها مجاز به برگشت به عقب نخواهید بود.
این مدل معمولاً برای زمانی مناسب است که توسعهدهندگان تیم قبلاً یک پروژهی مشابه را طراحی کرده و توسعه دادهاند. یعنی آنها کاملاً از همهی جوانب و حوزههای پروژه آگاه هستند.
مدل مبتنی بر تکرار | Iterative
در این مدل فرآیند چرخهی توسعهی نرمافزار بر اساس تکرار مراحل پیش میرود. این مدل فرآیند توسعه را در یک چرخهی تکرارشونده قرار میدهد که در آن مراحل چرخهی توسعهی نرمافزار دائماً تکرار میشوند.
نرمافزار در ابتدا در یک مقیاس خیلی کوچک توسعه مییابد. سپس همهی مراحل بعدی برای گسترش نرمافزار انجام میشوند. در هر تکرار از مراحل، امکانات و ماژولهای بیشتری طراحی، کدنویسی و تست میشوند. سپس نتیجهی هر تکرار به نرمافزار اضافه میشود. درواقع در این مدل، در هر سیکل یک نرمافزار تولید میشود. به این صورت که این نرمافزار، از نرمافزاری که در سیکل قبلی تولیدشده امکانات و تواناییهای بیشتری دارد.
بعد از هر مرحلهی تکرار، تیم مدیریت پروژه میتواند روی مدیریت ریسک و آمادهسازی تیم برای مرحلهی تکرار بعدی کار کند. در این مدل مدیریت فرایند توسعه راحتتر است. زیرا هر سیکل تکرار شامل قسمت کوچکی از کل فرایند تولید نرمافزار میشود. اما به همان نسبت مدیریت این پروژهها منابع بیشتری را مصرف میکند.
مدل مارپیچ یا حلزونی | Spiral
مدل مارپیچ یک ترکیب از دو مدل توسعهی نرمافزار است. درواقع ترکیب مدل مبتنی بر تکرار با هر مدلی از چرخهی توسعهی نرمافزار به مدل مارپیچ میانجامد.
این مدل ریسک را هم در نظر میگیرد که معمولاً در بقیهی مدلها نادیده گرفته میشود. در این مدل کار با تعیین کردن اهداف و محدودیتهای نرمافزار در ابتدای هر مرحلهی تکرار آغاز میشود. مرحلهی بعدی ایجاد یک نمونهی اولیه (Prototype) از نرمافزار است. در اینجا ریسک هم آنالیز میشود. پس از آن یک مدل استاندارد از مدلهای چرخهی توسعهی نرمافزار برای ساخت پروژه مورداستفاده قرار میگیرد. در فاز بعدی از برنامه، مرحلهی تکرار بعدی آمادهی انجام میشود.
مدل V
اشکال اساسی مدل آبشاری این بود که رفتن به مرحلهی بعدی فقط وقتی اتفاق میافتد که مرحلهی قبلی کاملاً انجام شده باشد. همچنین در آن مدل درصورتیکه در مراحل بعدی مشکلی به وجود بیاید؛ راهی برای برگشت به عقب و جبران وجود ندارد. مدل V راهی بازگشتی برای تست نرمافزار در هر مرحله در اختیار تیم توسعه قرار میدهد.
در این مدل، در هر مرحله برنامههایی برای تست طرحریزی میشوند. این تستها برای این است که بر اساس نیازمندیهای آن مرحله محصول تولیدشده اعتبارسنجی و تأیید شود. برای مثال، در مرحلهی جمعآوری نیازمندیها، تیم تست، از همهی موارد مربوط به مطابقت نیازمندیها تستکیس (Test Case) تهیه میکند. سپس، وقتی محصول توسعه پیدا کرد و برای تست آماده شد؛ تستکیسهای این مرحله، اعتبارِ نرمافزار را در برابرِ نیازمندیهای موجود تأیید میکند.
این کار باعث میشود که اعتبارسنجی و تأیید نرمافزار بهصورت موازی و همزمان انجام شوند. این مدل همچنین با نام اعتبارسنجی و تأیید هم شناخته میشود.
مدل انفجار بزرگ | Big Bang
این مدل در فرم خودش سادهترین مدل در چرخهی توسعهی نرمافزار است. در این مدل به برنامهریزی کم و برنامهنویسی و بودجهی زیاد نیاز است. مفهوم این مدل از تئوری انفجار بزرگ یا بیگ بنگ که مبدأ جهان بوده؛ گرفتهشده است. دانشمندان معتقدند که این تعداد زیاد کهکشانها، ستارهها و سیارهها پس از رخ دادن انفجار بزرگ تکاملیافتهاند. به همین ترتیب این مدل میگوید که اگر مقدار زیادی برنامهنویسی و بودجه را در کنار هم قرار دهیم؛ ممکن است به بهترین محصول نرمافزاری ممکن دست پیدا کنید.
برای انجام این مدل، به برنامهریزی خیلی کمی نیاز است. این روش از هیچ فرایند خاصی پیروی نمیکند. و برای مواقعی که مشتری از نیازمندیهای فعلی و آیندهی خودش اطلاع دقیقی ندارد مناسب است. یعنی ورودیِ نیازمندیها در این مل اختیاری است.
این مدل برای پروژههای نرمافزاری بزرگ مناسب نیست. اما روش خوبی برای یادگیری و کسب تجربه است.
امیدواریم مطالعهی این مقاله شما را بهخوبی با انواع مختلفِ چرخهی توسعهی نرمافزار آشنا کرده باشد.