بایگانی برچسب: s

تاریخچه سیستم های کنترل نسخه

طبق آنچه در ویکیشنری آمده کلمه Version، که در فارسی به نسخه ترجمه شده، از قرن شانزدهم در زبان انگلیسی به کار می رفته است. این کلمه یعنی: “فرم (صورت) دیگری از چیزی”. می توان در مهندسی نرم افزار کلمه “چیزی” را همان نسخه صفر کد (Initial commit) در نظر گرفت. در این حالت “فرم های دیگر” تغییراتی هستند که به مرور روی نسخه صفر کد انجام می شود تا نرم افزار نهایی به دست آید.

اما در اصطلاح “کنترل نسخه”، که معادل فارسی Version Control است به جز Version کلمه دیگری هم وجود دارد (کلمه Control). می توان گفت کنترل در اینجا به معنای مدیریت است.

تا اینجا اجزای اصطلاح کنترل نسخه را یک به یک بررسی کردیم! حال، نوبت به تعریف این اصطلاح در مهندسی نرم افزار است. در ادامه این تعریف را از منظر دو منبع بررسی می کنیم:

  • سیستم کنترل نسخه ابزاری است که تغییرات اعمال شده بر فایل یا مجموعه ای از فایل ها را در طول زمان ذخیره می کند تا در آینده بتوان به این تغییرات دسترسی داشت.
  • سیستم کنترل نسخه نرم افزاری است که به توسعه دهندگان در کار تیمی کمک کرده و نسخه ای کامل از تاریخچه پروژه را هم آرشیو می کند.

در واقع سیستم کنترل نسخه به شما و تیمتان امکان می دهد تغییرات اعمال شده در طول مدت پروژه را  دنبال کنید و مثل Microsoft Word امکان Undo و Redo برایتان فراهم می آورد. در واقع می توان گفت سیستم های کنترل نسخه دو ویژگی اصلی در اختیارتان قرار می دهند:

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

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

در حال حاضر سیستم های کنترل نسخه بسیاری وجود دارند. سیستم هایی مثل Subversion، Git، Mercurial و غیره. ممکن است از خود بپرسید تفاوت این سیستم ها در چیست و کدام یک برای کار شما مناسب تر است؟ در واقع بر اساس مدل کارکرد می توان سیستم های کنترل نسخه را به سه دسته مختلف تقسیم کرد:

  • سیستم های کنترل نسخه محلی: این سیستم ها برای یک کاربر طراحی شده اند و فایل ها را روی هارددیسک کاربر نگه داری می کنند و امکان استفاده تحت شبکه ندارند مثل RCS یا SCCS. به علاوه در این سیستم ها چند کاربر نمی توانند به صورت همزمان فایلی را تغییر دهند
  • سیستم های کنترل نسخه متمرکز: در این سیستم ها یک سرویس دهنده وجود دارد که فایل های مورد نظر روی آن قرار دارند. کاربران باید ابتدا آخرین نسخه پروژه را دریافت کنند. تغییرات مورد نظر را انجام دهند و در نهایت کدهای تغییر یافته را به سرویس دهنده ارسال کنند. اگر موقع ارسال مشخص شود کاربر دیگری قبلا همین فایل ها را تغییر داده پیش از ارسال باید تغییرات اعمال شود. برخی از سیستم های این گروه عبارتند از Subversion، CVS و غیره.
  • سیستم های کنترل نسخه توزیع شده: در سیستم های توزیع شده یک نسخه مرکزی از فایل ها وجود ندارد و هر کاربری تمامی تاریخچه پروژه ( بر خلاف سیستم های متمرکز که کاربران فقط نسخه آخر را در اختیار دارند) را در اختیار دارد. هر کاربر تغییرات مورد نظر خود را اعمال کرده و در نسخه محلی خود ذخیره می کند. در این حالت کاربران می توانند پس از اتمام تغییرات نسخه محلی خود را با یک نسخه راه دور همگام سازی کنند. سیستم هایی مثل Git و Mercurial از این مدل استفاده می کنند.

اما کدام مدل برای شما مناسب تر است؟ در حال حاضر پر کاربرد ترین سیستم موجود Git است اما ممکن است بسته به نیازی که دارید یک سیستم متمرکز پاسخ گوی تمامی نیازهایتان باشد. اگر تیم نرم افزاریتان در نواحی مختلف جغرافیایی هستند محتملا یک سیستم توزیع شده برای شما مناسب تر است اما اگر همه اعضای تیمتان در یک مکان متمرکز هستند می توانید از سیستم های متمرکز هم استفاده کنید. اگر فقط به مدیریت نسخه فایلهای شخصی تان نیاز دارید یک سیستم محلی هم پاسخ گوی نیازتان هست!

