Dev Ops
Dev Ops
DevOpsچیست ؟
و چه ساختار ها و زیر مجموعه ها
دارد
و DevOpsکار کیست ؟
(مرجع )DevOps
نویسنده :
بنده یاشار اسمعیل دخت دانش آموخته رشته cyber securityهستم .
بیش از ۱۵سال سابقه فعالیت دارم .
از جمله فعالیت های بنده را میتوان در ساختار های زیر شرح داد :مشاور -مدرس -مولف
Mob : 09141100257
Telegram ID : yashar_esm
Instagram Account
توی 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است.
.1آموزش و آگاهیرسانی :ارائه دورههای آموزشی ،کارگاهها و سخنرانیها در مورد مفهومها ،اصول و مزایای DevOpsبه اعضای سازمان.
.2تشویق و پشتیبانی :تشویق و پشتیبانی از تیمها و اعضای سازمان برای اجرای بهتر واژههای DevOpsو به اشتراک گذاری تجربیات
موفق.
. 3اجرای تغییرات فرهنگی :کمک به ایجاد تغییر فرهنگی در سازمان به سوی یک محیط کاری که ارتباطات بین توسعه و عملیات بهبود
یابد.
.4ترغیب به همکاری :تشویق اعضا به همکاری برای ایجاد فرهنگ انعطافپذیری ،اتوماسیون و ارتباط نزدیک بین تیمهای مختلف.
.5مدیریت رویدادها :برگزاری جلسات ،کنفرانسها ،گردهماییها و ویدیوها برای تبادل نظر و انتقال دانش در حوزه .DevOps
با داشتن یک DevOps Evangelistماهر و متعهد ،سازمانها میتوانند بهبود فرهنگ کاری ،افزایش هماهنگی و همکاری بین
تیمهای مختلف ،افزایش بهره وری و ارتقای سطح اجرایی DevOpsخود را تامین کنند.
: DevOps فرهنگ
: DevOps راهکار
قبل از هر چیز روی متادولوژی باید صحبت کرد .و روی انواع متادولوژی ها .
متدولوژی آبشاری یکی از قدیمیترین و شناختهشدهترین متدولوژیهای توسعه نرمافزار است .این متدولوژی یک رویکرد خطی و ترتیبی
برای توسعه نرمافزار ارائه میدهد که هر مرحله باید به طور کامل تکمیل شود و تأیید گردد قبل از اینکه به مرحله بعدی بروید .این رویکرد
به پنج تا هفت مرحله تقسیم میشود که هر یک بهطور واضح تعریف شدهاند .مراحل اصلی معموًال عبارتند از:
پیادهسازی ()Implementation
-در این مرحله ،کد نویسی انجام میشود و نرمافزار بر اساس طراحیها پیادهسازی میشود.
تست ()Testing
-پس از پیادهسازی ،نرمافزار تست میشود تا اطمینان حاصل شود که تمامی نیازها بهدرستی برآورده شدهاند و هیچ باگی وجود ندارد.
تستها شامل تست واحد ،تست یکپارچگی ،تست سیستم و تست پذیرش میباشند.
مزایا:
-ساختار مشخص و واضح :هر مرحله دارای خروجیهای مشخص است که به کاهش احتمال اشتباه کمک میکند.
-کنترل پروژه :امکان کنترل و مدیریت پروژه در هر مرحله فراهم است.
-مستندسازی کامل :تمامی مراحل بهخوبی مستند میشوند که برای نگهداری و بهبودهای آینده مفید است.
معایب:
-انعطافپذیری کم :تغییرات در نیازمندیها در مراحل پایانی دشوار و پرهزینه است.
-زمانبر بودن :به دلیل رویکرد خطی ،زمان زیادی برای تکمیل پروژه نیاز باشد .و سختی زیادی برای اعمال تعغییرات وجود دارد .
-عدم تطابق با نیازهای واقعی :گاهی نیازهای واقعی مشتری در طول توسعه تغییر میکنند که در متدولوژی آبشاری بهسختی قابل اعمال
است.
بهطور کلی ،متدولوژی آبشاری برای پروژههایی مناسب است که نیازمندیها و مشخصات آنها بهخوبی تعریف شده و تغییرات کمتری در
طول زمان دارند .در مقابل ،برای پروژههای پویا و محیطهای پیچیدهتر ،متدولوژیهای چابک ()Agileمناسبتر باشند.
متدولوژی agile
متدولوژی Agileیا چابک ،یک رویکرد تکرارشونده و افزایشی برای توسعه نرمافزار است که بر انعطافپذیری ،همکاری ،و پاسخ سریع به
تغییرات تأکید دارد .این متدولوژی در واکنش به محدودیتهای متدولوژیهای سنتی مانند متدولوژی آبشاری ایجاد شده است .اصول و
ارزشهای متدولوژی Agileدر مانیفست Agileکه در سال 2001توسط گروهی از توسعهدهندگان نرمافزار منتشر شد ،بیان شدهاند.
.1برنامهریزی (:)Planning
-در ابتدای هر تکرار ،تیم توسعه و مشتری برای تعیین اهداف و اولویتهای تکرار جلسهای برگزار میکنند .این جلسه شامل انتخاب
وظایف از Backlogو تخمین زمان انجام آنها میشود.
.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 .تالش میکند تا فرآیندهای توسعه نرمافزار را با اتوماسیون
و نظارت مداوم بهبود بخشد تا به تحویل سریعتر ،با کیفیتتر و پایدارتر نرمافزار دست یابد .این متدولوژی به فرهنگ سازمانی ،شیوههای
کاری و ابزارهای خاصی متکی است که در زیر به تفصیل توضیح داده میشوند.
.2اتوماسیون (:)Automation
-یکی از اصول اساسی DevOpsاتوماسیون فرآیندهای تکراری مانند تست ،ساخت ،استقرار و مانیتورینگ است .ابزارهای اتوماسیون
مانند Jenkins، Ansible، Puppetو Chefبرای این منظور استفاده میشوند.
.1برنامهریزی (:)Planning
-در این مرحله ،تیمها نیازمندیها را جمعآوری و برنامههای توسعه را تدوین میکنند.
.2کدنویسی (:)Coding
-توسعهدهندگان کدهای نرمافزار را مینویسند و تغییرات را در مخازن کنترل نسخه (مانند )Gitاعمال میکنند.
.3ساخت (:)Building
-کدهای نرمافزار به بستههای قابل استقرار تبدیل میشوند .این مرحله شامل کامپایل ،لینک و ساختن بستههای اجرایی است.
.4تست (:)Testing
-کدهای ساخته شده بهطور خودکار تست میشوند تا از کیفیت و کارایی آنها اطمینان حاصل شود.
.5استقرار (:)Deployment
-کدهای تست شده به محیطهای تولیدی ( )Productionیا محیطهای پیشتولیدی ( )Stagingاستقرار مییابند.
.6عملیات (:)Operations
-نرمافزار در محیط تولیدی اجرا میشود و نظارت مستمر بر عملکرد آن انجام میگیرد.
.7نظارت (:)Monitoring
-سیستمها بهطور مداوم نظارت میشوند تا عملکرد ،قابلیت اطمینان و امنیت آنها تضمین شود.
مزایای :DevOps
ابزارهای :DevOps
چالشهای :DevOps
-تغییر فرهنگ سازمانی :نیاز به تغییرات فرهنگی در سازمان که ممکن است زمانبر باشد.
-پیچیدگی ابزارها :نیاز به دانش و تخصص در استفاده از ابزارهای متنوع .DevOps
-هماهنگی بین تیمها :نیاز به هماهنگی و همکاری مستمر بین تیمهای توسعه و عملیات.
متدولوژی DevOpsیک راهکار جامع و مؤثر برای بهبود فرآیندهای توسعه و بهرهبرداری نرمافزار است که با افزایش همکاری ،اتوماسیون
و نظارت مداوم ،به تحویل سریعتر و با کیفیتتر نرمافزار کمک میکند.
systems development life cycle (SDLC)
چرخه عمر توسعه سیستمها ( Systems Development Life Cycleیا )SDLCیک چارچوب ساختاریافته است که فرآیند
توسعه سیستمهای اطالعاتی را از آغاز تا پایان پوشش میدهد SDLC .به تیمهای توسعه کمک میکند تا پروژههای خود را بهصورت
سیستماتیک برنامهریزی ،اجرا و مدیریت کنند .این چارچوب شامل چندین مرحله است که هر یک بهطور دقیق تعریف شدهاند و هدف
آنها تضمین موفقیت پروژههای نرمافزاری است.
.1برنامهریزی (:)Planning
-اهداف و نیازمندیها :تعریف اهداف پروژه ،جمعآوری نیازمندیها و تعیین دامنه پروژه.
-مطالعه امکانسنجی :ارزیابی فنی ،اقتصادی و عملیاتی پروژه برای تعیین قابلیت اجرا.
.4پیادهسازی (:)Implementation
-کدنویسی :توسعه کدهای نرمافزار بر اساس طراحیهای تفصیلی.
-یکپارچهسازی :ترکیب و یکپارچهسازی اجزای مختلف سیستم.
.5تست (:)Testing
-تست واحد ( :)Unit Testingبررسی عملکرد هر واحد نرمافزار بهصورت جداگانه.
-تست یکپارچگی ( :)Integration Testingبررسی عملکرد یکپارچه اجزای مختلف سیستم.
-تست سیستم ( :)System Testingارزیابی کلی سیستم برای اطمینان از برآورده شدن نیازمندیها.
-تست پذیرش ( :)Acceptance Testingتأیید نهایی سیستم توسط کاربران نهایی.
.6استقرار (:)Deployment
-نصب و راهاندازی :استقرار سیستم در محیط عملیاتی و آمادهسازی برای استفاده.
-آموزش کاربران :آموزش کاربران نهایی برای استفاده از سیستم.
-ساختار منظم :ارائه یک چارچوب ساختاریافته برای مدیریت و اجرای پروژههای نرمافزاری.
-کنترل کیفیت :اطمینان از انجام تستها و بازبینیهای متعدد برای تضمین کیفیت نرمافزار.
-مستندسازی جامع :ایجاد مستندات دقیق و جامع در هر مرحله از پروژه.
-مدیریت ریسک :شناسایی و مدیریت ریسکها در طول فرآیند توسعه.
معایب :SDLC
-عدم انعطافپذیری :ممکن است تغییر نیازمندیها در مراحل پایانی دشوار و پرهزینه باشد.
-زمانبر بودن :فرآیندهای دقیق و مستندسازی ممکن است زمان زیادی نیاز داشته باشد.
-تأخیر در بازخورد :دریافت بازخورد کاربران ممکن است تا مراحل پایانی به تعویق بیافتد.
جمعبندی:
SDLCیک چارچوب جامع برای مدیریت و اجرای پروژههای توسعه نرمافزار است که به تیمها کمک میکند تا فرآیندهای خود را بهصورت
سیستماتیک و سازمانیافته پیش ببرند .با وجود چالشها و معایب SDLC ،همچنان یکی از پرکاربردترین روشها برای توسعه نرمافزارهای
با کیفیت و موفقیتآمیز است.
Life Cycle Management
مدیریت چرخه عمر ( )Life Cycle Managementدر حوزه فناوری اطالعات به فرآیند مدیریت تمامی مراحل حیات یک سیستم
نرمافزاری یا سختافزاری از آغاز تا پایان اشاره دارد .این مراحل شامل برنامهریزی ،توسعه ،بهرهبرداری ،نگهداری و بازنشستگی (از کار
انداختن) سیستم میشوند .هدف از مدیریت چرخه عمر ،بهینهسازی استفاده از منابع ،کاهش هزینهها و افزایش کارایی و قابلیت اطمینان
سیستمها است.
.1برنامهریزی و طراحی :شامل تعریف نیازمندیها ،طراحی سیستم ،ارزیابی امکانسنجی و برنامهریزی پروژه.
.2توسعه و پیادهسازی :شامل کدنویسی ،یکپارچهسازی ،تست و استقرار سیستم.
.3بهرهبرداری و نگهداری :شامل مانیتورینگ ،مدیریت تغییرات ،بهروزرسانیها و حل مشکالت.
.4بازنشستگی :شامل از کار انداختن سیستم ،انتقال دادهها به سیستمهای جدید و بازیابی منابع.
ابزارهای مختلفی برای کمک به مدیریت چرخه عمر سیستمها و نرمافزارها وجود دارند .در اینجا دو مورد از این ابزارها یعنی Foreman
و Red Hat Satelliteرا توضیح میدهیم:
Foreman
Foremanیک ابزار متنباز برای مدیریت چرخه عمر سرورها است که امکان مدیریت زیرساختهای فیزیکی و مجازی را فراهم میکند.
این ابزار قابلیتهای متنوعی برای خودکارسازی فرآیندهای مدیریت سیستمها دارد.
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محیطی که قبًال فعال بود (آبی) اکنون می تواند به عنوان آماده به کار عمل کند و آماده دریافت استقرار بعدی باشد .از
طرف دیگر ،برای صرفهجویی در هزینهها ،میتوان آن را از بین برد و زمانی که نسخه جدید برای آزمایش آماده شد ،مجددًا مستقر شد.
استقرار قناری
آماده سازی :یک مکانیسم مسیریابی مجدد ترافیک را تنظیم کنید که امکان هدایت بخشی از ترافیک را بر اساس معیارهای خاص به
نسخه دیگری از نرم افزار فراهم می کند.
استقرار :نسخه جدید را مستقر کنید و درصد کمی از پایگاه کاربران خود را در محیط تولید به آن نسخه وصل کنید.
مانیتورینگ :بازخورد کاربر و معیارهای عملکرد را برای نسخه جدید نظارت کنید و در مورد هر مشکلی که پیش میآید تکرار کنید.
انتشار :اگر نسخه جدید عملکرد خوبی داشت و بازخورد مثبت دریافت کرد ،به تدریج آن را برای بقیه کاربران خود منتشر کنید .در
صورت بروز مشکل ،انتشار را موقتًا متوقف کنید ،مشکالت را برطرف کنید و سپس روند را ادامه دهید.
استقرار سبز آبی در مقابل استقرار قناری:
اکنون که درک روشنی از نحوه عملکرد استقرار سبز-آبی و قناری داریم ،بیایید تفاوت های کلیدی بین این استراتژی ها و پیامدهای آنها را
برای پروژه ها را بررسی کنیم.
یکی از مزیتهای اصلی استقرار سبز-آبی سرعت و سهولت است که میتوانید نسخههای نرمافزار جدید را اجرا کنید .از آنجایی که شما دو
محیط یکسان دارید ،میتوانید تقریبًا فورًا بین آنها جابهجا شوید و زمان خرابی را به حداقل برسانید و تجربه کاربری یکپارچه را تضمین
کنید .مزیت دیگر این است که در اکثر برنامه ها ،پشتیبانی از استقرار آبی/سبز آسان است .این مورد برای قناری ها صدق نمی کند ،زیرا
برای پشتیبانی از استقرار قناری ،برنامه باید به گونه ای طراحی شود که دو نسخه مختلف را به طور همزمان اجرا کند.
از سوی دیگر ،استقرار قناری نیاز به رویکرد تدریجی و افزایشی دارد .قبل از عرضه نسخه جدید به کل پایگاه کاربر خود ،باید بازخورد کاربر
و معیارهای عملکرد را به دقت بررسی کنید ،و در صورت نیاز تنظیمات را انجام دهید .این می تواند یک فرآیند وقت گیرتر باشد ،اما امکان
کنترل بیشتر و کاهش ریسک را فراهم می کند .عالوه بر این ،قناری ها پیچیده تر هستند زیرا به مکانیزم تغییر مسیر ترافیک نیاز دارند که
می تواند به تدریج بخشی از ترافیک را به قناری منتقل کند .در مقابل ،استقرار آبی/سبز فقط به یک سوئیچ شبکه ساده یا متعادل کننده بار
نیاز دارد.
.2مدیریت ریسک
هر دو استقرار سبز-آبی و قناری برای به حداقل رساندن خطر معرفی نسخه های نرم افزار جدید طراحی شده اند ،اما آنها این کار را به
روش های مختلف میشود انجام داد .
استقرار سبز-آبی بر آزمایش و اعتبارسنجی کامل در محیط غیرفعال قبل از تغییر کاربران به نسخه جدید تمرکز دارد .این تضمین می کند
که هر مشکلی قبل از فعال شدن نسخه جدید شناسایی و حل می شود و احتمال بروز مشکل یا قطعی گسترده را کاهش می دهد .از سوی
دیگر ،استقرار قناری بر رویکرد تکراری تری متکی است ،به تدریج نسخه جدید را برای کاربران عرضه می کند و بر بازخورد و معیارهای
عملکرد آنها نظارت می کند .این به شما این امکان را میدهد تا مشکالت احتمالی را زودتر شناسایی و برطرف کنید ،قبل از اینکه بر کل
پایگاه کاربر شما تأثیر بگذارد.
استقرار Canaryاز نظر منابع کارآمدتر است ،زیرا شما فقط باید یک محیط مرحلهبندی را برای آزمایش راهاندازی کنید و نسخههای
جدید را در ابتدا در درصد کمی از پایگاه کاربران خود مستقر کنید .این باعث می شود که برای پروژه هایی با منابع محدود قابل دسترسی
تر باشد.
در صورت بروز مشکل در نسخه جدید ،هر دو استقرار سبز-آبی و قناری قابلیت بازگشت را ارائه می دهند ،اما روند بین دو استراتژی
متفاوت است.
با Deploymentسبز-آبی ،میتوانید به سرعت به نسخه قبلی بازگردید و کاربران را به محیط غیرفعال برگردانید .این را می توان
تقریبًا بالفاصله انجام داد و زمان خرابی را به حداقل رساند و تجربه کاربری یکپارچه را تضمین کرد.
استقرار Canaryبه شما این امکان را می دهد که در صورت شناسایی مشکالت ،عرضه را متوقف کنید ،مشکالت را برطرف کنید و سپس
روند را ادامه دهید .در صورت لزوم ،می توانید با هدایت کاربران آسیب دیده به نسخه اصلی ،به نسخه قبلی برگردید.
.5تأثیر کاربر
تأثیر روی کاربران عامل مهم دیگری است که باید هنگام انتخاب بین استقرار آبی-سبز و قناری در نظر گرفت.
از یک طرف ،استقرار سبز-آبی با آزمایش کامل نسخه جدید در محیط غیرفعال قبل از تغییر کاربران به آن ،تأثیر کاربر را کاهش می دهد.
این تضمین می کند که در طول فرآیند استقرار در معرض هیچ گونه مشکل یا اختاللی قرار نگیرند .اما در صورت بروز مشکل در استقرار
جدید ،کل پایگاه کاربر در معرض آنها قرار خواهد گرفت .استقرار سبز-آبی یک رویکرد همه یا هیچ است.
استقرار Canaryدرصد کمی از کاربران را در ابتدا در معرض نسخه جدید قرار می دهد ،به این معنی که ممکن است در حین تکرار در
انتشار با مشکالت یا اختالالتی مواجه شوند .با این حال ،این استراتژی به شما این امکان را میدهد که مشکالت را زودتر شناسایی و برطرف
کنید ،قبل از اینکه کل پایگاه کاربر را تحت تاثیر قرار دهند.
انتخاب بین استقرار آبی-سبز و قناری
انتخاب بین استقرار سبز آبی و قناری در نهایت به نیازهای خاص ،منابع و تحمل ریسک شما بستگی دارد.
اگر سرعت و سهولت استقرار را در اولویت میباشد ،منابع کافی برای حفظ دو محیط تولید یکسان دارید ،و به توانایی خود در آزمایش کامل
و تأیید نسخه های جدید اطمینان دارید ،استقرار سبز-آبی ممکن است بهترین انتخاب برای شما باشد.
از سوی دیگر ،اگر منابع محدودی دارید یا رویکرد تکراری و کنترلشدهتری را برای مدیریت ریسک ترجیح میدهید ،استقرار قناری ممکن
است مناسبتر باشد.
در نهایت ،هر دو استراتژی نقاط قوت و ضعف خود را دارند و بهترین انتخاب به نیازها و شرایط منحصر به فرد بستگی دارد .با درک تفاوت
های کلیدی بین استقرار سبز-آبی و قناری ،می توانید تصمیمی آگاهانه بگیریم که به بهترین وجه نیازهای ما را برآورده می کند و موفقیت
پروژه های نرم افزاری را تضمین می کند.
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هستند.
مدیران اغلب به منظور دستیابی به تعادل بین محدودیتها ،برنامهها و نیازها از برنامههای مدیریت پروژه استفاده میکنند .نرمافزارهای
آنالین به پیگیری پروژه و کارآمد کردن تیمها کمک میکنند .برای مثال ،اگر در زمانبندی پروژه با محدودیت مواجه شویم ،باید هزینهی
بیشتری صرف شود.
پروژه چیست؟
حال که توضیح دادیم مدیریت پروژه چیست و مدیر پروژه چه وظایفی دارد ،بهتر است با مفهوم پروژه آشنا شوید.
پروژه مجموعهای از فعالیتها است که هدف مشخصی دارد و باید در مدتزمان مشخصی کامل شود .زمانی که پروژه به پایان میرسد،
محصول یا خدمت خاصی شکل گرفتهاست .پروژهها یکتا هستند ،زیرا بر خالف بقیهی عملکردهای کسبوکار که مدام تکرار میشوند یا
ادامه پیدا میکنند ،به پایان میرسند.
.۱شروع
این مرحله ،شروع پروژه است .شما ایده را تدوین و منشور پروژه را ،که بیان میکند «پروژه دقیقا چه چیزی را ارائه میدهد؟» و :چگونه
میخواهید به آن برسید؟» ،تهیه میکنید.
این مرحله از پروژه ،در جایی که تیم ،ذینفعان و سایر افراد مرتبط را برای تعیین اهداف پروژه ،برنامه زمانبندی و فرایندهایی مانند
چگونگی ارتباطات و زنجیره ارتباطاتی ،گرد هم میآورید ،به اوج خود میرسد.
.۲برنامهریزی
مرحله بعدی ،جایی است که شما با تجزیه کارها به بخشهای کوچکتر و برآورد زمانی که صرف میکنند ،برنامه ریزی میکنید .خروجی
حاصل ،برنامه پروژه است که اغلب با گانت چارت ( )Gantt chartرسم میشود که ترتیب کارها و چگونگی وابستگی بینآنها ،نشان
داده میشود .این امر در حکم یک نقشه راه برای رسیدن به نتایج پروژه است.
.۳اجرا
اکنون که برای پروژه برنامه دارید ،میتوانید آن را اجرا کنید .در طول این مسیر ،کار را کنترل و نظارت میکنید تا مطمئن شوید از نظر
بودجه ،زمانبندی و کیفیت عملکرد ،طبق برنامه پیش میروید .همچنین برای شناسایی و تعدیل ریسکها ،مقابله با مشکالت و ثبت هر
تغییری ،تالش خواهید کرد .قسمت اعظم کار یک مدیر پروژه در این مرحله اتفاق میافتد.
.۴نظارت و کنترل
چهارمین مرحله ،نظارت و کنترل است که همزمان با فاز اجرا پیش میرود .نظارت و کنترل ،شامل اندازهگیری پیشرفت پروژه نیز میشود
تا مطمئن باشیم پروژه مطابق با بودجه و زمانبندی تعیینشده پیش میرود .برای اطمینان از تضمین کیفیت در پروژه ،از فرایند کنترل
کیفیت استفاده میشود.
سه موضوع مهم در پروژه ،معموال مربوط به زمان ،هزینه و محدوده هستند که به عنوان محدودیتهای سهگانه شناخته میشوند .هدف
ی است که اجازه ندهد این سه عامل از محدودهی تعیین شده پیشروی کنند.
اصلی این فاز ،اعمال کنترلهای دقیق
.۵پایان
کارهای پروژه باید بهدقت پایان یابند تا از آنچه بهدست آمده ،بهترین استفاده را ببرد و اطمینان حاصل شود که هرگونه درسآموختهای به
تیمها ،منتقل میشود .در این مرحله ،پذیرش مشتری جهت اتمام پروژه را دریافت خواهید کرد ،تمام اسناد و مدارک و گزارشهای نهایی را
به پایان میرسانید و موارد قابل تحویل را به تیم دیگری مانند تیم مدیریت عملیات تحویل میدهید.
محدودیتهای سهگانه یا مثلث مدیریت پروژه
محدودیتهای سهگانه که به نام مثلث مدیریت پروژه ( )Project Panagement Triangleنیز شناخته میشوند ،مفهومی است
که برای تمام پروژهها صادق است و به محدودیت در زمان ،هزینه و محدودهی پروژه اشاره دارد .این مفهوم سنگ بنای مدیریت پروژه است؛
به همین دلیل مدیران باید در مرحلهی برنامهریزی ( )planning phaseتوجه خاصی به زمانبندی ( )scheduleبرای اتمام پروژه،
بودجه و WBSیا ساختار شکست کار ( )work breakdown structureداشتهباشند .بیایید به نحوهی مدیریت محدودیتهای
سهگانه نگاهی بیندازیم.
.۱زمان
مدیران پروژه باید زمانی را که برای اتمام پروژه الزم است ،تخمین بزنند .به این منظور از ابزارهایی مثل نمودارهای پرت (PERT
)chartsیا مسیر بحرانی ( )Critical Path Methodکه به آن CPMنیز میگویند ،استفاده میشود .این کار باید در آغاز پروژه و
در مرحلهی برنامهریزی انجام شود تا اقدامات و زمان الزم برای به انجام رساندن تمام فعالیتها مشخص شود .وقتی پروژه به مرحلهی اجرا
رسید ،وضعیت پروژه باید تحتنظر باشد تا در صورت لزوم در برنامه تغییر ایجاد شود .زمانبندی ( )Schedule Managementاز
آن دسته از فرایندهای مدیریت پروژهای تشکیل میشود که مسئول حلوفصل محدودیتهای زمانی هستند.
.۲محدوده
محدوده شامل تمام کارهایی میشود که باید برای اتمام پروژه انجام شوند .در مرحلهی برنامهریزی با استفاده از ساختار شکست کار باید
محدوده را شناسایی کرد .اگر محدوده در ابتدای پروژه مشخص نشود ،ممکن است به دلیل فعالیتهای برنامهریزینشده در مرحلهی اجرای
پروژه گسترش یابد .این پدیده را خزش محدوده مینامند که ممکن است باعث شکست خوردن پروژه شود .فرایند مدیریت محدوده پروژه
این مسئله را کنترل میکند.
.۳هزینه
هر پروژهای هزینههای زیادی دارد .مدیران پروژه مسئول تخمین زدن ،بودجهبندی و کنترل هزینهها هستند .هدف نهایی آنها این است که
پروژه را با بودجهای مقبول اجرا کنند .تمام این مسئولیتها مربوط به مدیریت هزینه است.
هیچ راهنمای مدیریت پروژهای نیست که محدودیتهای سهگانه را ذکر نکرده باشد .محدودیتهای سهگانه در مدیریت پروژه به زمان،
هزینه و محدوده اشاره دارد .زمان ،برنامه شما است ،محدوده شامل وظایفی است که برای رسیدن به اهداف پروژه مورد نیاز است و هزینه
موارد مالی و بودجه را شامل میشود .میبینید که این امر برای هر پروژهای بسیار مهم است .سه ضلع این مثلث ،همیشه بر یکدیگر تاثیر
میگذارند .اگر بهموقع عقبنشینی نکنید ،مجبور به تنظیم مجدد محدوده و هزینه هستید.
موفقیت هر پروژه بر این سه رکن استوار است .اگرچه مدیریت این محدودیت سهگانه ،متضمن موفقیت پروژه نیست و عوامل زیادی وجود
دارد با این حال ،این سه رکن ،باید مدیریت شوند تا مشکلی به وجود نیاید.
مدیر پروژه کیست؟
حال که میدانید تعریف مدیریت پروژه چیست و چه وجوهی دارد ،در ادامه قصد داریم شما را به صورت دقیقتر با مدیر پروژه آشنا سازیم.
مدیر پروژه کسی است که وظیفهی برنامهریزی و اجرای پروژه را بر عهده دارد و مسئول هدایت تیم و سازماندهی کارهاست .در شرکتهای
رسمیتر و سازمانیافتهتر و در پروژههای پیچیدهتر مدیران پروژه معموال متخصصانی ( )PMPهستند که گواهینامهی معتبری از سازمان
مدیریت پروژه ( )PMIدارند.
در سازمانهای کمتر رسمی ،مثل کسبوکارهای کوچک ،مدیر پروژه نیازمند گواهینامه نیست .مدیران پروژه مسئول تمام فرایندهای
مدیریت پروژهای هستند که در تمام چرخهی حیات پروژه رخ میدهند .به زبان ساده ،مدیران پروژه بر برنامهریزی ،اجرا ،نظارت و پایان
دادن به پروژهها نظارت میکنند؛ با وجود این ،بیشتر مدیران پروژه نقشها و مسئولیتهای مشترکی دارند.
حال که میدانید مدیریت پروژه چیست و مدیر پروژه چه کسی است ،بهتر است با وظایف مدیر پروژه آشنا شوید .برخی از وظایف معمول
مدیر پروژه عبارتاند از:
•مدیریت محدوده ( :)Scope Managementتعریف کار الزم برای کامل کردن پروژه؛
•مدیریت فعالیتها ( :)Task Managementبرنامهریزی برای فعالیتها و تعیین تحویلدادنیها؛
•مدیریت منابع ( :)Resource Managementاستفاده از افراد ،سرمایهها ،مواد و بقیهی منابع به شکلی کارآمد؛
•مدیریت تیم ( :)Team Managementتشکیل تیم و رهبری آن؛
•مدیریت زمانبندی ( :)Schedule Managementتحلیل مدت فعالیتها به منظور مشخص کردن برنامهی زمانی
برای فعالیتهای پروژه .وقتی پروژه به مرحلهی اجرا رسید ،وضعیت پروژه باید تحتنظر باشد تا در صورت لزوم در برنامه تغییر
ایجاد شود؛
•مدیریت کیفیت ( :)Quality Managementتعیین سیاستهای کیفیت برای محصوالت و خدمات پروژه و ب ه کار
بستن فرایندهای تضمین و کنترل کیفیت از وظایف مدیریت پروژه؛
•مدیریت هزینهها ( :)Cost Managementتخمین هزینهها و تعیین بودجه؛
•مدیریت ذینفعان ( :)Stakeholder Managementاقناع ذینفعان با پاسخ دادن به انتظارات و توقعاتشان و ارتباط
گرفتن با ایشان در حین پیشرفت پروژه؛
•مدیریت ریسک ( :)Risk managementشناسایی و نظارت بر ریسکهای پروژه و ب ه حداقل رساندن آنها؛
•گزارش وضعیت ( :)Status Reportingنظارت و پیگیری عملکرد و پیشرفت پروژه از طریق تنظیم گزارش و اسناد دیگر.
نرم افزار مدیریت پروژه بستری است که به مدیران در امر برنامهریزی ،نظارت و گزارش پروژه کمک میکند .همچنین به تیمها کمک
میکند تا کار خود را مدیریت کرده و با یکدیگر همکاری کنند .یک نرمافزار خوب ،تیمهای پروژه را جهت مدیریت تمام جزئیات مربوط به
یک پروژه موفق ،توانمند میسازد.
امروزه طیف گستردهای از ابزارهای مدیریت پروژه ،هم آنالین و هم موبایل ،برای کمک به شما در مدیریت پروژه ها ،در دسترس قرار دارند.
در ادامه به ابزارهای مدیریت پروژه میپردازیم.
نمودار گانت
نسخه آنالین فاصله زیادی با نسخه دستی دارد .نمودارهای امروزه گانت ،تعاملی و مشارکتی هستند .اما آنها ساختار اصلی خود که شامل
یک صفحه گسترده در سمت چپ و جدول زمانی در سمت راست است ،حفظ کردهاند .وظایف در سمت چپ لیست شده و جدول زمانی پر
میشود ،یک نوار وضعیت از تاریخ شروع تا تاریخ پایان کشیده شده است .از این نوار برای برنامهریزی و زمانبندی پروژه استفاده میشود.
داشبورد
ساخت داشبورد میتواند آسان یا پیچیده باشد .اساسا ،داشبورد مجموعهای از نقاط دادهای مانند بودجه ،وضعیت فعالیتها ،حجم کار تیم و
وضعیت کلی برنامه است .این ابزار ،یک نمای سطح باال از پروژه و پیشرفت آن ارائه میدهد.
داشبورد ابزار ایدهآلی برای بهروز نگهداشتن ذینفعان درباره پروژه است؛ زیرا آنها معموال نمیخواهند جزئیات زیادی را بدانند .بعضی از
داشبوردها باید دستهای از گزارشات متفاوت را بهطور دستی جمع کنند و سپس آنها را در یک برنامه دیگر سرهم کرده تا داشبورد ایجاد
شود.
لیست فعالیتها
از ابزارهای مدیریت پروژه برای مدیریت فعالیتها ،تخصیص و پیگیری آنها در حین پروژه استفاده میشود تا از برآوردهشدن اهداف
زمانبندیشده اطمینان حاصل شود .یک ابزار مدیریت پروژه خوب ،به تیمها امکان کنترل بیشتر فعالیتها و به مدیران شفافیت بیشتری
درباره فرایندها میدهد
تقویم پروژه
تقویم پروژه یک روش عالی برای ردیابی تاریخ هر مایلستون ( )Milestoneدر پروژه است .این تقویم ،با برنامه زمانبندی و جدول زمانی
همسو است و میتواند تعطیالت ،روزهای مرخصی و دیگر منابع زمانبندی را مشخص کند.
تابلو کانبان
کانبان یک ابزار گردش کار بصری است که بخشی از روش تولید بههنگام ناب است .به این معنی که کار فقط در زمانی که منابع و ظرفیت
وجود داشته باشد ،آماده است.
کانبان از یک تابلو با ستونهایی که نشاندهنده چرخه تولید و کارتهایی در زیر ستونها که نشاندهنده وظایف است ،تشکیل شده است.
با برنامهریزی ،اجرا و تکمیل کار ،کارتها از یک ستون به ستون دیگر منتقل میشوند .کانبان ،شفافیت را فراهم میکند و تیمها بر روی کار
متمرکز میشوند.
خواه تیم شما دارای تعداد زیادی کارمند از راه دور یا مشتری خارجی باشد ،با استفاده از ابزارهای همکاری میتوانید زمان پاسخگویی به
ایمیل را کاهش داده و به برقراری ارتباطات حیاتی پروژه کمک نمایید .این امر بهویژه میتواند هنگام بررسیهای بعد از اتمام پروژه یا هنگام
جستجوی پروندههای مهم پروژه و مکالمات پروژههای بزرگ ،مفید باشد.
•حامی پروژه :این شخص مسئول نتیجه است .آنها اغلب مدیر ارشدی هستند که ایده پروژه را مطرح کردهاند و تیم آنها از این
مزیت بهرهمند میشود .بهعنوان مثال ،مدیر فروش ،از پروژ های برای معرفی ابزار آنالین فروش حمایت میکند .در نهایت ،آنها
مشتریان پروژه را نشان میدهند .بسته به سازمان ،سطح مختلفی از حامیان پروژه مانند حامی اجرایی پروژه نیز وجود دارند؛
•مدیر پروژه :این شخص مسئول هدایت تیم و سازماندهی کار است .در ساختارهای رسمیتر و سامانیافته و همچنین بزرگتر و
پیچیدهتر ،مدیران پروژه دارای گواهینامه هستند .در سازمانهای غیررسمیتر ،مدیران پروژه به گواهینامه احتیاج ندارند .مدیران
پروژه وظیفه برنامهریزی ،نظارت و گزارش پروژه شامل برنامهریزی منابع ،برآورد هزینه و ...را دارند؛
•تامینکننده :شخصی که در حال انجام کار است ممکن است یک تامینکننده داخلی مانند تیم توسعه یا یک پیمانکار خارجی
باشد .تامینکننده در تیم پروژه توسط نقطه تماس اصلی که ممکن است کارشناس فنی یا مدیر پروژه باشند ،به تیم معرفی
میشود؛
•عضو تیم :شخصی که برای انجام بخشی از پروژه تخصیص داده شده است .اعضای تیم افرادی حرفهای هستند که برای دستیابی
به اهداف پروژه کار میکنند .آنها وظیفه دارند که موارد قابل تحویل را تکمیل کنند و با کاربران در تعامل باشند تا نیاز آنها را
درک کنند .غالبا این افراد موظف به مستندسازی فرایند هستند؛
•ذینفعان :فرد یا گروهی که منافع یا سهمی در پروژه دارند .ممکن است ذینفعان گروه یا آژانسی داخلی در یک سازمان یا عموم
مردم در یک پروژه عامالمنفعه باشند .مدیر پروژه معموال برای برقراری ارتباط بین پروژه و ذینفعان ،در طول چرخه حیات پروژه،
کار میکند و حین مدیریت انتظارات آنها ،به دنبال بازخورد درباره دستاوردها و عملکرد است؛
•مشتریان :گروه یا فردی که پروژه یا مولفه اصلی و نهایی پروژه به آنها تحویل داده میشود.
متدلوژیهای مدیریت پروژه
برای نجات شما از دوباره کاری ،طی سالها افراد با روشهایی آزموده ،به اجرای پروژه پرداختهاند .در زیر برخی از رویکردهای معمول
مدیریت پروژه بیان شدهاند.
این روش ،برای پروژههایی که الزامات آنها واضح است یا تغییرات کمی در طول مسیر انتظار میرود ،خوب است .زمانی که واقعا نمیدانید
چگونه به نتیجه نهایی برسید و الزامات مشخص نیست ،از این روش اجتناب کنید.
ت دارند ،خوب است .هنگامی که در فضای سنتی کار میکنید و تغییر در
این روش برای پروژههایی که نیاز به ترکیب سریع و تکرار فعالی
روشهای چابک هنوز تکمیل یا حتی درک نشده است ،از این روش اجتناب کنید.
روش ناب ،برای پروژههای بهبود فرایند و اقدامات مهمی که نیاز به تمرکز دارند ،مفید است .هنگامی که مطمئن نیستیم که بخشهای
کاری میتوانند با تالش در سادهسازی و استفاده آسان از فرایندها ،سودمند باشند ،از این روش اجتناب میکنیم.
کانبان ()Kanban
کانبان روشی بصری برای کمک به مدیر پروژه است که جریان کار را با قراردادن وظایف روی ُبرد کانبان مدیریت میکند تا جریان کار و
پیشرفت پروژه برای همهی مشارکتکنندگان شفاف باشد .کانبان ناکارآمدیها را بهتر میکند و برای برنامهریزی تولیدی ناب در پروژههای
چابک استفاده شدهاست.
با ظهور تابلوهای برنامهریزی بصری مانند ترلو ،کاربردهای جدیدی برای ابزارها و روشهای کانبان ایجاد شدهاست .تیمهای چابک از
تابلوهای کانبان برای استوریبرد کردن داستانهای کاربران و برنامهریزی بکالگ در توسعهی نرمافزاری استفاده میکنند.
در این روش اعتقاد بر این است که تالش مداوم برای دستیابی به نتایج پایداری که انتظار دستیابی به آنها را داریم ،بیشترین اهمیت را
برای موفقیت دارد .میتوان فرایندها را تعریف کرد و ارتقا داد .الزم است تمام سازمان ،از باال تا پایین ،مشارکت کنند تا کیفیت پروژهها
حفظ شود.
مدیران پروژه ،رهبر هستند .آنها باید عالوه بر برنامهریزی ،نظارت و گزارش پیشرفت تیم ،به گروه خود انگیزه بدهند .این شغل نیاز به
مهارتهای زیادی دارد .مدیر پروژه باید دارای مهارت های ارتباطی قوی باشد و بتواند به روشنی با ذینفعان و تیم پروژه ارتباط برقرار کند.
مدیران پروژه رسمی بهطور معمول از طریق نمایندگی مانند PMIیا PRINCE2گواهینامه دریافت میکنند .پس از صدور گواهینامه،
آنها باید گواهینامههای خود را با آموزشهای اضافی ،جهت گردآوری واحدهای توسعه حرفهای ( ،)PDUحفظ نمایند.
همانطور که قبال ذکر شد ،استانداردهای صالحیت مدیران پروژهای که گواهی شدهاند ،اخیرا گسترش یافتهاند تا مهارتهای تجاری و
رهبری بیشتری را شامل شوند .گواهینامه PMIو استانداردهای PDUرا میتوانید در کتاب راهنمای پیکره دانش مدیریت پروژه (
)PMBOKیا در سایت آنها پیدا کنید .اما دستیابی به جنبههای فنی مدیریت پروژه ،بدون آموزش رسمی گواهینامه ،دشوار است.
رشته مدیریت پروژه به صورتی که امروز هست و توجه را معطوف خود کرده ،در دهه ۱۹۵۰ظهور کرد .در آن زمان ،بسیاری از صنایع
فرایندهای ساختاریافتهای را برای مدیریت و تولید ،پیادهسازی کرده بودند .نمودار هنری گانت ،مورد استفاده قرار میگرفت و گزینه محبوب
برای برنامهریزی بود.
از دهه ۱۹۵۰به بعد ،مردم سالها مدیریت پروژه انجام میدادند و اغلب از روشهای سفارشی که خودشان طراحی میکردند ،استفاده
میکردند .این موضوع زمانی که راهنمای پیکره دانش مدیریت پروژه ( )PMBOKتوسط موسسه PMIبهعنوان استاندارد ANSIدر
سال ۱۹۹۸معرفی شد ،تغییر کرد.
در چند سال گذشته نیز تغییرات بزرگی در مدیریت پروژه دیده شده است .اکنون یک استاندارد ISOبرای مدیریت پروژه وجود دارد که
در سال ۲۰۱۲ارائه شد .اما بزرگترین تغییر در بین تمام این تغییرات ،تغییر دیدگاه از یادگیری زمانبندی و مهارتهای فنی برای مدیریت
پروژهها به درک این موضوع بود که افراد در پروژهها اهمیت دارند.
بهطور سنتی ،مدیران حرفهای پروژه نیاز به اثبات مهارتهای اصلی در مدیریت پروژه فنی داشتند .اکنون آنها ملزم به اثبات مهارتهای
گستردهتری در مدیریت کسبوکار ،مانند استراتژی و روابط مشتری یا مهارتهای رهبری مانند مربیگری و هوش هیجانی هستند.
مدیریت پروژه :پایان یک آغاز
به نظر میرسد که این پایان کار است؛ اما واقعا اینطور نیست .هر کسی که بهطور جدی وارد مدیریت پروژه میشود ،میداند که ما فقط
نوک این کوه یخی را لمس کردهایم .مجموعهای از دانستههایمان پیرامون مدیریت پروژه وجود دارد که فقط بهطور سطحی به آن پرداختیم.
اما اکنون میدانید که چه عناصری در مدیریت پروژه وجود دارند و در صورت عالقه ،این موضوع میتواند شما را جذب یا ناامید کند .آنچه
که میتوانیم تضمین کنیم این است که هرگز خسته نخواهید شد .فقط مغرور نباشید؛ چیزهای زیادی برای یادگیری وجود دارد .همیشه
کنجکاو باشید.
مایلستون ( )Milestoneچیست و چگونه
آن را در پروژه مشخص کنیم؟
مایلستون های پروژه یا نقط عطف پروژه ،نقاط اصلی پیشرفت پروژه را در مسیر رسیدن به هدف موردنظر مشخص میکنند و میتوانند در
نتیجهی تالشهای فردی یا گروهی تیم رخ دهند .تاریخ تخمینی مایل استون پروژه به جدول زمانی پروژهی کلی بستگی دارد؛ بنابراین،
مدیریت پروژه در توسعه مایلستون ها ضروری است .در این مطلب معنی معنی مایلستون ( )Milestoneدر کنترل پروژه را توضیح دادیم
و به این پرداختیم که مایلستون چیست و چطور باید آنها را در پروژه مشخص و پیگیری کرد.
معنی مایلستون ( )Milestoneدر کنترل پروژه چیست؟
تهای چشمگیر را در پروژهی مربوط نشان میدهد .تعیین مایل استون ها ممکن است نسبت به
مایلستون پروژه هدفی است که پیشرف
تالش برای تکمیل هدف کلی ارجح باشد ،بهویژه هنگامی که پروژه طوالنیمدت بوده یا اینکه چندین وجه داشتهباشد .در حالت کلی،
مایلستونها رویدادهایی هستند که تا پایان پروژه بهتدریج ایجاد میشوند.
در ادامه برای درک بهتر معنی Milestoneدر کنترل پروژه ،مثالی از مایل استون های پروژه در صنعت ساختوساز را بررسی میکنیم.
هنگامی که مدیران پروژه بر پروژههای ساختمانی نظارت میکنند ،باید مراحل خاصی را دنبال کنند؛ برای مثال ،اولین مایلستون پروژه
میتواند تکمیل طبقات طی ۱هفته باشد؛ پس از آن ،مرحلهی بعدی ممکن است تکمیل سقف ساختمان ظرف مدت ۱ماه باشد .در پایان
ماه جاری ،مایل استون دیگری وبرای سیستم گازرسانی و وصل کردن آن در نظر گرفته میشود .در واقع ،همهی این مثالها مایلستون های
اصلی در این پروژه هستند ،زیرا باید به ترتیِب خاصی اتفاق بیفتند تا در نهایت ،پروژه تکمیل شود.
مایل استون ها معموال انگیزهی تیم را برای رسیدن به اهدافی مشترک حفظ میکنند .به طور معمول ،مدیران پروژه این مایلستون ها را در
ابتدای پروژه ایجاد کرده و برای اطمینان از منطقی بودن آنها ،با سایر اعضای تیم پروژه بحث و تبادلنظر میکنند .مایل استون های پروژه
با فعالیتهای پروژه متفاوت هستند ،زیرا اعضای تیم فعالیتهای کوچک پروژه را بهصورت روزانه انجام میدهند؛ به عبارت دیگر،
فعالیتهای پروژه ممکن است شامل انجام تدارکات در طی مراحلهی ساخت یا برقراری چند تماس تلفنی با دیگران باشند ،اما مایلستون ها
مراحل مهمی در پروژه هستند که تکمیل هریک از آنها در نهایت به تکمیل پروژه کلی منتهی میشود.
صرفنظر از اینکه هدف نهایی پروژه ،نمونهی ساختوساز فوق مثال خوبیست .بسته به نوع پروژهای که در آن کار میکنید و افرادی که در
آن مشارکت دارند ،برخی از مایل استون ها میتوانند تصویب پروژه ،بررسی نیازها و تأیید پروژهی نهایی را شامل شوند.
اکنون که توضیح دادیم مایلستون چیست ،در ادامهی مطلب به چگونگی مشخصکردن مایل استون در پروژه میپردازیم.
اکنون که دریافتید مایل استون چیست و معنی Milestoneدر کنترل پروژه را توضیح دادیم ،در ادامه به راههای مشخص کردن آن
خواهیم پرداخت .روشهای زیادی وجود دارند که از طریق آنها میتوانید مایلستون های پروژه را تنظیم و پیگیری کنید .در ادامه،
ایدههایی را ارائه میکنیم که میتوانید آنها را برای سهولت در تعیین مایل استون های پروژهی بعدی خود به کار بگیرید.
یکی از اولین مراحل ضروری ،شناسایی مایلستون ها در پروژه است .بهطور معمول ،میتوانید این کار را با تصمیم گیری درمورد بزرگترین
دستاوردهای پروژه انجام دهید .همهی کارهایی که باید انجام شوند را بنویسید و سپس ببینید که آیا هدف یا محصول قابلتحویلی پیِش
رویتان دارید یا این مورد یکی از کارهای مربوط به پروژه به شمار میآید؛ پس از آن ،باید تصمیم بگیرید که مایل استون موردنظر تأثیر
مهمی در رسیدن به مهلت نهایی پروژهی کلی دارد یا خیر؛ اگر پاسخ منفی باشد ،احتماال آیتم موردنظر یکی از کارهای مربوط به پروژه
است.
در مقابل ،لحظات مهمی در پروژه وجود دارند که به پیشرفت آن کمک میکنند .به احتمال زیاد ،در چنین شرایطی آیتم موردنظر یکی از
ن پروژه است.
مایلستون های پروژه است .اگر پروژه به مرحلهای برسد که به بررسی توسط ذینفعان نیاز داشتهباشد ،این مورد نیز مایل استو
ب ه طور کلی ،وقایعی که از اهمیت بیشتری در پروژه برخوردار هستند ،باید نوشته شوند تا تمام اعضای تیم بتوانند آنچه در تالش برای
انجامش هستند را ببینند و برای آن برنامه ریزی میکنند؛ عالوه بر این ،برخی از مایلستون های پروژه ،نسبت به بقیه ،اهمیت بیشتری
دارند؛ بنابراین ،اعضای تیم روی مایل استون های کوچکتر کار میکنند و در عین حال ،مایلستون های مهمتر به توجه مدیر پروژه احتیاج
دارند تا رسیدگی به آنها را بر عهده بگیرد.
در واقع ،اعضای تیم باید بتوانند بهصورت دورهای به برنامهی پروژهی کلی مراجعه کنند تا از رعایتکردن ضرباالجلها مطمئن شوند؛ از
این رو ،تهیهی لیستی بصری از مهلتهای پایان پروژه بهعنوان مایل استون ،روش خوبی برای توجه بیشتر به آنهاست؛ همچنین ،برای
نها در برنامههای پروژهی کلی مشخص باشند؛
مشخص کردن این مایلستون ها میتوانید از رنگ یا َاشکال دیگری استفاده کنید تا محل آ
عالوه بر این ،تمام کارهایی را که هریک از تیمها برای تکمیل هر مرحلهی مهم باید انجام دهند ،لیست کنید.
برای هر مایل استون پروژه نیز باید همهی کارهای موردنیاز را در گروهی لیست کنید تا هنگام اتمام آنها ،موارد تعیینشده را عالمت بزنید؛
ن مهمی پیِش رو دارید ،آن را با اعضای تیم مطرح کنید تا مطمئن شوید که همه از وظایف مختص
برای مثال ،اگر طی ۲هفته مایلستو
خودشان برای کمک به تیم در جهت تکمیل این مرحله آگاهی کافی دارند؛ همچنین ،با نزدیک شدن به مهلت مقرر ،باید مطمئن شوید که
بیشتر کارهای تعیینشده به پایان رسیدهباشند.
تا به اینجا با مایل استون و نحوهی ایجاد آن در پروژه آشنا شدید .در ادامه پاسخ میدهیم راههای پیگیری کردن مایل استون چیست.
در شرایطی که گروهی از افراد در تیمی تحتنظر مدیر پروژهی یکسانی فعالیت میکنند ،باید از روشی یکسان برای پیگیری مایلستون ها و
مهلت پایانی پروژه استفاده شود .این موضوع ،ب ه طور ویژه ،برای رهبر تیم حائز اهمیت است ،زیرا در این صورت اعضای تیم میتوانند به
طور سازمانیافته با یکدیگر کار کنند.
بنابراین ،روشی را برای پیگیری آنها انتخاب کنید که برای تیمتان بهترین گزینه باشد؛ از جمل ه این روشها میتوان به نوشتن روی کاغذ،
برقراری ارتباط با یکدیگر از طریق ایمیل یا استفاده از سیستم مدیریت آنالین اشاره کرد .در ادامه ،نمونههایی از روشهای پیگیری
مایلستون را آوردهایم:
امروزه ،سیستمهای مدیریت آنالین نیز برای پیگیری مایلستون های اصلی پروژه رواج پیدا کردهاند .برنامههای رایگان و پولی مختلفی برای
این امر ایجاد شدهاند و تمامی کسانی که در سیستم موردنظر ثبتنام کنند ،میتوانند به آن دسترسی پیدا کنند.
ب ه طور کلی ،این سیستمها امکان تقسیم مایل استون های پروژه بین اعضای تیم و مشخص کردن کارهای فردی را در لیستی جداگانه
فراهم میکنند؛ همچنین ،سیستمهای مدیریت آنالین این امکان را فراهم میکنند تا هر فردی از اعضای تیم ،که مایلستونی به او اختصاص
داده شدهاست ،در صورت دستیابی به مرحلهی موردنظر ،بتواند با عالمتی تکمیلشدن آن را مشخص کند.
عالوه بر این ،سیستمهای مدیریت آنالین به اعضای تیم این امکان را میدهند تا اشخاص مسئول انجام کارهای مختلف پروژه را پیگیری
کنند که این موضوع به بهبود ارتباطات آنها نیز کمک میکند .همهی اعضا نیز با مشاهده مایلستون ها میتوانند پیشرفت همتیمیهای
خود را ببینند تا مطمئن شوند که آنها نیز اهداف پروژهی کلی را دنبال میکنند.
جمعبندی
استفاده از روشی برای تنظیم و پیگیری مایل استون های پروژه ،هنگامی که درگیر پروژهای بزرگ هستید ،بسیار مهم است .در واقع،
مایلستون کمک میکند تا اهداف و مهلتهای پایان پروژه را با همهی اعضای تیم بررسی کنید و آنها را به طور منظم با یکدیگر چک
کنید .با انجام این کار مطمئن میشوید که پروژه را در مهلت مقرر به پایان میرسانید و انتظارات مشتریانتان را نیز برآورده میکنید.
منبع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
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نمونه نرم افزاری مشتری را برای آنها میزبانی و مدیریت می
کند.
را قادر میسازد تا به طور یکپارچه با هم کار کنند و مجموعهای از ابزارها و خدماتی را ارائه میدهد که برای هر مرحله از چرخه عمر توسعه
نرم افزار ارائه میشود.
آژور دواپس (که اغلب توسط کاربران به اختصار ADOنامیده میشود) کل فرآیند را از برنامهریزی و کدنویسی گرفته تا آزمایش و
استقرار ساده میکند و تضمین میکند که پروژههای نرمافزاری به موقع و بدون افت کیفیت ارائه میشوند.
شکل : 6چرخه CI/CDدر 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 ،سرویسی است که تست دستی و اکتشافی ،ردیابی بازخورد و تست واحد و عملکرد را تسهیل
میکند .همچنین از آزمایش مداوم پشتیبانی میکند و اطمینان حاصل میکند که پروژههای نرمافزاری شما کامًال آزمایش شده و آماده
استقرار هستند.
Jenkinsیک ابزار متنباز برای اتوماسیون وظایف مختلف در فرآیند توسعه نرمافزار است که به خصوص برای پیادهسازی پیوسته (
)CIو تحویل پیوسته ( )CDاستفاده میشود .این ابزار در ابتدا توسط Kohsuke Kawaguchiتوسعه داده شد و اکنون توسط
جامعهای گسترده از توسعهدهندگان و شرکتها پشتیبانی میشود.
متنباز و رایگان 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یک ابزار سرور ( CI/CDادغام مداوم/تحویل مداوم) توسعهیافته توسط Atlassianاست که برای خودکارسازی ساخت،
تست ،و انتشار کد نرمافزار به کار میرود .این ابزار به طور خاص با سایر محصوالت Atlassianمثل JIRAو Bitbucketادغام خوبی
دارد .در ادامه به برخی از امکانات و ویژگیهای Bambooاشاره میکنیم:
ویژگیها و امکانات :Bamboo -4-1
ادغام با ابزارهای : Atlassia
: JIRA-به شما امکان میدهد که کارها و مشکالت نرمافزاری خود را پیگیری کنید و وضعیت آنها را به طور خودکار به روز کنید.
: Bitbucket -امکان ادغام با مخازن Gitدر Bitbucketرا فراهم میکند تا بتوانید به راحتی کد خود را مدیریت کنید و از
قابلیتهای کشیدن درخواست ( )pull requestاستفاده کنید.
-امکان ادغام با Dockerبرای ایجاد و مدیریت کانتینرها و Kubernetesبرای مدیریت ارکستراسیون کانتینرها.
Travis CIیک سرویس ( CI/CDادغام مداوم/تحویل مداوم) مبتنی بر ابر است که به توسعهدهندگان کمک میکند تا به طور خودکار
کد خود را پس از هر تغییر ،تست و استقرار دهند .این ابزار برای پروژههای منبع باز رایگان است و به خوبی با GitHubادغام میشود .در
ادامه به برخی از ویژگیها و امکانات Travis CIمیپردازیم:
CircleCIیک سرویس ( CI/CDادغام مداوم/تحویل مداوم) قدرتمند است که به توسعهدهندگان کمک میکند تا فرآیندهای
ساخت ،تست و استقرار کد خود را به صورت خودکار انجام دهند CircleCI .از محبوبیت زیادی در بین توسعهدهندگان برخوردار است و
به دلیل امکانات گسترده و انعطافپذیری باال شناخته شده است .در ادامه به بررسی ویژگیها و امکانات CircleCIمیپردازیم:
معایب: -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ادغام
میشود و میتواند به طور خودکار تغییرات در مخزن کد را شناسایی و پردازش کند.
: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 مقایسه پلتفرمهای
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
نیازمند استفاده از ابزارهای مدلسازی و تبدیل مدل به کد و هم