วันจันทร์ที่ 22 เมษายน พ.ศ. 2556

มาตรฐานการตั้งเลข version ของ software

ช่วงนี้เริ่มมีงานเขียน Microcontroller มากขึ้น เวลาผมเขียนเสร็จชื่อไฟล์ หรือชื่องานเวลามีการอัพเดทก็ชอบตั้งเป็นวันที่กับเวลาลงท้าย

เช่น
010220130102    
เป็นไงหละอ่านทีเอางงไปเลย เลขชุดแรกของผม xxyyzzz  คือ วัน/เดือน/ปี  ชุดที่สอง aabb คือเวลา hh:mm

เลยมีความตั้งใจอยากเขียน version แบบคนอื่นเค้าบ้าง แบบ Version 1.0 a rc-1 อะไรงี้ ตอนที่เอาไปแปะ จะได้ดูเท่ห์ๆ

พอไป search ด้วยอากู๋ก็ได้ความมาว่ามันมีมาตรฐานไว้ ตามเว็บนี้ http://semver.org/ ภาษาอังกฤษ เยอะมากอะ
หาอากู๋อีกนิดนึงมีคนไทยใจดีแปลให้เรียบร้อยแล้วที่ http://meewebfree.com/site/start-website-builder/417-standard-versioning-software-semantic

ไหนๆ ก็ไหนๆ ขอเอามาเก็บไว้ที่นี้เลยแล้วกัน เวลาผมหาจะได้หาง่ายๆอ่านทีตาลายได้เลยนะเนี่ย

โดยมาตรฐาน semver เค้ากำหนดเอาไว้ดังนี้ครับ
  1. software ที่ใช้ semantic versioning จะต้อง ประกาศ public API เอาไว้ ไม่ว่าจะเป็นในโค้ดเอง หรือใน document ก็ได้
  2. มาตรฐาน โดยปกติ จะเขียน X.Y.Z โดยต้องไม่เป็นเลขติดลบ X คือ version หลัก (major version) Y คือ version ย่อย (minor version) และ Z คือ version ปรับปรุง (patch version) โดยจะต้องใช้การเพิ่มค่าที่ละ 1 เช่น 1.9.0 > 1.10.0 > 1.11.0
  3. เมื่อมีการเพิ่มเลข major version ตัวเลข minor , patch จะต้อง reset เริ่มต้นที่ 0 และเมื่อ เพิ่มเลขที่ minor version เลขที่ patch ต้องเริ่มต้นที่ 0 เช่น 1.1.3 > 2.0.0 หรือ 2.1.7 > 2.2.0
  4. เมื่อ version ถูก release แล้ว content ที่อยู่ใน version จะต้องไม่ถูกแก้ไขอีก หากมีการแก้ไขใดๆ ให้นับเป็น version ถัดไปทันที
  5. Major version ที่เป็น 0 (เช่น 0.y.z) แปลว่า อยู่ในช่วงการพัฒนา ทุกสิ่งอย่างสามารถเพิ่มขึ้นมา หรืออยู่ดีๆหายไปก็ได้ เป็นอันรู้กันว่า ยังไม่เหมาะกับงานที่ซีเรียสมากๆ
  6. Version 1.0.0 ที่ประกาศ public แล้ว หากมีการพัฒนา version ใหม่ จะต้องประกาศการเปลี่ยนแปลง สิ่งที่เปลี่ยนไปจากเดิมด้วย
  7. Patch version Z (x.y.Z โดย x > 0) จะต้องเพิ่มเมื่อมีการแก้ไขแบบที่ยังใช้งานร่วมกับ version ก่อนหน้า หรือ ปัจจุบัน ที่กำลังใช้งานอยู่ได้ หรือ การแก้ไขบางจุด ที่ทำงานผิดปกติ หรือผลลัพท์เพี้ยนๆไป
  8. Minor version y (x.Y.z โดย x > 0) จะต้องเพิ่มเมื่อมีการเพิ่ม function การทำงาน  และยังทำงานร่วมกับ version ก่อนหน้า หรือปัจจุบัน ที่กำลังใช้งานอยู่ได้ หรือว่า กรณีที่ปิดบาง function ออกไป หรือว่า การเพิ่ม function การทำงานใหม่ หรือ ปรับปรุงการทำงานเชิงลึก(ที่ไม่สามารถเผยต่อ public ได้) หรืออาจจะรวมการเพิ่มของ path version เข้ามาเลย แต่ว่า การเพิ่ม minor version จะต้องเริ่ม reset patch version ไปที่ 0 ก่อนเสมอ
  9. Major version (X.y.z โดย x >0) จะต้องเพิ่มเมื่อ มีการทำ version ใหม่ที่ไม่สามารถใช้งานร่วมกับ version เก่าได้ โดยอาจจะรวม minor ,patch มาพร้อมกันเลยก็ได้ แต่ว่า ทั้ง minor , patch จะต้องเริ่ม reset ไปที่ 0 ก่อนเสมอ
  10. Pre-release version อาจจะใช้เครื่องหมาย dash แล้ว identifiers  แล้วตามด้วย dot คั่นใน series นั้นๆได้ โดยตัวที่ identifiers จะรันด้วยตัวหนังสือใน ASCII  และ dash เท่านั้น [0-9A-Za-z-]  ตัวอย่าง 1.0.0-alpha, 1.0.0-alpha.1, 1.0.0-0.3.7, 1.0.0-x.7.z.92
  11. Build version อาจจะใช้เครื่องหมาย + แล้ว identifiers แล้วตามด้วย dot คั่นใน series นั้นๆได้ โดยที่ตัว identifiers จะรันด้วยตัวหนังสือใน ASCII  และ dash เท่านั้น [0-9A-Za-z-]  ตัวอย่าง 1.0.0+build.1,1.3.7+build.11.e0f985a
  12. การ เรียงลำดับ version จะต้องคำนวณตามลำดับดังนี้ major, minor ,patch, pre-release และ build เอง ก็จะมีการเรียงลำดับได้อีก ดังนี้ major, minor , patch โดยอาศัยการเรียงค่ามากกว่าน้อยกว่า สำหรับการใช้ identifiers ก็จะเรียงตามลำดับของตัวหนังสือ และจะถือว่า ตัวหนังสือมีลำดับที่สำคัญกว่าตัวเลข เช่น 1.0.0-alpha < 1.0.0.-alpha.1 < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0-rc.1+build.1 < 1.0.0 < 1.0.0+0.3.7 < 1.3.7+build < 1.3.7+build.2.b8f12d7 < 1.3.7+build.11.e0f985a

ไม่มีความคิดเห็น:

แสดงความคิดเห็น