Continuous Integration

Continuous Integration

بسیاری از تیم های تولید و پشتیبانی نرم افزار از مشکلاتی همچون تاخیر در تحویل نرم افزار، نارضایتی مشتری از کیفیت نرم افزار، ابهام در میزان پیشرفت پروژه و مسائلی از این دست رنج می برند. احتمالا شما نیز تا به حال، چالش های مشابه موارد زیر را تجربه کرده اید

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

 

اطمینان از کیفیت محصول نرم افزاری مستلزم طی مراحل مختلف تست و ارزیابی است. متدلوژیهای نرم افزاری رهنمودهای متفاوتی برای تولید محصولات با کیفیت ارائه می کنند. متدلوژی XP به عنوان پایه متدلوژیهای چابک و محبوب امروزی ۵ ارزش محوری «سادگی»، «ارتباط»، «بازخورد»، «شجاعت» و «احترام» را مطرح می کند.

  • بازخورد (Feedback) مهمترین رکن یک سیستم بالنده است.
  • چابکی میوه اقدامات شجاعانه و جسورانه است.
  • شجاعت و جسارت وقتی بجاست که مکانیزم بازخورد کارآمدی، اشتباهات را به سرعت نمایان کند.

بنابراین در تعیین گامهای کلان یا جزئی در فرایند توسعه باید سعی کنیم مسیرهایی طراحی کنیم که بازخورد حداکثری در زمان حداقلی حاصل شود.
‫خودکارسازی مکانیزم ساخت (Build Automation)، تولید اسکریپتهای تست واحد (Unit Testing) و تست یکپارچه سازی (Integration Test) می تواند به افزایش بازخورد کمک کند. در عین حال اجرای کامل این مراحل زمانبر خواهد بود. خوشبختانه امروزه ابزارهای نوین Continuous Integration یا CI به ما درمدیریت اجرای این روند کمک می کنند.

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

هر ادغام توسط یک build اتوماتیک (که شامل اجرای تست ها نیز می باشد) تایید می شود این امر موجب می شود تا خطاهای ادغام زودتر خودشان را نشان دهند.

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

 

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

مقاله اصلی martin fowler در این زمینه در سال ۲۰۰۰ را می توانید اینجا بیابید.

ریشه عبارت “ادغام مداوم” از روش Extreme Programming (به عنوان یکی از ۱۲ فعالیت اصلی ) می باشد. با اینکه ادغام مداوم یک دستورالعمل می باشد و ابزار خاصی نیاز ندارد، اگر از یک سرور به عنوان سرور ادغام مداوم  استفاده شود، بسیار مفید خواهد بود.

یکی از اولین سرورهای مناسب این کار نرم افزار متن باز CruiseControl می باشد که در شرکت ThoughtWorks متولد شده و هم اکنون توسط جامعه بزرگی بصورت متن باز توسعه داده می شود. امروزه سرورهای CI زیادی وجود دارند که می توان از آنها استفاده کرد. از دیگر سرورهای CI می توان به Jenkins  , TeamCity, Travis و Go اشاره کرد.

سرورهای CI به تیمهای نرم افزاری کمک می کند مراحل متعدد ساخت و ارزیابی کیفیت محصول را با هر تغییر در متن برنامه اجرا کند.

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

 

 مزایای CI عبارتند از :

  • کاهش زمان ادغام
  • کاهش زمان رفع خطا ها
  • تضمین کارکرد اجزای سیستم با یکدیگر
  • تضمین رعایت استاندارد کد
  • مکانیزه سازی از نقطه پس از کد نویسی تا نقطه تحویل به مشتری
  • داشتن سابقه و قابلیت برگشت همه چیز از کوچکترین تغییر در سورس کد تا تحویل آپدیت به مشتری
  • مناسب برای همه نوع تیم ها از کوچک و بزرگ
  • مناسب برای هر نوع تکنولوژی تولید از اپ های آندروید تحت Java تا سامانه های اطلاعاتی با Net

 

اجرای CI چگونه خواهد بود ؟

  • یک سورس کنترلر باید داشته باشیم
  • یک سرور CI نیاز داریم
  • فرآیند اجرای موارد زیر را اتوماتیک می کنیم :
  • Build کردن کدها
  • اجرای تست های Unit, Integration و  Acceptance
  • تولید فایل های اجرایی
  • انجام مراحل متفرقه ( ساخت اسناد و مدارک، ارسال ایمیل و برچسب و … )
  • اگر فرآیند با شکست روبرو شد ، ارسال گزارش به تیم توسعه
  • اگر فرآیند موفق بود، نصب فایل های اجرایی در سرور اصلی

 

 

در مطالب بعدی سعی می کنم تا پیاده کردن CI را با استفاده از Microsoft TFS بصورت مرحله به مرحله و عملی با هم مرور کنیم.

درباره‌ رضا رحیمی

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

جوابی بنویسید

ایمیل شما نشر نخواهد شدخانه های ضروری نشانه گذاری شده است. *

*