การกำหนดการใช้งาน versioning - SilverSky9/DevToolNo1 GitHub Wiki

การกำหนดหมายเลข version จะกำหนดด้วยวิธี Semantic Versioning มีหลักการคือจะประกอบไปด้วยตัวเลข 3 ระดับและแต่ละดับจะถูกขั้นด้วยจุด โดยเขียนในรูปแบบได้คือ MAJOR.MINOR.PATCH โดยในแต่ละระดับของตัวเลขมีความหมายดังนี้

  • ระดับ MAJOR หมายถึง ตัวเลขที่อยู่หน้าสุด โดยเป็นเลขจะมีการเปลี่ยนแปลงก็ต่อเมื่อมีการ software มีการเปลี่ยนแปลงครั้งใหญ่ หรือ มีการเปลี่ยนแปลง API ชุดใหม่ที่เข้าไม่ได้กับเวอร์ชั่นก่อนหน้า
  • ระดับ MINOR หมายถึง เป็นตัวเลขที่อยู่ตรงกลาง โดยเป็นเลขที่มีการเปลี่ยนแปลงเมื่อมีการเพิ่มฟีเจอร์ใหม่เข้ามา ถอดออก หรือปรับแต่งรูปแบบการทำงาน
  • ระดับ PATCH หมายถึง เป็นตัวเลขที่อยู่ท้ายสุด โดยเป็นเลขที่มีการเปลี่ยนแปลงเมื่อมีการแก้ไข bug เล็กๆ

