نسخه‌بندی نرم‌افزار

روش‌های نسخه‌بندی نرم‌افزار

روش‌های گوناگونی برای پیگیری نسخه‌های گوناگون یک قعطهٔ نرم‌افزاری به وجود آمده‌اند. حضور همه‌جانبهٔ کامپیوترها باعث شده‌است که این روش‌های نسخه‌بندی در غیر از رشتهٔ کامپیوتر نیز مورد استفاده قرار گیرد.

شناساگرهای وابسته به توالی

در برنامه‌های نسخه‌بندی نرم‌افزاری وابسته به توالی، به هر انتشار نرم‌افزار شناسه‌ای منحصر به فرد تخصیص داده می‌شود که از یک یا چند توالی یا مجموعه‌ای از اعداد یا حروف تشکیل شده‌است. روش‌های نسخه‌بندی نرم‌افزار در قسمت‌هایی مثل اندازهٔ توالی‌ها، اختصاص مفهوم به توالی‌های مجزا، و همچنین وسیله و روش افزایش توالی‌ها با یکدیگر متفاوتند.

اهمیت تغییر

در برخی روش‌ها، از شناسه‌های وابسته به توالی برای رساندن اهمیت تغییرات بین انتشارهای یک نرم‌افزار استفاده می‌شود. تغییرات بین دو انتشار، توسط سطح اهمیت طبقه‌بندی می‌شوند و تصمیم در مورد اینکه کدام توالی در بین دو انتشار نرم‌افزار تغییر کند به اهمیت تغییرات از انتشار قبلی بستگی دارد؛ بنابراین اولین توالی هنگامی تغییر می‌کند که مهم‌ترین و بیشترین تغییرات در بین دو انتشار رخ داده باشد و تغییرات بعدی توالی‌ها نشانگر تغییرات کم اهمیت بین دو انتشار هستند.
برای مثال، در روشی که از شناسه‌ای با چهار توالی استفاده می‌کند، اولین توالی وقتی افزایش می‌یابد که کد به‌طور کامل بازنویسی شده باشد، در حالی که اگر در رابط کاربری یا در مستندات برنامه تغییر کوچکی انجام شده باشد شناسهٔ چهارم تغییر می‌کند.
این روش به کاربران اجازه می‌دهد تا میزان پیشرفت پروژه و همچنین میزان آزمایش‌هایی را که روی پروژه انجام شده‌است را ارزیابی کنند. اگر تغییرات در قسمت میانی صورت گیرد، برای مثال، اگر سیر انتشار ۱٫۳ انتشاری به صورت 1.3rc4 داشته باشیم، این انتشار نشان‌دهندهٔ آزمایشی بودن این انتشار است و در حقیقت دارای تغییراتی است که لزوماً در دنیای واقعی آزمایش نشده‌اند. این روش به‌طور معمول «سطح سوم از شماره بندی» (تغییر) را میسر می‌کند:
1.3.1, 1.3.2, 1.3.3, 1.3.4... 1.4b1, ...
در اصل در انتشارهای بعدی، عدد بزرگتر (major number) وقتی افزایش می‌یابد که پرش یا جهش‌های بارزتری وجود داشته باشد، عدد کوچکتر (Minor Number) وقتی افزایش می‌یابد که تنها مشخصات کوچکی افزوده شده باشند یا رفع باگ مهمی انجام شود، و رقم تجدید نظر (Revision Number) وقتی افزایش می‌یابد که نواقص و باگ‌های کوچکی رفع شوند. برای مثال یک محصول می‌تواند دارای چنینن سیری از انتشارات باشد:
۰٫۹٫۱, ۰٫۹٫۲, ۰٫۹٫۳, ۱٫۰, ۱٫۰٫۱, ۱٫۰٫۲, ۱٫۱, ۱٫۱٫۱, ۲٫۰, ۲٫۰٫۱, ۲٫۰٫۲, ۲٫۱, ۲٫۱٫۱, ۲٫۱٫۲, ۲٫۲, ...
ممکن است توسعه دهنگان از نسخهٔ ۵٫۰ با نسخهٔ ۵٫۵ جهش کنند تا نشان دهند که ویژگی‌های مهمی افزوده شده‌است، اما این ویژگی‌ها در حد کافی نبوده‌است که عدد بزرگتر (Major Number) را تغییر دهند.
روش متفاوت دیگر، آن است که در کنار اعداد برزگتر و کوچکتر، از حروف الفبا برای تفکیک کردن انواع انتشار -یعنی آلفا، بتا، 'کاندیدای انتشار'- استفاده شود. یک روند انتشار که از این روش استفاده می‌کند می‌تواند شبیه به موارد زیر باشد:
۰٫۵, ۰٫۶, ۰٫۷, ۰٫۸, ۰٫۹ == 1.0b1, 1.0b2 (با کمی بهبود), 1.0b3 (با بهبودهای بیشتر) == 1.0rc1(به اندازهٔ کافی پایدار است) == ۱٫۰
اگر مشخص شود که 1.0rc1 نیاز به رفع باگ دارد، در اینصورت به نسخهٔ 1.0rc2 (بخوانید دومین نسخهٔ کاندیدای انتشار از نسخهٔ اول نرم‌افزار) تبدیل می‌شود و همین‌طور ادامه می‌یابد. مهم‌ترین ویژگی این روش آن است که اولین نسخهٔ یک سطح مشخص (بتا، RC، تولید) باید با آخرین نسخهٔ زیر انتشار آن برابر باشد: یعنی شما نمی‌توانید از آخرین نسخهٔ بتا به اولین نسخهٔ RC تغییرات جدید به نرم‌افزار اضافه کنید و همچنین از آخرین RC به انتشار نهایی نرم‌افزار. در صورت انجام چنین کاری باید یک انتشار دیگر در سطح پایینی توالی‌ها ایجاد کنید.
با این حال چون نسخه‌بندی شماره‌ها ساختهٔ دست انسان هستند می‌توان تغییرات دلخواهی را ایجاد کرد که از این اصول تخلف می‌کنند: برای مثال اولین توالی می‌تواند بین نسخه‌هایی افزایش یابد که تنها یک خط از کد آن‌ها با یکدیگر متفاوت است تا این حالت (کاذب) را به وجود آورند که تغییرات بسیار مهمی روی داده است.
دیگر روش‌ها به توالی‌های مجزا معنا می‌بخشد:
major.minor[.build[.reversion]]
یا
major.minor[.maintenance[.build]]
دوباره، در این مثال‌ها، تغییرات هر توالی از سمت چپ، نشاندهندهٔ اهمیت بیشتر و بارز بودن تغییرات در پروژه است و تعریف تمایز این توالی‌ها توسط نویسنده به‌طور اختیاری انجام می‌شود.
در اکثر برنامه‌های تجاری اولین شمارهٔ انتشار یک محصول از نسحهٔ شمارهٔ یک شروع می‌شود.

