SDLC (چرخه‌ی عمر توسعه نرم افزار) چیست؟

SDLC (چرخه‌ی عمر توسعه نرم افزار) چیست؟

۶۰

شما هم عنوان SDLC به گوشتان خورده است و در پی اطلاعات بیش‌تر راجع به آن هستید؟ مایلید راجع به اهمیت، مزایا، چگونگی عملکرد و …اش بیش‌تر بدانید؟ در این بلاگ‌پست در این باره نوشته‌ایم. 

آن‌چه در این بلاگ‌پست خواهید خواند:

  • SDLC چیست؟ 
  • چرا SDLC مهم است؟ 
  • SDLC چگونه کار/عمل می‌کند؟ 
  • مدل‌های SDLC چیستند؟ 
  • چگونه SDLC به امنیت می پردازد؟ 
  • چگونه SDLC با سایر روش‌های مدیریت چرخه‌ی حیات مقایسه می‌شود؟ 
  • امنیت در SDLC 
  • راورو و چرخه عمر توسعه نرم افزار 

داخل پرانتز: آن‌چه می‌خوانید، برگرفته از مطلب What is SDLC(Software Development Lifecycle) از سایت آمازون به‌اضافه‌ی افزودنی‌ها و گفته‌هایی از افراد دارای تجربه‌ی مرتبط با این موضوع است. 

SDLC چیست؟

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

چرا SDLC مهم است؟

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

برخی از مزایای SDLC عبارتند از: 

  • افزایش دید نسبت به فرآیند توسعه برای همه‌ی ذی‌نفعان درگیر 
  • برآورد، برنامه ریزی و زمان‌بندی کارآمد 
  • بهبود مدیریت ریسک و برآورد هزینه 
  • تحویل سیستماتیک نرم‌افزار و رضایت بهتر مشتری 

SDLC چگونه کار/عمل می‌کند؟

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

جزئیات فرآیند SDLC برای تیم‌های مختلف، متفاوت است. با این حال، برخی از مراحل متداول SDLC را در زیر شرح می دهیم. 

برنامه‌ریزی

مرحله‌ی برنامه‌ریزی، معمولاً شامل وظایفی مانند تجزیه و تحلیل هزینه-فایده، زمان‌بندی، برآورد و تخصیص منابع است. تیم توسعه، نیازمندی‌ها را از ذی‌نفع‌ها ، مانند؛ مشتریان، کارشناسان داخلی و خارجی و مدیران، جمع‌آوری می‌کند تا یک سند مشخصات نیاز نرم‌افزار ایجاد کند.  

این سند انتظارات را تعیین و اهداف مشترکی را تعریف می‌کند که به برنامه‌ریزی پروژه کمک می‌کند. تیم، هزینه‌ها را تخمین می‌زند، برنامه‌ای ایجاد می‌کند و برنامه‌ی دقیقی برای دستیابی به اهداف خود دارد. 

طراحی

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

پیاده‌سازی

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

تست

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

مستقر کنید

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

داشتن محیط‌های ساخت (Development) و تولید (production) مجزا تضمین می‌کند که حتی زمانی که تیم‌ها در حال تغییر یا ارتقا هستند، مشتریان می‌توانند به استفاده از نرم‌افزار ادامه دهند. مرحله‌ی استقرار (staging) شامل چندین کار برای انتقال آخرین نسخه‌ی ساخت به محیط تولید است، مانند؛ بسته‌بندی، پیکربندی محیط و نصب. 

حفظ و نگهداری

در مرحله‌ی حفظ و نگهداری، تیم در میان سایر وظایف، به رفع باگ‌ها، حل مشکلات مشتری و مدیریت تغییرات نرم‌افزار می‌پردازد. علاوه بر این، تیم عملکرد کلی سیستم، امنیت و تجربه‌ی کاربر را برای شناسایی راه‌های جدید درجهت بهبود نرم‌افزار موجود، بررسی می‌کند. 

مدل‌های SDLC چیستند؟

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

در زیر به چند مدل محبوب SDLC نگاه می‌کنیم: 

آبشار (Waterfall)

مدل آبشار تمام مراحل را به صورت متوالی مرتب می‌کند. به‌طوری‌که هر فاز جدید به نتیجه‌ی فاز قبلی بستگی دارد. از نظر مفهومی، طرح از یک فاز به فاز دیگر جریان دارد، مانند یک آبشار. 

مزایا و معایب

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

تکراری (Iterative)

فرآیند تکراری نشان می‌دهد که تیم‌ها توسعه‌ی نرم‌افزار را با زیرمجموعه‌ی کوچکی از نیازمندی‌ها آغاز کنند. سپس، به‌طور مکرر نسخه ها را در طول زمان بهبود می‌بخشند تا زمانی که نرم‌افزار کاملا برای تولید آماده شود. این تیم در پایان هر تکرار، یک نسخه نرم‌افزار جدید تولید می‌کند. 

مزایا و معایب

شناسایی و مدیریت ریسک‌ها آسان است، زیرا الزامات می‌توانند بین تکرارها تغییر کنند. با این حال، چرخه‌های مکرر می‌تواند منجر به تغییر دامنه و دست‌کم‌گرفتن منابع شود. 

مارپیچ (Spiral)

مدل مارپیچی، چرخه های تکراری کوچک مدل تکراری (Iterative) را با جریان متوالی خطی مدل آبشار(Waterfall) ترکیب می‌کند تا تحلیل ریسک را اولویت‌بندی کند. می‌توانید از مدل مارپیچ برای اطمینان از انتشار تدریجی و بهبود نرم‌افزار با ساختن نمونه‌های اولیه در هر فاز استفاده کنید. 

