عضویت در خبرنامه

با عضویت در خبرنامه از آخرین مقالات اطلس ساختار داده باخبر شوید

عضویت
arrow_backward بازگشت

ورژن کنترل (version control) چیست؟

 

چطور ورژن کنترل به توسعه سریع نرم افزار و پیشرفت سریع تیم توسعه نرم افزار (DevOps) کمک می کند.

 

ورژن کنترل که به آن source control هم گفته می شود، عبارتند از مدیریت و ردیابی تغییرات کدهای یک نرم افزار. سیستم های ورژن کنترل ابزارهایی هستند که به تیم های توسعه نرم افزار کمک میکنند تغییرات نرم افزار را مدیریت کنند. با افزایش سرعت تولید نرم افزار، سیستم های ورژن کنترل باعث می شوند تیم های نرم افزاری سریع تر و هوشمندتر به کار بپردازند.

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

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

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

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

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

تیم هایی که از سیستم ورژن کنترل استفاده میکنند دچار مشکلاتی خواهند شد مانند اینکه کدام تغییرات ایجاد شده برای کاربران در دسترس است و یا زمانی که دو برنامه نویس تغییراتی در کدها ایجاد میکنند و این تغییرات با هم ناسازگار است، رفع این مشکل بسیار زمانبر و پردردسر خواهد بود. اگر تابحال از ورژن کنترل استفاده نکرده باشید احتمالا نسخه های جدید نرم افزارتان را با فایل هایی با پسوندی نظیر "final" و یا “latest” نام گذاری میکنید در صورتی که در مراحل بعدی باز هم نسخه های جدیدی از نرم افزارتان خواهید ساخت. ممکن است قسمت هایی از کدهایتان را comment کنید تا لازم نباشد برای غیر فعال کردن برخی از کارکردهای برنامه تان، آن قسمت ها را حذف کنید، چون فکر میکنید ممکن است بعدا به آنها نیاز داشته باشید. ورژن کنترل آماده است که این دردسر ها را برایتان رفع کند.

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

 

مزایای سیستم های ورژن کنترل

استفاده از نرم افزار ورژن کنترل بهینه ترین راه برای تیم های توسعه نرم افزار و DevOps ها است. همچین هرچه تیم بزرگتر شود و افراد بیشتری اضافه شوند تاثیر این سیستم در افزایش سرعت و بالا رفتن کارایی و چابکی تیم ها افزایش می یابد.

سیستم های ورژن کنترل (VCS) در دهه های گذشته تاثیر بسیار مثبتی از خود به جا گذاشته اند و بعضی از آنها برتری محسوسی بر نمونه های دیگر دارند. VCS ها را گاهی ابزار SCM (Source Code Management) و یا RCS (Revision Control System) نیز می نامند. یکی از متداول ترین این نرم افزارها Git است. Git یک Distributed VCS یا همان سیستم کنترل ورژن توزیع شده است، به این دسته از سیستم های کنترل ورژن DVCS هم می گویند، در قسمت های بعدی در مورد این دسته توضیح بیشتری خواهیم داد. مانند خیلی از سیستم های کنترل ورژن متداول، Git رایگان و متن باز (Open Source) است. تمامی سیستم های ورژن کنترل فارغ از اسامی شان، چند مزیت اصلی برای کاربرانشان ایجاد می کنند. این مزایا عبارتند از:

  1. ایجاد یک تاریخچه (History) کامل از تمامی تغییرات فایل ها. تمام تغییرات شامل ایجاد، حذف و ویرایش محتوا جزو این تاریخچه هستند. نرم افزار های مختلف VCS در مورد جابجایی (Move) و تغییر نام (Rename) فایل ها عملکرد یکسانی ندارند. این تاریخچه باید شامل ایجاد کننده فایل، زمان و یادداشت های مربوط به قصد از ایجاد تغییر هم هستند. این تاریخچه کامل زمان دیباگ و برای پیدا کردن منشاء اصلی مشکل بسیار مفید است. همچنین در مورد رفع ایراد نسخه های قبلی نرم افزار، وجود سیستم کنترل ورژن حیاتی است (در صورتی که نرم افزار فعال باشد و تیم توسعه در حال کار روی آن باشد، تقریبا همیشه "نسخه قبلی" محسوب میشود!)

  2. ایجاد قابلیت انشعاب و ادغام (Branching and Merging). مزیت سیستم های ورژن کنترل در مورد تیم ها بدیهی بنظر می رسد، اما حتی پروژه های تک نفره هم می تواند از مزیت های این سیستم در زمینه جریان های تغییرات مستقل از هم و موازی بهره مند شود. ایجاد یک "شاخه" یا branch در سیستم های ورژن کنترل باعث ایجاد جریان های مستقل تغییرات در پروژه می شود. همچنین این سیستم ها قابلیت ادغام این شاخه های مستقل را با هم فراهم میکنند در عین حال که توسعه دهندگان می توانند از نبودن تداخل بین این شاخه ها هنگام ادغام، اطمینان حاصل کنند. تیم های نرم افزاری برای افزایش کارایی از متد branching در پروسه ساخت امکان جدید یا نسخه جدید در نرم افزار تولیدی خود استفاده می کنند. در صورت استفاده از سیستم های ورژن کنترل، متدهای مختلفی برای استفاده از branching و merging در اختیار تیم های توسعه نرم افزار قرار دارد. 

  3. ایجاد قابلیت ردیابی یا Traceability. اینکه در تیم نرم افزاری بتوان هر تغییری را ردیابی کرد و این تغییرات به نرم افزارهای مدیریت پروژه و bug tracking مانند Jira ارسال شود و همچنین برای نشان دادن دلیل هر تغییری پیامی برای آن ایجاد شود، در پیدا کردن منشاء اصلی باگ و تجزیه و تحلیل اشکالات بسیار سودمند و حیاتی است. اینکه شما تاریخچه کد را هنگام خواندن آن داشته باشید، در فهمیدن نحوه کار کد و چرایی نوع طراحی آن کمک شایانی برایتان خواهد بود و همچنین باعث می شود تغییراتی هماهنگ با شمای کلی نرم افزار و نوع طراحی ایجاد کنید. قابلیت ردیابی در هنگام ایجاد تغییرات در نسخه های قبلی و اینکه توسعه دهندگان بتوانند با دقت مسیر آینده نرم افزار را تصور کنند بسیار حیاتی است.

درست است که بدون سیستم های ورژن کنترل هم میتوان به توسعه نرم افزار پرداخت، اما این کار آنقدر پر ریسک است که هیچ تیم حرفه ای همچین خطری را قبول نمیکند. بنابراین سوال اصلی این نیست که آیا از سیستم های ورژن کنترل استفاده کنیم یا نه، بلکه سوال باید این باشد که از "کدام" سیستم استفاده کنیم!

در مقالات بعدی به سراغ Git خواهیم رفت.

0 دیدگاه