การกำหนดเวอร์ชันเชิงความหมายใช้กับโปรแกรมที่ไม่มี API อย่างไร


42

ในhttp://semver.org/ - ซึ่งในการรับรู้ของฉันดูเหมือนจะเป็นแบบแผนที่ใช้กันอย่างแพร่หลายในการกำหนดเวอร์ชัน - ขอแนะนำให้เพิ่มหมายเลขเวอร์ชันหลักเมื่อมีการแนะนำการเปลี่ยนแปลงที่แบ่ง / แก้ไข API

มีสถานการณ์ที่เกี่ยวข้องสองสถานการณ์ที่ฉันไม่เห็นวิธีใช้แนวทางนี้แม้ว่า:

  1. จะเกิดอะไรขึ้นถ้ารหัสของฉันไม่มี API ใด ๆ ฉันควรรุ่นรหัสของฉันได้อย่างไร
  2. จะเกิดอะไรขึ้นถ้ารหัสของฉันเริ่มเสนอ API ในช่วงท้ายของการพัฒนา

7
จุดที่ 1 ของข้อมูลจำเพาะ: ซอฟต์แวร์ที่ใช้การกำหนดเวอร์ชันแบบ Semantic ต้องประกาศ API สาธารณะ API นี้สามารถประกาศในโค้ดเองหรือมีอยู่จริงในเอกสารประกอบ อย่างไรก็ตามมันจะทำมันควรจะแม่นยำและครอบคลุม ดังนั้นฉันเดาว่าคำตอบคือคุณไม่ได้ใช้ SemVer ดังนั้นจึงขึ้นอยู่กับคุณ
Ant P

ตรวจสอบบทความนี้ซึ่งเสนอทางออกที่ดีสำหรับแอพที่ไม่มี API ใด ๆ เช่นแอปบนเดสก์ท็อป: softwareengineering.stackexchange.com/a/357887/269082
ferit

คำตอบ:


48

Semver ส่วนใหญ่กังวลเกี่ยวกับไลบรารีเวอร์ชันและแพ็กเกจในลักษณะที่หลีกเลี่ยงการพึ่งพานรกในรูปแบบที่หลากหลาย อย่างไรก็ตามความคิดที่อยู่เบื้องหลังเซมเวอร์สามารถขยายไปยังโปรแกรมทุกประเภท - โค้ดใด ๆ ที่มีส่วนต่อประสานกับผู้ใช้บางประเภทหรือมันไร้ประโยชน์

  • ไลบรารีโปรแกรมมิงหรือเว็บเซอร์วิสมี API
  • ซอฟต์แวร์สำหรับผู้บริโภคอาจมี GUI
  • โปรแกรมบรรทัดคำสั่งมีชุดสวิตช์และตัวเลือก
  • ไฟล์การกำหนดค่าเป็นส่วนต่อประสานกับผู้ใช้

การใช้ตัวอย่างซอฟต์แวร์ผู้บริโภคเช่นโปรแกรมประมวลผลคำ:

  • เพิ่มหมายเลขแพตช์เมื่อคุณจัดส่งโปรแกรมแก้ไขบั๊กเช่น: " แก้ไขข้อผิดพลาดที่แอปพลิเคชันหยุดทำงานเวลา 00:00 PM ทุกวันอังคาร "
  • เพิ่มหมายเลขรุ่นรองเมื่อเพิ่มคุณสมบัติใหม่เช่น:“ เพิ่มการรองรับข้อความที่ขีดเส้นใต้
  • เพิ่มเวอร์ชันหลักเมื่อคุณปรับปรุงส่วนติดต่อผู้ใช้อย่างมีนัยสำคัญหรือเขียน internals ทั้งหมดใหม่ เช่น:“ แถบเครื่องมือใช้การแบ่งหน้าจอมากเกินไป ขณะนี้ UI มีให้ผ่านท่าทางสัมผัสเท่านั้น ” - การเปลี่ยนแปลงดังกล่าวจะทำให้เวิร์กโฟลว์ที่มีอยู่หยุดชะงัก

อย่างไรก็ตามปัญหามากมายที่ Semver พยายามแก้ไขไม่มีอยู่นอกพื้นที่การจัดการการพึ่งพา ในแอปพลิเคชันสำหรับผู้บริโภคเวอร์ชันไม่ได้เป็นเพียงเวอร์ชัน แต่ยังเป็นสินทรัพย์ทางการตลาดด้วย

  • Firefox และ Chrome ปล่อยเวอร์ชั่นใหม่ค่อนข้างบ่อยและเพิ่มหมายเลขรุ่นหลักในแต่ละรุ่น ส่งผลให้หมายเลขรุ่นสูงขัน (ทั้งสองอยู่ในยุค 30) เบราว์เซอร์ที่มีหมายเลขเวอร์ชันที่สูงกว่าต้องดีกว่าเบราว์เซอร์ที่มีหมายเลขเวอร์ชันต่ำกว่าใช่ไหม

  • หมายเลขเวอร์ชันหลักของระบบปฏิบัติการของ Apple OS Xได้กลายเป็นส่วนหนึ่งของชื่อ (X คือ 10 ในตัวเลขโรมัน) ทำให้หมายเลขรุ่นรองเป็นหมายเลขรุ่นหลักที่มีประสิทธิภาพ

  • ระบบปฏิบัติการ Ubuntu ใช้โครงร่างการกำหนดรุ่น year.month.patchlevel สิ่งนี้ทำให้ง่ายต่อการจดจำว่าระบบปฏิบัติการของคุณมีอายุเท่าไร แต่ทำให้ยากต่อการพิจารณาว่าเวอร์ชันใดที่ใช้งานร่วมกันได้และการสนับสนุนในแต่ละเวอร์ชันใช้เวลานานเท่าใด

  • เคอร์เนล Linux ชนหมายเลขเวอร์ชันจาก 2.6.39 ถึง 3.0.0 เนื่องจาก39มีขนาดใหญ่ขึ้นเล็กน้อยและเพื่อเป็นการระลึกถึงวันครบรอบ 20 ปีของลินุกซ์

  • ระบบการเรียงพิมพ์ TeX ในตำนานของ Donald Knuth ใช้หมายเลขรุ่นซึ่งในเวอร์ชัน 3 แปลงเป็นπโดยการเพิ่มตัวเลขอีกหลักในแต่ละรุ่น: 3.14159265 …. นี่หมายถึงว่าระบบเข้าใกล้ความสมบูรณ์แบบได้อย่างไร ในทำนองเดียวกันระบบ Metafont เปลี่ยนมาเป็นe : 2.7182818 ….

ดังนั้นแอปพลิเคชั่นจำนวนมากจึงไม่สามารถให้บริการได้โดย Semver เลือกโครงร่างการกำหนดรุ่นที่เหมาะสำหรับผู้ใช้ของคุณ (ไม่ว่าผู้ใช้เหล่านี้จะเป็นเพื่อนโปรแกรมเมอร์หรือผู้บริโภค) และทำให้มันสอดคล้องกัน


1
ซอฟต์แวร์จำนวนมากที่ผลิตโดยเครื่องมือในการพัฒนาของ Microsoft มีรูปแบบ ABCD โดยที่ AB เป็นหมายเลขรุ่นหลัก / รอง "ทั่วไป" และ CD เข้ารหัสวันที่ / เวลาเมื่อสร้างซอฟต์แวร์
MZB

ฉันชอบความหมายของระบบการกำหนดเวอร์ชัน
Ogier Schelvis
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.