موضوع مقاله: نسخه‌بندی نرم‌افزار | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # نسخه‌بندی نرم‌افزار | مقدمه: وقتی قصد راه‌اندازی یک سرور را داشته باشیم، فارغ از نقش سرور که می‌تواند سرور وب، سرور دیتابیس، سرور فایل و غیره باشد، باید چند کار تنظیماتی اولیه را انجام دهیم. | ## بخش 1: نسخه‌بندی نرم‌افزار | برای مثال، اگر یک سرور اختصاصی یا یک سرور مجازی را از یک شرکت ارائه‌دهنده‌ی خدمات میزبانی وب (web hosting) اجاره کرده باشید، بعد از تحویل سرور، باید تنظیماتی را روی سرور اعمال کنید تا اولاً امنیت سرور افزایش پیدا کند و ثانیاً سرور برای انجام کارهای بعدی آماده شود. در واقع، یک سرور، فارغ از هر نقشی که داشته باشد نیاز به برخی تنظیمات و پیکربندی‌های اولیه دارد. شماره فرعی (minor) برای هر نسخه‌ای که ویژگی جدیدی اضافه کند ولی به سازگاری رابط‌های منتشرشده قبلی آسیبی نزند افزایش پیدا می‌کند. شماره وصله (patch) هم برای نسخه‌هایی استفاده می‌شود که فقط مشکلات را برطرف می‌کنند، بدون این که رابطی را خراب کنند یا ویژگی جدیدی اضافه کنند. اگر به سیر نرم‌افزارهایی که تا به حال استفاده کرده‌اید نگاهی بیندازید متوجه یک توالی مشخص میان نسخه‌های قدیمی و نسخه‌های جدید می‌شوید. در مثال اول مایکروسافت ابتدا بر اساس روش اهمیت تغییر فعالیت می‌کرده سپس بر اساس روش نام سال، در مثال دوم، ویم از روش اهمیت تغییر استفاده کرده و در مثال سوم اوبونتو از روش نام شمارهٔ ماه سال و همچنین از نام رمز بهره برده است. به فرایند تخصیص اسم‌ها و شماره‌های منحصر به فرد به نرم‌افزارهای کامپیوتری، نسخه‌بندی نرم‌افزار گفته می‌شود. عموماً در یک رده شمارهٔ نگارش معین (اصلی-جزئی) شماره‌های نرم‌افزار به ترتیب افزایشی، متناسب با پیشرفت در توسعهٔ نرم‌افزار تخصیص داده می‌شوند. در سطح‌های پایین‌تر، کنترل تجدید نظر برای پیگیری تفاوت نسخه‌های مختلف اطلاعات دیجیتالی استفاده می‌شود. روش‌های نسخه‌بندی نرم‌افزار روش‌های گوناگونی برای پیگیری نسخه‌های گوناگون یک قطعهٔ نرم‌افزاری به وجود آمده‌اند. حضور همه‌جانبهٔ کامپیوترها باعث شده‌است که این روش‌های نسخه‌بندی در غیر از رشتهٔ کامپیوتر نیز مورد استفاده قرار گیرد. شناساگرهای وابسته به توالی در برنامه‌های نسخه‌بندی نرم‌افزاری وابسته به توالی، به هر انتشار نرم‌افزار شناسه‌ای منحصر به فرد تخصیص داده می‌شود که از یک یا چند توالی یا مجموعه‌ای از اعداد یا حروف تشکیل شده ‌است. روش‌های نسخه‌بندی نرم‌افزار در قسمت‌هایی مثل اندازهٔ توالی‌ها، اختصاص مفهوم به توالی‌های مجزا، و همچنین وسیله و روش افزایش توالی‌ها با یکدیگر متفاوتند. اهمیت تغییر در برخی روش‌ها، از شناسه‌های وابسته به توالی برای رساندن اهمیت تغییرات بین انتشارهای یک نرم‌افزار استفاده می‌شود. تغییرات بین دو انتشار، توسط سطح اهمیت طبقه‌بندی می‌شوند و تصمیم در مورد اینکه کدام توالی در بین دو انتشار نرم‌افزار تغییر کند به اهمیت تغییرات از انتشار قبلی بستگی دارد؛ بنابراین اولین توالی هنگامی تغییر می‌کند که مهم‌ترین و بیشترین تغییرات در بین دو انتشار رخ داده باشد و تغییرات بعدی توالی‌ها نشانگر تغییرات کم اهمیت بین دو انتشار هستند. برای مثال، در روشی که از شناسه‌ای با چهار توالی استفاده می‌کند، اولین توالی وقتی افزایش می‌یابد که کد به ‌طور کامل بازنویسی شده باشد، در حالی که اگر در رابط کاربری یا در مستندات برنامه تغییر کوچکی انجام شده باشد شناسهٔ چهارم تغییر می‌کند. این روش به کاربران اجازه می‌دهد تا میزان پیشرفت پروژه و همچنین میزان آزمایش‌هایی را که روی پروژه انجام شده‌ است را ارزیابی کنند. اگر تغییرات در قسمت میانی صورت گیرد، برای مثال، اگر سیر انتشار ۱٫۳ انتشاری به صورت 1.3rc4 داشته باشیم، این انتشار نشان‌دهندهٔ آزمایشی بودن این انتشار است و در حقیقت دارای تغییراتی است که لزوماً در دنیای واقعی آزمایش نشده‌اند. برای مثال یک محصول می‌تواند دارای چنین سیری از انتشارات باشد: ۰٫۹٫۱, ۰٫۹٫۲, ۰٫۹٫۳, ۱٫۰, ۱٫۰٫۱, ۱٫۰٫۲, ۱٫۱, ۱٫۱٫۱, ۲٫۰, ۲٫۰٫۱, ۲٫۰٫۲, ۲٫۱, ۲٫۱٫۱, ۲٫۱٫۲, ۲٫۲, ... | ## بخش 2: نسخه‌بندی نرم‌افزار | ممکن است توسعه دهندگان از نسخهٔ ۵٫۰ با نسخهٔ ۵٫۵ جهش کنند تا نشان دهند که ویژگی‌های مهمی افزوده شده ‌است، اما این ویژگی‌ها در حد کافی نبوده ‌است که عدد بزرگتر (Major Number) را تغییر دهند. روش متفاوت دیگر، آن است که در کنار اعداد بزرگتر و کوچکتر، از حروف الفبا برای تفکیک کردن انواع انتشار -یعنی آلفا، بتا، 'کاندیدای انتشار'- استفاده شود. یک روند انتشار که از این روش استفاده می‌کند می‌تواند شبیه به موارد زیر باشد: ۰٫۵, ۰٫۶, ۰٫۷, ۰٫۸, ۰٫۹ == 1.0b1, 1.0b2 (با کمی بهبود), 1.0b3 (با بهبودهای بیشتر) == 1.0rc1(به اندازهٔ کافی پایدار است) == ۱٫۰ اگر مشخص شود که 1.0rc1 نیاز به رفع باگ دارد، در اینصورت به نسخهٔ 1.0rc2 (بخوانید دومین نسخهٔ کاندیدای انتشار از نسخهٔ اول نرم‌افزار) تبدیل می‌شود و همین‌طور ادامه می‌یابد. مهم‌ترین ویژگی این روش آن است که اولین نسخهٔ یک سطح مشخص (بتا، RC، تولید) باید با آخرین نسخهٔ زیر انتشار آن برابر باشد: یعنی شما نمی‌توانید از آخرین نسخهٔ بتا به اولین نسخهٔ RC تغییرات جدید به نرم‌افزار اضافه کنید و همچنین از آخرین RC به انتشار نهایی نرم‌افزار. با این حال چون نسخه‌بندی شماره‌ها ساختهٔ دست انسان هستند می‌توان تغییرات دلخواهی را ایجاد کرد که از این اصول تخلف می‌کنند: برای مثال اولین توالی می‌تواند بین نسخه‌هایی افزایش یابد که تنها یک خط از کد آن‌ها با یکدیگر متفاوت است تا این حالت (کاذب) را به وجود آورند که تغییرات بسیار مهمی روی داده است. در اکثر برنامه‌های تجاری اولین شمارهٔ انتشار یک محصول از نسخهٔ شمارهٔ یک شروع می‌شود. طراحی مرحلهٔ توسعه بعضی از روش‌ها در اولین توالی از صفر شروع می‌کنند تا برای انتشارهایی که به اندازهٔ کافی برای توسعهٔ کلی و عملی پایدار نبوده‌اند و تنها برای آزمایش یا استفادهٔ داخلی منظور گردیده‌اند، وضعیت آلفا با بتایی را مشخص کنند. جدا کردن توالی‌ها توالی‌ها باید پس از پرینت شدن به ‌وسیلهٔ کاراکترهایی جدا شوند. بسته به انتخاب «روش نسخه‌بندی نرم‌افزار» نوع کاراکترها و کاربرد آن‌ها نیز متفاوت است. لیست زیر، نمونه‌هایی فرضی از برنامه‌های جداسازی برای یک انتشار را مشخص می‌کند («سیزدهمین نسخهٔ درجه سه» از «چهارمین نسخهٔ درجه دو» از «دومین نسخهٔ درجه یک»): یک روش نسخه‌بندی نرم‌افزار، ممکن است بین همهٔ توالی‌ها از یک کاراکتر استفاده کند: ۲٫۴٫۱۳، ۲/۴/۱۳، ۲-۴-۱۳ ممکن است یک برنامه با روش‌های ناهمگونی جداسازی را انجام دهد، و برخی از توالی‌ها را جدا کرده و برخی دیگر را جدا نسازد: ۲٫۴۱۳ در یک توالی از کاراکترهای متفاوتی برای جداسازی استفاده شود: ۲٫۴-۳ وقتی برای جداسازی توالی‌ها از نقطه استفاده شود، این نقطه نشان‌دهنده یک نقطه اعشاری نیست و توالی دارای اهمیت موقعیتی نمی‌باشد. برای مثال شناسهٔ ۲٫۵ به معنای 'دو و نیم' یا 'یک دوم مانده به نسخهٔ سوم' نیست بلکه به معنای ' پنجمین ویرایش درجه دوم از دومین ویرایش درجه یک' می‌باشد و هرگز درست و مناسب نخواهد بود مگر اینکه نسخه‌های ۲٫۱، ۲٫۲، ۲٫۳ و ۲٫۴ هم وجود داشته باشند. تعداد توالی‌ها گاهی یک عدد چهارم، ضمنی هم وجود دارد که به ساخت نرم‌افزار مربوط می‌شود. توالی صعودی دربارهٔ نحوهٔ افزایش اعداد ویراستی عددی یا رقمی دو مکتب فکر وجود دارد. آزادترین پکیج‌های نرم‌افزاری اعداد را نوعی جریانات پیوسته می‌دانند، بنابراین یک نرم‌افزار آزاد یا محصول متن‌باز دارای اعداد ویراستی مانند ۱٫۷٫۰, ۱٫۸٫۰, ۱٫۸٫۱, ۱٫۹٫۰, ۱٫۱۰٫۰, ۱٫۱۱٫۰, ۱٫۱۱٫۱, ۱٫۱۱٫۲ می‌باشند. نمونه‌ای از این نوع بستهٔ نرم‌افزاری mediawiki است، با این حال برخی از برنامه‌ها به شیوه دیگری با اعداد ویراستی رفتار می‌کنند و ممکن است اعداد ویراستی مثل ۱٫۸, ۱٫۹, ۱٫۹۱, ۱٫۹۲ داشته باشد. در بسته‌های نرم‌افزاری که از این روش استفاده می‌کنند، نسخهٔ ۱٫۹۱ ویرایش کوچک بعد از ۱٫۹ می‌باشد. زمان پروژهٔ Wine از یک قالب ویرایش زمانی استفاده می‌کند که از سال، ماه، روز انتشار استفاده می‌کند. لینوکس اوبونتو از یک برنامهٔ ویرایشی مشابه استفاده می‌کند، برای مثال Ubuntu 8.04 در آوریل ۲۰۰۸ صادر شد. وقتی از از زمان برای نسخه‌بندی استفاده می‌کنیم برای مثال استفاده از زمان در نام‌های فایل‌ها، متداول است که از یک قالب ISO استفاده کنیم: YYYY-MM-DD چون از لحاظ رشتهٔ حروف به صورت افزایشی/کاهشی ذخیره می‌شود. | ## بخش 3: نسخه‌بندی نرم‌افزار | با این حال وقتی تاریخی استفاده می‌شود تا به ویرایش اشاره کند این کار تنها به خاطر اهداف بازاریابی صورت می‌گیرد و یک عدد ویرایشی واقعی صادر می‌شود. از زمان ویرایش ۳ تا کنون، به روزرسانی‌ها با افزودن یک رقم اضافی به انتهای شماره‌های نسخ صورت گرفته‌است. این امر انعکاسی از این حقیقت است که تک اکنون بسیار با ثبات است و تنها به روزرسانی‌های ناچیزی صورت گرفته‌است. توسعه دهنده تک دونالد نوث عقیده دارد که آخرین تغییر که پس از مرگش روی می‌دهد، باید برای تغییر عدد ویرایش به π صورت گیرد، این تغییر باید در جایی صورت گیرد که همهٔ باگ‌های باقی‌مانده به یک ویژگی ثابت تبدیل خواهند شد. قالب‌های دیگر برخی تولید کنندگان نرم‌افزار برای اشاره به انتشار نرم‌افزارهایشان از قالب‌های مختلف استفاده می‌کنند. برای مثال، سیستم‌عامل Microsoft Windows در ابتدا با ارقام استاندارد و ویراست رقمی (ویندوز ۱٫۰ و ویندوز ۳٫۰)، سپس به وسیله سال (ویندوز ۹۵، ویندوز ۹۸، ویندوز ۲۰۰۰)، سپس استفاده از کدهای الفبایی عددی (ویندوز ME، ویندوز XP) و اکنون استفاده از اسامی ویژه (ویندوز ویستا). پروژهٔ Debian برای انتشار سیستم‌عامل خود از قالب ویرایشی اصلی/فرعی استفاده می‌کند، اما اسامی رمزی را (اسم رمز) از فیلم داستان Toy Story گرفته‌است تا در طول توسعهٔ سیستم‌عامل خود بتواند با این اسم رمزها به انتشارهای پایدار و ناپایدار اشاره کند. اعداد ویرایشی داخلی ممکن است نرم‌افزارها از یک عدد ویرایشی داخلی استفاده کنند که از عدد ویرایشی مندرج در نام محصول متفاوت است. نسخه‌های قبل از انتشار در کنار قالب‌های نسخه‌بندی متعددی که در بالا ذکر شدند، همانطور که برنامه راه خویش را از میان مراحل چرخهٔ عمر انتشار نرم‌افزار باز می‌کند، سیستمی برای اشاره به نسخه‌های قبل از انتشار استفاده می‌شود. برنامه‌هایی که در مرحلهٔ اولیه هستند اغلب «آلفا»، اولین حرف در الفبای یونانی نامیده می‌شوند. پس از تکمیل و زمانی که هنوز برای صدور آماده نیستند آن‌ها را نرم‌افزار «بتا»، دومین حرف از الفبای یونانی می‌نامند. در کل نرم‌افزار آلفا تنها توسط توسعه‌دهندگان آزمایش می‌شود در حالی‌ که نرم‌افزار بتا برای آزمایش کلی توزیع می‌شود. نرم‌افزار نسخهٔ آلفا و بتا اغلب نسخه‌های عددی کم‌تر از ۱ دارند (مثل ۰٫۹) تا نشان دهند که روند آن‌ها در جهت یک انتشار ۱٫۰ عمومی قرار دارد. با این حال اگر نسخهٔ قبل از انتشار یک بستهٔ نرم‌افزاری مانند ویرایش ۲٫۵ باشد یک ”a” یا "alpha" به رقم ویرایش افزوده می‌شود بنابراین ویرایش آلفا از انتشار ۲٫۵ را می‌توان با 2.5a یا 2.5.a شناسایی کرد. بسته‌های نرم‌افزاری که به تازگی به عنوان یک ویرایش ویژه صادر شده‌اند می‌توانند برچسب ویرایش داشته باشند که با "RC-#" دنبال می‌شوند و به عدد کاندیدای انتشار اشاره دارند. برای مثال، بستهٔ اتوماسیون رادیویی Rivendell قصد دارد اولین بستهٔ انتشار تولیدی کامل خود به نام v1.0.1 را منتشر کند چون اگر آن‌ها آن را v1.0.0 بنامند مدیر بستهٔ RPM نصب آن را رد می‌کند چون تصور می‌کند که این نسخه قدیمی‌تر از 1.0.0rc2 می‌باشد. اصلاحاتی در سیستم عددی ویراست‌های اعداد فرد برای توسعهٔ انتشار تا زمان سری‌های 2.6.x، هستهٔ لینوکس برای اشاره به انتشارهای توسعه‌ای از اعداد ویراستی کوچک فرد و برای اشاره به انتشارهای پایدار از اعداد ویراستی کوچک زوج استفاده می‌کرد. برای مثال، لینوکس ۲٫۳ یک خانواده پیشرفته از دومین طرح اصلی هسته لینوکس است و لینوکس ۲٫۴ خانواده اصلی انتشار بود. | ## جمع‌بندی | پس از عدد ویرایشی فرعی در هستهٔ لینوکس، عدد انتشار به ترتیب افزایشی قرار دارد، برای مثال لینوکس ۲٫۴٫۰ تا لینوکس ۲٫۴٫۲۲، به علاوه یک رقم ویراستی ناچیز به ۲٫۶۸ اضافه شد و ۲٫۶٫۸٫۱ را می‌سازد که به تغییر خیلی جزئی اشاره می‌کند، رقم چهارم پس از ۲٫۶٫۱۱٫۱ استاندارد شد.