Semantic Versioning


تا حالا وقتی اپلیکیشن رو گوشیاتون نصب کردید ، به ورژن هاش دقت کردین؟

قدیم تر ها قبل از اینکه گوگل پلی و ... بین مردم مرسوم بشه ، برای نصب کردن بازی ها و برنامه هایی که نیاز داشتیم ، از یک سری فایل با پسوند apk استفاده می‌کردیم. همیشه کنار اسم پکیج یک سری اعداد به صورت ' 1.1.5 ' و یا مثلا ' v1.6.2 ' بود که دقیقا نشون میداد داریم از چه نسخه استفاده می‌کنیم.

اگر تا الان فکر میکردید که این اعداد دلبخواهی و یا رندوم بوده ، حتما با من همراه باشید تا بفهمیم این اعداد دقیقا از کجا میاد.

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

اینجوری کاربر هر بار بعد از گرفتن آپدیت جدید میتونه متوجه بشه که کجا دقیقا چه تغییراتی انجام شده.

میرسیم به این بخش که اصلا چی میشه که برنامه ها نیاز به آپدیت پیدا میکنن؟؟

اساسا تغییرات به چند دسته تقسیم میشن :

1 - زمانی که باگی از سمت کاربر گزارش بشه و یا اصولا برنامه به باگ یا مشکل بخوره. خب باگ یا مشکل تو برنامه بخاطر اتفاقات خیلی مختلفی میتونه به وجود بیاد مثلا مشکل از سمت سرور یا تغییرات تو سورسی که استفاده میکنیم ازش و یا ... در هر صورت دولوپر باید بره سراغ کد و باگ ها رو برطرف کنه و نسخه بدون باگ جدید ارائه بده.

2 - خیلی وقتها ممکنه یه کدی بنویسیم که درست باشه و کار کنه و خروجی درست تحویل بده. ولی بعد از مدتی که درخواست ها زیاد میشه پرمورمنس پروژه بیاد پایین ، در اون صورت مجبوریم برای بالاتر بردن بهره وری ساختار بخش هایی از کد رو تغییر بدیم یا در واقع بهینه سازی انجام بدیم بدون اینکه تغییری در ورودی و خروجی داشته باشیم.

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


برای تگ زدن روی پروژه ها ، اعداد بسته به نوع تغییری که انجام دادیم و تغییرات در ورودی و خروجی نهایی ، تغییر میکنن.

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

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

عدد سوم یا patch version ، تنها وقتی تغییر میکنه که برنامه به باگ خورده باشه و دولوپر فقط باگ رو برطرف کرده و نسخه جدید بدون باگ رو ارائه داده.


با این اوصاف حالا دیگه میدونیم وقتی اولین نسخه از برناممون رو بخوایم ارائه بدیم باید چه چه تگ ورژنی براش باید بزنیم. مثلا باید از " 1.0.0 " و یا " v1.0.0 " استفاده کنیم.

راجع به v که اول اعداد گاهی میزارن باید بگم که یکجور لیبل محسوب میشه و مرسوم تر هست که ازش استفاده بشه.

یک نوع لیبل دیگه که احتمالا دیگه باشین مثلا " v1.5.2-beta " در واقع بخش آخر یک لیبل برای نشون دادن این هست که نسخه ارائه شده یک نسخه بتا ست و نسخه نهایی نیست.


گردآورنده مقاله : پرستو کشاورز هدایتی

استاد : دکتر مریم حاجی اسمعیلی ، دکترای علوم کامپیوتر از دانشگاه کینگستون لندن

Dr.Maryam Hajiesmaeili

PhD of computer science from Kingston university of London

Linkedin