หลักการในการทำ Semantic Versioning

  1. เลขเวอร์ชันต้องอยู่ในรูปแบบ X.Y.Z โดยทั้งสามตัวต้องเป็นเลขจำนวนเต็มไม่ติดลบและไม่ติดเลขศูนย์นำหน้า ตัวอย่าง
 3.7.0 ถูกต้อง 
 3.07.0 ไม่ถูกต้อง 
 -3.7.0 ไม่ถูกต้อง 
 3.7.0.9 ไม่ถูกต้อง
  1. X ถูกเรียกว่าเวอร์ชันหลัก (Major Version) Y ถูกเรียกว่าเวอร์ชันรอง (Minor Version) Z ถูกเรียกว่าเวอร์ชันแพทช์ (Patch Version)

  2. ถ้าเวอร์ชันหลักเป็นเลขศูนย์ (0.y.z) ให้ถือว่าเลขเวอร์ชันนี้ไม่อยู่ในข้อกำหนดของ Semantic Versioning นักพัฒนาอาจใส่ตัวเลข y และ z อย่างไรก็ได้ และ ไม่ควรตีความหมายของเลขเวอร์ชันนี้จริงจัง

  3. ให้ถือว่าเวอร์ชัน 1.0.0 เป็นจุดเริ่มต้นในการใช้ข้อกำหนดของ Semantic Versioning การเปลี่ยนแปลงเลขเวอร์ชันขึ้นอยู่กับข้อกำหนดของ Semantic Versioning

  4. เมื่อเลขเวอร์ชันถูกปล่อยออกมา เนื้อหาเช่นโค้ดและไฟล์ของเวอร์ชันนั้นต้องไม่ถูกแก้ไข หากมีการแก้ไข มันต้องถูกปล่อยเป็นเวอร์ชันใหม่

  5. เวอร์ชันแพทช์ Z (x.y.Z โดยที่ x > 0) ต้องเพิ่มค่าถ้ามีการแก้ไขความผิดพลาดจากเวอร์ชันก่อนหน้าเพียงเท่านั้น ตัวอย่าง คอมโพเนนท์ (Component) ชื่อว่าเอ เวอร์ชัน 13.2.12 เป็นเวอร์ชันที่แก้ไขความผิดพลาดของเวอร์ชัน 13.2.11 เพียงเท่านั้น ไม่ได้มีการเพิ่มฟังก์ชันหรือยกเลิกฟังก์ชันจาก 13.2.11

  6. เวอร์ชันรอง Y (x.Y.z โดยที่ x > 0) ต้องเพิ่มค่าถ้ามีการเพิ่มฟังก์ชันหรือต้องเพิ่มค่าถ้ามีการยกเลิกฟังก์ชันจากเวอร์ชันก่อนหน้า โดยอาจมีการแก้ไขความผิดพลาดจากเวอร์ชันก่อนหน้าร่วมด้วย และเมื่อเวอร์ชันรองมีการเพิ่มค่า เวอร์ชันแพทช์ต้องปรับค่าเป็นศูนย์ ตัวอย่าง นักพัฒนามีการเพิ่มฟังก์ชันให้กับคอมโพเนนท์เอกับแก้ความผิดพลาดบางอย่าง ทำให้เลขเวอร์ชันจากเดิม 13.2.12 เปลี่ยนเป็น 13.3.0

  7. เวอร์ชันหลัก (X.y.z โดยที่ X > 0) ต้องเพิ่มค่าถ้ามีการเปลี่ยนแปลงจนไม่สามารถใช้งานร่วมกับเวอร์ชันก่อนหน้าได้ โดยอาจมีการแก้บักและ/หรือมีการเพิ่มหรือลดฟังก์ชันร่วมด้วย และเมื่อเวอร์ชันหลักมีการเพิ่มค่า เวอร์ชันแพทช์และเวอร์รองต้องปรับค่าเป็นศูนย์ ตัวอย่างเช่น คอมโพเนนท์เอเวอร์ชัน 13.3.5 สามารถใช้ร่วมกับคอมโพเนนท์บีเวอร์ชัน 13.2.7 แต่จะไม่สามารถใช้ร่วมกับคอมโพเนนท์บีเวอร์ชัน 12.7.6

  8. เวอร์ชันก่อนปล่อย (Pre-release version) อาจถูกระบุโดยเพิ่มขีด (hyphen) ต่อท้ายเวอร์ชันแพทช์ จากนั้นต่อด้วยตัวอักษรหรือตัวเลขหลักจากนั้นสามารถเป็นตัวอักษร ตัวเลข ขีดหรือจุดก็ได้ ในกรณีที่เป็นตัวเลข ห้ามนำหน้าตัวเลขด้วยศูนย์ ถ้าค่า x.y.z เท่ากัน เวอร์ชันที่มีเวอร์ชันก่อนปล่อยจะถือว่ามีลำดับที่ต่ำกว่าเวอร์ชันที่ไม่มีเวอร์ชันก่อนปล่อย ตัวอย่างที่มีเวอร์ชันก่อนปล่อย 1.0.0-alpha, 1.0.0-alpha.1, 1.0.0-0.3.7, 1.0.0-x.7.z.92, 1.0.0-x-y-z.- และตัวอย่างการเปรียบเทียบ 14.4.1 < 14.4.2-alpha < 14.4.2

  9. ถ้าสองเวอร์ชันมีเวอร์ชันหลัก,รองและแพทช์เท่ากันและมีเวอร์ชันก่อนปล่อยทั้งคู่ การเปรียบเทียบต้องดูเวอร์ชันก่อนปล่อยโดยเทียบจากข้อมูลหลังจุด (dot) แต่ละตัวจากซ้ายไปขวาจนกว่าจะเจอส่วนต่างโดยมีหลักการเปรียบเทียบต่อไปนี้ ข้อมูลหลังจุดมีเพียงตัวเลข ให้เปรียบเทียบมากน้อยจากการเปรียบเทียบตัวเลขตามปกติ อักขระตัวอักษรและขีดให้เปรียบเทียบมากน้อยโดยดูจากรหัสแอสกี้ (ASCII)ของตัวอักษรและขีดนั้น อักขระตัวเลขมีลำดับต่ำกว่าอักขระที่ไม่ใช่ตัวเลขเสมอ จำนวนอักขระมากกว่า มีลำดับสูงกว่า จำนวนอักขระน้อยกว่า ตัวอย่างการเปรียบเทียบเช่น 1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta < 1.0.0-beta < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0

  10. บิวด์เมตาดาต้า (Build metadata คือ ข้อมูลการบิวด์หรือบางคนเรียกว่าการคอมไพล์ (compile) อาจเป็นตัวเลขหรือรหัสซึ่งแตกต่างกันไปในการบิวต์แต่ละครั้ง) อาจถูกระบุโดยเพิ่มบวก (plus) ต่อท้ายเวอร์ชันแพทช์หรือเวอร์ชันก่อนปล่อย จากนั้นต่อด้วยตัวอักษรหรือตัวเลขหลักจากนั้นสามารถเป็นตัวอักษร ตัวเลข ขีดหรือจุดก็ได้ บิวด์เมตาดาต้าต้องไม่นำมาใช้ในการเปรียบเวอร์ชัน ตัวอย่างบิวด์เมตาดาต้าเช่น 1.0.0-alpha+001, 1.0.0+20130313144700, 1.0.0-beta+exp.sha.5114f85, 1.0.0+21AF26D3—-117B344092BD ตัวอย่างการเปรียบเทียบ 14.4.1 < 14.4.2-alpha = 14.4.2-alpha+20130313144700 < 14.4.2 = 14.4.2+20130313144750 = 14.4.2+20130313144800

ข้อดี 1.เป็นหลักการที่ดีเนื่องจากตัวเลขแต่ละตัวมีความหมายที่ชัดเจนในตัวของมันเอง 2.เป็นหลักการที่ง่ายต่อการเข้าใจ ใช้เวลาเรียนรู้ไม่นาน 3.เป็นหลักการที่ช่วยในการจัดการการวางแผนการทำงาน เช่น ช่วยให้สามารถตรวจสอบได้ง่ายขึ้นโดยในเลขของ Semantic Versioning เป็นตัวอ้างอิง 4.ทำให้การสื่อสารภายในทีมเป็นไปได้ง่ายมีประสิทธิภาพมากยิ่งขึ้น

ข้อเสีย 1.มีปัญหาด้านความปลอดภัยเกิดขึ้นอยู่ 2.การอัปเดตอัตโนมัติมีอายุการเก็บรักษาที่จำกัด