การตั้งเลขเวอร์ชันซอฟท์แวร์และเอพีไอตามหลัก SemVer/ Version Number with SemVer

นักพัฒนาหลายคนอาจจะสงสัยว่าการใส่เลขเวอร์ชันให้กับซอฟท์แวร์หรือเอพีไอนั้น มีหลักการหรือไม่ ถ้ามี มีหลักการอย่างไร ในบทความนี้จะขอพูดถึงหนึ่งหลักการในการระบุเลขเวอร์ชัน ซึ่งถูกใช้กันอย่างแพร่หลาย นั้นคือ Semantic Versioning หรืออย่างย่อก็คือ SemVer ซึ่งในขณะที่เขียนนี้เป็นเวอร์ชันที่ 2

นิยามคำที่ระบุถึงระดับความเข้มข้นของกฎหรือข้อบังคับ

คำที่ใช้ระบุระดับความเข้มขันของกฎหรือข้อบังคับ อ้างอิงจาก RFC 2119

ข้อกำหนดของ SemVer

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

2. X ถูกเรียกว่าเวอร์ชันหลัก (Major Version) Y ถูกเรียกว่าเวอร์ชันรอง (Minor Version) Z ถูกเรียกว่าเวอร์ชันแพทช์ (Patch Version)

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

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

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

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

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

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

9. เวอร์ชันก่อนปล่อย (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

10. ถ้าสองเวอร์ชันมีเวอร์ชันหลัก,รองและแพทช์เท่ากันและมีเวอร์ชันก่อนปล่อยทั้งคู่ การเปรียบเทียบต้องดูเวอร์ชันก่อนปล่อยโดยเทียบจากข้อมูลหลังจุด (dot) แต่ละตัวจากซ้ายไปขวาจนกว่าจะเจอส่วนต่างโดยมีหลักการเปรียบเทียบต่อไปนี้

  1. ข้อมูลหลังจุดมีเพียงตัวเลข ให้เปรียบเทียบมากน้อยจากการเปรียบเทียบตัวเลขตามปกติ
  2. อักขระตัวอักษรและขีดให้เปรียบเทียบมากน้อยโดยดูจากรหัสแอสกี้ (ASCII)ของตัวอักษรและขีดนั้น
  3. อักขระตัวเลขมีลำดับต่ำกว่าอักขระที่ไม่ใช่ตัวเลขเสมอ
  4. จำนวนอักขระมากกว่า มีลำดับสูงกว่า จำนวนอักขระน้อยกว่า

ตัวอย่างการเปรียบเทียบเช่น 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

11. บิวด์เมตาดาต้า (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

ข้อมูลอ้างอิงและเพิ่มเติม

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  เปลี่ยนแปลง )

Google photo

You are commenting using your Google account. Log Out /  เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out /  เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out /  เปลี่ยนแปลง )

Connecting to %s