مزایا و معایب

مدل مارپیچ برای پروژه‌های بزرگ و پیچیده که نیاز به تغییرات مکرر دارند، مناسب است. با این حال، برای پروژه‌های کوچک‌تر با دامنه‌ی محدود می‌تواند پر هزینه باشد. 

چابک (Agile)

مدل چابک، مراحل SDLC را در چندین چرخه‌ی توسعه مرتب می‌کند. تیم به‌سرعت مراحل را تکرار می‌کند و تنها تغییرات نرم‌افزاری کوچک و تدریجی را در هر چرخه ارائه می‌نماید. آن‌ها به طور مداوم الزامات، برنامه‌ها و نتایج را ارزیابی می‌کنند تا بتوانند به سرعت به تغییرات واکنش نشان دهند. مدل چابک هم تکراری و هم افزایشی است که کارآمدتر از سایر مدل‌های فرآیندی است. 

مزایا و معایب

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

چگونه SDLC به امنیت می پردازد؟

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

امروزه اکثر تیم‌ها تشخیص می‌دهند که امنیت، بخشی جدایی‌ناپذیر از چرخه‌ی عمر توسعه نرم‌افزار است. شما می‌توانید امنیت را در SDLC به دنبال اقدامات DevSecOps و انجام ارزیابی‌های امنیتی در طول کل فرآیند SDLC بررسی کنید. 

DevSecOps

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

چگونه SDLC با سایر روش‌های مدیریت چرخه‌ی حیات مقایسه می‌شود؟

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

چرخه‌ی عمر توسعه‌ی نرم‌افزار ( Software development lifecycle)  در مقایسه با چرخه‌ی عمر توسعه‌ی سیستم‌ها (systems development lifecycle)

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

مدیریت چرخه‌ی عمر برنامه (Application lifecycle management)

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

SDLC در مقایسه با ALM

SDLC مرحله توسعه برنامه را با جزئیات بیشتری شرح می‌دهد. این بخشی از ALM است. ALM کل چرخه‌ی عمر برنامه را شامل می‌شود و فراتر از SDLC ادامه می‌یابد. ALM می‌تواند چندین SDLC در طول چرخه‌ی عمر یک برنامه داشته باشد. 

امنیت در SDLC

واهاگ گراگوسیان، devops engineer فلایتیو:

اگر بخواهم از چالش‌هایی که در کارم با آن‌ها روبه‌رو هستم بگویم، کمی سخت است. من الان به‌عنوان مشاور در کنار فلایتیو حضور دارم.  بیش‌تر باتوجه به زمانی که به‌صورت تمام‌وقت همراه فلایتیو بودم، پاسخ می‌دهم. به‌عنوان یک استارتاپ و به‌عنوان پلتفرمی که در آن خرید انجام می‌شود، دسترسی‌پذیری (availability) و امنیت برایمان بیش‌ترین اهمیت را دارند. منظور من از دسترسی‌پذیری، بالابودن، قابل‌استفاده‌بودن و مواردی این چنین است. در مواردی لازم است که به‌صورت همزمان، هم مسیر خرید را برای کاربر ساده کنیم و هم در کنارش از امنیت مراقبت کنیم. چنین موقعیت‌هایی بسیار چالش‌برانگیز است. به همین دلیل گاهی نمی‌شود امنیت را، آن‌طور مطلوبی که می‌خواهیم، داشته باشیم. سخت‌ترین موقعیت مدیریت‌کردن شرایط آن‌جاست که لازم است موازنه‌ای بین این دو به‌وجود بیاوریم. مثلا؛ وقتی تحت حمله‌ی DDos باشیم، ممکن است بخواهیم که بالا بمانیم و بنابراین شروع می‌کنیم به استفاده از سرویس‌های DDos Protection، با آگاهی از این‌که با استفاده از این سرویس‌ها ممکن است برخی قسمت‌های سایت مختل شوند. باید در نظر داشته باشیم که اگر مسیر را خیلی سخت کنیم، چه آسیبی دارد؟ مثلا؛ اگر من کاربر را مجبور کنم یک پسورد سی‌ودو رقمی بگذارد، شاید امنیت خیلی بالا رود، اما احتمالا کاربر کلا از خرید منصرف شود و از این جهت رضایت مخاطب را از دست می‌دهیم. 

پیشنهاد خواندنی: فلایتیو و باگ‌بانتی  

نوید میرحسینی؛ Senior DevOps Engineer نماوا:

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

راورو و چرخه عمر توسعه نرم افزار

برنامه های باگ بانتی، تست نفوذ و مشاوره و بررسی کد راورو با کمک گرفتن از خرد جمعی و تخصص تعداد زیادی شکارچیان امنیت سایبری می تواند در چرخه‌ی عمر توسعه نرم افزار شما همراه شما باشد و به امنیت، چابکی، سرعت و بهینه‌بودن مسیر شما در این روند بیافزاید. 

سخن آخر:

آرزوی دور از دسترسی نیست که امیدوار باشیم آهنگ رشد کسب‌وکار با آهنگ ارتقای امنیت آن هماهنگ باشد. و کسب‌وکارها و کاربران، امنیت بیش‌تری را تجربه کنند.

**بلاگ‌پست‌های مرتبط: **

چرا کسب‌وکارها به امنیت سایبری نیاز دارند؟

چند واقعیت شوکه‌کننده و تلخ راجع به امنیت و هک ‌سامانه‌ها

نقاط آسیب پذیر رایج در سامانه‌ی کسب‌وکارها

چرا کسب‌وکارهای ایران امنیت اطلاعات را جدی نمی‌گیرند؟