طراحی مرحلهٔ توسعه

بعضی از روش‌ها در اولین توالی از صفر شروع می‌کنند تا برای انتشارهایی که به اندازهٔ کافی برای توسعهٔ کلی و عملی پایدار نبوده‌اند و تنها برای آزمایش یا استفادهٔ داخلی منظور گردیده‌اند، وضعیت آلفا با بتایی را مشخص کنند.

تعداد توالی‌ها

گاهی یک عدد چهارم، ضمنی هم وجود دارد که به ساخت نرم‌افزار مربوط می‌شود. همچنین برخی از شرکت‌ها تاریخ ساخت را نیز وارد می‌کنند. شماره نسخه‌ها می‌توانند حروف و دیگر عبارات را نیز استفاده کنند، برای مثال Lotus 1-2-3 Release 1a.

توالی صعودی

دربارهٔ نحوهٔ افزایش اعداد ویراستی عددی یا رقمی دو مکتب فکر وجود دارد. آزادترین پکیج‌های نرم‌افزاری اعداد را نوعی جریانات پیوسته می‌دانند، بنابراین یک نرم‌افزار آزاد یا محصول متن‌باز دارای اعداد ویراستی مانند ۱٫۷٫۰, ۱٫۸٫۰, ۱٫۸٫۱, ۱٫۹٫۰, ۱٫۱۰٫۰, ۱٫۱۱٫۰, ۱٫۱۱٫۱, ۱٫۱۱٫۲ می‌باشند. نمونه‌ای از این نوع بستهٔ نرم‌افزاری mediawiki است، با این حال برخی از برنامه‌ها به شیوه دیگری با اعداد ویراستی رفتار می‌کنند و ممکن است اعداد ویراستی مثل ۱٫۸, ۱٫۹, ۱٫۹۱, ۱٫۹۲ داشته باشد. در بسته‌های نرم‌افزاری که از این روش استفاده می‌کنند، نسخهٔ ۱٫۹۱ ویرایش کوچک بعد از ۱٫۹ می‌باشد. عرضه‌های تعمیری (یعنی تنها رفع خطاها) را 1.91a, 1.91b و به همین روال می‌نامند.
قالب استاندارد شماره گذاری GNU به صورت major.minor.reversion می‌باشد اما emacs به‌طور مشهود از قالب دیگری استفاده می‌کند که در آن عدد اصلی («۱») خذف شده و یک اصطلاح «مکان کاربر» که همیشه صفر است به بسته‌های اولیه emacs افزود می‌شود ما توسط توزیع کننده‌ها افزایش می‌یابد.

