0% found this document useful (0 votes)
64 views109 pages

Dev Ops

Uploaded by

Niayesh Shafie
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
64 views109 pages

Dev Ops

Uploaded by

Niayesh Shafie
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 109

‫بسمه حق‬

‫‪ DevOps‬چیست ؟‬
‫و چه ساختار ها و زیر مجموعه ها‬
‫دارد‬
‫و ‪ DevOps‬کار کیست ؟‬

‫(مرجع ‪)DevOps‬‬

‫نویسنده ‪:‬‬

‫یاشار اسمعیل دخت‬

‫نسخه ‪۰٫۱ :‬‬


‫درباره نویسنده ‪:‬‬

‫بنده یاشار اسمعیل دخت دانش آموخته رشته ‪ cyber security‬هستم ‪.‬‬
‫بیش از ‪ ۱۵‬سال سابقه فعالیت دارم ‪.‬‬
‫از جمله فعالیت های بنده را میتوان در ساختار های زیر شرح داد ‪ :‬مشاور ‪ -‬مدرس ‪ -‬مولف‬

‫‪Devops / Platform / Cloud Eng |Gnu/Linux System/Network/Security/Storage‬‬


‫‪Engineer/Admin & Oracle Dba | Linux Trainer |Consultant‬‬

‫عالقه مند به مطالعه و تحقیق و کشف دنیاهای جدید ‪):‬‬


‫در واقع از سرگرمی های من میتوانم به بازی شطرنج و اوتلو و بازی های استراتژی اشاره کنم ‪.‬‬
‫من یک عاشق هستم ‪ .‬عاشق دنیای متن باز و گنو‪/‬لینوکس و یکی از بنیان گذاران الگ تبریز‬
‫خب چطور میتوانید من را دنبال کنید و پیدا کنید ‪:‬‬

‫‪Mob : 09141100257‬‬

‫‪Telegram ID : yashar_esm‬‬

‫‪Telegram channel : unixmens‬‬

‫‪Instagram Account‬‬

‫‪Linkedin Account :/in/yashar_esmaildokht‬‬

‫همچنین خوشحال میشم هرگونه پیشنهاد یا انتقادتون را بشنوم ‪.‬‬

‫چطور میتونید کتاب های دیگر ی از من را پیدا کنید ‪:‬‬

‫توی ‪ slideshare‬یا گوگل دنبال اسم من بگردید میتونید کتاب های دیگری که بصورت آزاد منتشر کردم را پیدا کنید ‪.‬‬
‫جهت دونیت هم میتوانید از این لینک استفاده کنید‬
‫مشاوره ‪:‬‬

‫جهت مشاوره میتوانید از کانال هایی که در صفحه قبل اشاره کردم ‪ .‬تماس حاصل فرمایید ‪ .‬من در دسترس شما خواهم بود ‪.‬‬
‫تقدیم به ‪:‬‬

‫خدا چرا که در سختی هایم تنها او بود که به یاریم شتافت‬


‫مادرم چرا که مرا به زندگی تقدیم کرد ‪ .‬و یاد داد انسانیت و َم حبت را که مدیون اویم‬
‫پدرم که روحش همیشه حامی من بود و مدیون اویم‬
‫عشقم که مشوقم بود و هست‬
‫جامعه اپن سورس‬
‫بشریت‬
‫و او که میخواند و منتشر میکند دانسته هایش را‬

‫و به امید صلح جهانی و دیگر هیچ ‪):‬‬


‫تاریخچه گنو و لینوکس‬

‫سیستم عامل گنو یک سیــستم عامل کامال آزاد بــوده کــه به طــور فزاینده‌ای با یونیکس سازگار می‌باشد‪ .‬گنو مخفف “‪GNU’s Not‬‬
‫‪ ”Unix‬است‪ .‬ریچارد استالمن اطالعیه اولیه پروژه گنو را در سپتامبر ‪ ۱۹۸۳‬منتشر کرد‪ .‬نسخه کامل‌تر آن به نام اعالمیه گنو در سپتامبر‬
‫‪ ۱۹۸۵‬منتشر شد که به چندین زبان ترجمه شده است‪.‬‬

‫نام «گنو» به این علت انتخاب شده است که تعدادی از نیــازها را بــرطــرف می‌کند؛ نخست‪ ،‬یک مخفف بازگشتی برای “‪GNU’s Not‬‬
‫‪ ”Unix‬است‪ ،‬دوم‪ ،‬یک کلمه واقعی است‪ ،‬سوم‪ ،‬آهنگ گفتن (یا خواندن) آن جالب است‪.‬‬

‫کلمه «آزاد» در «نرم‌افزار آزاد» به آزادی اشاره می‌کند‪ ،‬نه قیمت‪ .‬شما برای به دست آوردن نرم‌افزار آزاد ممکن است مبلغی بپردازید یا‬
‫نپردازید‪ .‬در هر صورت‪ ،‬وقتـی نرم‌افزار را در اختیار داشتــه باشید‪ ،‬ســه آزادی ویــژه برای استفاده از آن خواهید داشت‪ .‬نخست‪ ،‬آزادی‬
‫برای نسخه برداری از برنامه و هدیه دادن آن به دوستان و همــکاران؛ دوم‪ ،‬آزادی بــرای اعمال تغییرات در برنامه به طور دلخواه‪ ،‬با داشتن‬
‫دسترسی کامل به کدهای منبع؛ سوم‪ ،‬آزادی برای توزیع نسخه بهبود یافته و در نهایت کمک به ساخت جامعه‪( .‬اگر مجددا نرم‌افزار گنو را‬
‫توزیع نمایید‪ ،‬می‌تــوانـید بــرای کار فیزیکی انتقال یک نسخه مبلغی را دریافت کنید و یا آنها را به طور رایگان هدیه کنید)‪.‬‬

‫پروژه توسعه سیستم گنو‪» ،‬پروژه گنو« نامیده می‌شود‪ .‬در ســال ‪ ۱۹۸۳‬پــروژه گنــو به عنوان راهی برای بازگرداندن روح همکاری که در‬
‫روزهای نخست در بین جامعه کاربران کامپیــوتر وجــود داشـت ایجاد شد تا با از بین بردن موانع که توسط صاحبان نرم‌افزارهای انحصاری‬
‫تحمیل شده بودند‪ ،‬یک بار دیگر همکاری را ممکن سازد‪.‬‬

‫در سال ‪ ۱۹۷۱‬هنگامی که ریچارد استالمن کار خود را در دانشگاه ‪ MIT‬آغاز کرد‪ ،‬در گــروهی کــه منحصرا از نرم‌افزار آزاد استفاده‬
‫می‌کردند به کار پرداخت‪ .‬حتی شرکت‌های کامپیوتری نیز اغلب نرم‌افزار آزاد توزیع می‌کــردند‪ .‬بــرنامه‌نویسان در همکاری با یکدیگر آزاد‬
‫بودند و اغلب نیز همین کار را انجام می‌دادند‪.‬‬

‫در دهه ‪ ۱۹۸۰‬تقریبا تمام نرم‌افزارها انحصاری بودند‪ ،‬بــه این معنی که مالک داشتند و مالکان آنها همکاری توسط کاربزان را منع‬
‫می‌کردند که این کار ضرورت پروژه گنو را ایجاب می‌کرد‪.‬‬

‫تمام کاربران کامپیوتر به یــک سیستم عامل نیــاز دارند؛ اگــر سـیـستم عامل آزادی وجــود نـداشـته بــاشـد‪ ،‬شـما حتی نمی‌توانید‬
‫بدون استفاده از نرم‌افزارهای انحصاری کار با کامپیوتر را شروع کنید‪ .‬بنــابــراین اولیــن ضرورت در نرم‌افزار آزاد‪ ،‬وجود یک سیستم عامل‬
‫آزاد است‪.‬‬

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

‫یک سیستم عامل شبه یونیکس خیلی بیشتر از یک هسته اســت؛ و شــامــل کامپــایـلرها‪ ،‬ویــرایشــگـرها‪ ،‬برنامه‌های قالب‌بندی متن‪،‬‬
‫نرم‌افزارهای پستی و خیلی چیزهای دیگر می‌باشد‪ .‬بنابرایـن نوشتن یک سیستم عامل کامل کار بسیار بزرگی است‪ .‬در ژانویه ‪ ۱۹۸۴‬شروع‬
‫به کار کردند سالها به طول انجامید‪ .‬بنیاد نرم‌افزار آزاد در اکتبر ‪ ۱۹۸۵‬بیشتر برای جذب سرمایه جهت کمک به توسعه گنو تاسیس شد‪.‬‬
‫تا سال ‪ ۱۹۹۰‬به تمامی اجزای اصلی سیستم عامل‪ ،‬بــه جــز هسته دست یافتند ‪ .‬سپس لینوکس‪ ،‬یک هسته شبه یونیکس‪ ،‬در سال‬
‫‪ ۱۹۹۱‬توسط لینوس تروالدز توسعه پیدا کرد و در ســال ‪ ۱۹۹۲‬یــک نــرم‌افـزار آزاد شد‪ .‬ترکیب لینوکس با سیستم تقریبا کامل گنو‬
‫منجر به یک سیستم عامــل کــامل شد‪ :‬سیستم گنـو‪/‬لینوکس‪ .‬تخمــین زده می‌شود که هم‌اکنون ده‌ها میلیون نفر از سیستم‌های‬
‫گنو‪/‬لینوکس‪ ،‬شــامــل اسلکور‪ ،‬دبیــان‪ ،‬ردهــت و غـیـره استفاده می‌کنند‪.‬‬

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

‫بنیاد نرم‌افزار آزاد همچنین قصد دارد برای کاربرانی که در زمینه کامپیـوتر مهارت ندارند نیز نرم‌افزار تهیه کنند به همین جهت بنیاد‬
‫نرم‌افزار آزاد یک میز کار گرافیکی به منظور کمک به کاربران تازه‌کار در استفاده از سیستم گنو‪ ،‬ایجاد کرد‪.‬‬

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

‫‪Open Source‬‬
‫‪Software‬‬

‫مقدمه‬
‫نرم افزار متن‌باز با تأثیر قابل مالحظه‌ای که بر رفتار اقتصادی سرمایه‌گذاران در اکوسیستم نرم‌افزار گذاشته قواعد‬
‫بازی را تغییر داده است‪ .‬در این محیط تازه توسعه‌دهنگان سعی می‌کنند اعمال کننده کد باشند‪ ،‬شرکتها فشار تولید‬
‫محصوالت متن‌باز را حس می‌کنند و فروشندگان سیستم انتظار سود سرشاری را می‌کشند‪.‬‬
‫‪ .۱‬معرفی‬

‫ظهور نرم‌افزار متن‌باز چیزی بیش از نرم‌افزار ارزانتر برای کاربران به بار آورده است‪ .‬این اتفاق تغییراتی عمده در فعل‬
‫و انفعال اقتصادی بین بازیگران حوزه نرم‌افزار ایجاد کرده است‪.‬‬

‫برای خیلی‌ها نرم‌افزار متن‌باز تجسم نگاهی ویژه به توسعه نرم‌افزار ‪ -‬یا حتی سبکی از زندگی ‪ -‬است اما به معنای‬
‫نوعی تدبیر تجاری هم هست‪ .‬پیشنهاد ران گلدمن و ریچارد گابریل این است که شرکتها باید برای رشد جامعه‬
‫کاربرانشان از نرم‌افزار متن‌باز استفاده کنند و محیطی زنده اطراف محصوالت و خدماتشان ایجاد نمایند‪.‬‬

‫بطور معمول نرم‌افزار متن‌باز رایگان است و متن کد را که برای تطبیق دادن آن با احتیاجات کاربر مورد نیاز است به‬
‫همراه دارد‪ .‬اغلب پروانه‌های متن‌باز به کاربر اجازه بازپخش نرم‌افزار بعالوه تغییرات ممکن را در ازای دریافت مبلغی‬
‫برای بازپخش می‌دهند تا زمانی که تغییرات متن کد بصورت عمومی در دسترس باشد (‬
‫‪.)www.opensource.org‬‬

‫دو نوع نرم‌افزار متن‌باز وجود دارد‪ .‬متن‌باز جمعی نرم‌افزاری است که جامعه توسعه می‌دهد‪ .‬بجای اینکه یک‬
‫شخصیت حقوقی مالک نرم‌افزار باشد گاهی گروهی برگزیده از داوطلبان تصمیم می‌گیرند که کدام یک از‬
‫همکاریهای اعمال شده برای ورود به متن کد اصلی پذیرفته شوند و نرم‌افزار به کدام سو برود‪ .‬توسعه‌دهندگان‬
‫شخصی‪ ،‬اعمال کنندگان کد و نه یک شرکت بخصوص درباره نرم‌افزار تصمیم می‌گیرند مانند مورد سرور وب آپاچی‬
‫(‪.)httpd.apache.org‬‬

