
كمبرمج رايق خلصت مشروعك وهيطلع للنور أخيرًا, ودي هتكون أول نسخة منه بس بدل ما تكتب جمبه version 1 هتلاقيك كتبت”Version 1.0.0” طيب ليه كل البرامج بتكتب نسخها كدا ودا معناه إيه ليا كمبرمج, دا اللي هنعرفه النهارده!
💡ال Semantic Versioning أو “إصدار نسخ البرمجيات” هو ببساطة نظام تسمية لإصدارات البرامج, نظام التسمية دا مهم في كل أنواع البرمجيات سواء البرنامج دا تطبيق موبايل أو Web App API أو Library أو لغة برمجة أو حتى نظام تشغيل كامل زي IOS أو Windows
أهمية الـ Semantic Versioning
- كمستخدم: بيعرفك إيه هي طبيعة التغيرات والاختلافات بين النسخ وبعضها
- كمبرمج مهم بالنسبة لك في أمرين:
- امتي تغير اسم نسخة البرنامج بتاعك وعلى أي أساس؟
- إدارة ال Dependencies واللي يبان سهل بس كل لما برنامجك هيكبر وتزيد ال Dependencies كل لما فهمك وحُسن استخدامك لل Semantic Versioning هيريحك من مشاكل كتير ممكن تكسرأجزاء من برنامجك أو توقف شغله بالكامل.
أقسام الـ Semantic Versioning
نظام التسمية مقسم ل 3 أجزاء:
-
Major: ودا اسم النسخة الرئيسي, وهيتغير وقت ما النسخة تكون بتقدم تغييرات بتكسر ال API Interface بتاع النسخة اللي قبلها, والتغييرات دي بنسميها تغييرات غير متوافقة Incompatible Changes هنفهم المصطلح دا اكتر في نهاية الورقة
-
Minor: الجزء دا بيتغير مع إضافتك للنسخة الرئيسية ميزات أو تغييرات لا تتسبب في تغير الـ API Interface وبالتالي هي تعديلات Compatible مع النسخة الرئيسية
مثال:
- قمت بتصميم تطبيق مطعم وأصدرت النسخة الأولى version 1.0.0
- أضفت ميزة جديدة وهي قدرة العميل على الإطلاع على طلباته السابقة هنا لا تصدر Version 2.0.0 ولكن ستزيد على هذا القسم وتصبح نسخة التطبيق هي 1.1.0
- ميزة جديدة وهي قدرة العميل على التسجيل في التطبيق هنا ستصدر version 1.2.0 لأنها إضافة على النسخة فقط
- Patch: أي برنامج مع الاستخدام في أرض الواقع بيطلع فيه عيوب -فيسبوك يشهد بده- أو Bugs, فتصليح خطأ معين في أداء البرنامج مش معناه اني غيرت البرنامج كله
ففي مثال تطبيق المطعم: اكتشفنا وجود خطأ في نظام التسجيل الذي أضفناه في النسخة 1.2.0 هنا سنقوم بإصلاح ال Bug وتغيير النسخة ل 1.2.1
إذا أهم حاجة في تغيير نسخ البرامج اللي بطلعها للنور هو إني أسأل نفسي سؤال:
💡هل التغييرات اللي بقدمها دي Compatible مع النسخة الحالية ولا لاء ؟
إدارة التبعيات Dependencies Management
بما أننا بنستخدم لغة برمجة معينة و الكثير من ال Packages أو ال Libraries الجاهزة في إنتاجنا للتطبيقات فتغيير النسخ دي لنسخ جديدة غير متوافقة ممكن يكسر البرنامج بتاعي او ميشتغلش أساسًا وهنا بيجي أهمية دور تحديد النسخة المستخدمة
ممكن تحدد في ال Dependencies List بتاعتك النسخ اللي هتستخدمها من المكتبات الجاهزة بحيث تلتزم بنسخة محددة. ولكنه سلاح ذو حدين
- متبالغش في تحديد النسخ بحيث تحرم نفسك من المميزات الإضافية أو إصلاح العيوب في المكتبات اللي بتعتمد عليها فمثلاً بدلاً من استخدام النسخة 21.3.1 بالتحديد من مكتبة معينة ممكن أستخدم 21.3.1^ واللي هتسمح للبرنامج بالاستفادة من أي نسخة فرعية أو إصلاحات للنسخة دي وفي نفس الوقت ما تسمحش بتغيير النسخة الرئيسية فتكسر البرنامج بتاعي.
- وبرضو متبالغش في عدم تحديد النسخ باستخدام 21.3.1< واللي تعني استخدام أي نسخة أحدث من دي لأنه ممكن النسخة القادمة ترفع دعمها عن بعض ال Functions اللي انت بتستخدمها في برنامجك ف يسبب مشاكل في البرنامج وممكن يكسره.