اگر تمایل دارید اطلاعات بیشتری درباره سیستم های کنترل نسخه بدست آورید می توانید به کتب منتشر شده در این زمینه مراجعه کنید. لیستی از کتب منتشر شده درباره گیت در این ریپازیتوری موجود است.

برای آگاهی از پست های بعدی می توانید در کانال تلگرام وبلاگ عضو شوید.
برای عضویت در کانال وبلاگ اینجا کلیک کنید

 

اثر راشومون و روش های مدیریت چابک (اجایل)

rashomon-effect

دیروز به درخواست “مدیران” ارائه ای بسیار مقدماتی در مورد روش های چابک در مدیریت نرم افزار به تیم توسعه نرم افزار داشتم! در زمان ارائه به نظر می رسید نظر حضار مختلف در مورد روش های چابک نوعی اثر راشومون است- اثر راشومون حالتی را توصیف می کند که در آن برداشت افراد از، مشاهده ای یکسان، متفاوت است- و هر کسی با شنیده های جسته و گریخته نظری در مورد این روش ها دارد. در واقع بیشتر حضار تعریف و آگاهی درستی از این امر نداشتند. این آگاهی نصفه و نیمه بسیار مشکل ساز است و می تواند باعث ضایع شدن حق کارکنان شود. اما چطور؟
برای مثال یکی از ارزش های اصلی روش های چابک کاهش نقش مدیر به عنوان قدرت مرکزی (دیکتاتور) و توزیع آن بین اعضای تیم و تاکید بر نقش مدیر به عنوان رهبر تیم (نقش واقعی مدیریت) است نه تعیین کننده سرنوشت اعضا. متاسفانه بسیاری و شاید حتی خود من اگر سرنوشت گروهی را به دست بگیریم فکر می کنیم بهترین تصمیم گیرنده ایم و هیچ گاه سعی در یادگیری نداریم چون بهترین تصمیم گیرنده و دانای کل نیاز به یادگیری ندارد. حال اگر افراد از اصول سازمانی روش های چابک اطلاعی نداشته باشند و فقط روی روش های تکنیکی تمرکز کنند ممکن است قربانی سوء استفاده شوند. اما اگر دیدگاهشان را به هم نزدیک کنند و هم صدا و هم کلام شوند می توانند بر مشکلات این چنینی پیروز شوند.
در این ۱۰ سالی که در صنعت آی تی ایران مشغول به کار هستم مشاهدات گاها عجیب و تلخی داشتم و در سازمان های مختلف با افراد گوناگونی مواجه شدم. مشاهداتی که برای بنده مشاهده کننده گاها ناخوشایند، عجیب و غیرقابل باور بوده.از کارکنان و شرکت های خوب این صنعت گرفته تا شرکت هایی با سیاست های شبیه به زندان و شارلاتان هایی که برای مقام یا دریافتی بیشتر دست به هر کاری می زنند(واقعا هر کاری!!!). از تیم های کوچک اما موفق تا تیم های بزرگ اما ناموفق. جا دارد از مصاحبه های عجیب و غریب برخی شرکت ها هم یاد کنم. مصاحبه هایی توسط افرادی بیسواد و بدون آگاهی برای بزرگ جلوه دادن کارهای شرکتی پوشالی که وقتی وارد آن می شوید میبینید کار خاصی در آنها انجام نمی شود.
متاسفانه بسیاری از مشکلات تیم های نرم افزاری و شاید هر تیم تولیدی دیگری از کارکنان فنی نیست بلکه به دلیل مدیریت اشتباه و ناآگاهی های مدیران ماست. این امر زمانی بروز می کند که بسیاری از تیم های نرم افزاری ما اصول تکنیکی روش های چابک را رعایت می کنند اما خبری از رعایت صحیح اصول سازمانی نیست! هر چند اصول روش های چابک وحی منزل نیستند و نیازمندی بر رعایت تمامی آنها نیست اما در بسیاری از مشاهدات من اصول سازمانی به درستی رعایت نمی شوند و حق افراد زیر پا گذاشته می شود.