‫متن‌باز تجاری نرم‌افزاری است که شخصیتی در پی سود‪ ،‬مالک و توسعه‌دهنده آن است‪ .‬شرکت حق تالیف را در‬
‫اختیار دارد و تعیین می‌کند که کدام کد را برای ورود به متن کد اصلی بپذیرد و در آینده چه کاری انجام دهد مانند‬
‫مورد ‪ MySQL‬و پایگاه داده )‪.MySQL (www.mysql.com‬‬

‫مطالعات پیشین درباره اقتصاد نرم‌افزار متن‌باز توسعه داده شده بوسیله جامعه اغلب بر اقتصاد نیروی کار متمرکز‬
‫است که در آن میزان کار داوطلبانه فراوان تعجب‌آوری به نرم‌افزار متن‌باز تخصیص می‌یابد‪ .‬اریک ریموند اشاره‬
‫می‌کند که توسعه‌دهندگان بخاطر لذت شخصی ناشی از افزایش اعتبار بین همتایانشان به پروژه‌های متن‌باز کمک‬
‫می‌کنند ارنان هارووی و همکارانش در مطالعه تجربی خود نیز به نتیجه مشابهی رسیدند ‪.‬‬

‫جاشوا لرنرو‪ ،‬جین تیروله استدالل می‌کنند که توسعه‌دهندگان برای مستند کردن تواناییهای فنی و بهبود چشم‌انداز‬
‫شغلی برای کارفرمایان آتی به پروژه‌های متن‌باز کمک می‌کنند و کریم الخانیو رابرت گلف گزارش می‌کنند که لذت‬
‫بردن از کار محرک ذاتی مهمی برای کمک توسعه‌دهندگان به پروژه‌های متن‌باز است گرچه این مطالعه نشان‬
‫می‌دهد که انگیزه‌های مالی هم مهم‌اند‪.‬‬
‫در حالی که اینها پاره‌ای از توضیحات برای کار داوطلبانه است اما این را شرح نمی‌دهد که چرا شرکتها اشخاصی را‬
‫استخدام می‌کنند که در زمان کاری شرکت به پروژه‌های نرم‌افزار متن‌باز کمک می‌کنند‪ .‬ایل هورن هان و همکارانش‬
‫دریافتند که حقوق کسانی که به پروژه بنیاد نرم افزار آپاچی کمک می‌کنند رابطه مستقیمی با رتبه آنها در‬
‫تشکیالت آپاچی دارد‪ .‬پس محققین نتیجه گرفتند که کارفرمایان رتبه توسعه‌دهندگان در بنیاد را به عنوان معیاری‬
‫برای سنجش توانایی‌های مولد بکار می‌گیرند‪.‬‬
‫حوزه ‪ DevOps‬یکی از رشته‌های پرطرفدار در صنعت فناوری اطالعات است که به بهبود هماهنگی و همکاری بین توسعه نرم‌افزار (‬
‫‪ )Development‬و عملیات (‪ )Operations‬می‌پردازد‪ DevOps .‬تالش می‌کند تا با استفاده از ابزارها‪ ،‬فرایندها و توانمندی‌های‬
‫مناسب‪ ،‬سیکل توسعه و ارائه نرم‌افزار را بهبود بخشد و به عملکرد و کیفیت سیستم‌ها و سرویس‌ها افزوده کند‪.‬‬

‫در حوزه ‪ ،DevOps‬متخصصان متعددی با مهارت‌ها و دانش‌های گوناگون مورد نیاز هستند‪ .‬برخی از شغل‌های رایج در زمینه‬
‫‪ DevOps‬شامل‪:‬‬

‫متخصص )‪ :DevOps (DevOps Engineer‬این فرد مسئول برنامه‌ریزی‪ ،‬پیاده‌سازی و مدیریت ابزارها و فرایندهای‬ ‫•‬
‫‪ DevOps‬در محیط سازمان است‪ .‬آن‌ها باید توانایی اجرای موفق استراتژی‌های ‪ DevOps‬را داشته باشند‪.‬‬
‫‪ :DevOps Evangelist‬افسر اصلی (رهبر) و مسئول پیاده سازی دواپس‪.‬‬ ‫•‬

‫مدیر اطالعات و عملیات (‪ :)IT Operations Manager‬این شخص به‌عنوان رهبر عملیاتی تیم‌های ‪ IT‬و‬ ‫•‬
‫‪ DevOps‬عمل می‌کند و مسئولیت اجرا و مدیریت فعالیت‌های عملیاتی سازمان را برعهده دارد‪.‬‬
‫مدیر اتوماسیون عملیات (‪ :)Automation Manager‬این فرد مسئول توسعه و پیاده‌سازی راه‌حل‌های اتوماسیونی‬ ‫•‬
‫برای بهبود فرایندها و کارایی عملیات است‪.‬‬

‫کارشناس اتوماسیون‪ :‬فردی که مسئول دستیابی به اتوماسیون و هماهنگ سازی ابزارها است‪.‬‬ ‫•‬

‫متخصص اتوماسیون فرایندها (‪ :)Process Automation Specialist‬این فرد مسئول توسعه و پیاده‌سازی‬ ‫•‬
‫ابزارها و فرایندهای اتوماسیونی برای بهبود فرایندها و کارایی در سازمان است‪.‬‬

‫‪ :Release Manager‬ویژگی‌ها و امکانات جدید را منتشر می‌کند و از ثبات محصول پس از انتشار اطمینان می‌دهد‪.‬‬ ‫•‬

‫متخصص امنیت )‪ :DevOps (DevSecOps Engineer‬این شخص مسئول امنیت نرم‌افزارها و فرایندهای‬ ‫•‬
‫‪ DevOps‬است و باید توانایی اجرای استانداردهای امنیتی و رویه‌های امنیتی را داشته باشد‪.‬‬

‫متخصص مانیتورینگ و نظارت (‪ :)Monitoring and Observability Specialist‬این شخص مسئول‬ ‫•‬
‫تنظیم و مدیریت سیستم‌های مانیتورینگ و نظارت بر عملکرد سیستم‌ها و خدمات است‪.‬‬

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

‫‪ DevOps Evangelist‬یک نقش است که در حوزه ‪ DevOps‬تعریف شده و دارای تأثیر بسیاری بر فرهنگ و روند اجرایی اجرای‬
‫‪ DevOps‬در سازمان‌ها دارد ‪ .‬این شخص به عنوان یک معلم‪ ،‬یک راهنما و یک مشوق برای فرهنگ ‪ DevOps‬در یک سازمان عمل‬
‫می‌کند‪ .‬وظیفه اصلی یک ‪ DevOps Evangelist‬شامل ایجاد آگاهی‪ ،‬ارتقاء دانش‪ ،‬ترویج ایده‌های ‪ DevOps‬و تشویق تیم‌ها و‬
‫اعضای سازمان به پیاده‌سازی بهتر رویکردهای ‪ DevOps‬است‪.‬‬

‫وظایف و مسئولیت‌های یک ‪ DevOps Evangelist‬ممکن است شامل این موارد باشد‪:‬‬

‫‪ .1‬آموزش و آگاهی‌رسانی‪ :‬ارائه دوره‌های آموزشی‪ ،‬کارگاه‌ها و سخنرانی‌ها در مورد مفهوم‌ها‪ ،‬اصول و مزایای ‪ DevOps‬به اعضای سازمان‪.‬‬

‫‪ .2‬تشویق و پشتیبانی‪ :‬تشویق و پشتیبانی از تیم‌ها و اعضای سازمان برای اجرای بهتر واژه‌های ‪ DevOps‬و به اشتراک گذاری تجربیات‬
‫موفق‪.‬‬

‫‪ . 3‬اجرای تغییرات فرهنگی‪ :‬کمک به ایجاد تغییر فرهنگی در سازمان به سوی یک محیط کاری که ارتباطات بین توسعه و عملیات بهبود‬
‫یابد‪.‬‬

‫‪ .4‬ترغیب به همکاری‪ :‬تشویق اعضا به همکاری برای ایجاد فرهنگ انعطاف‌پذیری‪ ،‬اتوماسیون و ارتباط نزدیک بین تیم‌های مختلف‪.‬‬

‫‪ .5‬مدیریت رویدادها‪ :‬برگزاری جلسات‪ ،‬کنفرانس‌ها‪ ،‬گردهمایی‌ها و ویدیوها برای تبادل نظر و انتقال دانش در حوزه ‪.DevOps‬‬

‫با داشتن یک ‪ DevOps Evangelist‬ماهر و متعهد‪ ،‬سازمان‌ها می‌توانند بهبود فرهنگ کاری‪ ،‬افزایش هماهنگی و همکاری بین‬
‫تیم‌های مختلف‪ ،‬افزایش بهره وری و ارتقای سطح اجرایی ‪ DevOps‬خود را تامین کنند‪.‬‬
: DevOps ‫فرهنگ‬
: DevOps ‫راهکار‬
‫قبل از هر چیز روی متادولوژی باید صحبت کرد ‪ .‬و روی انواع متادولوژی ها ‪.‬‬

‫یکی از متادولوژی ها متادولوژی آبشاری است ‪.‬‬

‫متدولوژی آبشاری یکی از قدیمی‌ترین و شناخته‌شده‌ترین متدولوژی‌های توسعه نرم‌افزار است‪ .‬این متدولوژی یک رویکرد خطی و ترتیبی‬
‫برای توسعه نرم‌افزار ارائه می‌دهد که هر مرحله باید به طور کامل تکمیل شود و تأیید گردد قبل از اینکه به مرحله بعدی بروید‪ .‬این رویکرد‬
‫به پنج تا هفت مرحله تقسیم می‌شود که هر یک به‌طور واضح تعریف شده‌اند‪ .‬مراحل اصلی معموًال عبارتند از‪:‬‬

‫تحلیل نیازمندی‌ها (‪)Requirements Analysis‬‬


‫‪ -‬در این مرحله‪ ،‬نیازهای مشتری و ذی‌نفعان جمع‌آوری و مستندسازی می‌شوند‪ .‬هدف این است که تمامی نیازها به‌طور دقیق و بدون‬
‫ابهام مشخص شوند تا در مراحل بعدی توسعه مشکل ایجاد نشود‪.‬‬

‫طراحی سیستم (‪)System Design‬‬


‫‪ -‬بر اساس نیازهای جمع‌آوری شده‪ ،‬طراحی سیستم صورت می‌گیرد‪ .‬این شامل طراحی معماری سیستم‪ ،‬طراحی پایگاه داده‪ ،‬و طراحی‬
‫رابط‌های کاربری است‪.‬‬

‫پیاده‌سازی (‪)Implementation‬‬
‫‪ -‬در این مرحله‪ ،‬کد نویسی انجام می‌شود و نرم‌افزار بر اساس طراحی‌ها پیاده‌سازی می‌شود‪.‬‬
‫تست (‪)Testing‬‬
‫‪ -‬پس از پیاده‌سازی‪ ،‬نرم‌افزار تست می‌شود تا اطمینان حاصل شود که تمامی نیازها به‌درستی برآورده شده‌اند و هیچ باگی وجود ندارد‪.‬‬
‫تست‌ها شامل تست واحد‪ ،‬تست یکپارچگی‪ ،‬تست سیستم و تست پذیرش می‌باشند‪.‬‬

‫یکپارچه‌سازی و نگهداری (‪)Integration and Maintenance‬‬


‫‪ -‬نرم‌افزار نهایی پس از تست به مشتری تحویل داده می‌شود و در محیط عملیاتی قرار می‌گیرد‪ .‬در طول زمان‪ ،‬ممکن است نیاز به‬
‫اصالحات و بهبودها باشد که در این مرحله انجام می‌شود‪.‬‬

‫مزایا‪:‬‬
‫‪ -‬ساختار مشخص و واضح‪ :‬هر مرحله دارای خروجی‌های مشخص است که به کاهش احتمال اشتباه کمک می‌کند‪.‬‬
‫‪ -‬کنترل پروژه‪ :‬امکان کنترل و مدیریت پروژه در هر مرحله فراهم است‪.‬‬
‫‪ -‬مستندسازی کامل ‪ :‬تمامی مراحل به‌خوبی مستند می‌شوند که برای نگهداری و بهبودهای آینده مفید است‪.‬‬

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

‫به‌طور کلی‪ ،‬متدولوژی آبشاری برای پروژه‌هایی مناسب است که نیازمندی‌ها و مشخصات آن‌ها به‌خوبی تعریف شده و تغییرات کمتری در‬
‫طول زمان دارند‪ .‬در مقابل‪ ،‬برای پروژه‌های پویا و محیط‌های پیچیده‌تر‪ ،‬متدولوژی‌های چابک (‪)Agile‬مناسب‌تر باشند‪.‬‬
‫متدولوژی ‪agile‬‬
‫متدولوژی ‪ Agile‬یا چابک‪ ،‬یک رویکرد تکرارشونده و افزایشی برای توسعه نرم‌افزار است که بر انعطاف‌پذیری‪ ،‬همکاری‪ ،‬و پاسخ سریع به‬
‫تغییرات تأکید دارد‪ .‬این متدولوژی در واکنش به محدودیت‌های متدولوژی‌های سنتی مانند متدولوژی آبشاری ایجاد شده است‪ .‬اصول و‬
‫ارزش‌های متدولوژی ‪ Agile‬در مانیفست ‪ Agile‬که در سال ‪ 2001‬توسط گروهی از توسعه‌دهندگان نرم‌افزار منتشر شد‪ ،‬بیان شده‌اند‪.‬‬

‫اصول مانیفست ‪:Agile‬‬


‫‪ .1‬توجه به افراد و تعامالت بیشتر از فرآیندها و ابزارها‬
‫‪ .2‬نرم‌افزار کارآمد بیشتر از مستندات جامع‬
‫‪ .3‬همکاری با مشتری بیشتر از مذاکره در قرارداد‬
‫‪ .4‬پاسخ به تغییرات بیشتر از پیروی از یک برنامه‬

‫چرخه توسعه ‪:Agile‬‬


‫چرخه توسعه ‪ Agile‬به تکرارها (‪ )Iterations‬یا اسپرینت‌ها (‪ )Sprints‬تقسیم می‌شود که معموًال بین ‪ 1‬تا ‪ 4‬هفته طول می‌کشند‪.‬‬
‫هر تکرار شامل مراحل زیر است‪:‬‬

‫‪ .1‬برنامه‌ریزی (‪:)Planning‬‬
‫‪ -‬در ابتدای هر تکرار‪ ،‬تیم توسعه و مشتری برای تعیین اهداف و اولویت‌های تکرار جلسه‌ای برگزار می‌کنند‪ .‬این جلسه شامل انتخاب‬
‫وظایف از ‪ Backlog‬و تخمین زمان انجام آن‌ها می‌شود‪.‬‬

‫‪ .2‬طراحی و توسعه (‪:)Design and Development‬‬


‫‪ -‬تیم توسعه وظایف انتخاب شده را طراحی و پیاده‌سازی می‌کند‪ .‬تمرکز بر ایجاد قابلیت‌های قابل ارائه و ارزشمند برای مشتری است‪.‬‬

‫‪ .3‬تست (‪:)Testing‬‬
‫‪ -‬وظایف توسعه یافته در همان تکرار تست می‌شوند تا اطمینان حاصل شود که نیازمندی‌ها برآورده شده‌اند و نرم‌افزار بدون باگ است‪.‬‬

‫‪ .4‬بازبینی (‪:)Review‬‬
‫‪ -‬در پایان هر تکرار‪ ،‬جلسه‌ای برای نمایش نتایج به مشتری و دریافت بازخورد برگزار می‌شود‪.‬‬

‫‪ .5‬بازنگری (‪:)Retrospective‬‬
‫‪ -‬تیم توسعه در پایان هر تکرار جلسه‌ای برگزار می‌کند تا درباره فرآیندها‪ ،‬موفقیت‌ها‪ ،‬و نقاط قابل بهبود بحث کند و راهکارهای بهبود را‬
‫برای تکرارهای بعدی پیدا کند‪.‬‬

‫مزایای ‪:Agile‬‬
‫‪ -‬انعطاف‌پذیری باال‪ :‬امکان تغییر نیازمندی‌ها و اولویت‌ها در هر تکرار‪.‬‬
‫‪ -‬تسریع در ارائه ارزش‪ :‬ارائه قابلیت‌های کاربردی به‌صورت تدریجی و مداوم‪.‬‬
‫‪ -‬همکاری نزدیک با مشتری‪ :‬دریافت بازخورد مستمر و اطمینان از تحقق نیازهای واقعی مشتری‪.‬‬
‫‪ -‬بهبود مستمر‪ :‬امکان بررسی و بهبود فرآیندها در هر تکرار‪.‬‬

‫چارچوب‌های ‪:Agile‬‬
‫چندین چارچوب مختلف برای پیاده‌سازی ‪ Agile‬وجود دارد که هر کدام بر اساس نیازهای مختلف و تیم‌ها طراحی شده‌اند‪ .‬برخی از‬
‫مشهورترین چارچوب‌ها عبارتند از‪:‬‬
‫‪ -‬اسکرام (‪:)Scrum‬‬
‫‪ -‬تمرکز بر مدیریت پروژه با استفاده از اسپرینت‌های کوتاه مدت و نقش‌های مشخصی مانند مالک محصول (‪،)Product Owner‬‬
‫اسکرام مستر (‪ ،)Scrum Master‬و تیم توسعه‪.‬‬
‫‪ -‬کانبان (‪:)Kanban‬‬
‫‪ -‬تمرکز بر جریان مداوم کار و بهینه‌سازی فرآیندها با استفاده از بردهای بصری و کارت‌ها‪.‬‬
‫‪ -‬اکستریم پروگرمینگ (‪:)XP‬‬
‫‪ -‬تمرکز بر بهترین شیوه‌های برنامه‌نویسی مانند برنامه‌نویسی زوجی‪ ،‬توسعه تست‌محور (‪ ،)TDD‬و بازخورد مداوم‪.‬‬

‫معایب ‪:Agile‬‬
‫‪ -‬نیاز به مشارکت فعال مشتری‪ :‬موفقیت ‪ Agile‬به همکاری و بازخورد مستمر مشتری وابسته است‪.‬‬
‫‪ -‬تغییر مداوم‪ :‬ممکن است تیم‌ها به دلیل تغییرات مداوم با مشکالتی در زمان‌بندی و برنامه‌ریزی مواجه شوند‪.‬‬
‫‪ -‬مستندسازی کمتر‪ :‬تأکید کمتر بر مستندات ممکن است در برخی موارد مشکالتی ایجاد کند‪.‬‬

‫متدولوژی ‪ Agile‬برای پروژه‌هایی مناسب است که نیاز به انعطاف‌پذیری و پاسخ سریع به تغییرات دارند‪ ،‬و تیم‌هایی که می‌توانند به‌طور‬
‫مؤثر با مشتریان همکاری کنند‪ .‬این رویکرد به خصوص در محیط‌های پیچیده و پویا که نیازها و اولویت‌ها به سرعت تغییر می‌کنند‪ ،‬بسیار‬
‫مفید است‪.‬‬
‫متدولوژی ‪devops‬‬
‫متدولوژی ‪ DevOps‬یک رویکرد جامع برای توسعه و بهره‌برداری نرم‌افزار است که هدف آن افزایش همکاری و ارتباط بین تیم‌های‬
‫توسعه (‪ )Development‬و عملیات (‪ )Operations‬است‪ DevOps .‬تالش می‌کند تا فرآیندهای توسعه نرم‌افزار را با اتوماسیون‬
‫و نظارت مداوم بهبود بخشد تا به تحویل سریع‌تر‪ ،‬با کیفیت‌تر و پایدارتر نرم‌افزار دست یابد‪ .‬این متدولوژی به فرهنگ سازمانی‪ ،‬شیوه‌های‬
‫کاری و ابزارهای خاصی متکی است که در زیر به تفصیل توضیح داده می‌شوند‪.‬‬

‫اصول کلیدی ‪:DevOps‬‬

‫‪ .1‬فرهنگ همکاری (‪:)Collaboration Culture‬‬


‫‪ DevOps -‬بر فرهنگ همکاری بین تیم‌های توسعه و عملیات تأکید دارد‪ .‬این فرهنگ همکاری به کاهش دیوارهای سیلویی و افزایش‬
‫ارتباطات بین تیم‌ها کمک می‌کند‪.‬‬

‫‪ .2‬اتوماسیون (‪:)Automation‬‬
‫‪ -‬یکی از اصول اساسی ‪ DevOps‬اتوماسیون فرآیندهای تکراری مانند تست‪ ،‬ساخت‪ ،‬استقرار و مانیتورینگ است‪ .‬ابزارهای اتوماسیون‬
‫مانند ‪ Jenkins، Ansible، Puppet‬و ‪ Chef‬برای این منظور استفاده می‌شوند‪.‬‬

‫‪ .3‬ادغام و استقرار مداوم (‪:)CI/CD‬‬


‫‪ Continuous Integration (CI) -‬و )‪ Continuous Delivery (CD‬فرآیندهایی هستند که به تیم‌ها اجازه می‌دهند‬
‫کدهای جدید را به‌طور مداوم و خودکار تست و استقرار دهند‪ .‬این فرآیندها کمک می‌کنند تا نرم‌افزار با کیفیت باال و به سرعت تحویل‬
‫شود‪.‬‬

‫‪ .4‬نظارت و الگینگ (‪:)Monitoring and Logging‬‬


‫‪ DevOps -‬بر نظارت مستمر بر عملکرد سیستم‌ها و جمع‌آوری الگ‌ها تأکید دارد تا مشکالت به‌سرعت شناسایی و حل شوند‪.‬‬
‫ابزارهایی مانند )‪ Prometheus، Grafana، ELK Stack (Elasticsearch, Logstash, Kibana‬برای این منظور‬
‫استفاده می‌شوند‪.‬‬

‫‪ .5‬بازخورد و بهبود مستمر (‪:)Continuous Feedback and Improvement‬‬


‫‪ DevOps -‬یک چرخه بی‌پایان از بازخورد و بهبود مستمر ایجاد می‌کند‪ .‬بازخورد از مشتریان‪ ،‬کاربران و سیستم‌های نظارتی‬
‫جمع‌آوری می‌شود تا بهبودهای الزم در فرآیندها و نرم‌افزار اعمال شوند‪.‬‬

‫مراحل اصلی ‪:DevOps‬‬

‫‪ .1‬برنامه‌ریزی (‪:)Planning‬‬
‫‪ -‬در این مرحله‪ ،‬تیم‌ها نیازمندی‌ها را جمع‌آوری و برنامه‌های توسعه را تدوین می‌کنند‪.‬‬

‫‪ .2‬کدنویسی (‪:)Coding‬‬
‫‪ -‬توسعه‌دهندگان کدهای نرم‌افزار را می‌نویسند و تغییرات را در مخازن کنترل نسخه (مانند ‪ )Git‬اعمال می‌کنند‪.‬‬
‫‪ .3‬ساخت (‪:)Building‬‬
‫‪ -‬کدهای نرم‌افزار به بسته‌های قابل استقرار تبدیل می‌شوند‪ .‬این مرحله شامل کامپایل‪ ،‬لینک و ساختن بسته‌های اجرایی است‪.‬‬

‫‪ .4‬تست (‪:)Testing‬‬
‫‪ -‬کدهای ساخته شده به‌طور خودکار تست می‌شوند تا از کیفیت و کارایی آن‌ها اطمینان حاصل شود‪.‬‬

‫‪ .5‬استقرار (‪:)Deployment‬‬
‫‪ -‬کدهای تست شده به محیط‌های تولیدی (‪ )Production‬یا محیط‌های پیش‌تولیدی (‪ )Staging‬استقرار می‌یابند‪.‬‬

‫‪ .6‬عملیات (‪:)Operations‬‬
‫‪ -‬نرم‌افزار در محیط تولیدی اجرا می‌شود و نظارت مستمر بر عملکرد آن انجام می‌گیرد‪.‬‬

‫‪ .7‬نظارت (‪:)Monitoring‬‬
‫‪ -‬سیستم‌ها به‌طور مداوم نظارت می‌شوند تا عملکرد‪ ،‬قابلیت اطمینان و امنیت آن‌ها تضمین شود‪.‬‬

‫مزایای ‪:DevOps‬‬

‫‪ -‬تحویل سریع‌تر‪ :‬کاهش زمان تحویل ویژگی‌ها و اصالحات‪.‬‬


‫‪ -‬افزایش کیفیت‪ :‬شناسایی و حل سریع‌تر مشکالت‪.‬‬
‫‪ -‬پایداری بیشتر‪ :‬کاهش احتمال بروز مشکالت در محیط تولید‪.‬‬
‫‪ -‬همکاری بهتر‪ :‬بهبود ارتباط و همکاری بین تیم‌های توسعه و عملیات‪.‬‬

‫ابزارهای ‪:DevOps‬‬

‫‪ -‬نسخه‌گذاری و کنترل نسخه‪Git, SVN :‬‬


‫‪ -‬ادغام مداوم و استقرار مداوم (‪Jenkins, Travis CI, CircleCI :)CI/CD‬‬
‫‪ -‬پیکربندی و مدیریت زیرساخت‪Ansible, Puppet, Chef :‬‬
‫‪ -‬مانیتورینگ و الگینگ‪Prometheus, Grafana, ELK Stack, Splunk :‬‬
‫‪ -‬مدیریت کانتینرها‪Docker, Kubernetes :‬‬

‫چالش‌های ‪:DevOps‬‬

‫‪ -‬تغییر فرهنگ سازمانی‪ :‬نیاز به تغییرات فرهنگی در سازمان که ممکن است زمان‌بر باشد‪.‬‬
‫‪ -‬پیچیدگی ابزارها‪ :‬نیاز به دانش و تخصص در استفاده از ابزارهای متنوع ‪.DevOps‬‬
‫‪ -‬هماهنگی بین تیم‌ها‪ :‬نیاز به هماهنگی و همکاری مستمر بین تیم‌های توسعه و عملیات‪.‬‬

‫متدولوژی ‪ DevOps‬یک راهکار جامع و مؤثر برای بهبود فرآیندهای توسعه و بهره‌برداری نرم‌افزار است که با افزایش همکاری‪ ،‬اتوماسیون‬
‫و نظارت مداوم‪ ،‬به تحویل سریع‌تر و با کیفیت‌تر نرم‌افزار کمک می‌کند‪.‬‬
systems development life cycle (SDLC)
‫چرخه عمر توسعه سیستم‌ها (‪ Systems Development Life Cycle‬یا ‪ )SDLC‬یک چارچوب ساختاریافته است که فرآیند‬
‫توسعه سیستم‌های اطالعاتی را از آغاز تا پایان پوشش می‌دهد‪ SDLC .‬به تیم‌های توسعه کمک می‌کند تا پروژه‌های خود را به‌صورت‬
‫سیستماتیک برنامه‌ریزی‪ ،‬اجرا و مدیریت کنند‪ .‬این چارچوب شامل چندین مرحله است که هر یک به‌طور دقیق تعریف شده‌اند و هدف‬
‫آن‌ها تضمین موفقیت پروژه‌های نرم‌افزاری است‪.‬‬

‫مراحل اصلی ‪:SDLC‬‬

‫‪ .1‬برنامه‌ریزی (‪:)Planning‬‬
‫‪ -‬اهداف و نیازمندی‌ها‪ :‬تعریف اهداف پروژه‪ ،‬جمع‌آوری نیازمندی‌ها و تعیین دامنه پروژه‪.‬‬
‫‪ -‬مطالعه امکان‌سنجی‪ :‬ارزیابی فنی‪ ،‬اقتصادی و عملیاتی پروژه برای تعیین قابلیت اجرا‪.‬‬

‫‪ .2‬تحلیل سیستم (‪:)System Analysis‬‬


‫‪ -‬جمع‌آوری نیازمندی‌ها‪ :‬گردآوری و مستندسازی نیازمندی‌های کاربران و ذی‌نفعان‪.‬‬
‫‪ -‬تحلیل نیازمندی‌ها‪ :‬تحلیل نیازمندی‌ها برای درک دقیق و جزئیات بیشتر از آنچه که باید توسعه یابد‪.‬‬

‫‪ .3‬طراحی سیستم (‪:)System Design‬‬


‫‪ -‬طراحی معماری سیستم‪ :‬تعیین ساختار کلی سیستم‪ ،‬انتخاب فناوری‌ها و تعیین معماری نرم‌افزار‪.‬‬
‫‪ -‬طراحی تفصیلی‪ :‬ایجاد طراحی‌های دقیق برای هر قسمت از سیستم شامل پایگاه داده‪ ،‬رابط‌های کاربری و اجزای نرم‌افزاری‪.‬‬

‫‪ .4‬پیاده‌سازی (‪:)Implementation‬‬
‫‪ -‬کدنویسی‪ :‬توسعه کدهای نرم‌افزار بر اساس طراحی‌های تفصیلی‪.‬‬
‫‪ -‬یکپارچه‌سازی‪ :‬ترکیب و یکپارچه‌سازی اجزای مختلف سیستم‪.‬‬

‫‪ .5‬تست (‪:)Testing‬‬
‫‪ -‬تست واحد (‪ :)Unit Testing‬بررسی عملکرد هر واحد نرم‌افزار به‌صورت جداگانه‪.‬‬
‫‪ -‬تست یکپارچگی (‪ :)Integration Testing‬بررسی عملکرد یکپارچه اجزای مختلف سیستم‪.‬‬
‫‪ -‬تست سیستم (‪ :)System Testing‬ارزیابی کلی سیستم برای اطمینان از برآورده شدن نیازمندی‌ها‪.‬‬
‫‪ -‬تست پذیرش (‪ :)Acceptance Testing‬تأیید نهایی سیستم توسط کاربران نهایی‪.‬‬

‫‪ .6‬استقرار (‪:)Deployment‬‬
‫‪ -‬نصب و راه‌اندازی‪ :‬استقرار سیستم در محیط عملیاتی و آماده‌سازی برای استفاده‪.‬‬
‫‪ -‬آموزش کاربران‪ :‬آموزش کاربران نهایی برای استفاده از سیستم‪.‬‬

‫‪ .7‬نگهداری و پشتیبانی (‪:)Maintenance and Support‬‬


‫‪ -‬رفع اشکاالت‪ :‬شناسایی و اصالح اشکاالت نرم‌افزار‪.‬‬
‫‪ -‬به‌روزرسانی‌ها و بهبودها‪ :‬انجام به‌روزرسانی‌های منظم و بهبودهای مورد نیاز بر اساس بازخورد کاربران‪.‬‬
‫مزایای ‪:SDLC‬‬

‫‪ -‬ساختار منظم‪ :‬ارائه یک چارچوب ساختاریافته برای مدیریت و اجرای پروژه‌های نرم‌افزاری‪.‬‬
‫‪ -‬کنترل کیفیت‪ :‬اطمینان از انجام تست‌ها و بازبینی‌های متعدد برای تضمین کیفیت نرم‌افزار‪.‬‬
‫‪ -‬مستندسازی جامع‪ :‬ایجاد مستندات دقیق و جامع در هر مرحله از پروژه‪.‬‬
‫‪ -‬مدیریت ریسک‪ :‬شناسایی و مدیریت ریسک‌ها در طول فرآیند توسعه‪.‬‬

‫معایب ‪:SDLC‬‬

‫‪ -‬عدم انعطاف‌پذیری‪ :‬ممکن است تغییر نیازمندی‌ها در مراحل پایانی دشوار و پرهزینه باشد‪.‬‬
‫‪ -‬زمان‌بر بودن‪ :‬فرآیندهای دقیق و مستندسازی ممکن است زمان زیادی نیاز داشته باشد‪.‬‬
‫‪ -‬تأخیر در بازخورد‪ :‬دریافت بازخورد کاربران ممکن است تا مراحل پایانی به تعویق بیافتد‪.‬‬

‫انواع مدل‌های ‪:SDLC‬‬

‫‪ .1‬مدل آبشاری (‪:)Waterfall Model‬‬


‫‪ -‬رویکرد خطی و ترتیبی که هر مرحله باید به‌طور کامل قبل از شروع مرحله بعدی تکمیل شود‪.‬‬

‫‪ .2‬مدل چابک (‪:)Agile Model‬‬


‫‪ -‬رویکرد تکرارشونده و افزایشی که بر همکاری‪ ،‬انعطاف‌پذیری و تحویل مداوم تأکید دارد‪.‬‬

‫‪ .3‬مدل مارپیچی (‪:)Spiral Model‬‬


‫‪ -‬ترکیبی از توسعه تکرارشونده و ارزیابی ریسک که شامل چهار فاز اصلی‪ :‬برنامه‌ریزی‪ ،‬تحلیل ریسک‪ ،‬توسعه و ارزیابی است‪.‬‬

‫‪ .4‬مدل )‪:V (V-Model‬‬


‫‪ -‬گسترش مدل آبشاری که تأکید بیشتری بر تست و تأیید در هر مرحله دارد‪.‬‬

‫جمع‌بندی‪:‬‬

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

‫مفهوم مدیریت چرخه عمر‬

‫مدیریت چرخه عمر سیستم‌ها و نرم‌افزارها شامل مراحل زیر است‪:‬‬

‫‪ .1‬برنامه‌ریزی و طراحی‪ :‬شامل تعریف نیازمندی‌ها‪ ،‬طراحی سیستم‪ ،‬ارزیابی امکان‌سنجی و برنامه‌ریزی پروژه‪.‬‬
‫‪ .2‬توسعه و پیاده‌سازی‪ :‬شامل کدنویسی‪ ،‬یکپارچه‌سازی‪ ،‬تست و استقرار سیستم‪.‬‬
‫‪ .3‬بهره‌برداری و نگهداری‪ :‬شامل مانیتورینگ‪ ،‬مدیریت تغییرات‪ ،‬به‌روزرسانی‌ها و حل مشکالت‪.‬‬
‫‪ .4‬بازنشستگی‪ :‬شامل از کار انداختن سیستم‪ ،‬انتقال داده‌ها به سیستم‌های جدید و بازیابی منابع‪.‬‬

‫ابزارهای مدیریت چرخه عمر‬

‫ابزارهای مختلفی برای کمک به مدیریت چرخه عمر سیستم‌ها و نرم‌افزارها وجود دارند‪ .‬در اینجا دو مورد از این ابزارها یعنی ‪Foreman‬‬
‫و ‪ Red Hat Satellite‬را توضیح می‌دهیم‪:‬‬

‫‪Foreman‬‬

‫‪ Foreman‬یک ابزار متن‌باز برای مدیریت چرخه عمر سرورها است که امکان مدیریت زیرساخت‌های فیزیکی و مجازی را فراهم می‌کند‪.‬‬
‫این ابزار قابلیت‌های متنوعی برای خودکارسازی فرآیندهای مدیریت سیستم‌ها دارد‪.‬‬

‫ویژگی‌های اصلی ‪:Foreman‬‬

‫‪ -‬پیکربندی خودکار‪ :‬استفاده از ‪ Puppet‬برای پیکربندی خودکار سرورها‪.‬‬


‫‪ -‬مدیریت ماشین‌های مجازی‪ :‬امکان مدیریت و کنترل ماشین‌های مجازی در پلتفرم‌های مختلف مانند ‪ VMware، Libvirt‬و‬
‫‪.OpenStack‬‬
‫‪ -‬نظارت و مانیتورینگ‪ :‬ارائه قابلیت‌های نظارت بر عملکرد سرورها و مدیریت الگ‌ها‪.‬‬
‫‪ -‬پشتیبانی از چندین سیستم عامل‪ :‬امکان مدیریت سرورهایی با سیستم عامل‌های مختلف از جمله ‪ Linux‬و ‪.Windows‬‬
‫‪ -‬یکپارچه‌سازی با ابزارهای دیگر‪ :‬قابلیت یکپارچه‌سازی با ابزارهایی مانند ‪ Ansible، Chef‬و ‪.Salt‬‬

‫‪Red Hat Satellite‬‬

‫‪ Red Hat Satellite‬یک ابزار مدیریت سیستم است که برای مدیریت محیط‌های بزرگ و پیچیده طراحی شده است‪ .‬این ابزار به‬
‫سازمان‌ها کمک می‌کند تا سرورهای خود را به‌صورت متمرکز مدیریت و به‌روزرسانی کنند‪.‬‬
‫ویژگی‌های اصلی ‪:Red Hat Satellite‬‬

‫‪ -‬مدیریت پیکربندی‪ :‬امکان پیکربندی و مدیریت تنظیمات سرورها با استفاده از ‪ Puppet‬و ‪.Ansible‬‬
‫‪ -‬مدیریت بسته‌ها و به‌روزرسانی‌ها‪ :‬مدیریت مرکزی بسته‌های نرم‌افزاری و به‌روزرسانی‌های سیستم‪.‬‬
‫‪ -‬مدیریت چرخه عمر محتوا‪ :‬امکان مدیریت چرخه عمر نرم‌افزارها و بسته‌های محتوا از جمله ایجاد‪ ،‬تست و استقرار نسخه‌های جدید‪.‬‬
‫‪ -‬نظارت و مانیتورینگ‪ :‬ارائه ابزارهای نظارت بر عملکرد سیستم‌ها و مدیریت هشدارها‪.‬‬
‫‪ -‬امنیت و تطابق‪ :‬امکان اجرای سیاست‌های امنیتی و تطابق با استانداردهای سازمانی‪.‬‬

‫سایر ابزارهای مدیریت چرخه عمر‬

‫عالوه بر ‪ Foreman‬و ‪ ،Red Hat Satellite‬ابزارهای دیگری نیز برای مدیریت چرخه عمر سیستم‌ها وجود دارند‪:‬‬

‫‪ :Ansible Tower -‬یک ابزار مدیریت پیکربندی و خودکارسازی که بر پایه ‪ Ansible‬ساخته شده و قابلیت‌های مدیریتی‬
‫پیشرفته‌تری ارائه می‌دهد‪.‬‬
‫‪ :Puppet Enterprise -‬یک پلتفرم مدیریت پیکربندی و خودکارسازی که بر پایه ‪ Puppet‬ساخته شده و امکانات مدیریتی‬
‫پیشرفته‌ای دارد‪.‬‬
‫‪ :Chef Automate -‬یک ابزار مدیریت پیکربندی و خودکارسازی که به تیم‌ها کمک می‌کند تا فرآیندهای توسعه و بهره‌برداری خود را‬
‫خودکار کنند‪.‬‬

‫مدیریت چرخه عمر سیستم‌ها و نرم‌افزارها یک جنبه حیاتی از مدیریت فناوری اطالعات است که به بهینه‌سازی استفاده از منابع و افزایش‬
‫کارایی سیستم‌ها کمک می‌کند‪ .‬ابزارهایی مانند ‪ Foreman‬و ‪ Red Hat Satellite‬نقش مهمی در خودکارسازی و مدیریت‬
‫فرآیندهای مختلف چرخه عمر دارند و به سازمان‌ها کمک می‌کنند تا سیستم‌های خود را به‌طور مؤثرتر مدیریت کنند‪.‬‬
‫استقرار در ‪DevOps‬‬
‫استقرار بر اساس چه معیاری هست ؟‬

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

‫سود‌های تجاری از چرخه‌های استقرار کوتاه‌تر عبارتند از‪:‬‬

‫‪ -‬کاهش زمان عرضه محصول به بازار‪.‬‬


‫‪ -‬دسترسی سریع‌تر مشتریان به ویژگی‌های جدید محصول‪.‬‬
‫‪ -‬بازخورد سریع‌تر مشتریان به تیم توسعه‪ ،‬که موجب توسعه‌ی مکرر و پرسرعت ویژگی‌های نرم‌افزاری و رفع سریع مشکالت کد می‌شود‪.‬‬

‫اما‪ ،‬این تغییرات نیز چالش‌های جدیدی را برای تیم‌های ‪ DevOps‬ایجاد کرده است‪ .‬استقرار مکرر‪ ،‬اما ممکن است منجر به کاستی در‬
‫قابلیت اطمینان و تجربه مشتری شود‪ .‬از این رو‪ ،‬ضروری است که استراتژی‌های مناسبی برای استقرار کد تدوین شود که ریسک محصول و‬
‫تجربه مشتری را به حداقل برساند‪ .‬در این جا به بررسی تعدادی از استراتژی‌های استقرار نرم‌افزار‪ ،‬تجارب برتر و ابزارهایی که به تیم‌ها‬
‫کمک می‌کند تا با سرعت و امنیت بیشتر عمل کنند‪ ،‬خواهیم پرداخت‪.‬‬
Canary Deployment ‫ یا‬Blue/Green Deployment
‫استقرار سبز آبی چیست؟‬
‫استقرار سبز‪-‬آبی یک استراتژی مدیریت انتشار است که شامل داشتن دو محیط تولید یکسان است ‪ -‬یکی به نام "آبی" و دیگری "سبز"‪.‬‬
‫این محیط‌ها به گونه‌ای طراحی شده‌اند که شبیه‌سازی دقیق یکدیگر باشند‪ ،‬که حاوی منابع‪ ،‬زیرساخت‌ها و تنظیمات مشابهی هستند‪.‬‬
‫هدف اصلی پیاده‌سازی سبز‪-‬آبی‪ ،‬به حداقل رساندن زمان خرابی و کاهش خطر معرفی نسخه‌های نرم‌افزار جدید با اجازه دادن به شما برای‬
‫جابه‌جایی بین این محیط‌ها است‪.‬‬

‫هنگامی که نسخه جدیدی از برنامه خود را اجرا می کنید‪ ،‬این کار را در محیط غیر فعال (مثًال سبز) انجام می دهید‪ .‬این به شما این امکان‬
‫را می دهد که نسخه جدید را به طور کامل آزمایش کنید‪ ،‬از پایدار بودن آن اطمینان حاصل کنید و تنظیمات الزم را بدون تأثیرگذاری بر‬
‫کاربران خود انجام دهید‪ .‬هنگامی که مطمئن شدید که نسخه جدید قابل اعتماد است‪ ،‬می توانید کاربران را به محیط سبز تغییر دهید و آن‬
‫را به محیط تولید فعال جدید تبدیل کنید‪ .‬محیط آبی که قبًال فعال بود اکنون به حالت آماده به کار تبدیل می شود و آماده دریافت استقرار‬
‫بعدی است‪.‬‬

‫در واقع در یک استراتژی استقرار نرم افزار به روش آبی – سبز هر دو سیستم از یک الیه پایداری و پایگاه داده یکسان استفاده می‌کنند‪.‬‬
‫حفظ همگام سازی داده های اپلیکیشن ضروری است و یک پایگاه داده ‪( Mirror‬آینه ای‌) می‌تواند کمک کننده باشد‪ .‬شما می‌توانید‬
‫پایگاه داده اصلی را بوسیله آبی برای ‪ Write‬عملیات ها در پایگاه داده استفاده کنید و پایگاه داده ثانویه را به وسیله سبز برای خواندن‬
‫عملیات ها حین جابجایی از آبی به سبز استفاده کنید‪ .‬اگر سبز نیز حین عملیات تست به نوشتن نیاز داشته باشد‪ ،‬پایگاه های داده‬
‫می‌توانند بصورت دو طرفه تکثیر یابند‪.‬‬
‫وقتی سبز فعال می‌شود‪ ،‬شما می‌توانید نمونه قدیمی آبی را غیرفعال نموده و یا مجددا به چرخه فعالیت بازگردانید‪ .‬ممکن است یک ورژن‬
‫جدیدتر را بر روی آن نمونه مستقر نمایید و به عنوان سبز جدید در انتشار بعدی از آن استفاده نمایید‪ .‬استقرارهای آبی‪ -‬سبز بر مسیریابی‬
‫ترافیک متکی هستند‪ .‬اینکار را می‌توان با بروز رسانی ‪ DNS CNAME‬ها برای میزبان (‪ )host‬ها به انجام رساند‪ .‬با اینحال مقادیر‬
‫طوالنی ‪ TTL‬می‌تواند این تغییرات را با تاخیر مواجه سازد‪ .‬بعنوان جایگزین‪ ،‬شما می‌توانید تنظیمات متعادل کننده بار را تغییر دهید تا‬
‫تغییرات به سرعت اعمال شوند‪.‬‬

‫استقرار قناری چیست؟‬

‫استقرار ‪ Canary‬یکی دیگر از استراتژی‌های مدیریت انتشار است که به شما امکان می‌دهد نسخه‌های نرم‌افزار جدید را قبل از استقرار در‬
‫کل پایگاه کاربر برای گروه کوچک و کنترل‌شده‌ای از کاربران عرضه کنید‪ .‬این روش که به نام قیاس «قناری در معدن زغال‌سنگ»‬
‫نامگذاری شده است‪ ،‬به شما کمک می‌کند تا هرگونه مشکل احتمالی نسخه جدید را قبل از تأثیرگذاری بر همه کاربران شناسایی و برطرف‬
‫کنید‪ ،‬بنابراین خطر یک مشکل گسترده یا قطع برق را به حداقل می‌رساند‪.‬‬

‫استراتژی استقرار نرم افزار به روش قناری مشابه آبی‪ -‬سبز است جز اینکه با ریسک پذیری بیشتری همراه است‪ .‬به جای جابجایی از آبی به‬
‫سبز در یک گام‪ ،‬شما از یک رویکرد مرحله بندی شده استفاده می‌کنید‪ .‬با استقرار به روش قناری‪ ،‬یک کد جدید را در بخش کوچکی از‬
‫زیرساخت های ‪ Production‬مستقر می‌کنید‪ .‬پس از اینکه اپلیکیشن به تایید جهت انتشار دست یافت‪ ،‬تنها عده کمی از کاربران به‬
‫سمت آن هدایت می‌شوند‪ .‬اینکار هرگونه خرابی را به حداقل می‌رساند‪.‬‬

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

‫دلیل نام گذاری استراتژی فوق به اسم استقرار قناری ‪ ،‬به این دلیل است که در گذشته افرادی که در معدن زغال سنگ کار می‌کردند با‬
‫استفاده از سروصدای قناری ها‪ ،‬انتشار گازهای سمی را در معدن می‌فهمیدند‪ .‬به همین دلیل در این استراتژی ابتدا تغییرات جدید را بر‬
‫روی تعداد اندکی از کاربران تست می‌کنیم و این کاربران همانند سروصدای قناری‌ها‪ ‌،‬می‌توانند مشکالت پیش آمده را به ما نشان دهند‪.‬‬

‫چالش اصلی استراتژی استقرار نرم افزار به روش قناری تدبیر راهی برای هدایت برخی کاربران به اپلیکیشن جدید است‪ .‬عالوه بر آن برخی‬
‫برنامه ها ممکن است همیشه به گروه یکسانی از کاربران برای تست نیاز داشته باشند درحالیکه برخی دیگر در هر زمان به گروه متفاوتی از‬
‫کاربران احتیاج دارند‪.‬‬

‫با انتخاب یکی از تکنیک‌های زیر می‌توانید ترافیک کاربر را در استقرار قناری هدایت کنید‪.‬‬
‫• ابتدا کاربران داخلی وارد استقرار قناری شوند و سپس کاربران خارجی‬
‫•مسیریابی ترافیک بر مبنای محدوده ‪ IP‬کاربران‬
‫•انتشار اپلیکیشن در نواحی جغرافیایی خاص‬
‫• به کارگیری یک منطق به منظور فعال کردن ویژگی های جدید برای کاربران یا گروه های خاص‪ .‬این منطق هنگامی که برنامه‬
‫برای باقیمانده کاربران نیز فعال می‌شود حذف می‌گردد‪.‬‬

‫استقرار سبز آبی و استقرار قناری چگونه کار می کنند؟‬

‫برای درک بهتر تفاوت‌های بین استقرار آبی‪-‬سبز و قناری‪ ،‬بیایید نگاهی دقیق‌تر به نحوه عملکرد هر استراتژی در عمل بیاندازیم‪.‬‬

‫استقرار آبی‪-‬سبز‬

‫آماده‌سازی‪ :‬یک محیط صحنه‌سازی را راه‌اندازی کنید ‪ -‬این محیط سبز خواهد بود ‪ -‬با زیرساخت‌ها‪ ،‬منابع و پیکربندی‌های مشابه‬
‫محیط تولید‪.‬‬
‫استقرار‪ :‬نسخه جدید برنامه خود را در محیط غیرفعال (به عنوان مثال‪ ،‬سبز) مستقر کنید‪.‬‬
‫تست‪ :‬نسخه جدید را به طور کامل در محیط غیرفعال آزمایش کنید و هرگونه تنظیمات الزم را برای اطمینان از پایدار و قابل اعتماد‬
‫بودن آن انجام دهید‪.‬‬
‫سوئیچ‪ :‬هنگامی که از نسخه جدید مطمئن شدید‪ ،‬کاربران را به محیط غیرفعال (سبز) تغییر دهید و آن را به محیط تولید فعال جدید‬
‫تبدیل کنید‪.‬‬
‫‪ :Standby‬محیطی که قبًال فعال بود (آبی) اکنون می تواند به عنوان آماده به کار عمل کند و آماده دریافت استقرار بعدی باشد‪ .‬از‬
‫طرف دیگر‪ ،‬برای صرفه‌جویی در هزینه‌ها‪ ،‬می‌توان آن را از بین برد و زمانی که نسخه جدید برای آزمایش آماده شد‪ ،‬مجددًا مستقر شد‪.‬‬

‫استقرار قناری‬

‫آماده سازی‪ :‬یک مکانیسم مسیریابی مجدد ترافیک را تنظیم کنید که امکان هدایت بخشی از ترافیک را بر اساس معیارهای خاص به‬
‫نسخه دیگری از نرم افزار فراهم می کند‪.‬‬
‫استقرار‪ :‬نسخه جدید را مستقر کنید و درصد کمی از پایگاه کاربران خود را در محیط تولید به آن نسخه وصل کنید‪.‬‬
‫مانیتورینگ‪ :‬بازخورد کاربر و معیارهای عملکرد را برای نسخه جدید نظارت کنید و در مورد هر مشکلی که پیش می‌آید تکرار کنید‪.‬‬
‫انتشار‪ :‬اگر نسخه جدید عملکرد خوبی داشت و بازخورد مثبت دریافت کرد‪ ،‬به تدریج آن را برای بقیه کاربران خود منتشر کنید‪ .‬در‬
‫صورت بروز مشکل‪ ،‬انتشار را موقتًا متوقف کنید‪ ،‬مشکالت را برطرف کنید و سپس روند را ادامه دهید‪.‬‬
‫استقرار سبز آبی در مقابل استقرار قناری‪:‬‬

‫اکنون که درک روشنی از نحوه عملکرد استقرار سبز‪-‬آبی و قناری داریم‪ ،‬بیایید تفاوت های کلیدی بین این استراتژی ها و پیامدهای آنها را‬
‫برای پروژه ها را بررسی کنیم‪.‬‬

‫‪ .1‬سرعت و سهولت استقرار‬

‫یکی از مزیت‌های اصلی استقرار سبز‪-‬آبی سرعت و سهولت است که می‌توانید نسخه‌های نرم‌افزار جدید را اجرا کنید‪ .‬از آنجایی که شما دو‬
‫محیط یکسان دارید‪ ،‬می‌توانید تقریبًا فورًا بین آن‌ها جابه‌جا شوید و زمان خرابی را به حداقل برسانید و تجربه کاربری یکپارچه را تضمین‬
‫کنید‪ .‬مزیت دیگر این است که در اکثر برنامه ها‪ ،‬پشتیبانی از استقرار آبی‪/‬سبز آسان است‪ .‬این مورد برای قناری ها صدق نمی کند‪ ،‬زیرا‬
‫برای پشتیبانی از استقرار قناری‪ ،‬برنامه باید به گونه ای طراحی شود که دو نسخه مختلف را به طور همزمان اجرا کند‪.‬‬

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

‫‪ .2‬مدیریت ریسک‬

‫هر دو استقرار سبز‪-‬آبی و قناری برای به حداقل رساندن خطر معرفی نسخه های نرم افزار جدید طراحی شده اند‪ ،‬اما آنها این کار را به‬
‫روش های مختلف میشود انجام داد ‪.‬‬

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

‫‪ .3‬منابع مورد نیاز‬


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

‫استقرار ‪ Canary‬از نظر منابع کارآمدتر است‪ ،‬زیرا شما فقط باید یک محیط مرحله‌بندی را برای آزمایش راه‌اندازی کنید و نسخه‌های‬
‫جدید را در ابتدا در درصد کمی از پایگاه کاربران خود مستقر کنید‪ .‬این باعث می شود که برای پروژه هایی با منابع محدود قابل دسترسی‬
‫تر باشد‪.‬‬

‫‪ .4‬قابلیت بازگشت به عقب‬

‫در صورت بروز مشکل در نسخه جدید‪ ،‬هر دو استقرار سبز‪-‬آبی و قناری قابلیت بازگشت را ارائه می دهند‪ ،‬اما روند بین دو استراتژی‬
‫متفاوت است‪.‬‬

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

‫استقرار ‪ Canary‬به شما این امکان را می دهد که در صورت شناسایی مشکالت‪ ،‬عرضه را متوقف کنید‪ ،‬مشکالت را برطرف کنید و سپس‬
‫روند را ادامه دهید‪ .‬در صورت لزوم‪ ،‬می توانید با هدایت کاربران آسیب دیده به نسخه اصلی‪ ،‬به نسخه قبلی برگردید‪.‬‬

‫‪ .5‬تأثیر کاربر‬

‫تأثیر روی کاربران عامل مهم دیگری است که باید هنگام انتخاب بین استقرار آبی‪-‬سبز و قناری در نظر گرفت‪.‬‬

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

‫استقرار ‪ Canary‬درصد کمی از کاربران را در ابتدا در معرض نسخه جدید قرار می دهد‪ ،‬به این معنی که ممکن است در حین تکرار در‬
‫انتشار با مشکالت یا اختالالتی مواجه شوند‪ .‬با این حال‪ ،‬این استراتژی به شما این امکان را می‌دهد که مشکالت را زودتر شناسایی و برطرف‬
‫کنید‪ ،‬قبل از اینکه کل پایگاه کاربر را تحت تاثیر قرار دهند‪.‬‬
‫انتخاب بین استقرار آبی‪-‬سبز و قناری‬

‫انتخاب بین استقرار سبز آبی و قناری در نهایت به نیازهای خاص‪ ،‬منابع و تحمل ریسک شما بستگی دارد‪.‬‬

‫اگر سرعت و سهولت استقرار را در اولویت میباشد ‪ ،‬منابع کافی برای حفظ دو محیط تولید یکسان دارید‪ ،‬و به توانایی خود در آزمایش کامل‬
‫و تأیید نسخه های جدید اطمینان دارید‪ ،‬استقرار سبز‪-‬آبی ممکن است بهترین انتخاب برای شما باشد‪.‬‬

‫از سوی دیگر‪ ،‬اگر منابع محدودی دارید یا رویکرد تکراری و کنترل‌شده‌تری را برای مدیریت ریسک ترجیح می‌دهید‪ ،‬استقرار قناری ممکن‬
‫است مناسب‌تر باشد‪.‬‬

‫در نهایت‪ ،‬هر دو استراتژی نقاط قوت و ضعف خود را دارند و بهترین انتخاب به نیازها و شرایط منحصر به فرد بستگی دارد‪ .‬با درک تفاوت‬
‫های کلیدی بین استقرار سبز‪-‬آبی و قناری‪ ،‬می توانید تصمیمی آگاهانه بگیریم که به بهترین وجه نیازهای ما را برآورده می کند و موفقیت‬
‫پروژه های نرم افزاری را تضمین می کند‪.‬‬

‫تحویل پیشرفته پیشرفته در ‪ Kubernetes‬با ‪ Argo Rollouts‬و ‪Codefresh‬‬

‫‪ Codefresh‬با استفاده از ‪ ،Argo Rollouts‬پروژه ای که به طور خاص برای استقرار تدریجی در ‪ Kubernetes‬طراحی شده‬
‫است‪ ،‬روش های تحویل پیشرفته پیشرفته‪ ،‬از جمله استقرار سبز آبی و قناری را ارائه می دهد‪.‬‬

‫در زیر به بررسی چند ویژگی از ‪ Argo Rollouts، Codefresh‬می پردازیم ‪:‬‬

‫پیکربندی اعالمی ‪ -‬تمام جنبه‌های استقرار آبی‪/‬سبز در کد تعریف شده و در یک مخزن ‪ Git‬بررسی می‌شوند و از فرآیند ‪GitOps‬‬
‫پشتیبانی می‌کند ‪.‬‬

‫مکث و از سرگیری – توقف استقرار و از سرگیری آن پس از موفقیت آمیز بودن تست های تعریف شده توسط کاربر‪.‬‬
‫سوئیچینگ ترافیک پیشرفته – استفاده از روش هایی که از شبکه های سرویس موجود در خوشه ‪ Kubernetes‬بهره می برند‪.‬‬
‫تأیید نسخه جدید ‪ -‬ایجاد یک سرویس پیش نمایش که می تواند برای تأیید نسخه جدید استفاده شود (یعنی آزمایش دود قبل از انجام‬
‫سوئیچ ترافیک)‪.‬‬
‫استفاده بهبودیافته ‪ -‬اعمال قوانین ضد قرابت برای استفاده بهتر از خوشه برای جلوگیری از هدر رفتن منابع در استقرار قناری‪.‬‬
‫مدیریت آسان عرضه ‪ -‬مشاهده وضعیت و مدیریت استقرار از طریق داشبورد برنامه های کاربردی جدید‪.‬‬
‫استراتژی استقرار بیگ بنگ‬

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

‫اپلیکیشن های نوین از این مزیت برخوردارند که به طور مرتب و خودکار در سمت مشتری یا سرور بروز رسانی می‌شوند‪.‬این امر باعث‬
‫می‌شود تا رویکرد بیگ بنگ نسبت به تیم های نوین از سرعت و چابکی کمتری برخودار باشد‪.‬‬

‫ازجمله مشخصه های استقرار بیگ بنگ‬

‫•همه قطعات اصلی در یک استقرار بسته بندی شده اند‪.‬‬


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

‫رویکرد بیگ بنگ می‌تواند برای سیستم های غیر ‪ Production‬یا نرم‌افزارهایی که توسط فروشندگان در قالب یک بسته نرم افزاری‬
‫ارائه میشوند نظیر برنامه های دسکتاپ مناسب باشد‪ .‬امروزه از این استراتژی به ندرت استفاده می‌شود‪.‬‬
‫استراتژی استقرار چرخشی‬

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

‫ارتقاء سلسله وار یک اپلیکیشن‪ ،‬نمونه ای از یک استقرار چرخشی است‪ .‬اگر اپلیکیشن ه‪ h‬بر روی کانتینر مستقر شده باشند‪ ،‬ارتقاء می‌تواند‬
‫در قالب یک کانتینر در هر زمان شکل گیرد‪ .‬هر کانتینر با دانلود جدیدترین تصویر از ریپازیتوری مجددا راه اندازی می‌شود‪ .‬اگر مشکالت‬
‫سازگاری با یکی از ورژن های برنامه وجود داشته باشد‪ ،‬تصویر قدیمی تر می‌تواند مجددا در قالب کانتینر راه اندازی شود‪ .‬در این حالت‪،‬‬
‫ورژن های جدید و قدیم از سلسله برنامه ها تا زمانی که هر برنامه ارتقاء داده شود با یکدیگر همزیستی می‌کنند‪.‬‬
‫بهترین روش‌های استراتژی استقرار نرم افزار‬

‫ی‌توانند تعدادی از روش‌های برتر را دنبال کنند تا ریسک های استقرار را به حداقل برسانند‪.‬‬
‫تیم های توسعه‌دهنده و عملیات م ‌‬

‫•استفاده از یک چک لیست استراتژی استقرار نرم افزار‪ :‬برای مثال یک آیتم درچک لیست ممکن است تنها بعد از اینکه‬
‫سرویس های اپلیکیشن متوقف شدند‪ ،‬به منظور پیشگیری از تخریب داده‪ ،‬از کل پایگاه داده پشتیبان گیری نماید‪.‬‬
‫•ادغام مداوم (‪ :)Continuous Integration‬مکانیزم ‪ CI‬تضمین می‌کند کد ‪ merge‬شده در انشعاب یک مخزن‬
‫کد تنها بعد از بررسی یک سری وابستگی ها‪ ،‬تست های واحد و بیلد موفق با انشعاب اصلی ادغام می‌گردد‪ .‬اگر خطایی در طول‬
‫مسیر وجود داشته باشد فرآیند شکست می‌خورد و تیم برنامه نویسی مطلع می‌گردد‪ .‬بنابراین استفاده از ‪ CI‬به این معناست که‬
‫هر تغییری در برنامه پیش از استقرار تست شده است‪ .‬نمونه هایی از ابزارهای ‪ CI‬عبارتند از ‪ CircleCI :‬و ‪Jenkins ,‬‬
‫‪gitlab , azure devops‬‬
‫•تحویل مداوم (‪ : )Continuous Delivery‬با مکانیزم ‪ ،CD‬کد نهایی مرحله قبل‪ ،‬بسته بندی شده و همواره آماده‬
‫استقرار در یک یا چند محیط است‪ Gitlab CI/CD .‬از چنین ابزارهایی هست‪.‬‬
‫•استفاده از محیط های عملیاتی استاندارد (‪ SOE‬ها)‪ :‬برای اطمینان از ثبات محیط می‌توانید از ابزارهایی نظیر ‪Vagrant‬‬
‫و ‪ Packer‬برای محیط‌های توسعه و سرورها استفاده کنید‪.‬‬
‫•استفاده از ابزارهای خودکار برای ساخت محیط ها‪ :‬با استفاده از این ابزارها‪ ،‬به راحتی می‌توانید یک زیرساخت را با یک‬
‫کلیک‪ ،‬ازبین ببرید و از نو بسازید‪ CloudFormation .‬نمونه ای از چنین ابزارهایی است‪.‬‬
‫•استفاده از ابزارهای مدیریت پیکر بندی‪ :‬نظیر ‪ Puppet ،Chef‬یا ‪ Ansible‬در سرور ها برای اعمال خودکار تنظیمات‬
‫سیستم عامل‪ ،‬اجرای وصله ها (‪ )patches‬یا نصب نرم افزار‪.‬‬
‫•استفاده از کانال های ارتباطی ‪ :‬نظیر ‪ Slack‬برای اعالن های خودکار از بیلد های ناموفق و شکست های اپلیکیشن و یا‬
‫ابزار های دیگر‬
‫•ایجاد فرآیندی برای هشدار دهی به تیم مسئول استقرار ها پیرامون بروز خطا‪ :‬در حالت ایده آل این موارد را در محیط‬
‫های ‪ CI‬بدست خواهید آورد اما اگر این تغییرات استقرار یابند شما به راهی برای اطالع رسانی به تیم مسئول نیاز خواهید‬
‫داشت‪.‬‬
‫•فعال سازی بازگشت به عقب های خودکار برای استقرارها‪ :‬که بواسطه بروز مشکالت پیرامون دسترس پذیری به سرویس‪،‬‬
‫نرم‌افزار به آخرین نسخه ی خود ‪ rollback‬می‌شود‪.‬‬
‫مانیتورینگ پس از استقرار‬
‫حتی پس از اینکه شما موارد فوق را اتخاذ نمائید ممکن است هنوز استراتژی استقرار نرم افزار برنامه با شکست مواجه شود‪ .‬به همین دلیل‪،‬‬
‫نظارت بر مواردی که بالفاصله پس از استقرار به وقوع می پیوندد به همان اندازه برنامه ریزی و اجرای یک استقرار کامل مهم است‪ .‬یک ابزار‬
‫نظارت بر کارایی اپلیکیشن (‪ ،)Application Performance Monitoring‬می تواند به تیم شما کمک کند تا معیارهای‬
‫کارایی مهم از جمله زمان پاسخگویی سرور پس از استقرار را نظارت نماید‪ .‬تغییرات در اپلیکیشن یا معماری سیستم می تواند بطور‬
‫چشمگیری بر کارایی برنامه تاثیر بگذارد‪.‬‬

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

‫یک ابزار نظارت بر خطا یک دید مشترک از همه مسائل پس از استقرار در میان تیم های عملیات (‪ )Ops‬و توسعه دهندگان (‪)Dev‬‬
‫ایجاد می‌کند‪ .‬این درک مشترک به تیم ها امکان می‌دهد پاسخگویی و همکاری بیشتری داشته باشند‪.‬‬
‫مدیریت پروژه‬
‫هر آن‌چه که یک آغاز و پایان دارد و دستاوردی را تولید می‌کند‪ ،‬یک پروژه است‪ .‬بنابراین‪ ،‬مدیریت پروژه‪ ،‬روشی برای برنامه‌ریزی‪ ،‬نظارت‪،‬‬
‫کنترل‪ ،‬گزارش و در یک کلمه‪« ،‬مدیریت» یک پروژه است‪.‬‬

‫در حقیقت‪ ،‬مدیریت پروژه‪ ،‬یک چتر مفهومی است که تعداد زیادی از اصول مرتبط را مانند برنامه‌ریزی‪ ،‬زمان‌بندی‪ ،‬مدیریت فعالیت‌ها‪،‬‬
‫مدیریت منابع‪ ،‬مدیریت ریسک و‪ ...‬دربرمی‌گیرد‪.‬‬

‫شخصی که مسئول نظارت بر یک پروژه است‪ ،‬مدیر پروژه نام دارد‪ .‬او برنامه‌ای را تدوین می‌کند که انتظارات ذی‌نفعان را برآورده و یک تیم‬
‫پروژه را تشکیل می‌دهد‪ .‬سپس مدیر پروژه‪ ،‬اجرای پروژه را نظارت و کنترل می‌کند تا زمانی که تحویل‌دادنی‌های پروژه (‪)Deliverable‬‬
‫باکیفیت مورد انتظار‪ ،‬حاصل شود‪ .‬این کار‪ ،‬اغلب به کمک یک نرم‌افزار مدیریت پروژه انجام می‌شود‪.‬‬

‫مدیریت پروژه چیست؟‬


‫پیش از بررسی هر چیزی‪ ،‬باید بدانیم مدیریت پروژه چیست و چه وجوهی دارد‪.‬‬

‫مدیریت پروژه یک خط مشی است که برنامه‌ریزی و اجرای پروژه‌ها را مطالعه می‌کند‪ .‬مدیر پروژه تالش می‌کند با استفاده از برنامه‌ها و‬
‫منابع به اهداف تعیین‌شد ‌ه دست پیدا کند تا پروژه‌ها در مدت‌زمان مشخص اجرا شوند‪.‬‬

‫اهداف پروژه‌ها را مشتریان یا ذی‌نفعان مشخص می‌کنند‪ .‬مدیران پروژه از روش‌هایی که آموخته‌اند استفاده می‌کنند تا برنامه‌ای را تدوین‬
‫کنند و در آن منابع‪ ،‬وظایف‪ ،‬اهداف مهم و تویل‌دادنی‌های الزم را برای رفع نیازهای ذی‌نفعان مشخص کنند‪ .‬برنامه‌ها باید به محدودیت‌های‬
‫سه‌گانه نیز توجه کنند؛ این محدودیت‌ها زمان (‪ ،)Time‬هزینه (‪ )Cost‬و محدوده پروژه (‪ )Project Scope‬هستند‪.‬‬

‫مدیران اغلب به‌ منظور دستیابی به تعادل بین محدودیت‌ها‪ ،‬برنامه‌ها و نیازها از برنامه‌های مدیریت پروژه استفاده می‌کنند‪ .‬نرم‌افزارهای‬
‫آنالین به پیگیری پروژه و کارآمد کردن تیم‌ها کمک می‌کنند‪ .‬برای مثال‪ ،‬اگر در زمان‌بندی پروژه با محدودیت مواجه شویم‪ ،‬باید هزینه‌ی‬
‫بیشتری صرف شود‪.‬‬

‫پروژه چیست؟‬
‫حال که توضیح دادیم مدیریت پروژه چیست و مدیر پروژه چه وظایفی دارد‪ ،‬بهتر است با مفهوم پروژه آشنا شوید‪.‬‬

‫پروژه مجموعه‌ای از فعالیت‌ها است که هدف مشخصی دارد و باید در مدت‌زمان مشخصی کامل شود‪ .‬زمانی که پروژه به پایان می‌رسد‪،‬‬
‫محصول یا خدمت خاصی شکل گرفته‌است‪ .‬پروژه‌ها یکتا هستند‪ ،‬زیرا بر خالف بقیه‌ی عملکردهای کسب‌وکار که مدام تکرار می‌شوند یا‬
‫ادامه پیدا می‌کنند‪ ،‬به پایان می‌رسند‪.‬‬

‫مرحله چرخه حیات پروژه‬


‫از آن‌جا که پروژه‌ها دارای آغاز‪ ،‬میانه و پایان هستند‪ ،‬همه آن‌ها مراحل مختلفی را طی می‌کنند‪ .‬اگر بتوانید چرخه حیات پروژه (‪Project‬‬
‫‪ )Life Cycle‬را درک کنید‪ ،‬یعنی مدیریت پروژه را به خوبی فراگرفته‌اید‪.‬‬

‫‪ .۱‬شروع‬
‫این مرحله‪ ،‬شروع پروژه است‪ .‬شما ایده را تدوین و منشور پروژه را‪ ،‬که بیان می‌کند «پروژه دقیقا چه چیزی را ارائه می‌دهد؟» و ‪:‬چگونه‬
‫می‌خواهید به آن برسید؟»‪ ،‬تهیه می‌کنید‪.‬‬

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

‫‪ .۲‬برنامه‌ریزی‬
‫مرحله بعدی‪ ،‬جایی است که شما با تجزیه کارها به بخش‌های کوچک‌تر و برآورد زمانی که صرف می‌کنند‪ ،‬برنامه ریزی می‌کنید‪ .‬خروجی‬
‫حاصل‪ ،‬برنامه پروژه است که اغلب با گانت چارت (‪ )Gantt chart‬رسم می‌شود که ترتیب کارها و چگونگی وابستگی بین‌آن‌ها‪ ،‬نشان‬
‫داده می‌شود‪ .‬این امر در حکم یک نقشه راه برای رسیدن به نتایج پروژه است‪.‬‬

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

‫‪ .۴‬نظارت و کنترل‬
‫چهارمین مرحله‪ ،‬نظارت و کنترل است که هم‌زمان با فاز اجرا پیش می‌رود‪ .‬نظارت و کنترل‪ ،‬شامل اندازه‌گیری پیشرفت پروژه نیز می‌شود‬
‫تا مطمئن باشیم پروژه مطابق با بودجه و زمانبندی تعیین‌شده پیش می‌رود‪ .‬برای اطمینان از تضمین کیفیت در پروژه‪ ،‬از فرایند کنترل‬
‫کیفیت استفاده می‌شود‪.‬‬

‫سه موضوع مهم در پروژه‪ ،‬معموال مربوط به زمان‪ ،‬هزینه و محدوده هستند که به عنوان محدودیت‌های سه‌گانه شناخته می‌شوند‪ .‬هدف‬
‫ی است که اجازه ندهد این سه عامل از محدوده‌ی تعیین شده پیش‌روی کنند‪.‬‬
‫اصلی این فاز‪ ،‬اعمال کنترل‌های دقیق ‌‬
‫‪ .۵‬پایان‬
‫کارهای پروژه باید به‌دقت پایان یابند تا از آن‌چه به‌دست آمده‪ ،‬بهترین استفاده را ببرد و اطمینان حاصل شود که هرگونه درس‌آموخته‌ای به‬
‫تیم‌ها‪ ،‬منتقل می‌شود‪ .‬در این مرحله‪ ،‬پذیرش مشتری جهت اتمام پروژه را دریافت خواهید کرد‪ ،‬تمام اسناد و مدارک و گزارش‌های نهایی را‬
‫به پایان می‌رسانید و موارد قابل تحویل را به تیم دیگری مانند تیم مدیریت عملیات تحویل می‌دهید‪.‬‬
‫محدودیت‌های سه‌گانه یا مثلث مدیریت پروژه‬
‫محدودیت‌های سه‌گانه که به نام مثلث مدیریت پروژه (‪ )Project Panagement Triangle‬نیز شناخته می‌شوند‪ ،‬مفهومی است‬
‫که برای تمام پروژه‌ها صادق است و به محدودیت در زمان‪ ،‬هزینه و محدوده‌ی پروژه اشاره دارد‪ .‬این مفهوم سنگ بنای مدیریت پروژه است؛‬
‫به همین دلیل مدیران باید در مرحله‌ی برنامه‌ریزی (‪ )planning phase‬توجه خاصی به زمان‌بندی (‪ )schedule‬برای اتمام پروژه‪،‬‬
‫بودجه و ‪ WBS‬یا ساختار شکست کار (‪ )work breakdown structure‬داشته‌باشند‪ .‬بیایید به نحوه‌ی مدیریت محدودیت‌های‬
‫سه‌گانه نگاهی بیندازیم‪.‬‬

‫‪ .۱‬زمان‬
‫مدیران پروژه باید زمانی را که برای اتمام پروژه الزم است‪ ،‬تخمین بزنند‪ .‬به این منظور از ابزارهایی مثل نمودارهای پرت (‪PERT‬‬
‫‪ )charts‬یا مسیر بحرانی (‪ )Critical Path Method‬که به آن ‪ CPM‬نیز می‌گویند‪ ،‬استفاده می‌شود‪ .‬این کار باید در آغاز پروژه و‬
‫در مرحله‌ی برنامه‌ریزی انجام شود تا اقدامات و زمان الزم برای به انجام رساندن تمام فعالیت‌ها مشخص شود‪ .‬وقتی پروژه به مرحله‌ی اجرا‬
‫رسید‪ ،‬وضعیت پروژه باید تحت‌نظر باشد تا در صورت لزوم در برنامه تغییر ایجاد شود‪ .‬زمان‌بندی (‪ )Schedule Management‬از‬
‫آن دسته از فرایندهای مدیریت پروژه‌ای تشکیل می‌شود که مسئول حل‌وفصل محدودیت‌های زمانی هستند‪.‬‬

‫مطلب مرتبط‪ :‬خط زمانی یا تایم الین پروژه (‪ )Project Timeline‬چیست؟‬

‫‪ .۲‬محدوده‬
‫محدوده شامل تمام‌ کارهایی می‌شود که باید برای اتمام پروژه انجام شوند‪ .‬در مرحله‌ی برنامه‌ریزی با استفاده از ساختار شکست کار باید‬
‫محدوده را شناسایی کرد‪ .‬اگر محدوده در ابتدای پروژه مشخص نشود‪ ،‬ممکن است به دلیل فعالیت‌های برنامه‌ریزی‌نشده در مرحله‌ی اجرای‬
‫پروژه گسترش یابد‪ .‬این پدیده را خزش محدوده می‌نامند که ممکن است باعث شکست خوردن پروژه شود‪ .‬فرایند مدیریت محدوده پروژه‬
‫این مسئله را کنترل می‌کند‪.‬‬

‫‪ .۳‬هزینه‬
‫هر پروژه‌ای هزینه‌های زیادی دارد‪ .‬مدیران پروژه مسئول تخمین زدن‪ ،‬بودجه‌بندی و کنترل هزینه‌ها هستند‪ .‬هدف نهایی آن‌ها این است که‬
‫پروژه را با بودجه‌ای مقبول اجرا کنند‪ .‬تمام این مسئولیت‌ها مربوط به مدیریت هزینه است‪.‬‬

‫هیچ راهنمای مدیریت پروژه‌ای نیست که محدودیت‌های سه‌گانه را ذکر نکرده باشد‪ .‬محدودیت‌های سه‌گانه در مدیریت پروژه به زمان‪،‬‬
‫هزینه و محدوده اشاره دارد‪ .‬زمان‪ ،‬برنامه شما است‪ ،‬محدوده شامل وظایفی است که برای رسیدن به اهداف پروژه مورد نیاز است و هزینه‬
‫موارد مالی و بودجه را شامل می‌شود‪ .‬می‌بینید که این امر برای هر پروژه‌ای بسیار مهم است‪ .‬سه ضلع این مثلث‪ ،‬همیشه بر یکدیگر تاثیر‬
‫می‌گذارند‪ .‬اگر به‌موقع عقب‌نشینی نکنید‪ ،‬مجبور به تنظیم مجدد محدوده و هزینه هستید‪.‬‬

‫موفقیت هر پروژه بر این سه رکن استوار است‪ .‬اگرچه مدیریت این محدودیت سه‌گانه‪ ،‬متضمن موفقیت پروژه نیست و عوامل زیادی وجود‬
‫دارد با این حال‪ ،‬این سه رکن‪ ،‬باید مدیریت شوند تا مشکلی به وجود نیاید‪.‬‬
‫مدیر پروژه کیست؟‬

‫حال که می‌دانید تعریف مدیریت پروژه چیست و چه وجوهی دارد‪ ،‬در ادامه قصد داریم شما را به صورت دقیق‌تر با مدیر پروژه آشنا سازیم‪.‬‬

‫مدیر پروژه کسی است که وظیفه‌ی برنامه‌ریزی و اجرای پروژه را بر عهده دارد و مسئول هدایت تیم و سازماندهی کارهاست‪ .‬در شرکت‌های‬
‫رسمی‌تر و سازمان‌یافته‌تر و در پروژه‌های پیچیده‌تر مدیران پروژه معموال متخصصانی (‪ )PMP‬هستند که گواهی‌نامه‌ی معتبری از سازمان‬
‫مدیریت پروژه (‪ )PMI‬دارند‪.‬‬

‫در سازمان‌های کم‌تر رسمی‪ ،‬مثل کسب‌وکارهای کوچک‪ ،‬مدیر پروژه نیازمند گواهی‌نامه نیست‪ .‬مدیران پروژه مسئول تمام فرایندهای‬
‫مدیریت پروژه‌ای هستند که در تمام چرخه‌ی حیات پروژه رخ می‌دهند‪ .‬به زبان ساده‪ ،‬مدیران پروژه بر برنامه‌ریزی‪ ،‬اجرا‪ ،‬نظارت و پایان‬
‫دادن به پروژه‌ها نظارت می‌کنند؛ با وجود این‪ ،‬بیش‌تر مدیران پروژه نقش‌ها و مسئولیت‌های مشترکی دارند‪.‬‬

‫حال که می‌دانید مدیریت پروژه چیست و مدیر پروژه چه کسی است‪ ،‬بهتر است با وظایف مدیر پروژه آشنا شوید‪ .‬برخی از وظایف معمول‬
‫مدیر پروژه عبارت‌اند از‪:‬‬

‫•مدیریت محدوده (‪ :)Scope Management‬تعریف کار الزم برای کامل کردن پروژه؛‬
‫•مدیریت فعالیت‌ها (‪ :)Task Management‬برنامه‌ریزی برای فعالیت‌ها و تعیین تحویل‌دادنی‌ها؛‬
‫•مدیریت منابع (‪ :)Resource Management‬استفاده از افراد‪ ،‬سرمایه‌ها‪ ،‬مواد و بقیه‌ی منابع به شکلی کارآمد؛‬
‫•مدیریت تیم (‪ :)Team Management‬تشکیل تیم و رهبری آن؛‬
‫•مدیریت زمان‌بندی (‪ :)Schedule Management‬تحلیل مدت فعالیت‌ها به‌ منظور مشخص کردن برنامه‌ی زمانی‬
‫برای فعالیت‌های پروژه‪ .‬وقتی پروژه به مرحله‌ی اجرا رسید‪ ،‬وضعیت پروژه باید تحت‌نظر باشد تا در صورت لزوم در برنامه تغییر‬
‫ایجاد شود؛‬
‫•مدیریت کیفیت (‪ :)Quality Management‬تعیین سیاست‌های کیفیت برای محصوالت و خدمات پروژه و ب ‌ه کار‬
‫بستن فرایندهای تضمین و کنترل کیفیت از وظایف مدیریت پروژه؛‬
‫•مدیریت هزینه‌ها (‪ :)Cost Management‬تخمین هزینه‌ها و تعیین بودجه؛‬
‫•مدیریت ذی‌نفعان (‪ :)Stakeholder Management‬اقناع ذی‌نفعان با پاسخ‌ دادن به انتظارات و توقعاتشان و ارتباط‬
‫گرفتن با ایشان در حین پیشرفت پروژه؛‬
‫•مدیریت ریسک (‪ :)Risk management‬شناسایی و نظارت بر ریسک‌های پروژه و ب ‌ه حداقل رساندن آن‌ها؛‬
‫•گزارش وضعیت (‪ :)Status Reporting‬نظارت و پیگیری عملکرد و پیشرفت پروژه از طریق تنظیم گزارش و اسناد دیگر‪.‬‬

‫ت نظر مؤسسه‌ی مدیریت‬


‫حال که به طور کلی می‌دانید تعریف مدیریت پروژه چیست و مدیر پروژه کیست‪ ،‬باید بدانید که مدیران پروژه تح ‌‬
‫پروژه آموزش می‌بینند و گواهی‌نامه دریافت می‌کنند‪ .‬این مؤسسه‌ استانداردهای مدیریت را در کتاب دانش مدیریت پروژه (‪Project‬‬
‫)‪ )Management Book of Knowledge (PMBOK‬تعریف و کدگذاری کرده‌است‪.‬‬
‫مدرک ‪ PMP‬یکی از گواهی‌نامه‌های استاندارد و معمول برای مدیران پروژه است‪ ،‬اما این مؤسس ‌ه انتخاب‌های آموزشی تخصصی‌تری مانند‬
‫برنامه‌های تربیت متخصص مدیریت برنامه (‪ )Program Management Professional‬و متخصص مدیریت پورتفولیو (‬
‫‪ )Portfolio Management Professional‬را پیش پای مدیران می‌گذارد‪.‬‬

‫نرم‌افزارهای مدیریت پروژه‬


‫مدیران پروژه برای اجرای تمام وظایف الزم در جهت اتمام پروژه‌ها‪ ،‬در کنار دانش و مهارت‌هایشان‪ ،‬از نرم‌افزارهای مدیریت پروژه مانند‬
‫مایکروسافت پروژه (‪ )Microsoft Project‬استفاده می‌کنند‪.‬‬

‫نرم افزار مدیریت پروژه بستری است که به مدیران در امر برنامه‌ریزی‪ ،‬نظارت و گزارش پروژه‌ کمک می‌کند‪ .‬همچنین به تیم‌ها کمک‬
‫می‌کند تا کار خود را مدیریت کرده و با یکدیگر همکاری کنند‪ .‬یک نرم‌افزار خوب‪ ،‬تیم‌های پروژه را جهت مدیریت تمام جزئیات مربوط به‬
‫یک پروژه موفق‪ ،‬توانمند می‌سازد‪.‬‬

‫ابزارهای مدیریت پروژه‬

‫امروزه طیف گسترده‌ای از ابزارهای مدیریت پروژه‪ ،‬هم آنالین و هم موبایل‪ ،‬برای کمک به شما در مدیریت پروژه ها‪ ،‬در دسترس قرار دارند‪.‬‬
‫در ادامه به ابزارهای مدیریت پروژه می‌پردازیم‪.‬‬

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

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

‫داشبورد ابزار ایده‌آلی برای به‌روز نگه‌داشتن ذی‌نفعان درباره پروژه است؛ زیرا آن‌ها معموال نمی‌خواهند جزئیات زیادی را بدانند‪ .‬بعضی از‬
‫داشبوردها باید دسته‌ای از گزارشات متفاوت را به‌طور دستی جمع کنند و سپس آن‌ها را در یک برنامه دیگر سرهم کرده تا داشبورد ایجاد‬
‫شود‪.‬‬
‫لیست فعالیت‌ها‬
‫از ابزارهای مدیریت پروژه برای مدیریت فعالیت‌ها‪ ،‬تخصیص و پیگیری آن‌ها در حین پروژه استفاده می‌شود تا از برآورده‌شدن اهداف‬
‫زمان‌بندی‌شده اطمینان حاصل شود‪ .‬یک ابزار مدیریت پروژه خوب‪ ،‬به تیم‌ها امکان کنترل بیشتر فعالیت‌ها و به مدیران شفافیت بیشتری‬
‫درباره فرایندها می‌دهد‬

‫تقویم پروژه‬
‫تقویم پروژه یک روش عالی برای ردیابی تاریخ هر مایلستون (‪ )Milestone‬در پروژه است‪ .‬این تقویم‪ ،‬با برنامه زمان‌بندی و جدول زمانی‬
‫همسو است و می‌تواند تعطیالت‪ ،‬روزهای مرخصی و دیگر منابع زمان‌بندی را مشخص کند‪.‬‬

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

‫کانبان از یک تابلو با ستون‌هایی که نشان‌دهنده چرخه تولید و کارت‌هایی در زیر ستون‌ها که نشان‌دهنده وظایف است‪ ،‬تشکیل شده است‪.‬‬
‫با برنامه‌ریزی‪ ،‬اجرا و تکمیل کار‪ ،‬کارت‌ها از یک ستون به ستون دیگر منتقل می‌شوند‪ .‬کانبان‪ ،‬شفافیت را فراهم می‌کند و تیم‌ها بر روی کار‬
‫متمرکز می‌شوند‪.‬‬

‫ابزارهای کنترل حجم کار‬


‫حجم کار یعنی میزان کاری که باید تخصیص داده شود‪ .‬حجم کار اغلب می‌تواند ضعیف توزیع شود‪ ،‬در حالی که برخی بیشترین کار را‬
‫می‌گیرند و برخی دیگر نسبتا بیکار می‌مانند‪ .‬برای جلوگیری از این اتفاق‪ ،‬باید تسطیح منابع (‪ )Leveling Resource‬انجام داد‪.‬‬
‫هنگام تخصیص و اجرای وظایف‪ ،‬مهم است که بدانید هر عضو تیم چه میزان کار را می‌تواند متقبل شود‪.‬‬

‫نرم‌افزار مدیریت منابع‬


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

‫ورقه ثبت ساعت کاری‬


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

‫خواه تیم شما دارای تعداد زیادی کارمند از راه دور یا مشتری خارجی باشد‪ ،‬با استفاده از ابزارهای همکاری می‌توانید زمان پاسخگویی به‬
‫ایمیل را کاهش داده و به برقراری ارتباطات حیاتی پروژه کمک نمایید‪ .‬این امر به‌ویژه می‌تواند هنگام بررسی‌های بعد از اتمام پروژه یا هنگام‬
‫جستجوی پرونده‌های مهم پروژه و مکالمات پروژه‌های بزرگ‪ ،‬مفید باشد‪.‬‬

‫نقش‌های مدیریت پروژه‬


‫پروژه‌ها فقط ابزار و مراحل نیستند؛ تکمیل پروژه‌ها توسط افراد امکان‌پذیر است‪ .‬این افراد شغل‌های خاصی دارند‪ .‬یک پروژه زمانی به‬
‫بهترین شکل کار می‌کند که نقش‌های افراد به‌خوبی بیان شده باشند‪ .‬در حالی که روش‌هایی برای مدیریت پروژه وجود دارند که سیالیت‬
‫بیشتری فراهم می‌کنند‪ ،‬موارد زیر نقش‌های اصلی موجود در یک پروژه هستند‪:‬‬

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

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

‫آبشاری (‪)Waterfall Project Management‬‬


‫مدل آبشاری‪ ،‬یک رویکرد خطی برای تحویل کار است‪ .‬با الزامات روبرو می‌شوید‪ ،‬طرح را کنار یکدیگر قرار می‌دهید‪ ،‬راه‌حل می‌سازید‪،‬‬
‫آزمون و اجرا می‌کنید و سپس آن را به مرحله بعدی منتقل می‌کنید‪.‬‬

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

‫چابک (‪)Agile Project Management‬‬


‫مدیریت پروژه چابک یا اجایل (‪ )Agile‬اغلب در پروژه‌های نرم‌افزاری استفاده می‌شود اما در انواع دیگر پروژه‌ها مانند بازاریابی نیز بسیار‬
‫رایج شده است‪ .‬این روش شامل کار تکراری سریع در بازه‌های زمانی کوتاه است‪ .‬کار زمان‌بندی شده و تیم تا جای ممکن قبل از این‌که‬
‫وارد مجموعه الزامات بعدی شود‪ ،‬آن را انجام می‌دهد‪.‬‬

‫ت دارند‪ ،‬خوب است‪ .‬هنگامی که در فضای سنتی کار می‌کنید و تغییر در‬
‫این روش برای پروژه‌هایی که نیاز به ترکیب سریع و تکرار فعالی ‌‬
‫روش‌های چابک هنوز تکمیل یا حتی درک نشده است‪ ،‬از این روش اجتناب کنید‪.‬‬

‫مطلب مرتبط‪ :‬متدولوژی چابک یا آبشاری؟‬

‫اسکرام (‪)Scrum Project Management‬‬


‫اسکرام روشی کوتاه و مبتنی بر اسپرینت (‪ )Sprint‬برای مدیریت پروژه در تیم‌های کم‌تر از ‪ ۱۰‬نفر ایدئال است؛ این روش اغلب چرخه‌ای‬
‫دوهفته‌ای دارد و شامل جلسات کوتاه روزانه یا همان جلسات روزانه‌ی اسکرام است‪ .‬این فرایند را اسکرام مستر (‪)Scrum master‬‬
‫هدایت می‌کند‪ .‬اسکرام در چارچوب چابک (‪ )agile framework‬کار می‌کند و محدودیت‌های زمانی (‪ ،)time boxes‬تعامل و‬
‫همکاری تیمی‪ ،‬بک‌الگ محصول (‪ )Product Backlog‬و چرخه‌های بازخورد دارد‪.‬‬

‫مطلب مرتبط‪ :‬سازمان چابک (‪ )Agile‬چیست؟ ‪ ۷‬گام برای رسیدن به سازما ‌‬


‫ن چابک‬

‫ناب (‪)Lean Project Management‬‬


‫روش ناب از زمان ظهور جنبش ‪ the Lean Startup‬معنای متفاوتی داشته است که از یک رویکرد تکراری برای توسعه محصول‬
‫پشتیبانی می‌کند و شامل ورود سریع کاربران نهایی و اغلب جهت دریافت بازخورد بر روی دستاوردهای پروژه‪ ،‬است‪.‬‬
‫به‌طور سنتی در مدیریت پروژه‪ ،‬مدیریت پروژه ناب‪ ،‬راهی برای از‌بین‌بردن اتالف در فرایندها و اطمینان از همکاری مؤثر افراد درگیر است‪.‬‬
‫این امر باعث سهولت جابجایی بین تیم‌ها و حذف ازکارافتادگی می‌شود‪ .‬یک ویژگی معمول این روش آن است که همزمان فقط بر روی یک‬
‫پروژه کار می‌کند‪.‬‬

‫روش ناب‪ ،‬برای پروژه‌های بهبود فرایند و اقدامات مهمی که نیاز به تمرکز دارند‪ ،‬مفید است‪ .‬هنگامی که مطمئن نیستیم که بخش‌های‬
‫کاری می‌توانند با تالش در ساده‌سازی و استفاده آسان از فرایندها‪ ،‬سودمند باشند‪ ،‬از این روش اجتناب می‌کنیم‪.‬‬

‫کانبان (‪)Kanban‬‬
‫کانبان روشی بصری برای کمک به مدیر پروژه است که جریان کار را با قراردادن وظایف روی ُبرد کانبان مدیریت می‌کند تا جریان کار و‬
‫پیشرفت پروژه برای همه‌ی مشارکت‌کنندگان شفاف باشد‪ .‬کانبان ناکارآمدی‌ها را بهتر می‌کند و برای برنامه‌ریزی تولیدی ناب در پروژه‌های‬
‫چابک استفاده شده‌است‪.‬‬

‫با ظهور تابلوهای برنامه‌ریزی بصری مانند ترلو‪ ،‬کاربردهای جدیدی برای ابزارها و روش‌های کانبان ایجاد شده‌است‪ .‬تیم‌های چابک از‬
‫تابلوهای کانبان برای استوری‌برد کردن داستان‌های کاربران و برنامه‌ریزی بک‌الگ در توسعه‌ی نرم‌افزاری استفاده می‌کنند‪.‬‬

‫‪ ۶‬سیگما (‪)Six Sigma‬‬


‫شش سیگما با شناسایی مشکالت پروژه به افزایش کیفیت کمک می‌کند‪ .‬این روش از راهبردهای مدیریت کیفیت مانند تحلیل آماری بر‬
‫اساس داده‌های تجربی استفاده می‌کند و کارمندانی را که در شغل خود تخصص باالیی دارند‪ ،‬به کار می‌گیرد‪ .‬نوعی ‪ ۶‬سیگما به نام ‪۶‬‬
‫سیگمای ناب وجود دارد که روش ناب به آن اضافه شده‌است تا هدررفت را کاهش دهد‪.‬‬

‫در این روش اعتقاد بر این است که تالش مداوم برای دستیابی به نتایج پایداری که انتظار دستیابی به آن‌ها را داریم‪ ،‬بیش‌ترین اهمیت را‬
‫برای موفقیت دارد‪ .‬می‌توان فرایندها را تعریف کرد و ارتقا داد‪ .‬الزم است تمام سازمان‪ ،‬از باال تا پایین‪ ،‬مشارکت کنند تا کیفیت پروژه‌ها‬
‫حفظ شود‪.‬‬

‫‪ .۷‬روش مسیر بحرانی (‪)CPM‬‬


‫روش مسیر بحرانی (‪ )Critical Path Method‬تالش می‌کند مدلی بسازد که تمام‌ کارهای مشخص‌شده در ساختار شکست کار را در‬
‫بر بگیرد‪ .‬هدف آن شناسایی دنباله‌ی وظایف پروژه و دوره‌ی زمانی اجرای آن‌هاست‪ .‬با دستیابی به این اطالعات‪ ،‬فعالیت‌های بحرانی‌ای که‬
‫باید در زمان مشخص به پایان برسند تا برنامه‌ی پروژه آسیب نبیند‪ ،‬مشخص می‌شوند‪.‬‬

‫‪ .۸‬زنجیره‌ی بحرانی مدیریت پروژه (‪)CCPM‬‬


‫مدیران پروژه در روش زنجیره‌ی بحرانی مدیریت پروژه (‪ )Critical Chain Project Management‬بر منابع الزم برای اتمام‬
‫پروژه (تیم‌ها‪ ،‬تجهیزات‪ ،‬فضای دفترها) تمرکز می‌کنند‪ .‬این روش پیچیدگی فنی کم‌تری دارد‪ ،‬زیرا تمرکز بر تعادل منابع و حفظ انعطاف‬
‫آن‌هاست و الزم نیست توجه زیادی به ترتیب وظایف یا برنامه‌ریزی شود‪.‬‬
‫از روش زنجیره‌ی بحرانی هم در شرکت‌های کوچک و هم در شرکت‌های بزرگ و هم‌چنین در حیطه‌های مختلفی مانند ساخت‌وساز‪،‬‬
‫توسعه‌ی نرم‌افزار و تحقیق و توسعه (‪ )R&D‬فناوری‌ها استفاده می‌کنند‪.‬‬

‫چگونه یک مدیر پروژه شویم؟‬

‫مدیران پروژه‪ ،‬رهبر هستند‪ .‬آن‌ها باید عالوه بر برنامه‌ریزی‪ ،‬نظارت و گزارش پیشرفت تیم‪ ،‬به گروه خود انگیزه بدهند‪ .‬این شغل نیاز به‬
‫مهارت‌های زیادی دارد‪ .‬مدیر پروژه باید دارای مهارت های ارتباطی قوی باشد و بتواند به روشنی با ذی‌نفعان و تیم پروژه ارتباط برقرار کند‪.‬‬

‫مدیران پروژه رسمی به‌طور معمول از طریق نمایندگی مانند ‪ PMI‬یا ‪ PRINCE2‬گواهینامه دریافت می‌کنند‪ .‬پس از صدور گواهینامه‪،‬‬
‫آن‌ها باید گواهینامه‌های خود را با آموزش‌های اضافی‪ ،‬جهت گردآوری واحدهای توسعه حرفه‌ای (‪ ،)PDU‬حفظ نمایند‪.‬‬

‫همان‌طور که قبال ذکر شد‪ ،‬استانداردهای صالحیت مدیران پروژه‌ای که گواهی شده‌اند‪ ،‬اخیرا گسترش یافته‌اند تا مهارت‌های تجاری و‬
‫رهبری بیشتری را شامل شوند‪ .‬گواهینامه ‪ PMI‬و استانداردهای ‪ PDU‬را می‌توانید در کتاب راهنمای پیکره دانش مدیریت پروژه (‬
‫‪ )PMBOK‬یا در سایت آن‌ها پیدا کنید‪ .‬اما دستیابی به جنبه‌های فنی مدیریت پروژه‪ ،‬بدون آموزش رسمی گواهینامه‪ ،‬دشوار است‪.‬‬

‫تاریخچه مدیریت پروژه‬


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

‫رشته مدیریت پروژه به صورتی که امروز هست و توجه را معطوف خود کرده‪ ،‬در دهه ‪ ۱۹۵۰‬ظهور کرد‪ .‬در آن زمان‪ ،‬بسیاری از صنایع‬
‫فرایندهای ساختار‌یافته‌ای را برای مدیریت و تولید‪ ،‬پیاده‌سازی کرده بودند‪ .‬نمودار هنری گانت‪ ،‬مورد استفاده قرار می‌گرفت و گزینه محبوب‬
‫برای برنامه‌ریزی بود‪.‬‬

‫از دهه ‪ ۱۹۵۰‬به بعد‪ ،‬مردم سال‌ها مدیریت پروژه انجام می‌دادند و اغلب از روش‌های سفارشی که خودشان طراحی می‌کردند‪ ،‬استفاده‬
‫می‌کردند‪ .‬این موضوع زمانی که راهنمای پیکره دانش مدیریت پروژه (‪ )PMBOK‬توسط موسسه ‪ PMI‬به‌عنوان استاندارد ‪ ANSI‬در‬
‫سال ‪ ۱۹۹۸‬معرفی شد‪ ،‬تغییر کرد‪.‬‬

‫در چند سال گذشته نیز تغییرات بزرگی در مدیریت پروژه دیده شده است‪ .‬اکنون یک استاندارد ‪ ISO‬برای مدیریت پروژه وجود دارد که‬
‫در سال ‪ ۲۰۱۲‬ارائه شد‪ .‬اما بزرگترین تغییر در بین تمام این تغییرات‪ ،‬تغییر دیدگاه از یادگیری زمان‌بندی و مهارت‌های فنی برای مدیریت‬
‫پروژه‌ها به درک این موضوع بود که افراد در پروژه‌ها اهمیت دارند‪.‬‬

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

‫اما اکنون می‌دانید که چه عناصری در مدیریت پروژه وجود دارند و در صورت عالقه‪ ،‬این موضوع می‌تواند شما را جذب یا ناامید کند‪ .‬آن‌چه‬
‫که می‌توانیم تضمین کنیم این است که هرگز خسته نخواهید شد‪ .‬فقط مغرور نباشید؛ چیزهای زیادی برای یادگیری وجود دارد‪ .‬همیشه‬
‫کنجکاو باشید‪.‬‬
‫مایلستون (‪ )Milestone‬چیست و چگونه‬
‫آن را در پروژه مشخص کنیم؟‬

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

‫ت‌های چشم‌گیر را در پروژه‌ی مربوط نشان می‌دهد‪ .‬تعیین مایل استون ها ممکن است نسبت به‬
‫مایلستون پروژه هدفی است که پیشرف ‌‬
‫تالش برای تکمیل هدف کلی ارجح‌ باشد‪ ،‬به‌ویژه هنگامی که پروژه طوالنی‌مدت بوده یا این‌که چندین وجه داشته‌باشد‪ .‬در حالت کلی‪،‬‬
‫مایلستون‌ها رویدادهایی هستند که تا پایان پروژه به‌تدریج ایجاد می‌شوند‪.‬‬

‫در ادامه برای درک بهتر معنی ‪ Milestone‬در کنترل پروژه‪ ،‬مثالی از مایل استون های پروژه در صنعت ساخت‌وساز را بررسی می‌کنیم‪.‬‬
‫هنگامی که مدیران پروژه بر پروژه‌های ساختمانی نظارت می‌کنند‪ ،‬باید مراحل خاصی را دنبال کنند؛ برای مثال‪ ،‬اولین مایلستون پروژه‬
‫می‌تواند تکمیل طبقات طی ‪ ۱‬هفته باشد؛ پس از آن‪ ،‬مرحله‌ی بعدی ممکن است تکمیل سقف ساختمان ظرف مدت ‪ ۱‬ماه باشد‪ .‬در پایان‬
‫ماه جاری‪ ،‬مایل استون دیگری وبرای سیستم گازرسانی و وصل کردن آن در نظر گرفته می‌شود‪ .‬در واقع‪ ،‬همه‌ی این مثال‌ها مایلستون های‬
‫اصلی در این پروژه هستند‪ ،‬زیرا باید به ترتیِب خاصی اتفاق بیفتند تا در نهایت‪ ،‬پروژه تکمیل شود‪.‬‬

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

‫صرف‌نظر از این‌که هدف نهایی پروژه‪ ،‬نمونه‌ی ساخت‌وساز فوق مثال خوبیست‪ .‬بسته به نوع پروژه‌ای که در آن کار می‌کنید و افرادی که در‬
‫آن مشارکت دارند‪ ،‬برخی از مایل استون ها می‌توانند تصویب پروژه‪ ،‬بررسی نیازها و تأیید پروژه‌ی نهایی را شامل شوند‪.‬‬

‫اکنون که توضیح دادیم مایلستون چیست‪ ،‬در ادامه‌ی مطلب به چگونگی مشخص‌کردن مایل استون در پروژه می‌پردازیم‪.‬‬

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

‫‪ .۱‬کارهای مربوط به پروژه را از مایلستون ها جدا کنید‬

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

‫ب ‌ه طور کلی‪ ،‬وقایعی که از اهمیت بیش‌تری در پروژه برخوردار هستند‪ ،‬باید نوشته شوند تا تمام اعضای تیم بتوانند آن‌چه در تالش برای‬
‫انجامش هستند را ببینند و برای آن برنامه ریزی می‌کنند؛ عالوه بر این‪ ،‬برخی از مایلستون های پروژه‪ ،‬نسبت به بقیه‪ ،‬اهمیت بیش‌تری‬
‫دارند؛ بنابراین‪ ،‬اعضای تیم روی مایل استون های کوچک‌تر کار می‌کنند و در عین حال‪ ،‬مایلستون های مهم‌تر به توجه مدیر پروژه احتیاج‬
‫دارند تا رسیدگی به آن‌ها را بر عهده بگیرد‪.‬‬

‫مطلب مرتبط‪ :‬مدرک ‪ PMP‬چیست و چگونه این مدرک را بگیریم؟‬

‫‪ .۲‬روی مهلت پایان پروژه نظارت داشته‌باشید‬


‫نظارت دائمی بر مهلت‌های تعیین‌شده برای پایان تمام مراحل مهم پروژه مفید است‪ .‬از سوی دیگر‪ ،‬یکی از راه‌های افزایش توجه اعضای تیم‬
‫به ضرب‌االجل‌های پروژه این است که دستیابی به هر محصول قابل‌تحویلی را ب ‌ه عنوان مایلستونی در پروژه در نظر بگیرند‪.‬‬

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

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

‫‪ .۳‬با همه‌ی تیم‌ها ارتباط برقرار کنید‬


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

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

‫بنابراین‪ ،‬روشی را برای پیگیری آن‌ها انتخاب کنید که برای تیمتان بهترین گزینه باشد؛ از جمل ‌ه این روش‌ها می‌توان به نوشتن روی کاغذ‪،‬‬
‫برقراری ارتباط با یک‌دیگر از طریق ایمیل یا استفاده از سیستم مدیریت آنالین اشاره کرد‪ .‬در ادامه‪ ،‬نمونه‌هایی از روش‌های پیگیری‬
‫مایلستون را آورده‌ایم‪:‬‬

‫‪ .۱‬پیگیری مایلستون با نوشتن روی کاغذ‬


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

‫‪ .۲‬پیگیری مایلستون با استفاده از ایمیل‬


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

‫‪ .۳‬پیگیری مایلستون با سیستم مدیریت آنالین‬

‫امروزه‪ ،‬سیستم‌های مدیریت آنالین نیز برای پیگیری مایلستون های اصلی پروژه رواج پیدا کرده‌اند‪ .‬برنامه‌های رایگان و پولی مختلفی برای‬
‫این امر ایجاد شده‌اند و تمامی کسانی که در سیستم موردنظر ثبت‌نام کنند‪ ،‬می‌توانند به آن دسترسی پیدا کنند‪.‬‬

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

‫عالوه بر این‪ ،‬سیستم‌های مدیریت آنالین به اعضای تیم این امکان را می‌دهند تا اشخاص مسئول انجام کارهای مختلف پروژه را پیگیری‬
‫کنند که این موضوع به بهبود ارتباطات آن‌ها نیز کمک می‌کند‪ .‬همه‌ی اعضا نیز با مشاهده مایلستون ها می‌توانند پیشرفت هم‌تیمی‌های‬
‫خود را ببینند تا مطمئن شوند که آن‌ها نیز اهداف پروژه‌ی کلی را دنبال می‌کنند‪.‬‬
‫جمع‌بندی‬

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

‫منبع‪indeed.com :‬‬
‫‪ Epic‬در اسکرام چیست؟‬
‫اکنون یک دهه است که «اسکرام» تبدیل به کلمه‌ای پرطرفدار در دنیای توسعه محصول شده و چرا که نه‪ ،‬داستان‌های موفقیت‌آمیز زیادی‬
‫راجع به آن شنیده‌ایم‪ .‬البته درباره «داستان‌های کاربر» که به معنای پیش‌نیازهای اسکرام هستند صحبت نمی‌کنیم‪ ،‬بلکه از داستان موفقیت‬
‫تیم‌ها و سازمان‌هایی که می‌گوییم که روش‌شناسی اسکرام را در پیش گرفته‌اند‪ .‬در هر صورت اما می‌خواهیم راجع به یکی دیگر از همان‬
‫پیش‌نیازها حرف بزنیم‪ :‬درباره ‪ Epic‬در اسکرام‪.‬‬

‫«حماسه» یا «اپیک» (‪ )Epic‬را تا به امروز به عنوان داستانی طوالنی راجع به قهرمانان بزرگ و افسانه‌ای تاریخی که دست به کارهای‬
‫شجاعانه می‌زدند می‌شناختیم‪ ،‬اما در این مقاله به سراغ مفهومی کامال متفاوت می‌رویم‪ .‬به مطالعه ادامه دهید تا هرآنچه الزم است راجع به‬
‫‪ Epic‬در اسکرام بدانید را فرا بگیرید‪.‬‬
‫‪ Epic‬در اسکرام چیست؟‬

‫اگر بخواهیم به ساده‌ترین شکل ممکن بگوییم‪ Epic ،‬در اسکرام (که خود زیرمجموعه مدیریت چابک یا ‪ Agile‬به حساب می‌آید)‪ ،‬یک‬
‫وظیفه بزرگ است که می‌تواند به «داستان‌های کاربر» (‪ )User Stories‬خردتر تقسیم شود‪ .‬یک اپیک می‌تواند میان اسپرینت های‬
‫مختلف و یا حتی تیم‌های چابک مختلف پخش شود‪ .‬اپیک می‌تواند توضیحی سطح باال از آنچه مشتری طلب می‌کند باشد و به همین‬
‫ترتیب‪ ،‬مقادیری نیز در آن ضمیمه می‌شوند‪ .‬همانطور که اشاره کردیم‪ ،‬اپیک یک پیش‌نیاز سطح باال است و به همین خاطر‪ ،‬ابعاد و‬
‫چشم‌انداز آن می‌تواند در گذر زمان دچار تغییر شود‪.‬‬

‫اپیک‌ها راهی کارآمد برای سامان‌بخشی به کارها و ساخت سلسله مراتب است‪ .‬ایده کلی این‌ست که وظایف را به تکه‌های خرد و قابل‬
‫پیاده‌سازی تقسیم کنید تا پروژه‌های بزرگ واقعا عملی شوند و بتوانید به صورت مداوم برای مشتریان خود ارزش‌سازی کنید‪ .‬اپیک به تیم‌ها‬
‫در تقسیم‌بندی کارها و حرکت به سمت هدفی بزرگ‌تر کمک می‌کند‪.‬‬

‫برای اینکه موضوع را بهتر باز کرده باشیم‪ ،‬مثالی از دنیای واقعی می‌زنیم‪ .‬فرض می‌کنیم برگزاری مهمانی سال نو‪ ،‬یک پیش‌نیاز اپیک برای‬
‫شما است‪ .‬برای برگزاری چنین مهمانی مهمی‪ ،‬باید وظایف خود را سامان‌مند کنید‪ :‬از بزرگ‌ترین اهداف گرفته تا ریزترین جزییات‪ .‬باید‬
‫بتوانید به تغییرها واکنش نشان دهید‪ ،‬پیشرفت خود را پایش کنید و به یک نقشه مشخص بچسبید‪ .‬وقتی از اپیک خود باخبر می‌شوید‪،‬‬
‫می‌توانید آن را به وظایف خردتر مانند فراهم آوردن فهرست مهمانان‪ ،‬تصمیم‌گیری راجع به خوراکی‌ها‪ ،‬خرید لوازم مورد نیاز‪ ،‬دکوراسیون‬
‫منزل‪ ،‬خرید سال جدید و موارد مشابه تقسیم کنید‪.‬‬

‫برخی اپیک‌ها بسته به نیازهای گزارش‌دهی مدیریتی شکل می‌گیرند‪ .‬برخی اپیک‌ها هم با در نظرگیری زمان‌بندی‌ها ساخته می‌شوند‪،‬‬
‫زمان‌بندی‌هایی که نباید زیادی کوتاه یا زیادی طوالنی باشند و به عبارت دیگر‪ ،‬بیشتر از دو هفته طول نکشند‪ .‬یکی از رایج‌ترین راه‌های‬
‫مدیریت این فرایند‪« ،‬داستان‌سرایی» (‪ )Storytelling‬نام دارد‪ .‬اما داستان‌سرایی اصال چیست؟‬

‫داستان سرایی چیست؟‬

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

‫یک‌بار دیگر به مثالی که پیشتر زدیم بازمی‌گردیم و سعی می‌کنیم اپیک بزرگ‌مان را به اجزای کوچک‌تر و قابل رسیدگی تبدیل کنیم‪.‬‬
‫تقسیم کردن اپیک به اجزای کوچک‌تر بسیار مهم است تا تیم بتواند آن اجزا را برداشته و در برهه اسپرینت در اسکرام‪ ،‬نهایی‌شان کند‪ .‬در‬
‫واقع می‌توان این کار را با خلق یک اثر هنری مقایسه کرد که نیازمند دقت فراوان از نظر ابعاد‪ ،‬اولویت‌بندی‪ ،‬رسیدگی به اجزای متصل به‬
‫یکدیگر و موارد این چنینی است‪ .‬در ادامه به سراغ چند روش رایج برای تقسیم کارها می‌رویم‪.‬‬

‫تقسیم کار مبتنی بر جریان کاری‬


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

‫برخی گام‌های جریان کاری ممکن است در این لحظه مهم نباشند و بنابراین می‌توانید آن‌ها را به مراحل بعدی موکول کنید‪ .‬برای مثال‬
‫ممکن است پختن کیک را در اولویت گذاشته باشید‪ ،‬زیرا نیاز به اندکی زمان برای خنک شدن آن دارید‪ .‬اما احتماال همین کار را بتوان بعدا‬
‫نیز انجام داد‪.‬‬

‫تقسیم کار مبتنی بر نقش‬

‫با توجه به اینکه افراد مختلف‪ ،‬نقش‌های گوناگونی را در یک پروژه برعهده می‌گیرند‪ Epic ،‬در اسکرام را می‌توان بسته به نقش‌ها نیز‬
‫تقسیم‌بندی کرد‪ .‬برای مثال می‌توانیم نقش‌های «میزبان»‪« ،‬مهمان» و حتی «آشپز» را در مهمانی خود داشته باشیم و وقتی صحبت از‬
‫توسعه محصول باشد‪ ،‬قادر به افزودن نقش‌های هرچه بیشتر خواهید بود‪ .‬در تقسیم کار مبتنی بر نقش‪ ،‬راجع به پرسونا های گوناگون‬
‫صحبت می‌کنیم‪ .‬برای مثال میزبان می‌تواند دنبال «برگزاری یک مهمانی موفقیت‌آمیز» باشد و مهمان به دنبال «چند بازی سرگرم‌کننده در‬
‫مهمانی»‪.‬‬

‫تقسیم کار مبتنی بر برنامه زمانی‬


‫برخی اپیک‌ها را می‌توان بسته به زمان مورد نیاز برای نهایی شدن‪ ،‬تقسیم‌بندی کرد‪ .‬تیم توسعه معموال کارها را براساس آنچه می‌توان در‬
‫هر اسپرینت به دست آورد تقسیم می‌کند‪ .‬اعضای تیم تمام اپیک را برداشته‪ ،‬تقسیم به برش‌های کوچک‌تر می‌کنند و سپس بسته به‬
‫اولویت و ارتباط‌های میان وظایف‪ ،‬آن‌ها را در اسپرینت‌های مختلف جای می‌دهند‪.‬‬

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

‫تاکنون راجع به این صحبت کردیم که ‪ Epic‬در اسکرام چیست و چطور تقسیم‌بندی می‌شود‪ .‬حاال بیایید راجع به این صحبت کنیم که‬
‫چه ویژگی‌های متمایز‌کننده‌ای از سایر عناصر دارد‪ .‬اپیک ما تا به این لحظه «برگزاری مهمانی سال نو» بوده‪ .‬این کاری بزرگ است که‬
‫دیدیم چطور به روش‌های گوناگون‪ ،‬تبدیل به وظایف کوچک‌تر می‌شود‪ .‬نتایج این تقسیم‌بندی‪« ،‬داستان‌ها» (‪ )Stories‬هستند که‬
‫می‌توانند در یک برهه اسپرینت به انجام برسند‪ .‬اما داستان‌ها هم خود به قطعات کوچک‌تری به نام «وظایف» (‪ )Tasks‬تقسیم می‌شوند‪.‬‬
‫تیم توسعه این وظایف را برداشته و به آن‌ها رسیدگی می‌کند‪ .‬زمانی هم که تمام وظایف به پایان رسیدند‪ ،‬داستان‌مان برچسب «پایان‌یافته»‬
‫می‌خورد‪ .‬بنابراین همه‌چیز به شکل زیر است‪:‬‬

‫اپیک‪ :‬پیش‌نیازی که بزرگ‌تر از آن است که در یک اسپرینت واحد نهایی شود‪ .‬اپیک باید به قطعات کوچک‌تر و قابل رسیدگی (داستان‌ها)‬
‫تقسیم شود‪.‬‬
‫داستان‪ :‬پیش‌نیازی که کسب‌وکار طلب می‌کند‪ .‬داستان باید به‌گونه‌ای پیکربندی شود که در یک اسپرینت واحد به پایان برسد‪.‬‬
‫وظایف‪ :‬موارد ضروری هر داستان که وقتی کنار یکدیگر قرار می‌گیرند‪ ،‬داستانی کامل را شکل می‌دهند‪.‬‬

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

‫تیم توسعه سپس قادر به پایش میزان پیشرفت اپیک در نمودار ‪ Burndown‬است که هم مقدار پیشروی در امور را نمایش می‌دهد‪ ،‬هم‬
‫بازتابگر موانع احتمالی در مسیر است‪.‬‬

‫مزایای اپیک‬
‫اپیک به شما در درک پیش‌نیازهای سطح باالی ذینفعان و آنچه دقیقا مورد نیاز است یاری می‌رساند‪.‬‬

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

‫مشکالت رایج و بالقوه اپیک‬

‫اگرچه اپیک مزایای زیادی به هنگام مدیریت بک‌الگ محصول با خود به همراه می‌آورد‪ ،‬اما هر سکه‌ای دو طرف دارد‪ .‬گاهی از اوقات تیم‌ها‬
‫ممکن است گیج شده و اپیک را چیزی فراتر از داستان‌های کاربری بزرگ ببینند‪ .‬این موضوع زمانی دردسرساز می‌شود که تیم توسعه به‬
‫ساخت ابزارهایی چندوجهی می‌پردازد تا میان اپیک‌ها و داستان‌ها تمایز قائل شود‪ .‬از سوی دیگر ممکن است ابزارهایی بیش از اندازه‬
‫پیچیده تدارک دیده شود تا بتوان اپیک‌ها را جداگانه از موارد موجود در بک الگ پیش برد‪.‬‬
‫تیم توسعه ضمنا ممکن است بدون اینکه ذهنیتی واضح راجع به کارهایی که باید انجام شوند داشته باشد‪ ،‬برخی اپیک‌ها را بیش از اندازه‬
‫سطح باال تخمین بزند‪ .‬بدین ترتیب احتمال ابهام میان اعضای تیم باالتر می‌رود و وقتی تخمین‌ها دقیق نباشند‪ ،‬عمال به هیچ دردی‬
‫نمی‌خورند و کمکی به فرایند گزارش‌دهی نمی‌کنند‪.‬‬
‫ابزارها‬
‫در دنیای توسعه نرم‌افزار‪ ،‬استفاده از ابزارها و تکنولوژی‌های مناسب جهت مدیریت کد و انجام فرآیندهای توسعه و استقرار‪ ،‬از اهمیت‬
‫ویژه‌ای برخوردار است‪ .‬پلتفرم‌های سورس کنترل (‪ )Source Control‬و پیوستگی مداوم ‪ /‬استقرار مداوم (‪ )CI/CD‬نقش حیاتی در‬
‫بهبود کیفیت کد‪ ،‬کاهش زمان توسعه و افزایش کارایی تیم‌های توسعه ایفا می‌کنند‪.‬‬
‫سورس کنترل یا کنترل نسخه‪ ،‬فرآیندی است که به تیم‌های توسعه این امکان را می‌دهد تا تغییرات در کد منبع را پیگیری کنند‪،‬‬
‫نسخه‌های مختلف کد را مدیریت کنند و با همکاران خود به صورت همزمان و بدون تداخل کار کنند‪ .‬ابزارهایی مانند ‪Git،Subversion‬‬
‫)‪ (SVN‬و ‪ Mercurial‬از جمله پلتفرم‌های معروف سورس کنترل هستند که به توسعه‌دهندگان کمک می‌کنند تا به صورت مؤثر و‬
‫منظم بر روی پروژه‌های خود کار کنند‪.‬‬
‫از سوی دیگر‪ CI/CD ،‬یا یکپارچه‌سازی مداوم ‪ /‬تحویل مداوم‪ ،‬مجموعه‌ای از روش‌ها و ابزارهاست که هدف آن‌ها اتوماتیک‌سازی و‬
‫بهبود فرآیندهای توسعه و استقرار نرم‌افزار است‪ .‬با استفاده از این روش‌ها‪ ،‬توسعه‌دهندگان می‌توانند کدهای خود را به صورت مداوم تست‪،‬‬
‫ادغام و استقرار دهند‪ .‬ابزارهایی مانند ‪ Jenkins، GitLab CI ، CircleCI‬و ‪ Travis CI‬از جمله ابزارهای محبوب در این حوزه هستند‬
‫که به تیم‌های توسعه کمک می‌کنند تا با سرعت و دقت بیشتری نرم‌افزارهای خود را به بازار عرضه کنند‪.‬‬
‫این مستند به بررسی و مقایسه پلتفرم‌های مختلف سورس کنترل و ‪ CI/CD‬می‌پردازد‪ .‬ما در اینجا به معرفی ویژگی‌ها‪ ،‬مزایا و معایب‬
‫پلتفرم‌های مطرح در این زمینه خواهیم پرداخت و نقش آن‌ها در بهبود فرآیندهای توسعه و استقرار نرم‌افزار را مورد بررسی قرار خواهیم‬
‫داد‪.‬‬
‫هدف از این مستند‪ ،‬انتخاب بهترین راه‌حل‌ برای ایجاد سکوی مناسب کنترل نسخه و چرخه تولید محصوالت‬
‫نرم افزاری معاونت سامانه های کاربردی شرکت داده پردازی ایران می باشد‪.‬‬
‫در این مستند بررسی پلت فرم های زیر انجام شده و پس از مقایسه ویژگیهای و امکانات آنها راه حل پیشنهادی ارائه شده است‪:‬‬
‫‪Gitlab , Azure Devops , Jenkins , TeamCity , CircleCI ,Travis CI , Bamboo‬‬
‫بررسی قابلیت های ‪GitLab‬‬ ‫‪-1‬‬

‫شکل ‪ : 1‬شمای ابزار ‪GitLab‬‬

‫‪ GitLab‬یک پلتفرم ‪ Git‬و ‪ DevOps‬است که به توسعه‌دهندگان کمک می‌کند تا بر کدها نظارت کرده‪ ،‬آنها را آزمایش و اجرا‬
‫کنند‪ .‬امروزه ‪ GitLab‬بسیاری از ویژگی‌های ‪ DevOps‬مانند یکپارچه‌سازی مداوم‪ ،‬امنیت و حتی ابزارهای استقرار برنامه را نیز ارائه‬
‫می‌دهد‪.‬‬
‫‪ GitLab‬به عنوان یک جایگزین متن باز برای ‪ GitHub‬شروع به کار کرد‪ .‬در حال حاضر برنامه های ‪ SaaS‬رایگان و پولی مبتنی بر‬
‫ابر را نیز ارائه می کند‪ .‬همچنین ابزارهای ضروری مدیریت پروژه را جهت نظارت و کنترل اعضای تیم‪ ،‬در اختیارتان قرار می دهد و صرفا‬
‫یک سیستم کنترل نسخه برای کدهای نرم افزارتان نیست‪.‬‬
‫شکل ‪ : 2‬قابلیتهای کلی ‪GitLab‬‬

‫گیت‌لب یک پلتفرم ابری بر پایه گیت و برای توسعه نرم‌افزار و دواپس است که به توسعه‌دهنده‌ها در زمینه مانیتورینگ‪ ،‬تست و انتشار‬
‫برنامه کمک می‌کند‪ .‬این ابزار همچنین یک ابزار متن‪-‬باز تعاملی و ریپوزیتوری است که می‌تواند در پروژه‌های بزرگ دواپس و‬
‫‪ DevSecOps‬به تیم‌ها کمک کند‪.‬‬
‫گیت‌لب با داشتن امکانات داخلی (بدون نیاز به نصب پالگین)‪ ،‬پروتکل های امنیتی ‪ DevSecOps‬را در تمامی فرآیندهای دواپس‬
‫پشتیبانی نموده و به حفظ امنیت در فرایند توسعه نرم‌افزار کمک می‌کند و به همین خاطر‪ ،‬یکی از ابزارهای دواپس مناسب برای‬
‫پیاده‌سازی فرایند ‪ DevSecOps‬است‪.‬‬
‫گیت‌لب همچنین قابلیت نصب روی هاست شخصی(‪ )on-premises‬را دارا میباشد ‪ .‬که عالوه بر امکاناتی مانند ذخیره کد آنالین و‬
‫ردیابی اشکاالت‪ ،‬امکانات ‪ ،CI/CD‬مدیریت فرایندهای دواپس و امکانات امنیتی هم به کاربر ارائه می‌دهد‪ .‬استفاده از ‪ GitLab‬به صورت‬
‫فردی رایگان است‪ ،‬اما برای تیم‌ها و برخی از ویژگی‌ها و امکانات‪ ،‬باید نسخه اشتراکی آن را تهیه کنید‪.‬‬
‫در حال حاضر گیت‌لب دو نسخه دارد‪ :‬نسخه تجاری که به عنوان )‪ SaaS (Software as a service‬عرضه شد و نسخه رایگان و‬
‫متن‌‪-‬باز که ‪ GitLab CE‬نام دارد‪ CE .‬مخفف ‪ Community edition‬است‪ .‬البته نسخه ‪ ee‬یا ‪ enterprise edition‬راهم میتوان‬
‫نصب کرد ‪.‬‬
‫شکل ‪ : 3‬مقایسه نسخ ‪GitLab‬‬

‫در واقع در نسخه ‪ EE‬دسترسی به پشتیبانی ها و منابع فنی را داریم ‪ .‬اما امکان نصب این نسخه وجود دارد‪.‬‬
‫اولین پلتفرم ‪ GitLab DevOps‬بسیار ساده‌تر بود و فقط شامل مراحل ایجاد و تأیید بود‪ .‬اینها ترکیبی از دو پروژه منبع باز‬
‫‪ GitLab Source Code Management‬و ‪ GitLab Continuous Integration‬را نشان می دهند‪ .‬تنها ترکیب این دو مرحله‬
‫ارزش قابل توجهی برای تیم های توسعه ایجاد کرد‪ ،‬زیرا این مراحل نیاز به تعامل با چندین ابزار جداگانه با الگین های مختلف‪ ،‬کنسول‬
‫های مدیریتی‪ ،‬نقاط ادغام و غیره داشت‪.‬‬
‫چه تیم ها از هر دو ابزار ‪ GitLab‬استفاده کند و چه از راه حل های مانند ‪( .GitHub‬کد منبع) و جنکینز (‪.)CI/CD‬‬
‫در ادامه تیم ‪ GitLab‬مسیر ساخت و ادغام ابزارها در یک پلتفرم واحد را ادامه داده است تا تمام مراحل چرخه عمر ‪ DevOps‬را‬
‫پوشش دهد‪ .‬در این مرحله‪ ،‬تیم ‪ GitLab‬چرخه حیات توسعه نرم‌افزار (‪ )Software Development Life Cycle -SDLC‬را‬
‫شناسایی می‌کند که آن‌ها را در محدوده در نظر می‌گیرند‪ .‬هر مرحله شامل مجموعه‌ای از ویژگی‌ها است تا آن را به یک عملکرد مؤثر و‬
‫کامل برای سازمان‌های ‪ DevSecOps‬تبدیل کند‪.‬‬
‫در زیر به بررسی چرخه ‪ devops‬در گیت لب میپردازیم ‪:‬‬
‫شکل ‪ : 4‬چرخه ‪ CI/CD‬در ‪GitLab‬‬

‫‪ : Plan‬گیت لب از فرآیند برنامه ریزی پروژه نرم افزاری در چندین متدولوژی (‪ Waterfall، Scrum، Kanban‬و غیره)‬
‫پشتیبانی می کند‪.‬‬
‫برای هر روش‪ ،‬آنها مصنوعات برنامه ریزی استاندارد‪ ،‬مانند نقاط عطف پروژه‪ ،‬وظایف را ارائه می دهند‪ .‬تیم ها می توانند به راحتی‬
‫کار پروژه را در یک رابط مشترک سازماندهی‪ ،‬تراز و پیگیری کنند‪ .‬این به تیم پروژه کمک می کند تا اطمینان حاصل کند که همه در‬
‫زمان مناسب روی کار درست کار می کنند‪ .‬اقالم کار پروژه و مصنوعات را می توان از طریق چرخه حیات تحویل از شروع تا تولید ردیابی‬
‫کرد‪.‬‬
‫‪ : Create‬این مرحله ای است که در آن کد ایجاد می شود‪ .‬تیم ها می توانند کد بنویسند‪ ،‬به اشتراک بگذارند‪ ،‬مشاهده و مدیریت‬
‫کنند‪ .‬این سیستم تعهدات‪ ،‬شاخه‌ها و ادغام‌ها را با ابزارهای مفید برای حل تعارضات و ساده‌سازی هماهنگی بین اعضای تیم پیگیری‬
‫می‌کند‪ .‬تیم ها می توانند در مورد تغییرات کد از طریق ابزارهای بررسی کد همکاری کنند‪.‬‬
‫‪ :Verify‬تمرکز مرحله ‪ Verify‬حفظ کیفیت کد با تسهیل تست و گزارش خودکار است‪ .‬برای پشتیبانی از این‪ GitLab ،‬یک خط‬
‫پایه از اتوماسیون برای ساخت‪ ،‬یکپارچه سازی و تأیید کد ارائه می دهد‪ .‬این تأییدها شامل تست واحد‪/‬عملکردی‪ ،‬تجزیه و تحلیل استاتیک‪،‬‬
‫تست امنیتی‪ ،‬تجزیه و تحلیل پویا و بررسی کیفیت کد است‪ Builds .‬با ‪ pipeline‬جدا می شوند‪ ،‬به طوری که آزمایش و ادغام به‬
‫صورت موازی انجام می شود‪.‬‬
‫‪ : Package‬پس از گذراندن تست ادغام‪ GitLab ،‬تیم ها را قادر می سازد تا برنامه های کاربردی با تمام وابستگی ها را در‬
‫آرتیفکت های ساخت برای استقرار بسته بندی کنند‪ .‬رجیستری بسته برای کار با مدیریت کنترل منبع ‪ GitLab‬و خطوط لوله ‪ CI/CD‬از‬
‫پیش پیکربندی شده است‪ .‬این مرحله همچنین بر زنجیره تامین نرم افزار نظارت می کند و یکپارچگی بسته های شخص ثالث را تضمین‬
‫می کند‪.‬‬
‫‪ : Secure‬این مرحله امنیت را در چرخه عمر توسعه الیه بندی می کند‪ .‬این پلتفرم تست امنیت برنامه استاتیک (‪ ،)SAST‬تست‬
‫امنیت برنامه پویا (‪ ،) DAST‬اسکن کانتینر و اسکن وابستگی را ارائه می دهد‪ .‬این توابع همگی کدهای پیکربندی منبع و زیرساخت را برای‬
‫آسیب‌پذیری‌های سطحی در برنامه‌ها بررسی می‌کنند‪ .‬این مرحله همچنین به رعایت مجوز برای بسته های شخص ثالث می پردازد‪.‬‬
‫‪ :Release‬زمانی که کد ساخته شد‪ ،‬تست شد و ایمن شد‪ ،‬آماده انتشار برای تولید است‪ GitLab .‬به انتشار و تحویل برنامه‌های‬
‫کاربردی در سراسر استقرار هزاران سرور کمک می‌کند‪ Continuous Delivery (CD) .‬در ‪ pipeline‬تعبیه شده است و از محیط‬
‫های مختلف مانند مرحله بندی‪ ،‬تولید و حتی قناری پشتیبانی می کند‪.‬‬
‫‪ : Configure‬گیت لب به تیم ها کمک می کند تا محیط های برنامه خود را مدیریت و پیکربندی کنند‪ .‬این شامل یکپارچگی‬
‫عمیق با ‪ Kubernetes‬و محافظت از جزئیات پیکربندی زیرساخت در برابر هکرها است‪ .‬رمز عبور و اطالعات ورود به سیستم برای محدود‬
‫کردن دسترسی برای کاربران تایید شده و فرایند های درست است ‪.‬‬
‫‪ : Monitor‬هدف از مرحله مانیتور کاهش شدت و دفعات حوادث تأثیرگذار بر خدمات است‪ GitLab .‬می تواند در صورت بروز‬
‫مشکالت به کاربران هشدار دهد‪ ،‬بررسی و تریاژ آنها را تسهیل کند و پاسخ را هماهنگ کند‪ .‬این پلتفرم اجازه می دهد تا نمودارهای اندازه‬
‫گیری از ابزارهای نظارت خارجی مانند ‪ Grafana‬و ‪ Prometheus‬در ردیابی حوادث تعبیه شود‪ .‬همچنین سیاست‌های برنامه‌ریزی و‬
‫‪ on-call‬را مدیریت می‌کند‪.‬‬
‫‪ : Protect‬گیت لب ابزارهایی را برای کشف و محافظت از نرم افزارهای تولیدی در برابر آسیب پذیری ها فراهم می کند‪ .‬این‬
‫می‌تواند محیط‌های بومی ابری‪ ،‬مانند کانتینرهای ‪ ،Docker‬را برای آسیب‌پذیری‌ها اسکن کند و حتی دانلود یک وصله را برای رفع هرگونه‬
‫مشکل مدیریت کند‪ .‬تیم‌های امنیتی همچنین می‌توانند سیاست‌هایی را برای پروژه‌های ‪ GitLab‬روی خوشه‌های ‪ Kubernetes‬اعمال‬
‫کنند‪ .‬اینها ممکن است شامل نیاز به تأییدیه برای ایجاد تغییر پیکربندی یا استفاده از یک بسته نرم افزاری جدید باشد‪.‬‬
‫‪ : Manage‬گیت لب نحوه عملکرد چرخه حیات تحویل نرم افزار را به طور کلی فراهم می کند‪ .‬تیم‌ها می‌توانند معیارهایی را‬
‫برای نظارت بر مراحل فرآیند تنظیم کنند تا سرعت کلی تحویل خود را بهینه کنند‪ .‬برای کمک به مدیران اجرایی در تعیین ارزش‬
‫تالش‌های توسعه و تحویل نرم‌افزار‪ GitLab ،‬ابزارهایی برای مدیریت جریان ارزش ارائه می‌کند‪.‬‬
‫برای تمام این مراحل ‪ ،SDLC‬پلت فرم را می توان در دو پیکربندی مستقر کرد‪ .‬اولین مورد ‪ Self-Managed‬است که در آن‬
‫مشتری بسته نرم افزاری را از ‪ GitLab‬دانلود می کند و خودش آن را در محیط ابری یا مرکز داده خصوصی خود مستقر می کند‪ .‬طبق‬
‫گفته ‪ ، GitLab‬اکثر این تاسیسات خود مدیریت شده در ابر عمومی در حال اجرا هستند‪ .‬این امر به مشتریان امکان کنترل کامل بر محیط‬
‫خود را می دهد و ممکن است برای مشتریانی که داده های حساس را مدیریت می کنند الزامی باشد‪.‬‬
‫پیکربندی دیگر استقرار استفاده از مدل ‪ SaaS‬است که در آن ‪ GitLab‬نمونه نرم افزاری مشتری را برای آنها میزبانی و مدیریت می‬
‫کند‪.‬‬

‫شکل ‪ : 5‬فعالیتهای چرخه ‪ CI/CD‬در ‪GitLab‬‬

‫موقعیت بازار و چشم انداز رقابتی‬ ‫‪-1-1‬‬


‫چشم انداز ‪ GitLab‬برای ادغام چرخه عمر توسعه نرم افزار کامل قانع کننده است‪ .‬روند ‪ DevSecOps‬در حال افزایش است و‬
‫شرکت ها شروع به درک مزایای ابزارسازی کرده اند که این تیم های سنتی متفاوت را به نزدیکی عملکردی نزدیک می کند‪.‬‬
‫رهبری ‪ GitLab‬در پیگیری چشم انداز محصول خود‪ ،‬یک فرصت کوتاه مدت ‪ 40‬میلیارد دالری در بازار می بیند‪ .‬اگر همه برنامه های‬
‫افزودنی را در امنیت‪ ،‬مشاهده پذیری و انطباق لحاظ کنیم‪ ،‬آن بازار آدرس پذیر احتماًال بسیار بزرگتر خواهد بود‪ .‬از منظر موقعیت یابی‬
‫رقابتی‪ ،‬آنها بر جایگزینی تمام راه حل های نقطه ای که در حال حاضر مراحل اولیه در ‪ SDLC‬را تشکیل می دهند متمرکز هستند‪.‬‬
‫رهبری ‪ GitLab‬را ‪ DevOps DIY‬می نامند‪.‬‬
‫ویژگی‌های کلیدی ‪GitLab‬‬ ‫‪-1-2‬‬
‫همانطور که گفتیم‪ GitLab ،‬در بخش‌های مختلفی از فرایند توسعه نرم‌افزار می‌تواند به تیم‌ها و توسعه‌دهنده‌ها کمک کند‪.‬‬
‫ویژگی‌های کلیدی ‪ GitLab‬که آن را از سایر نرم‌افزارها متمایز می‌کنند و به کاربران در حل مشکالت و طی کردن فرایندها کمک‬
‫می‌کنند‪ ،‬شامل موارد زیر هستند‪:‬‬
‫سرعت بخشیدن به فرایند تحول دیجیتال به کمک ‪DevSecOps‬‬ ‫‪‬‬
‫افزایش سرعت انتشار نرم‌افزار و تحویل آن به کاربر نهایی‬ ‫‪‬‬
‫افزایش هماهنگی بین اعضای تیم‬ ‫‪‬‬
‫امنیت باالتر‬ ‫‪‬‬
‫یک برنامه ‪ cloud-native‬است‬ ‫‪‬‬
‫امکان استفاده به صورت آنالین یا نصب آن روی سرور‌های محلی (‪)on-premises‬‬ ‫‪‬‬
‫امکانات مختلف برای مدیریت سورس کد‬ ‫‪‬‬
‫دارای ابزارهای ‪ CI/CD‬و امنیتی داخلی‪ ،‬بدون نیاز به نصب پالگین‬ ‫‪‬‬
‫مستندسازی پروژه با کمک صفحات ویکی (‪)Wiki‬‬ ‫‪‬‬
‫امکان ساخت صفحات استاتیک وب با کمک سورس کد‌های موجود در ریپوهای گیت‬ ‫‪‬‬
‫ادغام سریع و ساده با ابزارهای مدیریت پروژه مانند جیرا و …‬ ‫‪‬‬

‫مزایای ‪GitLab‬‬ ‫‪-1-3‬‬


‫همانند هر پلتفرم دیگری در حوزه کنترل نسخه و چرخه تولید محصول‪ ،‬گیت لب مزایای مخصوص خود را دارد که در ادامه برخی از‬
‫آن‌ها را بیان کرده‌ایم‪.‬‬
‫قابلیت همکاری بهینه با سایر اعضای تیم در تمامی مراحل پروژه‬ ‫‪‬‬
‫خودکاری‌سازی چرخه تولید ‪DevOps‬‬ ‫‪‬‬
‫قابلیت مدیریت و کنترل کامل مخازن و پروژه‌ها‬ ‫‪‬‬
‫قابلیت به اشتراک گذاشتن قسمتی از پروژه به جای کل آن‬ ‫‪‬‬
‫قابلیت استفاده از ابزارهای متنوع و نو به شکلی رایگان‬ ‫‪‬‬
‫ارائه سرویس‌های شخص ثالث و ‪API‬‬ ‫‪‬‬
‫ارائه مخازن عمومی و خصوصی به شکلی رایگان‬ ‫‪‬‬
‫قابلیت ادغام با سایر ابزارها‬ ‫‪‬‬
‫ارائه پشتیبانی و همراه داشتن جامعه فعال‬ ‫‪‬‬
‫امنیت باال‬ ‫‪‬‬

‫معایب ‪GitLab‬‬ ‫‪-1-4‬‬


‫در بخش فوق با این مسئله که مزایای گیت لب چیست آشنا شدیم اما گیت لب در کنار مزایای به خصوصی که دارد‪ ،‬معایبی را نیز‬
‫شامل می‌شود‪ .‬در ادامه به برخی از معایب این پلتفرم اشاره کرده‌ایم‪.‬‬
‫رابط کاربری گیت لب می‌تواند برای افراد مبتدی و کاربران جدید تا حد زیادی گیج‌کننده باشد‪.‬‬ ‫‪‬‬
‫باال بودن هزینه منابع برای نصب و راه‌اندازی سرویس گیت لب برای پروژه‌های بزرگ (نیاز به منابع سخت افزاری بیشتر )‬ ‫‪‬‬
‫نیاز به صرف زمان زیاد در پروسه انتقال از صفحه‌ای به صفحه دیگر‬ ‫‪‬‬
‫در دنیای برنامه‌نویسی‪ ،‬گیت لب از اهمیت بسیار باالیی برخوردار بوده و همواره به توسعه‌دهندگان نرم‌افزار کمک کرده تا فرایندها را‬
‫تسهیل دهند و پروسه‌های کاری را به شیوه‌ای بهتر پیش ببرند‪.‬‬
‫با توجه به مواردی که باالتر بررسی کردیم‪ ،‬گیت لب (‪ )gitlab.com‬برای شرکت‌ها و تیم‌هایی که با اصول دواپس پیش می‌روند‬
‫گزینه مناسبی است‪ .‬این ابزار می‌تواند نقش یک پلتفرم کامل را بازی کند که در آن تمام بخش‌ها و مراحل توسعه نرم‌افزار در کنار اصول و‬
‫فرهنگ دواپس در نظر گرفته شده‌اند‪ .‬برای پروژه‌هایی که امنیت حرف اول را در آن‌ها می‌زند و می‌خواهید فرایند ‪ DevSecOps‬را‬
‫پیاده‌سازی کنید‪ ،‬استفاده از گیت‌لب می‌تواند کمک شایانی به هماهنگی بین اعضای تیم و صرفه‌جویی در وقت و هزینه شما داشته باشد‪.‬‬

‫بررسی قابلیتهای ‪Azure DevOPS‬‬ ‫‪-2‬‬


‫‪ Microsoft‬آژور دواپس یک پلت فرم جامع برای مدیریت پروژه های توسعه نرم افزار است‪ .‬آژور دواپس تیم‌های توسعه و عملیات‬

‫را قادر می‌سازد تا به طور یکپارچه با هم کار کنند و مجموعه‌ای از ابزارها و خدماتی را ارائه می‌دهد که برای هر مرحله از چرخه عمر توسعه‬
‫نرم افزار ارائه می‌شود‪.‬‬
‫آژور دواپس (که اغلب توسط کاربران به اختصار ‪ ADO‬نامیده می‌شود) کل فرآیند را از برنامه‌ریزی و کدنویسی گرفته تا آزمایش و‬
‫استقرار ساده می‌کند و تضمین می‌کند که پروژه‌های نرم‌افزاری به موقع و بدون افت کیفیت ارائه می‌شوند‪.‬‬
‫شکل ‪ : 6‬چرخه ‪ CI/CD‬در ‪Azure DevOps‬‬

‫نمای کلی ‪Azure DevOps‬‬ ‫‪-2-1‬‬


‫آژور دواپس مجموعه ای جامع از خدمات ارائه شده توسط مایکروسافت برای مدیریت پروژه های توسعه نرم افزار است و راه حل های‬
‫قابل اعتماد‪ ،‬در دسترس و انعطاف پذیری را ارائه می دهد که اتوماسیون را برای تحویل نرم افزار با کیفیت باال فراهم می کند‪.‬‬
‫مزایای ‪ Azure DevOps‬نسبت به سایر پلتفرم ها شامل توانایی استفاده از ابزارهای موجود و بهینه سازی هزینه ها با مدل ‪SaaS‬‬
‫میباشد‪.‬‬
‫آژور دواپس که از تکامل سیستم تیم ویژوال استودیو متولد شده است‪ ،‬رشد کرده تا مجموعه ای جامع از خدمات متناسب با هر مرحله‬
‫از چرخه عمر توسعه را ارائه دهد‪.‬‬
‫این سرویس ها که مجموعًا به عنوان خدمات ‪ Azure DevOps‬شناخته می شوند عبارتند از‪:‬‬

‫‪Azure Repos‬‬ ‫‪‬‬

‫‪Azure Pipelines‬‬ ‫‪‬‬


‫‪Azure Artifacts‬‬ ‫‪‬‬
‫‪Azure Boards‬‬ ‫‪‬‬
‫‪Azure Test Plans‬‬ ‫‪‬‬
‫و…‬ ‫‪‬‬
‫همه این سرویس ها با هم یک مکان مرکزی برای مدیریت کل فرآیند توسعه نرم افزار را فراهم می کنند‪.‬‬

‫خدمات ‪Azure DevOps‬‬ ‫‪-2-2‬‬

‫شکل ‪ : 7‬خدمات ‪Azure DevOps‬‬

‫‪ Azure Repos‬سرویسی است که ابزارهایی برای کنترل نسخه ارائه می کند‪ .‬این سرویس به ردیابی و مدیریت تغییرات ایجاد شده‬
‫در کد در طول زمان کمک می کند‪ .‬با ‪ ،Azure Repos‬تیم‌ها می‌توانند کد را در یک مخزن مشترک ذخیره کرده و روی آن کار کنند‪،‬‬
‫تغییرات را از چندین شعبه ردیابی و ادغام کنند‪ ،‬و از درخواست‌های مشترک و مدیریت فایل پیشرفته پشتیبانی کنند‪.‬‬
‫سرویس مهم دیگر ‪ Azure Pipelines‬است‪ ،‬یک ابزار ‪( CI/CD‬ادغام پیوسته‪/‬استقرار مستمر) که ساخت‪ ،‬آزمایش و استقرار را به‬
‫یک قرایند خودکار تبدیل می کند‪ Azure Pipelines .‬که با هر زبان برنامه نویسی یا پلتفرمی سازگار است‪ ،‬می تواند در چندین محیط‬
‫از جمله ‪ ،Kubernetes‬توابع بدون سرور و سایر ارائه دهندگان ابر مانند ‪ AWS‬یا ‪ GCP‬مستقر شود‪ Azure Pipelines .‬همچنین‬
‫افزونه هایی را برای بهبود بیشتر خطوط لوله شما ارائه می دهد‪.‬‬
‫از سوی دیگر‪ Azure Boards ،‬یک مرکز مدیریت پروژه در ‪ Azure DevOps‬است که به تیم ها امکان می دهد پروژه های خود‬
‫را برنامه ریزی و پیگیری کنند‪ .‬ویژگی هایی مانند آیتم های کاری‪ ،Kanban boards ،‬بک الگ ها‪ ،‬داشبوردها و گزارش های سفارشی را‬
‫ارائه می دهد و انعطاف پذیری و بینش را برای نظارت بر پیشرفت پروژه ارائه می دهد‪.‬‬
‫در نهایت‪ Azure Test Plans ،‬سرویسی است که تست دستی و اکتشافی‪ ،‬ردیابی بازخورد و تست واحد و عملکرد را تسهیل‬
‫می‌کند‪ .‬همچنین از آزمایش مداوم پشتیبانی می‌کند و اطمینان حاصل می‌کند که پروژه‌های نرم‌افزاری شما کامًال آزمایش شده و آماده‬
‫استقرار هستند‪.‬‬

‫مزایای استفاده از ‪Azure DevOps‬‬ ‫‪-2-3‬‬


‫قابلیت اطمینان و انعطاف پذیری‬ ‫‪‬‬
‫انعطاف پذیری به کاربران اجازه می دهد از ابزارهای موجود استفاده کنند و با انواع ابزارهای شخص ثالث مانند ‪Ansible، Chef،‬‬
‫‪ Puppet‬و ‪ Terraform‬ادغام شوند‪.‬‬
‫اتوماسیون‬ ‫‪‬‬
‫اتوماسیون یکی دیگر از مزیت های کلیدی ‪ Azure DevOps‬است‪ ،‬زیرا فرآیندهای توسعه را در کل چرخه عمر برنامه ساده و تسریع‬
‫می کند‪.‬‬
‫همکاری و کارایی‬ ‫‪‬‬
‫‪ Azure DevOps‬با ارائه خدمات توسعه‌دهنده‪ ،‬ارتباطات و همکاری بین بخش های مختلف را تسهیل می‌کند و تضمین می‌کند که‬
‫تیم‌ها می‌توانند به طور یکپارچه با هم کار کنند‪ .‬ادغام با ابزارهای محبوبی مانند ‪ GitHub، Jenkins‬و ‪ Slack‬همکاری و کارایی را بیشتر‬
‫می کند‪.‬‬
‫آژور داوپس همچنین تیم‌ها را قادر می‌سازد تا تغییرات را در چندین پروژه با کمک داشبورد نظارت کنند و هشدارها و اعالن‌هایی را در‬
‫صورت رخ دادن تغییرات دریافت کنند‪ .‬این سطح از دید و کنترل به سازمان‌ها اجازه می‌دهد تا از پروژه‌های توسعه نرم‌افزار خود اطمینان‬
‫حاصل کنند که به موقع تحویل داده می‌شوند و استانداردهای کیفی مورد نیاز را برآورده می‌کنند‪.‬‬

‫ادغام با ابزارهای شخص ثالث‬ ‫‪-2-4‬‬


‫با ‪ ، Azure DevOps‬سازمان ها می توانند به راحتی با انواع ابزارها و سرویس های منبع باز و شخص ثالث محبوب در دواپس‬
‫یکپارچه شوند‪ .‬این انعطاف‌پذیری به تیم‌ها اجازه می‌دهد تا مجموعه‌های ابزار ‪ DevOps‬خود را برای برآورده کردن نیازهای خاص سازمان‬
‫و پروژه‌های توسعه خود گسترش داده و تنظیم کنند‪.‬‬
‫آژور دواپس با ادغام با ابزارهایی که تیم ها قبًال با آنها آشنا هستند‪ ،‬نه تنها فرآیندها را ساده می کند‪ ،‬بلکه منحنی یادگیری مرتبط با‬
‫استفاده از ابزارهای جدید را نیز کاهش می دهد‪ .‬این ادغام یکپارچه عامل اصلی در محبوبیت و موفقیت گسترده این پلتفرم است‪.‬‬
‫بررسی قابلیت های ‪Jenkins‬‬ ‫‪-3‬‬
‫شکل ‪ : 8‬ابزار ‪Jenkins‬‬

‫‪ Jenkins‬یک ابزار متن‌باز برای اتوماسیون وظایف مختلف در فرآیند توسعه نرم‌افزار است که به خصوص برای پیاده‌سازی پیوسته (‬
‫‪ )CI‬و تحویل پیوسته (‪ )CD‬استفاده می‌شود‪ .‬این ابزار در ابتدا توسط ‪ Kohsuke Kawaguchi‬توسعه داده شد و اکنون توسط‬
‫جامعه‌ای گسترده از توسعه‌دهندگان و شرکت‌ها پشتیبانی می‌شود‪.‬‬

‫ویژگی‌های ‪Jenkins‬‬ ‫‪-3-1‬‬

‫متن‌باز و رایگان‪ Jenkins :‬به صورت متن‌باز ارائه شده و می‌توانید بدون هزینه از آن استفاده کنید و همچنین به کد منبع آن‬
‫دسترسی داشته باشید‪.‬‬
‫پالگین‌ها‪ :‬یکی از برجسته‌ترین ویژگی‌های ‪ ،Jenkins‬وجود بیش از ‪ 1700‬پالگین مختلف است که قابلیت‌های آن را بسیار گسترش‬
‫می‌دهد‪ .‬این پالگین‌ها به شما اجازه می‌دهند ‪ Jenkins‬را به ابزارها و فناوری‌های مختلف متصل کنید‪.‬‬
‫پشتیبانی از انواع پروژه‌ها‪ Jenkins :‬از انواع مختلف پروژه‌ها مانند ‪ Java، .NET، PHP، Node.js‬و بسیاری دیگر پشتیبانی‬
‫می‌کند‪.‬‬
‫پیکربندی آسان‪ Jenkins :‬دارای رابط کاربری گرافیکی است که پیکربندی و مدیریت وظایف را آسان می‌کند‪ .‬همچنین امکان‬
‫پیکربندی با استفاده از فایل‌های ‪ YAML‬و ‪ Groovy‬نیز وجود دارد‪.‬‬
‫مقیاس‌پذیری‪ Jenkins :‬به راحتی می‌تواند با استفاده از "نودها" (‪ )agents‬به صورت توزیع شده اجرا شود‪ ،‬که این ویژگی امکان‬
‫توزیع بار کاری را فراهم می‌کند و به بهبود عملکرد و مقیاس‌پذیری کمک می‌کند‪.‬‬
‫یکپارچه‌سازی با ابزارهای کنترل نسخه‪ Jenkins :‬با اکثر ابزارهای کنترل نسخه مانند ‪ Git، SVN، Mercurial‬و دیگر ابزارها به‬
‫خوبی یکپارچه می‌شود‪.‬‬
‫پشتیبانی از ساختارهای مختلف اتوماسیون‪ Jenkins :‬می‌تواند فرآیندهای پیچیده ‪ CI/CD‬را با استفاده از فایل‌های پیکربندی‬
‫‪ Pipeline‬مدیریت کند که به صورت کد قابل تعریف و مدیریت است‪.‬‬
‫نظارت و گزارش‌دهی‪ Jenkins :‬دارای قابلیت‌های قدرتمندی برای نظارت بر فرآیندها و تولید گزارش‌های دقیق است که به‬
‫توسعه‌دهندگان کمک می‌کند تا مشکالت را سریع‌تر شناسایی و برطرف کنند‪.‬‬
‫امنیت‪ Jenkins :‬از امکانات امنیتی مختلفی مانند کنترل دسترسی مبتنی بر نقش‌ها‪ ،‬یکپارچه‌سازی با ‪ ،LDAP‬و دیگر پروتکل‌های‬
‫امنیتی پشتیبانی می‌کند‪.‬‬
‫توزیع شدگی‪ :‬جنکینز می تواند به راحتی کار را در چندین ماشین توزیع کند‪.‬‬
‫نحوه استفاده از ‪Jenkins‬‬ ‫‪-3-2‬‬
‫نصب‪ Jenkins :‬را می‌توان بر روی سیستم‌عامل‌های مختلف مانند ویندوز‪ ،‬لینوکس و مک نصب کرد‪ .‬همچنین نسخه ‪ Docker‬آن‬
‫نیز موجود است که امکان راه‌اندازی سریع را فراهم می‌کند‪.‬‬
‫راه‌اندازی اولیه‪ :‬پس از نصب‪ ،‬از طریق رابط کاربری تحت وب می‌توانید تنظیمات اولیه را انجام دهید و پالگین‌های مورد نیاز را نصب‬
‫کنید‪.‬‬
‫ایجاد پروژه‪ :‬می‌توانید پروژه‌های مختلف ایجاد کنید و برای هر پروژه مراحل مختلف ساخت‪ ،‬تست و انتشار را تعریف کنید‪.‬‬
‫یکپارچه‌سازی با ‪ :Git‬برای پروژه‌های خود می‌توانید مخزن‌های ‪ Git‬را تعریف کنید تا ‪ Jenkins‬به صورت خودکار کدهای جدید را‬
‫دریافت و فرآیندهای تعریف شده را اجرا کند‪.‬‬
‫استفاده از ‪ :Pipeline‬با استفاده از قابلیت ‪ Pipeline‬می‌توانید مراحل مختلف ‪ CI/CD‬را به صورت کد تعریف و مدیریت کنید‪.‬‬
‫معماری ‪ :Jenkins‬آشنایی با اجزای تشکیل دهنده‬ ‫‪-3-3‬‬

‫‪ Jenkins‬یک سیستم پیچیده با اجزای مختلفی است که با هم کار می‌کنند تا فرآیندهای ساخت و تحویل نرم‌افزار را خودکار کنند‪.‬‬
‫در این قسمت‪ ،‬خواهیم فهمید اجزای اصلی جنکینز چیست و چه نقشی دارند‪.‬‬
‫‪Jenkins Controller‬‬ ‫‪‬‬
‫کنترلر جنکینز مغز متفکر سیستم است‪ .‬این قسمت وظایف مهمی از جمله مدیریت ‪Agent‬ها و ارتباطات آنها‪ ،‬اجرای دستورات‪ ،‬لود‬
‫کردن پالگین‌ها‪ ،‬نگهداری تنظیمات و هماهنگ کردن جریان پروژه را برعهده دارد‪.‬‬
‫‪Jenkins Agent‬‬ ‫‪‬‬
‫در پاسخ به اینکه منظور از ‪ Agent‬در جنکینز چیست‪ ،‬باید بگوییم این جزء نیروی کار جنکینز محسوب می‌شوند‪ Agent .‬وظیفه‬
‫اجرای کارهایی را برعهده دارد که توسط کنترلر تعیین می‌شود‪‌Agent .‬ها را می‌توانید روی سرورهای فیزیکی‪ ،‬ماشین‌های مجازی‪ ،‬فضای‬
‫ابری یا حتی کانتینرها اجرا کنید‪ .‬با استفاده از چندین ‪ Agent‬می‌توان بار کاری را توزیع کرد‪ ،‬کارایی را بهبود داد و یک محیط ایمن مجزا‬
‫از کنترلر را ایجاد کرد‪.‬‬
‫‪Jenkins Node‬‬ ‫‪‬‬
‫‪ Node‬یک اصطالح کلی برای ‪‌Agent‬ها و کنترلرها است‪ .‬به هر ماشینی که روی آن بتوان پروژ ‌ه و ‪ Pipeline‬ساخت‪Node ،‬‬
‫می‌گویند‪ .‬جنکینز به‌طور خودکار وضعیت همه ‪‌Node‬های متصل را نظارت می‌کند و درصورت کاهش عملکرد آن‌ها را غیرفعال می‌کند‪.‬‬
‫‪Jenkins Project‬‬ ‫‪‬‬
‫پروژه جنکینز که قبال به‌عنوان ‪ Job‬شناخته می‌شد‪ ،‬فرآیندی خودکار است که توسط کاربر تعریف می‌شود‪ .‬در پاسخ به اینکه نقش‬
‫پروژه در جنکینز چیست‪ ،‬باید بگوییم این فرآیند شامل کارهای مختلفی مانند ساخت‪ ،‬آزمایش و استقرار نرم‌افزار است‪ .‬جنکینز به طور‬
‫پیش‌فرض تعدادی پروژه از پیش تعریف شده را ارائه می‌دهد‪ .‬بااین‌حال شما می‌توانید با استفاده از افزونه‌ها‪ ،‬پروژه‌های سفارشی خودتان را‬
‫ایجاد کنید‪.‬‬
‫‪Jenkins Plugins‬‬ ‫‪‬‬
‫ی جدیدی به آن اضافه می‌کند که به‌صورت پیش‌فرض وجود ندارد‪ .‬شما می‌توانید افزونه‌ها را از‬
‫نصب افزونه‌ها روی جنکینز ویژگ ‌‬
‫داشبورد جنکینز نصب و به‌روز کنید‪.‬‬
‫‪Jenkins Pipeline‬‬ ‫‪‬‬
‫‪ Pipeline‬جنکینز یک مدل سفارشی برای ساخت و تحویل نرم‌افزار است‪ .‬می‌توانید ‪ Pipeline‬را به‌طور مستقیم و بدون نیاز به کد‬
‫در رابط کاربری ایجاد کنید یا یک «‪ »Jenkinsfile‬ایجاد نمایید که آن را به صورت کد نشان می‌دهد‪‌Jenkinsfile .‬ها از یک فرمت‬
‫مبتنی بر متن سازگار با ‪ Groovy‬برای تعریف فرآیندهای ‪ Pipeline‬استفاده می‌کنند‪ .‬اجازه دهید نگاهی دقیق‌تر به این جزء مهم‬
‫جنکینز بیندازیم‪:‬‬
‫‪Jenkins PipeLine‬‬ ‫‪-3-4‬‬
‫پاپ الین (‪ )Pipeline‬مجموعه‌ای از دستورات خودکار است که سرور جنکینز برای انجام وظایف مورد نیاز شما بااستفاده از افزونه‌های‬
‫جنکینز در فرآیند ‪ CI/CD‬طی می‌کند‪.‬‬
‫سینتکس ‪( DSL‬مخفف ‪ )Domain-Specific Language‬پاپ الین مجموعه‌ای ابزار برای مدل‌سازی پاپ الین به‌صورت کد‬
‫است‪ .‬هر وظیفه در این قسمِت جنکینز به‌طریقی به یک یا چند اتفاق وابسته است‪.‬‬
‫‪ Pipeline‬جنکینز یک فناوری قدرتمند است که شامل مجموعه‌ای از ابزارها برای میزبانی‪ ،‬نظارت‪ ،‬کامپایل و تست و تغییر کد مانند‬

‫موارد زیر است‪:‬‬


‫سرور یکپارچه‌سازی مداوم (‪ Bamboo ،Jenkins ،TeamCity ،CruiseControl‬و غیره)‬ ‫‪‬‬
‫نرم افزار کنترل منبع (مثًال ‪ SVN ،CVS ،Mercurial ،GIT ،ClearCase ،Perforce‬و غیره)‬ ‫‪‬‬
‫ابزارهای بیلد (‪ Make ،Ant ،Ivy ،Maven ،Gradle‬و غیره)‬ ‫‪‬‬
‫فریم‌ورک تست خودکار (‪ Appium ،Selenium ،UFT ،TestComplete‬و غیره)‬ ‫‪‬‬
‫این عضو موثر‪ ،‬اجرا کننده یک سری دستورات متوالی و مداوم توسط کاربر است‪ .‬برای این کار‪ ،‬چندین افزونه در مراحل مختلف‪ ،‬از‬
‫کنترل نسخه تا تحویل به کاربر‪ ،‬کمک می‌کند که فرایندی ‪ ۳‬مرحله‌ای است‪:‬‬
‫ساخت خودکار‬ ‫‪‬‬
‫آزمایش چند مرحله‌ای‬ ‫‪‬‬
‫رویه‌های استقرار‬ ‫‪‬‬
‫بررسی قابلیتهای ‪Bamboo‬‬ ‫‪-4‬‬

‫شکل ‪ : 9‬ابزار ‪Bamboo‬‬

‫‪ ،Bamboo‬یک ابزار سرور ‪( CI/CD‬ادغام مداوم‪/‬تحویل مداوم) توسعه‌یافته توسط ‪ Atlassian‬است که برای خودکارسازی ساخت‪،‬‬
‫تست‪ ،‬و انتشار کد نرم‌افزار به کار می‌رود‪ .‬این ابزار به طور خاص با سایر محصوالت ‪ Atlassian‬مثل ‪ JIRA‬و ‪ Bitbucket‬ادغام خوبی‬
‫دارد‪ .‬در ادامه به برخی از امکانات و ویژگی‌های ‪ Bamboo‬اشاره می‌کنیم‪:‬‬
‫ویژگی‌ها و امکانات ‪:Bamboo‬‬ ‫‪-4-1‬‬
‫ادغام با ابزارهای ‪: Atlassia‬‬ ‫‪‬‬
‫‪ : JIRA-‬به شما امکان می‌دهد که کارها و مشکالت نرم‌افزاری خود را پیگیری کنید و وضعیت آنها را به طور خودکار به روز کنید‪.‬‬
‫‪ : Bitbucket -‬امکان ادغام با مخازن ‪ Git‬در ‪ Bitbucket‬را فراهم می‌کند تا بتوانید به راحتی کد خود را مدیریت کنید و از‬
‫قابلیت‌های کشیدن درخواست (‪ )pull request‬استفاده کنید‪.‬‬

‫پشتیبانی از مخازن مختلف نسخه‌بندی ‪:‬‬ ‫‪‬‬


‫‪ -‬پشتیبانی از ‪ ،Git، Mercurial، Subversion‬و ‪ Perforce‬برای انعطاف بیشتر در مدیریت کد منبع‪.‬‬

‫پایپالین‌های انعطاف‌پذیر‬ ‫‪‬‬


‫‪ -‬امکان تعریف پایپالین‌های پیچیده با استفاده از رابط گرافیکی برای ایجاد‪ ،‬مدیریت‪ ،‬و اجرا کردن مراحل مختلف ساخت‪ ،‬تست‪ ،‬و‬
‫انتشار‪.‬‬

‫آزمایش‌های موازی‬ ‫‪‬‬


‫‪ -‬امکان اجرای آزمایش‌های موازی برای کاهش زمان تست و افزایش کارایی‪.‬‬

‫ساخت‌ها و استقرارهای قابل تکرار ‪:‬‬ ‫‪‬‬


‫‪ -‬امکان تعریف برنامه‌های ساخت و استقرار تکراری برای اطمینان از اینکه همه محیط‌ها همیشه در حالت صحیح خود هستند‪.‬‬

‫پشتیبانی از ‪ Docker‬و ‪: Kubernetes‬‬ ‫‪‬‬

‫‪ -‬امکان ادغام با ‪ Docker‬برای ایجاد و مدیریت کانتینرها و ‪ Kubernetes‬برای مدیریت ارکستراسیون کانتینرها‪.‬‬

‫مدیریت پیکربندی و متغیرها ‪:‬‬ ‫‪‬‬


‫‪ -‬امکان مدیریت متغیرها و پیکربندی‌های مختلف برای هر پروژه و برنامه‪.‬‬
‫کنترل دسترسی ‪:‬‬ ‫‪‬‬
‫‪ -‬امکان تعریف سطوح دسترسی مختلف برای کاربران و تیم‌ها برای حفظ امنیت و کنترل بهتر‪.‬‬

‫گزارش‌ها و تحلیل‌ها ‪:‬‬ ‫‪‬‬


‫‪ -‬ارائه گزارش‌ها و تحلیل‌های مختلف از ساخت‌ها و تست‌ها برای کمک به شناسایی مشکالت و بهبود فرآیند توسعه‪.‬‬

‫بسط‌پذیری ‪:‬‬ ‫‪‬‬


‫‪ -‬پشتیبانی از پالگین‌ها و افزونه‌ها برای گسترش قابلیت‌های ‪ Bamboo‬و سفارشی‌سازی آن برای نیازهای خاص‪.‬‬

‫مزایا ‪: Bamboo‬‬ ‫‪-4-2‬‬


‫ادغام عالی با ابزارهای ‪ : Atlassian‬به ویژه برای سازمان‌هایی که از مجموعه ابزارهای ‪ Atlassian‬استفاده می‌کنند‪.‬‬ ‫‪‬‬
‫رابط کاربری ساده و گرافیکی‪ :‬که کار با آن را برای کاربران آسان‌تر می‌کند‪.‬‬ ‫‪‬‬
‫پشتیبانی از طیف وسیعی از تکنولوژی‌ها و ابزارهای توسعه ‪ :‬برای انعطاف بیشتر در مدیریت پروژه‌های مختلف‪.‬‬ ‫‪‬‬

‫معایب ‪: Bamboo‬‬ ‫‪-4-3‬‬


‫هزینه‌بر بودن ‪ :‬برخالف برخی از ابزارهای رایگان مانند ‪ ،Jenkins‬بامبو نیاز به خرید الیسنس دارد‪.‬‬ ‫‪‬‬
‫نسبت به ابزارهای متن‌باز کمتر توسعه‌دهندگان مستقل دارد‪ :‬در نتیجه ممکن است پالگین‌ها و افزونه‌های کمتری نسبت به‬ ‫‪‬‬
‫ابزارهایی مثل ‪ Jenkins‬داشته باشد‪.‬‬
‫ویژگی‌های ‪Travis CI‬‬ ‫‪-5‬‬

‫‪ Travis CI‬یک سرویس ‪( CI/CD‬ادغام مداوم‪/‬تحویل مداوم) مبتنی بر ابر است که به توسعه‌دهندگان کمک می‌کند تا به طور خودکار‬
‫کد خود را پس از هر تغییر‪ ،‬تست و استقرار دهند‪ .‬این ابزار برای پروژه‌های منبع باز رایگان است و به خوبی با ‪ GitHub‬ادغام می‌شود‪ .‬در‬
‫ادامه به برخی از ویژگی‌ها و امکانات ‪ Travis CI‬می‌پردازیم‪:‬‬

‫ویژگی‌ها و امکانات ‪:Travis CI‬‬ ‫‪-5-1‬‬


‫ادغام آسان با ‪GitHub‬‬ ‫‪‬‬
‫‪ Travis CI -‬به صورت بومی با ‪ GitHub‬ادغام می‌شود و می‌تواند به طور خودکار به مخازن ‪ GitHub‬متصل شود و پس از هر‬
‫‪ push‬یا ‪ ،pull request‬پایپالین‌ها را اجرا کند‪.‬‬

‫پیکربندی ساده با فایل ‪YAML‬‬ ‫‪‬‬


‫‪ -‬تنظیمات و پیکربندی‌های ‪ Travis CI‬از طریق یک فایل `‪ `travis.yml.‬انجام می‌شود که در ریشه مخزن قرار می‌گیرد‪ .‬این‬
‫فایل به شما اجازه می‌دهد تا مراحل ساخت‪ ،‬تست و استقرار را تعریف کنید‪.‬‬

‫پشتیبانی از زبان‌های برنامه‌نویسی مختلف‬ ‫‪‬‬


‫‪ Travis CI -‬از طیف گسترده‌ای از زبان‌های برنامه‌نویسی پشتیبانی می‌کند‪ ،‬از جمله ‪JavaScript, Ruby, Python, PHP,‬‬
‫‪ ,Go, Rust‬و بسیاری دیگر‪.‬‬

‫محیط‌های ساخت مختلف‬ ‫‪‬‬


‫‪ Travis CI -‬از محیط‌های ساخت مختلف از جمله ‪ ,Linux, macOS‬و ‪ Windows‬پشتیبانی می‌کند‪ ،‬بنابراین می‌توانید‬
‫برنامه‌های خود را در محیط‌های مختلف تست کنید‪.‬‬

‫ساخت‌های موازی‬ ‫‪‬‬


‫‪ -‬امکان اجرای ساخت‌های موازی برای افزایش کارایی و کاهش زمان ساخت‪.‬‬

‫پشتیبانی از ‪Docker‬‬ ‫‪‬‬


‫‪ Travis CI -‬از ‪ Docker‬پشتیبانی می‌کند و به شما اجازه می‌دهد تا محیط‌های سفارشی خود را با استفاده از ‪ Docker‬تعریف‬
‫و مدیریت کنید‪.‬‬

‫ابزارهای ادغام و استقرار‬ ‫‪‬‬


‫‪ Travis CI -‬از ادغام و استقرار خودکار به خدمات مختلف مانند ‪ ,AWS, Heroku, Firebase‬و بسیاری دیگر پشتیبانی‬
‫می‌کند‪ .‬شما می‌توانید به طور خودکار برنامه‌های خود را پس از گذراندن تست‌ها استقرار دهید‪.‬‬

‫گزارش‌دهی و اعالن‌ها‬ ‫‪‬‬


‫‪ Travis CI -‬می‌تواند نتایج ساخت و تست را به ایمیل‪ ،Slack ،‬و سایر ابزارهای ارتباطی ارسال کند‪ ،‬بنابراین شما همیشه در‬
‫جریان وضعیت پروژه خود خواهید بود‪.‬‬

‫پشتیبانی از کشینگ‬ ‫‪‬‬


‫‪ Travis CI -‬از کشینگ پشتیبانی می‌کند که می‌تواند زمان ساخت را با ذخیره‌سازی و استفاده مجدد از وابستگی‌های ثابت کاهش‬
‫دهد‪.‬‬

‫رایگان برای پروژه‌های منبع باز‬ ‫‪‬‬


‫‪ Travis CI -‬برای پروژه‌های منبع باز رایگان است که آن را به گزینه‌ای جذاب برای توسعه‌دهندگان منبع باز تبدیل می‌کند‪.‬‬
‫مزایا ‪Travis CI‬‬ ‫‪-5-2‬‬
‫پیکربندی آسان ‪ :‬با استفاده از فایل ‪ ،YAML‬پیکربندی و تنظیمات به راحتی قابل انجام است‪.‬‬ ‫‪‬‬
‫ادغام قوی با ‪ : GitHub‬برای کاربرانی که از ‪ GitHub‬استفاده می‌کنند‪ ،‬ادغام بدون مشکل و مستقیم انجام می‌شود‪.‬‬ ‫‪‬‬
‫پشتیبانی از ساخت‌های موازی و محیط‌های مختلف ‪ :‬برای افزایش کارایی و اطمینان از سازگاری با محیط‌های مختلف‪.‬‬ ‫‪‬‬

‫معایب ‪Travis CI‬‬ ‫‪-5-3‬‬


‫محدودیت‌های نسخه رایگان‪ :‬اگرچه برای پروژه‌های منبع باز رایگان است‪ ،‬اما نسخه رایگان ممکن است محدودیت‌هایی برای‬ ‫‪‬‬
‫پروژه‌های خصوصی داشته باشد‪.‬‬
‫وابستگی به ابر ‪ :‬به دلیل این که ‪ Travis CI‬یک سرویس مبتنی بر ابر است‪ ،‬نیاز به اتصال اینترنت دارد و برای استفاده‬ ‫‪‬‬
‫آفالین مناسب نیست‪.‬‬
‫پشتیبانی محدود از ابزارهای غیر ‪ :GitHub‬اگرچه ‪ Travis CI‬به خوبی با ‪ GitHub‬ادغام می‌شود‪ ،‬اما پشتیبانی‬ ‫‪‬‬
‫محدودی از سایر ابزارهای مدیریت نسخه دارد ‪.‬‬
‫بررسی قابلیتهای ‪Circle CI‬‬ ‫‪-6‬‬

‫‪ CircleCI‬یک سرویس ‪( CI/CD‬ادغام مداوم‪/‬تحویل مداوم) قدرتمند است که به توسعه‌دهندگان کمک می‌کند تا فرآیندهای‬
‫ساخت‪ ،‬تست و استقرار کد خود را به صورت خودکار انجام دهند‪ CircleCI .‬از محبوبیت زیادی در بین توسعه‌دهندگان برخوردار است و‬
‫به دلیل امکانات گسترده و انعطاف‌پذیری باال شناخته شده است‪ .‬در ادامه به بررسی ویژگی‌ها و امکانات ‪ CircleCI‬می‌پردازیم‪:‬‬

‫ویژگی‌های ‪CircleCI‬‬ ‫‪-6-1‬‬


‫ادغام با مخازن گیت‬ ‫‪‬‬
‫‪ CircleCI -‬به طور کامل با ‪ GitHub‬و ‪ Bitbucket‬ادغام می‌شود و می‌تواند به صورت خودکار پس از هر تغییر در مخزن‪،‬‬
‫پایپالین‌ها را اجرا کند‪.‬‬

‫پیکربندی با فایل ‪YAML‬‬ ‫‪‬‬


‫‪ -‬تنظیمات و پیکربندی‌های ‪ CircleCI‬از طریق فایل `‪ `circleci/config.yml.‬انجام می‌شود که در ریشه مخزن قرار می‌گیرد‪.‬‬
‫این فایل به شما اجازه می‌دهد تا مراحل مختلف ساخت‪ ،‬تست و استقرار را تعریف کنید‪.‬‬

‫پشتیبانی از زبان‌های برنامه‌نویسی مختلف‬ ‫‪‬‬


‫‪ CircleCI -‬از طیف گسترده‌ای از زبان‌های برنامه‌نویسی از جمله ‪ ,JavaScript, Ruby, Python, PHP, Java, Go‬و غیره‬
‫پشتیبانی می‌کند‪.‬‬

‫پشتیبانی از محیط‌های مختلف‬ ‫‪‬‬


‫‪ CircleCI -‬از محیط‌های ساخت متنوع از جمله ‪ ,Linux, macOS‬و ‪ Windows‬پشتیبانی می‌کند‪ .‬همچنین از ‪Docker‬‬
‫برای ایجاد محیط‌های ساخت سفارشی پشتیبانی می‌کند‪.‬‬

‫ساخت‌های موازی و همزمان‬ ‫‪‬‬


‫‪ CircleCI -‬امکان اجرای ساخت‌های موازی و کانکارنت را فراهم می‌کند که می‌تواند زمان ساخت و تست را به طور قابل توجهی‬
‫کاهش دهد‪.‬‬

‫کشینگ و باز استفاده از وابستگی‌ها‬ ‫‪‬‬


‫‪ CircleCI -‬از کشینگ برای ذخیره وابستگی‌ها و نتایج ساخت قبلی استفاده می‌کند که می‌تواند زمان ساخت را کاهش دهد‪.‬‬

‫ادغام و استقرار مداوم‬ ‫‪‬‬


‫‪ CircleCI -‬از ابزارها و سرویس‌های مختلف استقرار مانند ‪ ,AWS, Google Cloud, Heroku, Docker‬و ‪Kubernetes‬‬
‫پشتیبانی می‌کند و می‌تواند به صورت خودکار برنامه‌ها را پس از گذراندن تست‌ها مستقر کند‪.‬‬

‫پشتیبانی از ‪Workflows‬‬ ‫‪‬‬


‫‪ CircleCI -‬امکان تعریف و مدیریت جریان‌های کاری (‪ )workflows‬پیچیده را فراهم می‌کند که می‌تواند شامل مراحل مختلفی‬
‫از ساخت‪ ،‬تست و استقرار باشد‪.‬‬

‫داشبورد و گزارش‌دهی‬ ‫‪‬‬


‫‪ CircleCI -‬داشبوردی جامع و گزارش‌دهی دقیق از وضعیت ساخت‌ها و تست‌ها فراهم می‌کند که به توسعه‌دهندگان کمک‬
‫می‌کند مشکالت را سریعتر شناسایی و رفع کنند‪.‬‬

‫امنیت و کنترل دسترسی‬ ‫‪‬‬


‫‪ CircleCI -‬از ویژگی‌های امنیتی مانند ‪ ،SSO، 2FA‬و کنترل دسترسی بر اساس نقش پشتیبانی می‌کند‪.‬‬

‫پشتیبانی از ‪ API‬و ‪CLI‬‬ ‫‪‬‬


‫‪ CircleCI -‬از ‪ API‬و ‪ CLI‬برای اتوماسیون و تعامل با سرویس استفاده می‌کند‪ ،‬که به توسعه‌دهندگان امکان می‌دهد‬
‫فرآیندهای خود را به طور کامل سفارشی کنند‪.‬‬

‫مزایا ‪CircleCI‬‬ ‫‪-6-2‬‬


‫پیکربندی ساده با ‪ :YAML‬استفاده از فایل ‪ YAML‬برای پیکربندی که فهم و مدیریت آن آسان است‪.‬‬ ‫‪‬‬
‫پشتیبانی قوی از ‪ :Docker‬ایجاد و مدیریت محیط‌های ساخت سفارشی با ‪.Docker‬‬ ‫‪‬‬
‫ادغام عالی با ‪ GitHub‬و ‪ :Bitbucket‬به ویژه برای کاربرانی که از این مخازن استفاده می‌کنند‪ ،‬ادغام بدون مشکل انجام‬ ‫‪‬‬
‫می‌شود‪.‬‬
‫ساخت‌های موازی و کانکارنت ‪ :‬برای کاهش زمان ساخت و تست‪.‬‬ ‫‪‬‬

‫معایب‪:‬‬ ‫‪-6-3‬‬
‫هزینه‌بر بودن‪ :‬برای پروژه‌های خصوصی‪ ،‬هزینه‌های مربوط به استفاده از ‪ CircleCI‬می‌تواند باال باشد‪.‬‬ ‫‪‬‬
‫محدودیت‌های نسخه رایگان‪ :‬نسخه رایگان محدودیت‌هایی دارد که ممکن است برای تیم‌های بزرگ یا پروژه‌های پیچیده‬ ‫‪‬‬
‫مناسب نباشد‪.‬‬
‫وابستگی به ابر‪ :‬به دلیل اینکه ‪ CircleCI‬یک سرویس مبتنی بر ابر است‪ ،‬نیاز به اتصال اینترنت دارد و برای استفاده آفالین‬ ‫‪‬‬
‫مناسب نیست‪.‬‬
‫بررسی قابلیتهای ‪TeamCity‬‬ ‫‪-7‬‬

‫‪ TeamCity‬یک ابزار قدرتمند و انعطاف‌پذیر برای ‪ CI/CD‬است که با ارائه امکانات گسترده و پشتیبانی از زبان‌ها و ابزارهای مختلف‪،‬‬
‫به توسعه‌دهندگان کمک می‌کند تا فرآیندهای ساخت‪ ،‬تست و استقرار خود را بهینه کنند‪ .‬این ابزار به ویژه برای تیم‌های توسعه بزرگ و‬
‫پروژه‌های پیچیده مناسب است‪.‬‬
‫‪ TeamCity‬یک سرور ‪( CI/CD‬ادغام مداوم‪/‬تحویل مداوم) قدرتمند و انعطاف‌پذیر است که توسط شرکت ‪ JetBrains‬توسعه یافته‬
‫است‪ .‬این ابزار برای خودکارسازی فرآیندهای ساخت‪ ،‬تست و استقرار کد استفاده می‌شود و امکانات گسترده‌ای برای توسعه‌دهندگان و‬
‫تیم‌های توسعه فراهم می‌کند‪ .‬در ادامه به بررسی ویژگی‌ها و امکانات ‪ TeamCity‬می‌پردازیم‪:‬‬

‫ویژگی‌های‪TeamCity‬‬ ‫‪-7-1‬‬
‫پشتیبانی از زبان‌ها و ابزارهای مختلف‬ ‫‪‬‬
‫‪ TeamCity -‬از زبان‌های برنامه‌نویسی مختلفی مانند ‪ Java, .NET, Ruby, Python, PHP, JavaScript‬و غیره پشتیبانی‬
‫می‌کند‪ .‬همچنین از ابزارهای ساخت متعددی مانند ‪ ,Maven, Gradle, Ant, MSBuild‬و ‪ NAnt‬پشتیبانی می‌کند‪.‬‬
‫ادغام با سیستم‌های کنترل نسخه (‪)VCS‬‬ ‫‪‬‬
‫‪ TeamCity -‬با سیستم‌های کنترل نسخه مختلف از جمله ‪ ,Git, Subversion, Mercurial, Perforce‬و ‪ TFS‬ادغام‬
‫می‌شود و می‌تواند به طور خودکار تغییرات در مخزن کد را شناسایی و پردازش کند‪.‬‬

‫پیکربندی و مدیریت ساده‬ ‫‪‬‬


‫‪ TeamCity -‬از رابط کاربری گرافیکی برای پیکربندی و مدیریت پروژه‌ها استفاده می‌کند‪ .‬این رابط کاربری کار با این ابزار را برای‬
‫کاربران آسان‌تر می‌کند‪.‬‬

‫پشتیبانی از ‪Docker‬‬ ‫‪‬‬


‫‪ TeamCity -‬از ‪ Docker‬برای ایجاد و مدیریت محیط‌های ساخت سفارشی پشتیبانی می‌کند‪ .‬این امکان به توسعه‌دهندگان‬
‫اجازه می‌دهد تا ساخت‌های خود را در محیط‌های ایزوله و قابل تکرار اجرا کنند‪.‬‬

‫ساخت‌های موازی و توزیع‌شده‬ ‫‪‬‬


‫‪ TeamCity -‬امکان اجرای ساخت‌های موازی و توزیع‌شده را فراهم می‌کند که می‌تواند زمان ساخت و تست را به طور قابل‬
‫توجهی کاهش دهد‪.‬‬

‫پشتیبانی از کشینگ و باز استفاده از وابستگی‌ها‬ ‫‪‬‬


‫‪ TeamCity -‬از کشینگ و باز استفاده از وابستگی‌ها برای کاهش زمان ساخت استفاده می‌کند‪ .‬این ویژگی می‌تواند به طور‬
‫خودکار وابستگی‌های ثابت را ذخیره و از آنها در ساخت‌های بعدی استفاده کند‪.‬‬

‫مدیریت و کنترل دسترسی‬ ‫‪‬‬


‫‪ TeamCity -‬از مدیریت و کنترل دسترسی بر اساس نقش پشتیبانی می‌کند و به مدیران اجازه می‌دهد تا سطوح دسترسی‬
‫مختلفی برای کاربران تعریف کنند‪.‬‬

‫پشتیبانی از پالگین‌ها و افزونه‌ها‬ ‫‪‬‬


‫‪ TeamCity -‬دارای یک اکوسیستم گسترده از پالگین‌ها و افزونه‌ها است که به توسعه‌دهندگان امکان می‌دهد تا قابلیت‌های این‬
‫ابزار را گسترش دهند و سفارشی‌سازی کنند‪.‬‬

‫پشتیبانی از ‪ Workflows‬و پایپالین‌های پیچیده‬ ‫‪‬‬


‫‪ TeamCity -‬از تعریف و مدیریت جریان‌های کاری (‪ )workflows‬و پایپالین‌های پیچیده پشتیبانی می‌کند که می‌تواند شامل‬
‫مراحل مختلفی از ساخت‪ ،‬تست و استقرار باشد‪.‬‬

‫گزارش‌دهی و اعالن‌ها‬ ‫‪‬‬


‫‪ TeamCity -‬گزارش‌ها و اعالن‌های دقیق از وضعیت ساخت‌ها و تست‌ها فراهم می‌کند‪ .‬این ابزار می‌تواند نتایج ساخت و تست را‬
‫به ایمیل‪ Slack ،‬و سایر ابزارهای ارتباطی ارسال کند‪.‬‬
‫پشتیبانی از ‪ API‬و ‪CLI‬‬ ‫‪‬‬
‫‪ TeamCity -‬از ‪ API‬و ‪ CLI‬برای اتوماسیون و تعامل با سرویس استفاده می‌کند‪ .‬این ویژگی به توسعه‌دهندگان امکان می‌دهد‬
‫تا فرآیندهای خود را به طور کامل سفارشی کنند‪.‬‬

‫مزایای ‪TeamCity‬‬ ‫‪-7-2‬‬


‫پشتیبانی گسترده از زبان‌ها و ابزارهای مختلف‪ TeamCity :‬با بسیاری از زبان‌ها و ابزارهای توسعه سازگار است‪.‬‬ ‫‪‬‬
‫رابط کاربری گرافیکی و آسان‪ :‬استفاده از رابط کاربری گرافیکی کار با این ابزار را برای کاربران آسان‌تر می‌کند‪.‬‬ ‫‪‬‬
‫پشتیبانی از ساخت‌های موازی و توزیع‌شده‪ :‬این ویژگی می‌تواند زمان ساخت و تست را کاهش دهد‪.‬‬ ‫‪‬‬
‫ادغام با سیستم‌های کنترل نسخه مختلف‪ TeamCity :‬به خوبی با سیستم‌های کنترل نسخه مختلف ادغام می‌شود‪.‬‬ ‫‪‬‬

‫معایب ‪TeamCity‬‬ ‫‪-7-3‬‬


‫هزینه‌بر بودن‪ TeamCity :‬نیاز به خرید الیسنس دارد که می‌تواند برای تیم‌های کوچک و پروژه‌های مستقل هزینه‌بر باشد‪.‬‬ ‫‪‬‬
‫پیچیدگی اولیه برای راه‌اندازی‪ :‬تنظیم اولیه و پیکربندی ممکن است برای کاربران جدید پیچیده باشد‪.‬‬ ‫‪‬‬
‫نیاز به منابع سخت‌افزاری باال‪ :‬برای اجرای ساخت‌های موازی و توزیع‌شده‪ ،‬ممکن است نیاز به منابع سخت‌افزاری بیشتری‬ ‫‪‬‬
‫داشته باشد‪.‬‬
‫مقایسه ‪Platform‬ها‬ ‫‪-8‬‬
‫در بخش های قبل بررسی قابلیتهای پلتفرمهای مختلف ‪ Source Control‬و ‪ CI/CD‬مطرح‪ ،‬انجام گردید در این بخش مقایسه‬
‫کلی ویژگیها و امکانات آنها به شرح ذیل ارائه می گردد‪:‬‬

‫‪ :GitLab‬یک پلت فرم کامل ‪ DevOps‬شامل کنترل نسخه‪ CI/CD ،‬و ویژگی های مدیریت پروژه را می باشد‪ .‬با گزینه های خود‬
‫میزبانی یا میزبانی ‪ GitLab‬انعطاف پذیر است‪.‬‬

‫‪ :Azure DevOps‬مجموعه ای جامع برای ‪ DevOps‬که ‪ ،CI/CD‬کنترل نسخه‪ ،‬مدیریت بسته و موارد دیگر را پوشش می دهد‪.‬‬
‫کامًال با ‪ Microsoft Azure‬ادغام می شود‪.‬‬

‫‪ :Jenkins‬بسیار قابل تنظیم با اکوسیستم پالگین گسترده‪ .‬به طور گسترده استفاده می شود اما نیاز به راه اندازی و نگهداری‬
‫بیشتری میباشد‪.‬‬

‫‪ :TeamCity‬به دلیل قابلیت های قوی ‪ CI/CD‬و سهولت استفاده‪ ،‬به ویژه در محیط های سازمانی شناخته شده است‪.‬‬

‫‪ :CircleCI‬مبتنی بر ابر با پشتیبانی قوی از ‪ Docker‬و ‪ .Kubernetes‬برای ساخت سریع و کارآمد طراحی شده است‪.‬‬

‫‪ :Travis CI‬محبوب در جامعه منبع باز‪ ،‬تجربه ‪ CI/CD‬یکپارچه با پشتیبانی از ساخت های موازی را ارائه می دهد‪.‬‬

‫‪ :Bamboo‬محصولی اطلسیان که به خوبی با سایر ابزارهای اطلسی مانند ‪ JIRA‬و ‪ Bitbucket‬ادغام می شود‪ .‬این یک تجربه‬
‫جامع ‪ CI/CD‬با تمرکز بر یکپارچه سازی یکپارچه ارائه می دهد‪.‬‬

‫در جدول صفحه بعد مقایسه قابلیتهای ‪ 7‬پلتفرم ‪ CI/CD‬معرفی شده در این مستند آمده است‪:‬‬
CI/CD ‫ و‬Source Control ‫مقایسه پلتفرمهای‬

Feature/Tool GitLab Azure DevOps Jenkins TeamCity CircleCI Travis CI Bamboo


Type Web-based Git DevOps Open- CI/CD server CI/CD CI/CD CI/CD
repository platform with source service service server
manager with CI/CD, version automatio
CI/CD control, and n server
more
Language Multi-language Multi-language Multi- Multi- Multi- Multi- Multi-
Support support support language language language language languag
support support support support e
support
Hosting Self-hosted or Microsoft Azure Self- Self-hosted Cloud- Cloud- Self-
GitLab-hosted (cloud) or on- hosted based based hosted
premises
VCS Git Git, TFVC, Git, Git, Git, Git, Git,
Integration Subversion, Subversio Subversion, Bitbucket Bitbucket, Mercuri
Mercurial n, Mercurial, GitHub al,
Mercurial, CVS Subversi
CVS on,
Perforce
Pipeline YAML YAML for Jenkinsfile Kotlin, YAML YAML GUI-
Configuration configuration Pipelines (in (Groovy Groovy, configura configurat based
files Azure Repos or syntax) YAML tion files ion files and
GitHub) YAML
Container Docker, Docker, Docker, Docker, Docker, Docker Docker,
Support Kubernetes Kubernetes Kubernete Kubernetes Kubernet Kuberne
s es tes
Scalability Highly scalable Highly scalable Highly Scalable Highly Highly Scalable
with runners scalable scalable scalable
with
nodes
User Interface Modern, web- Modern, web- Web- Modern, Modern, Modern, Web-
based based based web-based web- web-based based
(older UI) based
Plugins/ Rich Extensions Extensive Rich Limited Limited to Extensiv
Extensions ecosystem of available plugin ecosystem of to specific e plugin
extensions ecosystem plugins specific integration ecosyste
integratio s m
ns
Security SSO, 2FA, SSO, 2FA, Role- Role- Role-based SSO, Role- Role-
Role-based based access, based access Role- based based
permissions Compliance permissio control based access access
ns, 2FA access control control
(via control
plugins)
License Open-source Proprietary Open- Proprietary Proprieta Proprietar Propriet
Feature/Tool GitLab Azure DevOps Jenkins TeamCity CircleCI Travis CI Bamboo
(Community (Paid) source (Paid) ry (Paid) y (Free for ary
Edition), Paid open- (Paid)
(Premium) source
projects)
Build Speed Fast, Fast, depending Variable, Fast, with Fast, Fast, Fast,
depending on on configuration depends appropriate optimize optimized with
runners and on configuration d for for appropri
caching configurat parallel parallel ate
ion builds builds configur
ation
Documentation Comprehensiv Comprehensive, Extensive Extensive Compreh Comprehe Extensiv
e, extensive extensive online communit official ensive nsive e
online documentation y and documentatio online online official
documentation official n document document docume
document ation ation ntation
ation
Support Community, Paid support, Communit Paid support Commun Communit Paid
Paid support community y, Paid ity, Paid y, Paid support
available forums support support support
via third
parties
‫جمع بندی‬
‫‪ DevOps‬یک مجموعه از فرآیندها‪ ،‬ابزار‪ ،‬فلسفه‌ها و رویکردهای مهندسی نرم‌افزار است که هدف اصلی آن تجزیه و تحلیل و ایجاد تعامل‬
‫بین تیم‌های توســعه (‪ )Development‬و عملیات (‪ )Operations‬در یــک سازمان اســت‪ .‬اصــلی‌ترین هــدف ‪ DevOps‬افزایش‬
‫توانمندی‌های توسعه و مدیریت بهتر عملیات و تحویل نرم‌افزار سریعتر و بهتر به مشتریان است‪.‬‬
‫ویژگی‌ها و اصول اصلی ‪ DevOps‬شامل موارد زیر هستند‪:‬‬
‫اتوماسیون‪ :‬استفاده از ابزار‌های اتوماتیک برای اجرای فرآیندها و وظایف مختلــف در توســعه و عملیات بــه منظــور کــاهش خطاها و افزایش‬
‫سرعت تحویل‪.‬‬
‫تعامل و همکاری‪ :‬توسعه‌دهندگان و مدیران عملیات به صـورت مـداوم با یکـدیگر همکـاری می‌کننـد و اطالعات و تجربیات را بـه اشــتراک‬
‫می‌گذارند‪.‬‬
‫ایجاد انطباق‪ :‬تالش برای ایجاد یک محیط توسعه و ارائه مداوم با سرعت باال و کیفیت باال‪.‬‬
‫اندازه‌گیری و بهبود مداوم‪ :‬استفاده از معیارها و متریک‌ها برای اندازه‌گیری عملکرد و بهبود مستمر فرآیندها‪.‬‬
‫مدیریت کدهای منبع‪ :‬استفاده از مدیریت کدهای منبع و ابزارهای مشابه برای نگهداری و ردیابی تغییرات کد‪.‬‬
‫‪ DevOps‬به سازمان‌ها کمک می‌کند تا نرم‌افزارهای خود را سریعتر و با کیفیت به بازار عرضه کنند و به مشکالتی مانند افزایش هزینه‌ها‪،‬‬
‫خطاها و تداخل‌ها کاهش دهند‪ .‬این رویکرد همچنین امکان مداومت و تغییر در مقابل نیازهای مشتریان و بازار را فراهم می‌کند‪.‬‬

‫‪ DevOps‬و ‪ Microsoft Azure‬دارای ارتباط نزدیکی هستند‪ Microsoft Azure .‬یــک پلتفرم ابــری از شرکت مایکروسافت‬
‫است که امکان اجرای برنامه‌ها و خدمات مختلف در محیط‌های ابری فراهم می‌کند‪ ،DevOps .‬به عنوان یک فرآینــد نرم‌افزاری و رویکرد‬
‫مهندسی نرم‌افزار‪ ،‬می‌تواند با استفاده از ابزارها و خدمات ‪ Azure‬بهبود یابد و تسهیل کند‪.‬‬
‫مایکروسافت ‪ Azure‬ابزارها و سرویس‌های متعــددی را بــرای پیاده‌سازی ‪ DevOps‬در اختیار توســعه‌دهندگان و تیم‌های عملیات قرار‬
‫داده است‪ .‬برخی از این ابزارها و خدمات شامل موارد زیر هستند‪:‬‬
‫‪ Azure DevOps: Azure DevOps‬یک پلتفرم کامل برای مدیریت فرآیندهای توسعه نرم‌افزار‪ ،‬مانند مدیریت کدهای منبــع (‬
‫‪ ،)Source Code Management‬مــدیریت وظــایف (‪CI/CD (Continuous ،)Work Item Tracking‬‬
‫)‪ Integration/Continuous Deployment‬و مدیریت تست‌ها است‪.‬‬
‫‪ Azure Kubernetes Service (AKS): AKS‬اجازه می‌دهد که برنامه‌ها را در محیط‌های ‪ Kubernetes‬در ‪ Azure‬مستقر‬
‫کنید و مدیریت کنید‪ .‬این به توسعه و مدیریت برنامه‌های مبتنی بر میکروسرویس‌ها کمک می‌کند‪.‬‬
‫‪ Azure Monitor‬و ‪ :Application Insights‬این سرویس‌ها به شما امکان مانیتورینگ و نظارت بر عملکرد برنامه‌های خود در‬
‫‪ Azure‬را می‌دهند‪.‬‬
‫‪ : Azure Resource Manager Templates‬این ابزار امکان استفاده از طرح‌های زیرساختی به منظور مدیریت زیرساخت‌ها و‬
‫محیط‌های اجرایی را فراهم می‌کند‪.‬‬
‫‪ :Azure DevTest Labs‬این سرویس به شما امکان می‌دهد محیط‌های توسعه و تست در ‪ Azure‬را بــه سرعت ایجاد و مــدیریت‬
‫کنید‪.‬‬
‫از این‌جا مشخص است که ‪ Azure‬ابزارها و خدمات متعددی را برای پیاده‌سازی ‪ DevOps‬در محیط ابری فراهم می‌کند و باعث ساده‌تر‬
‫شدن فرآیند توسعه و عرضه نرم‌افزار می‌شود‪.‬‬

‫‪ Docker‬نیز نقش مهمی در مفاهیم ‪ DevOps‬و استفاده از ‪ Microsoft Azure‬ایفـا می‌کنـد‪ Docker .‬یـک پلتفرم مـدیریت‬
‫کانتینر است که به توسعه‌دهندگان و تیم‌های عملیات امکان اجرای برنامه‌ها و خدمات در محیط‌های کــانتینری را فراهم می‌کنــد‪ .‬کانتینرها‬
‫محیط‌های مستقلی هستند که شامل کدهای منبع‪ ،‬کتابخانه‌ها‪ ،‬تنظیمات و تمام وابستگی‌های الزم برای اجرای یک برنامه می‌شوند‪.‬‬
‫در ارتباط با ‪ DevOps‬و ‪ Azure، Docker‬دارای اهمیت‌های زیر است‪:‬‬
‫استقالل از محیط ‪ :‬با استفاده از ‪ ،Docker‬می‌توانید برنامه‌ها و خدمات را به صورت کانتینرها بسازید کــه در هر محیطی (توســعه‪ ،‬تســت‪،‬‬
‫تولید) به صورت یکسان اجرا می‌شوند‪ .‬این امکان را فراهم می‌کند که برنامه‌ها بدون نگرانی از اختالف محیط‌ها ارائه شوند‪.‬‬
‫ادغام مداوم ( ‪ )CI‬و توصیف‌های زیرساختی ‪ :‬با استفاده از ‪ Docker‬در فرآیند ‪ ،CI/CD‬می‌توانید کانتینرها را بــه عنــوان واحــدهای قابــل‬
‫اجرا و تست استفاده کنید و از توصــیف‌های زیرساختی ماننــد ‪ Dockerfile‬بهــره ببریــد تــا برنامه‌ها و محیط‌های اجــرایی را توصــیف و‬
‫مدیریت کنید‪.‬‬
‫مدیریت و توزیع بهتر منابع ‪ Docker :‬به شما امکان می‌دهد تا منابع سیستمی (مانند ‪ CPU‬و حافظه) را بهتر مــدیریت کنیــد و برنامه‌ها‬
‫را به صورت مستقل از یکدیگر اجرا کنید‪ .‬این بهبود در بهره‌وری منابع مهمی در محیط‌های ابری مانند ‪ Microsoft Azure‬دارد‪.‬‬
‫استفاده در محیط‌های ابری ‪ Microsoft Azure :‬نــیز از ‪ Docker‬و ‪ Kubernetes‬بــرای اجــرای کانتینرها و مــدیریت آن‌ها در‬
‫محیط‌های ابری استفاده می‌کند‪ Azure Kubernetes Service (AKS) .‬به عنوان یک سرویس مدیریت کانتینرها در ‪ ،Azure‬از‬
‫‪ Docker‬بهره می‌برد‪.‬‬
‫بــه طــور کلی‪ Docker ،‬یکی از ابزارهای اساســی در ایجاد و مــدیریت محیط‌های ‪ DevOps‬و در ارتباط با پلتفرم‌های ابــری ماننــد‬
‫‪ Microsoft Azure‬است‪ .‬این ابزار کانتینرها را به عنوان واحدهای اصلی توسعه و تحویل نرم‌افزار مدیریت می‌کند و فرآیند ‪ CI/CD‬و‬
‫ادغام مداوم را ساده‌تر می‌کند‪.‬‬

‫کانتینر یک محیط ایزولــه و جداگانــه بــرای اجــرای برنامه‌ها و خــدمات نرم‌افزاری اســت کــه تمامی کــدهای منبــع‪ ،‬کتابخانه‌ها‪ ،‬تنظیمات‪،‬‬
‫وابستگی‌ها‪ ،‬و همه چیزی که برای اجرای یک برنامه مورد نیاز است را شامل می‌شود‪ .‬کانتینرها این امکان را فراهم می‌کنند که برنامه‌ها بــه‬
‫صورت مستقل و معتبر اجرا شوند و در هر محیطی که از کانتینرها پشتیبانی می‌کند‪ ،‬به یک شکل یکسان عمل کنند‪.‬‬
‫برخالف ماشین‌های مجازی که یک سیستم عامل کامـل و مجازی را ایجاد می‌کننـد‪ ،‬کانتینرها بـه صـورت خودکـار و بـه سرعت ایجاد و از‬
‫سیستم‌عامل میزبان مشترکی استفاده می‌کنند‪ .‬این مزیت‌ها و اصول کانتینری شامل موارد زیر هستند‪:‬‬
‫قابل حملیت ‪ :‬کانتینرها برای همه محیط‌هایی که از آن‌ها پشتیبانی می‌کنند (معمــوًال لینــوکس و وینــدوز)‪ ،‬قابــل اســتفاده و حمــل و نقــل‬
‫هستند‪.‬‬
‫اصل ایزوله‌سازی ‪ :‬هر کانتینر از دیگر کانتینرها جداگانه عمل می‌کند‪ .‬این به معنای این است کـه تــداخل‌ها و تــداخل منـابع اجتناب‌ناپـذیر‬
‫کمتری دارند‪.‬‬
‫سرعت ‪ :‬کانتینرها به سرعت ایجاد و اجرا می‌شوند‪ .‬این سرعت اجرا برای توسعه سریع و توصیف‌های زیرساختی کمک می‌کند‪.‬‬
‫ادغام مداوم ( ‪ )CI‬و تحویل مداوم (‪ : )CD‬کانتینرها به عنوان واحدهای استاندارد در فرآیندهای ‪ CI/CD‬مورد اســتفاده قرار می‌گیرنــد‪ .‬این‬
‫به معنای این است که برنامه‌ها را به سرعت تست و تحویل می‌دهید‪.‬‬
‫مدیریت و ایجاد مقیاس ‪ :‬کانتینرها به شما امکان مدیریت آسان و ایجاد مقیاس افقی (‪ )Scaling‬برنامه‌ها را می‌دهند‪.‬‬
‫برنامه‌های معروف مانند ‪ Docker‬و ‪ Kubernetes‬به عنوان پلتفرم‌های کانتینری از این مفاهیم بهره می‌برند و بــه توســعه‌دهندگان و‬
‫تیم‌های عملیات کمک می‌کنند تا برنامه‌ها را به شکل کانتینرها مدیریت و اجرا کنند‪.‬‬

‫‪ CI‬مخفف عبارت "‪ "Continuous Integration‬می‌باشد‪ .‬این اصطالح در ‪ DevOps‬و فرآیندهای توسعه نرم‌افزار به کار می‌رود‬
‫و به فرآیندی اشاره دارد که در آن تغییرات و تجمیع کدهای منبع توسط اعضای تیم توسعه بــه صــورت مکرر و بــه صــورت خودکــار انجام‬
‫می‌شود‪.‬‬
‫هدف اصلی ‪ CI‬این است که تغییرات در کد منبع توسط توسعه‌دهندگان به صورت مکرر (معموًال چند بار در روز) تجمیع و تست شوند‪ .‬این‬
‫اقدام به کشف زودهنگام مشکالت و اشکاالت در کد‪ ،‬افزایش کیفیت نرم‌افزار‪ ،‬و تسریع فرآینــد تحویــل نرم‌افزار (‪ )CD‬کمــک می‌کنــد‪CI .‬‬
‫معموًال با استفاده از ابزارها و سیستم‌های اتوماتیک انجام می‌شود که تغییرات را در یک محیط تستی اجرا می‌کننــد و گزارش‌هایی از نتــایج‬
‫به تیم ارائه می‌دهند‪.‬‬
‫‪ CI‬یکی از اصول ‪ DevOps‬است و به توسعه‌دهندگان کمک می‌کند تا به صورت مداوم تغییرات را ارائه دهند و از تــداخل‌ها و مشــکالت‬
‫در فرآیند توسعه جلوگیری کنند‪ .‬این فرآیند اساسی برای توسعه نرم‌افزار در مقیاس‌های بزرگ و همچنین در محیط‌های ابری و محیط‌های‬
‫مجازی است‪.‬‬
‫‪ CD‬مخفف عبارت "‪ "Continuous Delivery‬یا "‪ "Continuous Deployment‬می‌باشد‪ ،‬اگرچه این دو مفهوم به نوعی‬
‫متفاوت هستند‪:‬‬
‫‪ Continuous Delivery (CD): Continuous Delivery‬به معنای تحویل مداوم نرم‌افزار به محیط‌های تست و اســتقرار‬
‫می‌باشد‪ .‬در این مدل‪ ،‬تغییرات نرم‌افزار پس از فرآیند )‪ Continuous Integration (CI‬و انجام تسـت‌های اتوماتیـک در محیـط‬
‫تست‪ ،‬به صورت مداوم در دسترس مشتریان یا محیط تولید قرار نمی‌گیرنــد‪ .‬این بــه توســعه‌دهندگان اجازه می‌دهــد کــه بــه صــورت مکرر‬
‫تغییرات جدید را در محیط‌های تست ارائه دهند‪ ،‬اما تصمیمی در مورد انتقال به محیط تولید به صورت دستی می‌گیرند‪.‬‬
‫‪ Continuous Deployment (CD): Continuous Deployment‬به معنای تحویل مداوم و خودکار تغییرات نرم‌افزار به‬
‫محیط تولید می‌باشد‪ .‬در این مدل‪ ،‬تغییرات پس از ‪ CI‬و انجام تست‌ها به صورت خودکار و بدون نیاز بـه مداخلـه انسانی بـه محیـط تولیـد‬
‫منتقل می‌شوند‪ .‬این به توسعه‌دهندگان امکان می‌دهد تغییرات را بالفاصله به مشتریان منتقل کنند‪.‬‬
‫هدف اصلی ‪( CD‬مهمترین بخش از ‪ )DevOps‬افزایش سرعت و اعتماد به تحویل نرم‌افزار است‪ .‬با ‪ CI‬و ‪ ،CD‬تغیــیرات کــد بــه سرعت‬
‫تجمیع‪ ،‬تست و‬

‫‪ DevOps‬معموًال به عنوان یک رویکرد مهندسی نرم‌افزار و یک فرآیند توسعه نرم‌افزار تاکید دارد‪ ،‬اما مدیر پروژه نقش مهمی در مـوفقیت‬
‫‪ DevOps‬ایفا می‌کند‪ .‬در اینجا توضیح می‌دهم که چگونه یک مدیر پروژه می‌تواند در اجرای ‪ DevOps‬موفقیت‌آمیز نقش بازی کند‪:‬‬
‫تعیین استراتژی ‪ : DevOps‬مدیر پروژه مسئول تعیین استراتژی و راهبرد ‪ DevOps‬برای پروژه است‪ .‬او باید مشخص کند کــه چگونــه‬
‫‪ DevOps‬در سازمان و پروژه‌اش اجرا خواهد شد و چگونه تغییراتی در فرآیندها و تیم‌ها باید انجام شود‪.‬‬
‫مدیریت تیم‌ها و منابع ‪ :‬مدیر پروژه مسئول تخصیص منابع و تعیین تیم‌های مرتبط با ‪ DevOps‬است‪ .‬او باید تضمین کند که اعضای تیم‬
‫توسعه و عملیات منطبق بر استراتژی ‪ DevOps‬باشند و توانایی همکاری و تعامل مداوم را داشته باشند‪.‬‬
‫مدیریت مخاطرات و مشکالت ‪ :‬مدیر پروژه باید مسائلی مانند مشکالت توسعه و تولید‪ ،‬امنیت‪ ،‬کیفیت و مدیریت تغیــیر را مــدیریت کنــد‪ .‬او‬
‫باید از نزدیک اقدامات مرتبط با مدیریت ریسک و حل مشکالت را انجام دهد‪.‬‬
‫ارتباطات و هماهنگی ‪ :‬مدیر پروژه مسئول ارتباطات مداوم بین تیم‌های توسعه و عملیات است‪ .‬او باید تضمین کند که اطالعات و تغییرات به‬
‫درستی منتقل می‌شوند و هماهنگی بین این دو تیم حفظ می‌شود‪.‬‬
‫اندازه‌گیری و ارزیابی ‪ :‬مدیر پروژه باید از ابزارها و متریک‌ها برای انــدازه‌گیری عملکرد ‪ DevOps‬و بهبــود مســتمر اســتفاده کنــد‪ .‬او بایــد‬
‫پیشرفت‌ها و نقاط ضعف را ارزیابی کند و تصمیمات مناسبی اتخاذ کند‪.‬‬
‫تحقیق و آموزش ‪ :‬مدیر پروژه باید تحقیقات مرتبط با ‪ DevOps‬را دنبال کند و اعضای تیم را برای به‌روزرسانی مهارت‌های خــود آمــوزش‬
‫دهد‪.‬‬
‫حمایت از فرآیند تحویل مداوم ‪ :‬مدیر پروژه باید مطمئن شود که فرآیند تحویل مداوم (‪ )CD‬بــه صــورت مــداوم ادامــه دارد و تغیــیرات بــه‬
‫محیط تولید تحت نظر می‌گیرند‪.‬‬
‫با این وظایف و مسئولیت‌ها‪ ،‬مدیر پروژه ایفای نقش کلیدی در مــوفقیت ‪ DevOps‬دارد و بایــد تیم‌ها و فرآینــدها را بــه ســمت مــدیریت‬
‫تغییرات مداوم و بهبود نرم‌افزار هدایت کند‪.‬‬

‫"‪ "Domain Model‬در ‪ Rational Rose‬یک مدل مفهومی از اجزای یک سیستم یا دامنــه (‪ )Domain‬می‌باشــد‪ .‬این مــدل‬
‫نمایش مفاهیم اصلی و ارتباطات میان آن‌ها در دامنه مورد نظر را فراهم می‌کنــد‪ Rational Rose .‬یــک نرم‌افزار مدل‌سازی و توســعه‬
‫نرم‌افزار است که از آن برای ایجاد مدل‌های مختلفی از یک سیستم مورد استفاده قرار می‌گیرد‪.‬‬
‫در یک مدل دامنه در ‪ ،Rational Rose‬مفاهیم اصلی به وسیله نمادها و ارتباطات توصــیف می‌شــوند‪ .‬در ادامــه توضــیحاتی در مــورد‬
‫نمادها و مفاهیمی که می‌توان در یک ‪ Domain Model‬در ‪ Rational Rose‬استفاده کرد‪ ،‬آورده شده است‪:‬‬
‫کالس‌ها ( ‪ :)Classes‬کالس‌ها نمایانگر مفــاهیم اصــلی در دامنــه هســتند‪ .‬هر کالس شــامل ویژگی‌ها (‪ )Attributes‬و عملکردها (‬
‫‪ )Methods‬می‌شود‪ .‬مفهوم‌ها می‌توانند به صورت کالس‌ها نمایش داده شوند‪.‬‬
‫ارتباطات ( ‪ : )Relationships‬در مدل دامنه‪ ،‬ارتباطات میان کالس‌ها نمایش داده می‌شوند‪ .‬این ارتباطـات می‌تواننـد شـامل ارث‌بـری (‬
‫‪ ،)Inheritance‬اشتراک (‪ ،)Association‬تک کرانه‌ای (‪ )Aggregation‬و کرانه‌ای (‪ )Composition‬باشند‪.‬‬
‫ویژگی‌ها ( ‪ :)Attributes‬ویژگی‌ها نشــان‌دهنده ویژگی‌های مهمی از یــک کالس هســتند‪ .‬مثًال در یــک مــدل دامنــه بــرای یــک کالس‬
‫"خودرو"‪ ،‬ویژگی‌هایی مانند "رنگ"‪" ،‬مدل" و "سرعت" ممکن است وجود داشته باشند‪.‬‬
‫روابط ( ‪ : )Associations‬این ارتباطات نمایانگر ارتباط میان دو یا چند کالس هستند‪ .‬می‌توانند دارای ویژگی‌های اضافی مانند چگونگی‬
‫ارتباط‪ ،‬تعداد و نوع ارتباط باشند‪.‬‬
‫اشــتراک ( ‪ )Aggregation‬و کرانه‌ای ( ‪ :)Composition‬این ارتباطــات نمایانگر ارتباطــات سلســله مراتبی بین کالس‌ها هســتند‪.‬‬
‫‪ Aggregation‬نشان‌دهنده یک ارتباط "کالسی‪-‬به‪-‬کالسی" با کالسی درجه‌بندی‌بندی شده است‪ Composition .‬نیز یک ارتباط‬
‫سلسله مراتبی است که نشان‌دهنده "کالسی‪-‬به‪-‬کالسی" با کالسی تعریف کرده است‪.‬‬
‫در ‪ Rational Rose‬و ابزارهای مدل‌سازی مشابه‪ Domain Model ،‬به توضیح دقیق تر مفاهیم و ساختارهای یک دامنه کمــک‬
‫می‌کند و برای تیم‌های توسعه و تحویل نرم‌افزار اطالعات قابل استفاده‌ای فراهم می‌آورد تا به طور موثرتر بتوانند نرم‌افزارها را توسعه دهند‪.‬‬

‫در ادامه‪ ،‬نحوه طراحی با ‪( Rational Rose‬همچنین به عنوان ‪ IBM Rational Rose‬یا ‪IBM Rational Rose XDE‬‬
‫شناخته می‌شود) را توصیف می‌کنم‪ Rational Rose .‬یک ابزار مدل‌سازی و توسعه نرم‌افزار است که می‌تواند بــرای طراحی مــدل‌های‬
‫‪ UML‬و نمایش اجزاء نرم‌افزار و ارتباطات آن‌ها به کار رود‪ UML .‬یک زبان مدل‌سازی است که برای نمایش ساختار و رفتار نرم‌افزار مورد‬
‫استفاده قرار می‌گیرد‪.‬‬
‫برای طراحی با ‪ ،Rational Rose‬مراحل زیر را دنبال کنید‪:‬‬
‫نصب ‪ :Rational Rose‬ابتدا باید ‪ Rational Rose‬را نصب کنید‪ .‬بعد از نصب‪ ،‬اجرای برنامه و ایجاد یــک پــروژه جدیــد را انجام‬
‫دهید‪.‬‬
‫اضافه کردن کالس‌ها ‪ :‬در پروژه جدید خود‪ ،‬باید کالس‌ها و اجــزا را اضــافه کنیــد‪ .‬این اقــدام می‌توانــد از منــوی " ‪Model" -> "Add‬‬
‫‪ "Class‬انجام شود‪ .‬سپس نام کالس را وارد کنید‪.‬‬
‫اضــافه کردن ویژگی‌ها و عملکردها ‪ :‬بعــد از اضــافه کردن کالس‪ ،‬بایــد ویژگی‌ها (‪ )Attributes‬و عملکردها (‪ )Operations‬کالس را‬
‫تعریف کنید‪ .‬این اطالعات می‌توانند از منوی " ‪ "Class" -> "Add Attribute‬و " ‪ "Class" -> "Add Operation‬وارد‬
‫شوند‪.‬‬
‫اضافه کردن ارتباطات ‪ :‬حاال می‌توانید ارتباطات میان کالس‌ها را تعریف کنید‪ .‬این ارتباطات می‌تواننــد از منــوی "‪Model" -> "Add‬‬
‫‪ "Association‬ایجاد شوند‪ .‬سپس مشخص کنید که کالس‌ها چگونه با یکدیگر مرتبط هستند‪.‬‬
‫استفاده از ‪ Diagrams: Rational Rose‬انواع نمودارهای ‪ UML‬را پشتیبانی می‌کند‪ .‬شما می‌توانید از نمودارهای مختلفی مانند‬
‫‪ Class Diagrams، Sequence Diagrams، Use Case Diagrams‬و ‪ ...‬استفاده کنید تا اجزای مدل را به صورت‬
‫گرافیکی نمایش دهید‪.‬‬
‫ذخیره و توصیف مدل ‪ :‬بعد از طراحی مدل‪ ،‬مدل خود را ذخیره کنید‪ .‬همچنین می‌توانید مستندات و توصــیف‌های مربـوط بـه مـدل را نـیز‬
‫ایجاد کنید‪.‬‬
‫تولید کد ‪ :‬در مرحله نهایی‪ ،‬می‌توانید با استفاده از ‪ ،Rational Rose‬کد منبع نرم‌افزار را تولید کنید یا از مدل‌های خـود بـرای توسـعه‬
‫نرم‌افزار استفاده کنید‪.‬‬

‫نمودارهای )‪ UML (Unified Modeling Language‬به عنــوان یــک زبان مدل‌سازی اســتاندارد بــرای توصــیف و مدل‌سازی‬
‫سیستم‌ها و نرم‌افزارها استفاده می‌شوند‪ UML .‬انواع مختلفی از نمودارها برای نمایش اجزاء مختلف سیستم ارائه می‌دهــد‪ .‬در ادامــه‪ ،‬انــواع‬
‫مهم نمودارهای ‪ UML‬را معرفی می‌کنم‪:‬‬
‫نمودار کالس ( ‪ : )Class Diagram‬نمودار کالس به نمایش کالس‌ها‪ ،‬ویژگی‌ها‪ ،‬عملکردها و ارتباطات بین آن‌ها می‌پردازد‪ .‬این نمــودار‬
‫معموًال برای نمایش ساختار اصلی سیستم و اجزاء آن مورد استفاده قرار می‌گیرد‪.‬‬
‫نمودار مورد کاربری ( ‪ :)Use Case Diagram‬این نمودار به توصــیف نقش‌ها و عملیات‌هایی کــه توســط کــاربران یا سیســتم انجام‬
‫می‌شوند می‌پردازد‪ .‬از این نمودار برای نمایش واحدهای عملکردی سیستم و تعامل آن با کاربران استفاده می‌شود‪.‬‬
‫نمودار توالی ( ‪ : )Sequence Diagram‬نمودار توالی ارتباطات میان اشیاء و ترتیب انجام عملیات‌ها را در طول زمان نمایش می‌دهد‪.‬‬
‫این نمودار به توصیف چگونگی انجام یک موقعیت کاربردی خاص بین اشیاء مورد استفاده می‌آید‪.‬‬
‫نمــودار معماری ( ‪ :)Architecture Diagram‬این نمــودار بــرای نمایش ساختار کلی سیســتم و ارتباط میان اجــزاء سیســتم و‬
‫طبقه‌بندی‌های مختلف به کار می‌رود‪ .‬نمودارهای معماری از جمله نمودارهای کمکی می‌باشند که بــرای مدل‌سازی و توصــیف سیســتم‌های‬
‫بزرگ و پیچیده به کار می‌روند‪.‬‬
‫نمودار وضعیت ( ‪ : )State Diagram‬این نمودار به توصیف وضــعیت‌های مختلــف یــک شــیء یا کالس و تغیــیرات وضــعیتی کــه آنها‬
‫می‌توانند تجربه کنند می‌پردازد‪ .‬از این نمودار برای نمایش چرخه‌های حیاتی اشیاء استفاده می‌شود‪.‬‬
‫نمودار تعامل ( ‪ : )Interaction Diagrams‬این دسته شامل دو نمودار مهم است‪ :‬نمــودار تــوالی (‪ )Sequence Diagram‬و‬
‫نمودار همکاری (‪ )Collaboration Diagram‬می‌شود‪ .‬این نمودارها به توصیف تعامل بین اشیاء در یک مـوقعیت کـاربردی خـاص‬
‫می‌پردازند‪.‬‬
‫نمودار اجزاء ( ‪ :)Component Diagram‬نمودار اجزاء به نمایش مولفه‌ها (معموًال در سطح کد) و ارتباطات بین آنها می‌پردازد‪ .‬این‬
‫نمودار برای نمایش ساختار فیزیکی سیستم و توزیع سیستم به کار می‌رود‪.‬‬
‫نمودار انتقال ( ‪ : )Deployment Diagram‬این نمودار به نمایش نحوه توزیع نرم‌افزار روی سخت‌افزارهای مختلف می‌پــردازد‪ .‬از این‬
‫نمودار برای نمایش اجزاء نرم‌افزاری و سخت‌افزاری و ارتباطات بین آنها استفاده می‌شود‪.‬‬
‫نمودار زمان ( ‪ : )Timing Diagram‬این نمودار به نمایش زمانبندی اجرای عملیات‌ها و ارتباطات میان اشیاء در طول زمان می‌پردازد‪.‬‬
‫نمودار اشیاء ( ‪ : )Object Diagram‬این نمودار به نمایش نمونه‌های خاص از اشیاء و وضعیت‌های آنها در یک زمان خاص می‌پردازد‪.‬‬
‫همچنین ‪ UML‬دارای نمودارهای دیگری نیز می‌باشد که برای موارد خاص و مدل‌سازی مــواردی ماننــد نمودار‌های کــامپوننت‪ ،‬نمودار‌های‬
‫اتحاد و انتساب و ‪ ...‬استفاده می‬

‫‪ MDD‬به معنای "‪ "Model-Driven Development‬یا "توسعه مبتنی بر مدل" می‌باشد‪ MDD .‬یک رویکرد توســعه نرم‌افزار‬
‫است که در آن توجه به مدل‌سازی مفاهیم و ساختارهای نرم‌افزار دارد‪ .‬در ‪ ،MDD‬ابتدا یک مدل از نرم‌افزار به وسیله یــک زبان مدل‌سازی‬
‫تعریف می‌شود و سپس از این مدل به صورت خودکار کد نهایی نرم‌افزار تولید می‌شود‪.‬‬
‫‪ MDD‬تالش دارد فرآیند توسعه نرم‌افزار را تا حد امکان اتوماتیک کند و بر اساس مدل‌های سطح باال از سیستم‌ها عمـل کنـد‪ .‬این رویکرد‬
‫به توسعه سریع‌تر و کارآمدتر نرم‌افزار کمک می‌کند و اشکاالت تجزیه و تحلیل را در سطوح مختلف مدل‌سازی تشخیص می‌دهد‪.‬‬
‫مهمترین مراحل ‪ MDD‬عبارتند از‪:‬‬
‫مدل‌سازی مفهومی ‪ :‬در این مرحله‪ ،‬مفاهیم و ارتباطات مهم نرم‌افزار به صورت مدل‌های انتزاعی و مفهومی تعریف می‌شوند‪ .‬این مدل‌ها اغلب‬
‫با استفاده از زبان‌های مدل‌سازی مانند ‪ UML‬ایجاد می‌شوند‪.‬‬
‫تبدیل مدل به کد ‪ :‬در این مرحله‪ ،‬مدل‌های مفهومی به کد منبع نرم‌افزار تبدیل می‌شوند‪ .‬این تبــدیل معمــوًال بــه وســیله ابزارهای ‪MDD‬‬
‫انجام می‌شود که قادر به تولید کد نهایی از مدل‌ها هستند‪.‬‬
‫اعتبارسنجی و اصالح ‪ :‬کد تولید شده ممکن است خطاها و اشکاالتی داشته باشـد‪ .‬در این مرحلـه‪ ،‬کـد ارزیابی شـده و اصـالحات الزم انجام‬
‫می‌شود‪.‬‬
‫تست و انتشار ‪ :‬نرم‌افزار تولید شده تست می‌شود و پس از اطمینان از کارکرد صحیح‪ ،‬به محیط تولید انتقال می‌یابد‪.‬‬
‫‪ MDD‬به توسعه مبتنی بر مدل امکان اصالحات سریع‌تر‪ ،‬ایجاد مستندات بهتر‪ ،‬توسعه کد به صــورت خودکــار‪ ،‬و مــدیریت پیچیــدگی‌ها و‬
‫تغییرات بهبود می‌بخشد‪ .‬از دیگر مزایای ‪ MDD‬می‌تــوان بــه افزایش بازبینی و نگهــداری کــد اشــاره کرد‪ .‬با این حال‪ ،‬پیاده‌سازی ‪MDD‬‬
‫نیازمند استفاده از ابزارهای مدل‌سازی و تبدیل مدل به کد و هم‬

You might also like