اگر برنامه نویس هستید و تاکنون با مفهومی به نام سیستم کنترل ورژن یا VCS آشنا نشده اید، بدانید که از یکی از مهمترین مفاهیم دنیای برنامه نویسی غافل هستید. مهم نیست که چقدر برنامه نویس خوبی باشید و چه اپلیکیشن هایی را توسعه داده اید، اگر تاکنون از سیستمهای کنترل ورژن استفاده نکرده اید، هرگز نمیتوان شما را یک برنامه نویس حرفه ای نامید! زیرا برنامه نویسان حرفه ای و شرکتهای برنامه نویسی رده اول، همگی از اینگونه ابزارها در فرآیندکاری خود استفاده میکنند. پس اگر میخواهید با یکی از ابزارهای اساسی برنامه نویسان حرفه ای آشنا شوید، ادامه این مطلب را از دست ندهید.
VCS چیست؟
Version Control System که به اختصار VCS نامیده میشوند، سیستمی است که به برنامه نویسان و توسعه دهندگان اجازه میدهد که بدون اینکه هیچگونه نگرانی داشته باشند، تا دلشان میخواهد اشتباه کنند! زیرا آنها خیالشان از این بابت راحت است که با استفاده از VCS ها، اشتباهاتشان قابل پیگیری، بررسی و تصحیح هستند. البته این مورد تنها یکی از کاربردهای بی نظیر سیستمهای کنترل نسخه است.
این سیستمها به توسعه دهندگان و برنامه نویسان اجازه میدهند تا پروژههای خود در نسخههای مختلفی، ذخیره ویا حتی ارائه کنند. همچنین VCS ها با فراهم کردن امکانات زیادی مثل قابلیت پیگیری تغییرات اعمالی هر یک از برنامه نویسان، ساخت شاخه هایی مختلف از پروژه، جلوگیری از تداخل کدهای برنامه نویسان و.... فرآیند توسعه پروژهها به صورت گروهی را سادهتر میسازند.
پس VCS سیستمی است که به منظور کنترل و پیگیری تغییرات اعمال شده در پروژههای نرم افزاری مورد استفاده قرار میگیرد. اساس کار این سیستمها بر پایه ثبت و نگهداری تاریخچه کدهایی است که در طول توسعه یک اپلیکیشن نوشته میشوند. یعنی سیستمهای کنترل ورژن ماهیتی مانند دیتابیس دارند، با این تفاوت که اطلاعات درون آن شامل نسخههای گوناگون از پروژه و دادههای مربوط به هر از آنها است. این دیتابیس داده به برنامه نویسان این امکان را میدهند تا هر زمانی که بخواهند، ورژن مورد نظر از پروژه خود را ذخیره و یا فراخوانی کنند.
استفاده از VCS فقط به برنامه نویسان و توسعه دهندگان محدود نمیشود. زیرا این ابزار برای سایر کارهایی مانند نویسندگی، طراحی و... که قابلیت توسعه به صورت تدریجی را دارند، قابل استفاده است.
آشنایی با انواع سیستمهای کنترل ورژن
سیستمهای کنترل ورژن به دو دسته Distributed و Centeralized تقسیم میشوند. تفاوت اصلی این دو دسته در شیوه ذخیره سازی دادهها میباشد. در ادامه به بررسی هر کدام از این سیستمها میپردازیم :
سیستمهای کنترل ورژن متمرکز یا Centeralized : در این نوع VCSها تمام دادهها بر روی یک سرور مرکزی ذخیره میشوند و شیوه دسترسی به اطلاعات به صورت Client / Server میباشد. یعنی اگر برنامه نویسان بخواهند تغییراتی در پروژه ایجاد کنند باید به سرور مرکزی متصل باشند، در غیر اینصورت نمیتوانند به اطلاعات پروژه دست پیدا کنند.
سیستمهای کنترل ورژن توزیع شده یا Distributed : در این نوع سیستم ها، اطلاعات پروژه در دسترس هر یک از برنامه نویسان قرار میگیرد و هر وقت که بخواهند میتوانند تغییرات مورد نظرشان در آن ایجاد و سپس در زمان مد نظرشان آنها را با سرور همگان سازی کنند. مزیت این VCSها این است که اگر سرور اصلی در دسترس نبود، همچنان برنامه نویسان میتوانند تغییرات ایجاد شده را در سیستم خودشان اعمال کنند. سپس در زمانی که ارتباط با سرور برقرار شد، اطلاعات و تغییرات آنها با سرور اصلی هنگام سازی میشود. یکی از مهمترین سیستمهای کنترل ورژن توزیع شده، GIT میباشد.
چرا باید از VCSها در پروژههای خود استفاده کنیم؟
کار گروهی و تیمی به یکی از مهمترین اصول برنامه نویسی تبدیل شده است. زیرا بیشتر پروژههای برنامه نویسی آنقدر گسترده شده اند که یک نفر به تنهایی هرگز نمیتواند از عهده آن بر بیاید. از طرفی دیگر بیشتر این پروژهها نیاز به تخصصهای مختلفی دارند. اما در گذشته برنامه نویسان برای انجام اینگونه پروژهها با مشکلات و چالشهای زیادی رو به رو بودند. چالش هایی مانند نبود بستری برای همگام سازی کدها در سیستمهای برنامه نویسان، تداخل کدهای نوشته شده، نبود قابلیتی برای پیگیری کدهای برنامه نویسان و... . به همین منظور سیستمهای مدیریت سورس یا همان VCSها توسعه داده شدند. برخی از مهمترین قابلیت هایی که سیستمهای مدیریت ورژن در اختیار ما قرار میدهند، عبارتند از :
امکان بازیابی کدها به ورژن دلخواه
ذخیره روند توسعه نرم افزار در ورژنهای مختلف
امکان مقایسه، بررسی و پیگیری کدها در ورژنهای مختلف
تعیین میزان کدنویسی و مشارکت هر یک از برنامه نویسان در فرآیند توسعه نرم افزار
مشخص بودن تغییرات اعمالی هر یک از برنامه نویسان
امکان توسعه و کدنویسی همزمان
سهولت کار تیمی به خصوص دورکاری در حوزه برنامه نویسی
پیگیری میزان پیشرفت پروژه
امکان شاخه سازی از سورس پروژه
نسخههای پشتیبان
و....
نتیجه گیری
مهم نیست که شما یک برنامه نویس، نویسنده و یا حتی گرافیست هستید. قطعا زمانی که در حال توسعه یک پروژه هستید به نگهداری نسخههای مختلفی از پروژتان نیاز خواهید داشت. مثلا تصور کنید که در حال توسعه یک نرم افزار هستید و بعد از گذشت مدت زمان زیادی متوجه میشوید که کدهایی که نوشته اید، دارای اشتباه بوده اند. در این صورت اگر نسخههای قبلی از پروژه خود را نداشته باشید، شاید هرگز نتوانید منشا خطاهای خود را پیدا کنید و به همین دلیل شاید مجبور شوید که پروژتان را از اول شروع کنید. پس اگر تاکنون از این ابزار قدرتمند و کاربردی در فرآیند توسعه نرم افزارهای خود استفاده نکرده اید، به شما توصیه میکنیم، همین امروز یادگیری این ابزارها را شروع کنید. آیا تاکنون چالش هایی که به دلیل استفاده نکردن از VCS به وجود میآیند را تجربه کرده اید؟
۸ دیدگاه
Saeed Babaee۰۱ مرداد ۱۳۹۸، ۰۹:۰۶
سپاس فراوان آقای علامه
مهدی علامه۰۱ مرداد ۱۳۹۸، ۱۷:۳۹
خواهش میکنم
آزیتا نجف زاده۲۲ تیر ۱۳۹۸، ۱۰:۳۴
سلام و خسته نباشید
ممنون از توضیحات VCS، کاش آموزش git هم بزارید
مهدی علامه۲۲ تیر ۱۳۹۸، ۱۰:۴۳
سلام دوست عزیز
حتما در مقالات آینده به آموزش git هم میپردازیم
با تشکر
حسین ملهم۱۸ تیر ۱۳۹۸، ۱۹:۰۸
با درود
مهدی عزیز
اطلاعات بسیار عالی در خصوص vcs ارائه کردید.
سپاس
مهدی علامه۱۹ تیر ۱۳۹۸، ۰۶:۳۴
تشکر آقای ملهم عزیز، خوشحالم که این مقاله مورد استفاده شما قرار گرفته
محمد نقلانی۱۶ تیر ۱۳۹۸، ۱۰:۳۶
خیلی مقاله خوبی بودش جناب آقای علامه . واقعا این بسترهای کنترل ورژن کد زنی رو رویای میکنن ، من خودم حتی تو مبحث پایان نامم که در زمینه شیمی هم بود از گیت استفاده کردم که تمام نسخهها و تغییرات رو داشته باشم. و خیلی بهم کمک کرد این موضوع چون یک جا نیاز بود تغییراتی بدم و به کمک همین کامیتها تو یک ساعت تغییرات شاید چند هفته ای رو ایجاد کردم .