استفاده از اعداد منفی

برخی از پروژه‌ها از اعداد منفی استفاده می‌کنند. یک مثال کامپایلر smalleiffel است که از ۱٫۰- آغاز شده و به ۰٫۰ می‌رسد و معمولاً در ۰٫۷۵- قرار دارد.

درجه سازگاری

برخی از پروژه‌ها برای اشاره به انتشارهای ناسازگار ار عدد ویراستی بزرگ استفاده می‌کنند، Apache APR و FarCry CMS از این دسته هستند.

زمان

پروژهٔ Wine از یک قالب ویرایش زمانی استفاده می‌کند که از سال، ماه، روز انتشار استفاذه می‌کند. برای مثال Wine 20040505. اکنون Wine از یک روند استاندارد استفاده می‌کند. جدیدترین ویراست آن در تاریخ ۶ ژوئن ۲۰۰۸، 1.0-rc4 می‌باشد. لینوکس اوبونتو از یک برنامهٔ ویرایشی مشابه استفاده می‌کند، برای مثال Ubuntu 8.04 در آوریل ۲۰۰۸ صادر شد.
وقتی از از زمان برای نسخه‌بندی استفاده می‌کنیم برای مثال استفاده از زمان در نام‌های فایل‌ها، متداول است که از یک قالب ISO استفاده کنیم: YYYY-MM-DD

چون از لحاط رشتهٔ حروف به صورت افزایشی/کاهشی ذخیره می‌شود. علامت‌های "-" معمولاً حذف می‌شوند.
شماره گذاری نرم‌افزاری Microsoft Office نیز یک شماره گذاری بر حسب زمان می‌باشد.

سال انتشار

نمونه‌های دیگر نسخه‌ها را به وسیلهٔ سال شناسایی می‌کنند (Adobe Illustrator 88 و WordPerfect Office 2003). با این حال وقتی تاریخی استفاده می‌شود تا به ویرایش اشاره کند این کار تنها به خاطر اهداف بازاریابی صورت می‌گیرد و یک عدد ویرایشی واقعی صادر می‌شود. برای مثال Microsoft Windows 2000 Server به صورت داخلی به عنوان Windows NT 5.0 ویرایش شده‌است.

تک

تک یک روش خاصی برای نسخه‌بندی نرم‌افزار دارد. از زمان ویرایش ۳ تا کنون، به روزرسانی‌ها با افزودن یک رقم اضافی به انتهای شماره‌های نسخ صورت گرفته‌است. بنابراین عدد ویرایش به سمت π میل می‌کند. ویرایش فعلی ۳٫۱۴۱۵۹۲۶ می‌باشد. این امر انعکاسی از این حقیقت است که تک اکنون بسیار با ثبات است و تنها به روزرسانی‌های ناچیزی صورت گرفته‌است. توسعه دهنده تک دونالد نوث عقیده دارد که آخرین تغییر که پس از مرگش روی می‌دهد، باید برای تغییر عدد ویرایش به π صورت گیرد، این تغییر باید در جائی صورت گیرد که همهٔ باگ‌های باقی‌مانده به یک ویژگی ثابت تبدیل خواهند شد.
به شیوهٔ مشابه، نسخه‌بندی نرم‌افزار METAFONT به عدد e میل می‌کند.

قالب‌های دیگر

برخی تولید کنندگان نرم‌افزار برای اشاره به انتشار نرم‌افزارهایشان از قالب‌های مختلف استفاده می‌کنند. برای مثال، سیستم‌عامل Microsoft Windows در ابتدا با ارقام استاندارد و ویراست رقمی (ویندوز ۱٫۰ و ویندوز ۳٫۰)، سپس به وسیله سال (ویندوز ۹۵، ویندوز ۹۸، ویندوز ۲۰۰۰)، سپس استفاده از کدهای الفبایی عددی (ویندوز ME، ویندوز XP) و اکنون استفاده از اسامی ویژه (ویندوز ویستا).

پروژهٔ Debian برای انتشار سیستم‌عامل خود از قالب ویرایشی اصلی/فرعی استفاده می‌کند، اما اسامی رمزی را (اسم رمز) از فیلم داستان Toy Story گرفته‌است تا در طول توسعهٔ سیستم‌عامل خود بتواند با این اسم رمزها به انتشارهای پایدار و ناپایدار اشاره کند.

