Software Versioning ว่าด้วยเรื่องการตั้งเลขเวอร์ชั่นของซอฟต์แวร์
วันก่อนฟัง podcast พูดเรื่อง open source แล้วเขาโยงไปเข้าเรื่อง software versioning นิดนึง เห็นว่าน่าสนใจดี เลยเอามาเขียน blog ซะเลย
คิดว่าหลายคนน่าจะเคยเห็นเลขเวอร์ชั่นของ software ต่าง ๆ กันมาบ้าง พวก 1.0 1.1.0 2.0.9 อะไรพวกนี้แหละครับ ซึ่งจริง ๆ การตั้งเลข version ของ software ก็ไม่ได้มีกฎหรือข้อบังคับอย่างเป็นทางการอะไรนะ แต่เพื่อความง่ายและความเข้าใจที่ตรงกัน ผมอยากแนะนำ format การตั้งเลขเวอร์ชั่นอันนึงที่เรียกว่า Semantic Versioning (SemVer)
โดย SemVer มีหลักการง่าย ๆ อยู่ก็คือ เลข version นั้นจะประกอบไปด้วย 3 ส่วนหลัก
Major.Minor.Patch
1. Major — อยู่หน้าสุด เลขจะเปลี่ยนเมื่อ software ของเรามีการเปลี่ยนแปลงที่ทำให้ software ที่เชื่อมต่อกับ software ของเราพังได้… งงไหม? น่าจะงง ตัวอย่างนะครับ ผมสร้าง software ตัวหนึ่งชื่อว่า a แล้วใน a version 1.0.0 เนี่ย มี function ชื่อว่า getName() เอาไว้ให้เรียกใช้ แต่พอซักพักเราอยาก update version ใหม่ที่เปลี่ยนชื่อ function จาก getName() เป็น get_name() คือถ้าคนที่เคยเรียกใช้ software version 1.0.0 ของเรา เขา update เป็น version ใหม่เลยทันที ตรงที่เคยเรียก function getName() นี่จะพังทันทีครับ เพราะมันไม่มี function ชื่อนี้แล้ว มันเปลี่ยนชื่อไปเป็น get_name() แล้ว ประมาณนี้ครับ กรณีนี้เลข version หลังจากที่เรา update ต้องเป็น 2.0.0 ครับ
2. Minor — อยู่ตรงกลาง เลขจะเปลี่ยนเมื่อ software ของเรามีการเพิ่ม feature ใหม่ จากตัวอย่างเดิมนะครับ software a version 1.0.0 มี function getName() อยู่ โดยทีนี้เราอยากจะเพิ่ม function getLastName() เข้าไปด้วย เราก็ต้องเปลี่ยนเลข version เป็น 1.1.0 ครับ อีกกรณีที่เราอาจจะเพิ่มเลขส่วนของ Minor ได้ก็คือ software ของเรามีการพัฒนาหรือปรับปรุงในส่วนที่เป็น private function ครับ (ไม่ได้อยู่ใน api และไม่อนุณาตให้ software ภายนอกเรียกใช้)
3. Patch — อยู่หลังสุด เลขจะเปลี่ยนเมื่อเรามีการแก้บัค สมมุติว่า a version 1.0.0 function getName() มีบัคอยู่ เราแก้บัคส่วนนี้เสร็จ เราต้องเปลี่ยนเลข version เป็น 1.0.1 ครับ
กฎย่อยอื่น ๆ ที่สำคัญ
– ถ้าเลข Minor เปลี่ยน เลข Patch ต้องถูก reset เป็น 0
– ถ้าเลข Major เปลี่ยน เลข Minor และเลข Patch ต้องถูก reset เป็น 0
– public version เลขจะเริ่มที่ 1.0.0 (public version คือ version ที่เราเอาให้คนอื่นใช้งานจริงครับ ถ้าก่อนหน้าที่เราจะเอาไปให้คนอื่นใช้งานจริงได้จะเรียกว่า pre-release version)
– pre-release version เลขจะเริ่มที่ 0.1.0
บทความเต็ม: http://semver.org
การตั้งเลข version แบบนี้มีประโยชน์มากถ้า software ของเรานั้นเป็น software ประเภท framework หรือ library ที่ทำขึ้นเพื่อให้ผู้พัฒนาคนอื่นเอาไปใช้งานต่อ เพราะว่าการตั้งเลข version แบบ SemVer นี่จะทำให้คนที่เอา software เราไปใช้เข้าใจได้ทันทีว่ามีการเปลี่ยนแปลงแบบไหนบ้างในการ update แต่ละครั้ง เช่น ถ้ามีการ update แล้ว version เปลี่ยนแต่เลข Patch เขาก็รู้ว่าสามารถ update ได้เลย ไม่ต้องคิดอะไรมาก แต่ถ้ามีการ update แล้ว version เปลี่ยนเลข Major เขาก็รู้ว่าควรระวังและควรเข้าไปอ่านใน changelog ว่ามีอะไรที่เปลี่ยนแปลงไปบ้างครับผม