اعداد ویرایشی داخلی

ممکن است نرم‌افزارها از یک عدد ویراشی داخلی استفاده کنند که از عدد ویرایشی مندرج در نام محصول متفاوت است. برای مثال J2SE5 5.0 دارای عدد ویرایشی داخلی ۱٫۵٫۰ می‌باشد. ویندوز NT 4، ویندوز ۴٫۰ NT است، ویندوز ۲۰۰۰، ویندوز NT ۵٫۰ است. ویندوز XP، ویندوز NT ۵٫۱، ویندوز سرور ۲۰۰۳، ویندوز NT ۵٫۲ می‌باشد. ویندوز ویستا، ویندوز NT ۶٫۰ می‌باشد و ویندوز ۷، ویندوز NT ۶٫۱ می‌باشد.

نسخه‌های قبل از انتشار

در کنار قالب‌های نسخه‌بندی متعددی که در بالا ذکر شدند، همانطور که برنامه راه خویش را از میان مراحل چرخهٔ عمر انتشار نرم‌افزار باز می‌کند، سیستمی برای اشاره به نسخه‌های قبل از انتشار استفاده می‌شود. برنامه‌هایی که در مرحلهٔ اولیه هستند اغلب «آلفا»، اولین حرف در الفبای یونانی نامیده می‌شوند. پس از تکمیل و زمانی که هنوز برای صدور آماده نیستند آن‌ها را نرم‌افزار «بتا»، دومین حرف از الفبای یونانی می‌نامند. در کل نرم‌افزار آلفا تنها توسط توسعه‌دهندگان آزمایش می‌شود در حالی‌که نرم‌افزار بتا برای آزمایش کلی توزیع می‌شود. نرم‌افزار نسخهٔ آلفا و بتا اغلب نسخه‌های عددی کم‌تر از ۱ دارند (مثل ۰٫۹) تا نشان دهند که روند آن‌ها در جهت یک انتشار ۱٫۰ عمومی قرار دارد. با این حال اگر نسخهٔ قبل از انتشار یک بستهٔ نرم‌افزاری مانند ویرایش ۲٫۵ باشد یک ”a” یا "alpha" به رقم ویرایش افزوده می‌شود بنابراین ویرایش آلفا از انتشار ۲٫۵ را می‌توان با 2.5a یا 2.5.a شناسایی کرد.
بسته‌های نرم‌افزاری که به تازگی به عنوان یک ویرایش ویژه صادر شده‌اند می‌توانند برچسب ویرایش داشته باشند که با "RC-#" دنبال می‌شوند و به عدد کاندیدای انتشار اشاره دارند. وقتی نسخه یا ویرایش واقعاً صادر شود، برچسب rc ناپدید می‌شود.

با این حال این امر می‌تواند برای برخی از مدیران بسته مشکلی آفرین باشد. برای مثال، بستهٔ اتوماسیون رادیویی Rivendell قصد دارد اولین بستهٔ انتشار تولیدی کامل خود به نام v1.0.1 را منتشر کند چون اگر آن‌ها آن را v1.0.0 بنامند مدیر بستهٔ RPM نصب آن را رد می‌کند چون تصور می‌کند که این نسخه قدیمی‌تر از 1.0.0rc2 می‌باشد.

ویراست‌های اعداد فرد برای توسعهٔ انتشار

تا زمان سری‌های 2.6.x، هستهٔ لینوکس برای اشاره به انتشارهای توسعه‌ای از اعداد ویراستی کوجک فرد و برای اشاره به انتشارهای پایدار از اعداد ویراستی کوچک زوج استفاده می‌کرد. برای مثال، لینوکس ۲٫۳ یک خانواده پیشرفته از دومین طرح اصلی هسته لینوکس است و لینوکس ۲٫۴ خانواده اصلی انتشار بود. پس از عدد ویرایشی فرعی در هستهٔ لینوکس، عدد انتشار به ترتیب افزایشی قرار دارد، برای مثال لینوکس ۲٫۴٫۰ تا لینوکس ۲٫۴٫۲۲، به علاوه یک رقم ویراستی ناچیز به ۲٫۶۸ اضافه شد و ۲٫۶٫۸٫۱ را می‌ساز که یه تغییر خیلی جزئی اشاره می‌کند، رقم چهارم پس از ۲٫۶٫۱۱٫۱ استاندارد شد.

پایگاه‌های مرتبط

http://semver.ir/ نسخه بندی معنایی در نرم‌افزارها