นักพัฒนาซอฟต์แวร์โดยทั่วไปจะไม่ใช้วันที่เป็นหมายเลขเวอร์ชันแม้ว่ารูปแบบ YYYYMMDD (หรือความแปรปรวน) จะดูแข็งแกร่งพอที่จะใช้ มีอะไรผิดปกติกับโครงการนี้หรือไม่? หรือใช้กับซอฟต์แวร์ประเภท 'จำกัด ' เท่านั้น (เช่นการผลิตภายใน)
นักพัฒนาซอฟต์แวร์โดยทั่วไปจะไม่ใช้วันที่เป็นหมายเลขเวอร์ชันแม้ว่ารูปแบบ YYYYMMDD (หรือความแปรปรวน) จะดูแข็งแกร่งพอที่จะใช้ มีอะไรผิดปกติกับโครงการนี้หรือไม่? หรือใช้กับซอฟต์แวร์ประเภท 'จำกัด ' เท่านั้น (เช่นการผลิตภายใน)
คำตอบ:
นี่คือสิ่งที่คุณจะต้องดูจากสองมุมที่แตกต่างกันตามที่คุณต้องคำนึงถึงความต้องการของผู้ใช้บัญชีรวมถึงความต้องการของซอฟต์แวร์และนักพัฒนา
โดยทั่วไปลูกค้าของคุณจะไม่สนใจมากนักเกี่ยวกับหมายเลขเวอร์ชันของซอฟต์แวร์ที่จะเป็นตราบเท่าที่พวกเขารู้ว่าพวกเขากำลังเรียกใช้บางสิ่งที่ใหม่กว่า (เช่น Product 2012 ใหม่กว่า Product 2010) และพวกเขารู้ว่า เป็นรุ่นล่าสุดหากมีแพตช์ที่สามารถนำไปใช้งานได้ (เช่น Product 2012, Update 10) ดังนั้นจากจุดยืนการสร้างแบรนด์ของลูกค้าฉันมักจะชอบรุ่นที่มีชื่อ (เช่น Windows XP, Windows Vista) ตามด้วยหมายเลขลำดับที่เข้มงวดของแพตช์ที่ผู้ใช้อาจติดตั้ง
ที่กล่าวว่าแม้ว่าการเขียนซอฟต์แวร์ที่ตรวจสอบสิ่งที่ง่ายสำหรับผู้ใช้มีแนวโน้มที่จะทำให้รหัสภายใต้ประทุนยากที่จะเขียน ดังนั้นฉันมักจะชอบMajor.Minor
แบบแผนรุ่นที่เรียบง่ายถ้าเพียงเพราะคุณสามารถทำการเปรียบเทียบตัวเลขอย่างง่าย ๆ เพื่อตรวจสอบเพื่อดูสิ่งที่เป็นปัจจุบันดังต่อไปนี้:
// Check to see if we can handle the file version
if (this.Version < fileVersion) {
throw new UnsupportedFileException("The file version is " + fileVersion.toString() + " which is not supported");
}
// Do stuff ...
แต่โดยทั่วไปแล้วฉันไม่สนใจว่าจำนวนรองลงมาจะมากเพียงใด (เช่น 1.1024) ซึ่งทำให้ระบบดังกล่าวสามารถทำงานได้อย่างต่อเนื่อง โดยทั่วไปแล้วตัวเลขการแก้ไขเป็นเพียงความสนใจในการพัฒนาภายในและจริง ๆ แล้วฉันไม่ได้เห็นพวกเขาจริงๆส่งผลกระทบต่อสิ่งที่เกินกว่าเพียงแค่ให้จำนวนสิ่งที่เพิ่มเติมเพื่อติดตาม
อย่างไรก็ตามทั้งสองรูปแบบข้างต้นจริงๆแล้วไม่ได้ใช้กับสภาพแวดล้อมที่มีการใช้งานการปรับใช้อย่างต่อเนื่อง (เช่น Stack Exchange) ซึ่งเป็นที่ที่ฉันมักจะชอบเรียงลำดับของวันตามด้วยหมายเลขการแก้ไขตามที่ปรากฏในการแลกเปลี่ยนกอง เว็บไซต์ เหตุผลของสิ่งนี้คือว่าเวอร์ชันจะมีการเปลี่ยนแปลงบ่อยเกินไปในสภาพแวดล้อมการปรับใช้อย่างต่อเนื่องและคุณอาจมีรหัสหลายเวอร์ชันที่เพิ่มขึ้นในวันเดียวกันซึ่งแสดงให้เห็นถึงหมายเลขการแก้ไขและวันที่ปัจจุบันเป็นสิ่งที่ดี ออกมากยิ่งขึ้น ในทางทฤษฎีคุณสามารถใช้หมายเลขการแก้ไขสำหรับทุกสิ่งได้ แต่การใช้วันที่ปัจจุบันช่วยให้คุณสามารถติดตามเหตุการณ์สำคัญที่เกิดขึ้นภายในซึ่งจะทำให้การสนทนาเป็นเรื่องง่ายขึ้น
ปัญหาเกี่ยวกับการใช้วันที่คือข้อมูลจำเพาะถูกเขียนขึ้นกับตัวเลขการนับมากกว่าวันที่ครบกำหนด
"ฟังก์ชั่นส่วนนี้มีกำหนดออกวางจำหน่าย 1 ส่วนฟังก์ชั่นอื่น ๆ มีกำหนดจะเปิดตัว 2"
คุณไม่สามารถอ้างถึงวันที่ในรายละเอียดได้เนื่องจากวันที่เผยแพร่อาจพลาดไป
หากคุณไม่มีกระบวนการที่เป็นทางการที่ต้องการการเผยแพร่ที่แตกต่างกันซึ่งระบุไว้ล่วงหน้าการใช้วันที่ถือว่าใช้ได้ คุณไม่จำเป็นต้องเพิ่มหมายเลขอื่นลงในมิกซ์
หมายเลขเวอร์ชันไม่น่าจะมีวันที่เนื่องจากบริบทของพวกเขาเชื่อมโยงกับรายละเอียด
หมายเลขบิลด์มีแนวโน้มว่าจะมีวันที่เนื่องจากบริบทจะเชื่อมโยงกับเมื่อมีการสร้าง
แม้ว่าวิธีการนี้จะมีประโยชน์ตามที่อธิบายไว้มีข้อเสียบางประการหากคุณใช้วันที่เป็นหมายเลขเวอร์ชั่น:
เวอร์ชันตามวันที่จะถูกแบน ด้วย v2.1.3 คุณสามารถดูหมายเลขรุ่นหมายเลขรุ่นย่อยและหมายเลขรุ่นย่อย ด้วย 20110119 คุณสามารถดูได้เมื่อมันถูกเขียน คุณสามารถจัดกลุ่มเวอร์ชันตามวันที่ของคุณได้ แต่ก็ยังไม่บอกอะไรเลย คุณอาจมีการแก้ไขข้อผิดพลาดเล็ก ๆ หลายเดือนที่ช้าและจากนั้นสองสัปดาห์ของการเขียนโค้ดที่หนักหน่วงทำให้เกิดการเปิดตัวครั้งใหญ่ วันที่ไม่ได้บอกคุณว่าหมายเลขเวอร์ชันปกติทำอย่างไร
หากคุณต้องการเปลี่ยนเวอร์ชันเป็นประจำทุกวันและอาจมีหมายเลขรีลีสอาจบ่งบอกว่าคุณไม่มีกระบวนการวางจำหน่ายที่เหมาะสม แต่ทุกคนเปลี่ยนสิ่งต่าง ๆ และส่งเสริมให้เซิร์ฟเวอร์การผลิตทุกครั้งที่ต้องการ ถ้าเป็นเช่นนั้นคุณมีปัญหากับกระบวนการและใช้สคีมาหมายเลขเวอร์ชันอื่นจะไม่สามารถแก้ไขได้
รุ่นต่างๆมักจะใช้เพื่อถ่ายทอดข้อมูลว่าซอฟต์แวร์รุ่นใดรุ่นหนึ่งแตกต่างจากรุ่นก่อนหน้าอย่างไร ตัวอย่างเช่นถ้าคุณอัปเกรดจาก 1.0 เป็น 2.0 ของ Acme นั่นเป็นการอัพเกรดครั้งใหญ่ในทางทฤษฎีที่มีการเปลี่ยนแปลงครั้งใหญ่
ในทางกลับกันการอัพเกรดจาก 1.0 เป็น 1.1 เป็นการอัพเกรดเล็กน้อยและในทางทฤษฎีมีการเปลี่ยนแปลงเล็กน้อยเพิ่มขึ้นและแก้ไขข้อผิดพลาด
นี่อาจเป็นเรื่องยากที่จะแสดงในรูปแบบวันที่แม้ว่าคุณสามารถใช้การผสมได้ ตัวอย่างเช่น v1.0.YYYY.MMDD
หากไม่มีการพูดซ้ำความคิดที่ดีจากคำตอบอื่น ๆ ฉันมีปัญหาในใจที่ยังไม่ได้รับการแก้ไข
หากคุณเกิดทางแยกระหว่างเวอร์ชันเก่ากว่าสำหรับความเข้ากันได้แบบย้อนหลังและเวอร์ชันใหม่สำหรับการทำให้ทันสมัยเข้ากันไม่ได้คุณไม่สามารถแยกแยะพวกเขาผ่านหมายเลขรุ่น
ตัวอย่างเช่นเคอร์เนลลินุกซ์ถูกแยกประมาณปี 2000 เป็นสาขา 2.4.x เก่าซึ่งอาจยังคงสนับสนุนในปัจจุบันและนับเป็น 2.4.199 ในขณะที่รุ่นใหม่ได้ 2.6 เป็นเวลาหลายปีและ 2.6.32 สำหรับระบบเก่า แต่ 3.2 สำหรับเมล็ดใหม่ล่าสุด
หากคุณมีเอกสารเกี่ยวกับการเผยแพร่ของคุณคุณจะเพิ่มข้อมูลเป็นสองเท่าและบอกผู้คนว่ารุ่น 20120109 มาถึงในปี 2012 เวลา 01/09 Mh แต่สิ่งที่ถ้ามีการตรวจจับข้อผิดพลาดครั้งสุดท้ายและการเปิดตัวล่าช้าเป็นเวลาหนึ่งสัปดาห์ แต่เอกสารที่มีการกล่าวถึงชื่อพร้อมแล้วอาจจะมีการพิมพ์ข้อมูลสื่อสิ่งพิมพ์จะออกมาและอื่น ๆ ตอนนี้คุณมีความแตกต่างซึ่งเป็นปัญหาหากรุ่น 20120109 มาถึงเวลา 2012/01/13
ใน SQL คำถามที่ว่าควรมีการพูดคุยเกี่ยวกับความหมายของข้อมูลความหมายบ่อยครั้งหรือไม่และผลลัพธ์ก็คือ: หลีกเลี่ยงมันเหมือนนรก! คุณกำลังสร้างการพึ่งพาที่ไม่จำเป็น มันไม่เป็นประโยชน์
Ubuntu ที่มีรูปแบบ 04/10 นั้นมีปัญหาในปี 2549 เมื่อเวอร์ชัน 6.04 ล่าช้าและกลายเป็น 6.06 ในปี 3000 จะมีปัญหาต่อไปในไม่ช้า! :)
stable
ซีรีส์ล่าสุดคือ 2.6.32.54 (2012-01-12) และ 3.1.10 (2012-01-18)
มีชุดซอฟต์แวร์มากมายที่ใช้วันที่เป็นรุ่นแน่นอน Ubuntu มาพร้อมกับรุ่นของพวกเขาคือ YY.MM และหมายเลขบิลด์สำหรับผลิตภัณฑ์ Microsoft Officeก็มีการเข้ารหัสวันที่สร้าง Jeff Atwood เขียนบล็อกโพสต์สยองขวัญเกี่ยวกับการกำหนดหมายเลขเวอร์ชันรวมถึงคำแนะนำนี้:
เมื่อใดก็ตามที่เป็นไปได้ให้ใช้วันที่เรียบง่ายแทนหมายเลขรุ่นโดยเฉพาะในชื่อสาธารณะของผลิตภัณฑ์ และถ้าคุณแน่นอนต้องใช้หมายเลขรุ่นภายในทำวันที่ต่อไป: อย่าลืมเข้ารหัสวันที่สร้างที่ไหนสักแห่งในหมายเลขรุ่นของคุณ
ในความคิดของฉันมันไม่สำคัญว่าตราบใดที่คุณมีความสอดคล้องและสามารถไปจากหมายเลขรุ่นบิลด์ (ไม่ว่ามันจะเป็นอะไร) และจดจำสิ่งประดิษฐ์ทั้งหมดที่เข้าสู่บิลด์นั้นจากระบบควบคุมเวอร์ชันของคุณ โดยทั่วไปผู้ใช้จะไม่สนใจข้อมูลเกี่ยวกับรุ่นเลย แต่เป็นการใช้งานที่ระบบจัดเตรียมไว้ให้ ข้อมูลการกำหนดเวอร์ชันเป็นเพียงคุณค่าที่แท้จริงสำหรับนักพัฒนา
ใช้การกำหนดเวอร์ชันแบบ semantic - ด้วยวิธีนี้คุณจะได้รับแนวคิดเกี่ยวกับการเปลี่ยนแปลงที่เกิดขึ้นระหว่างเวอร์ชันโดยไม่ต้องตรวจสอบโค้ดเอง: http://semver.org/
การใช้หมายเลขเวอร์ชันเป็นวิธีแสดงให้เห็นว่าการเปลี่ยนแปลงนั้นยิ่งใหญ่เพียงใด
ตัวอย่างเช่น 2.4.3 อาจหมายถึงเวอร์ชัน 2 เป็นการเปลี่ยนแปลงครั้งใหญ่ในระบบทั้งหมด .4 เป็นการปรับปรุงเล็กน้อย และ .3 สุดท้ายคือการแก้ไขข้อบกพร่องเล็ก ๆ สำหรับรุ่นนั้น ด้วยวิธีนี้มันสามารถจดจำได้อย่างง่ายดายว่ามีการเปลี่ยนแปลงระหว่างแต่ละเวอร์ชันมากเพียงใด
ต้องบอกว่าฉันยังคงเห็นคนจำนวนมากใช้วันที่หรือหมายเลขการแก้ไข SCM เป็นหมายเลขเวอร์ชันตราบใดที่คุณมีวิธีในการติดตามกลับไปที่การสนับสนุนบันทึกย่อประจำรุ่นและเอกสารประกอบของสิ่งที่อยู่ในขอบเขตสำหรับรุ่นนั้นไม่มีปัญหาจริง
มีคำตอบที่ดีอยู่ที่นี่แล้ว แต่ฉันอยากจะชี้ให้เห็นกรณีที่การใช้วันที่เหมาะสม: ห้องสมุดขนาดเล็กหรือตัวอย่างของรหัสที่รหัสมีแนวโน้มที่จะได้รับการปรับปรุงบ่อยครั้ง แต่ในบิตเล็ก ๆ ที่ไม่มีเวอร์ชั่นเดียวแตกต่างจากเดิม หนึ่ง.
กล่าวอีกนัยหนึ่งฉันกำลังพูดถึงสถานการณ์ที่ไม่มี "หมายเลขรุ่น" จริง ๆ แต่โดยทั่วไปแล้วเป็นที่เก็บข้อมูลเสมือนจริงรายวัน
เมื่อฉันเจอของประเภทนี้ฉันมักจะยินดีที่จะเลือกเพราะมันมีประโยชน์มากกว่าสำหรับฉันที่จะรู้ว่าฉันใช้สคริปต์ / lib ที่ค่อนข้างเป็นปัจจุบันมากกว่าเวอร์ชันที่เฉพาะเจาะจง
วันที่เป็นหมายเลขเวอร์ชันนั้นดีสำหรับการตลาด ถ้าคนใช้ "Windows NT 5.0" พวกเขาอาจไม่ทราบว่ามันล้าสมัย แต่ถ้าคนยังใช้ "Windows 2000" พวกเขาจะรู้ได้ทันทีว่าเป็นระบบปฏิบัติการอายุ 12 ปีและได้รับการสนับสนุนให้อัพเกรด
อย่างไรก็ตามมันทำให้การแยกความแตกต่างระหว่างการปรับปรุง "หลัก" และ "รอง" ทำได้ยากขึ้น
ปัญหาเกี่ยวกับการใช้วันที่เป็นหมายเลขเวอร์ชัน
คำตอบที่นี่เป็นสิ่งที่ดี แต่ฉันไม่เห็นใครก็ตามที่เกี่ยวข้องกับเรื่องนี้เกี่ยวกับการใช้วันที่: ผู้ใช้ไม่สามารถระบุได้ว่ามีการแก้ไขบ่อยแค่ไหน
สิ่งที่ฉันพยายามจะพูดคือฉันสามารถบอกได้ว่า Windows 3.1 และ Windows 7 อยู่ไกลกัน ... และอาจเข้ากันไม่ได้ Windows 95 และ Windows 2000 ไม่ได้บอกอะไรมากไปกว่าปีที่เปิดตัวผลิตภัณฑ์
ตัวอย่างเช่นด้วย Python ฉันรู้ว่ารุ่น 2.7.2 มีวิวัฒนาการมาจาก 2.4.6 หากฉันดูเพิ่มเติมฉันจะเห็นเวอร์ชัน 2.4.6 นั้นเปิดตัวเมื่อวันที่ 19 ธันวาคม 2551 และรุ่น 2.7.2 นั้นเปิดตัวเมื่อวันที่ 11 มิถุนายน 2011 จากนี้ฉันสามารถสร้างความคิดเห็นเกี่ยวกับความเสถียร (เช่นความถี่ของการเปิดตัว) ของผลิตภัณฑ์
ถ้า Python ใช้วันที่เผยแพร่ฉันไม่สามารถรู้ได้ว่าผลิตภัณฑ์เหล่านี้จะเชื่อมต่ออย่างไร จะทำให้เกิดความสับสนเพิ่มเติมเนื่องจาก Python 3.1.4 ได้รับการปล่อยตัวในวันที่ 11 มิถุนายน 2011 (เช่นเดียวกับ Python 2.7.2)
ในระยะสั้นฉันไม่คิดว่าด้วยตัวเองการกำหนดวันที่มีค่า
ฉันไม่ชอบความคิดนี้เนื่องจากเหตุผลอื่น ๆ ที่อธิบายไว้แล้ว เพียงใช้รูปแบบ major.minor.bugfix - มีเหตุผลว่าทำไมคนส่วนใหญ่ถึงทำแบบนี้
แต่สิ่งที่คุณทำ: เลือกรุ่นตั้งชื่อหนึ่งโครงการและติดมัน อย่าทำเหมือน Windows ที่พวกเขาเปลี่ยนรูปแบบกับทุกรุ่น และอย่าทำเหมือน Android ที่แต่ละรุ่นมีหมายเลขเวอร์ชัน API (8) หมายเลขเวอร์ชันที่ใช้สำหรับการตลาด (2.2) และชื่อโง่ (Froyo)
วันที่เป็นรุ่น
หากผลิตภัณฑ์ของคุณไม่ได้ขายเพียงแค่ใช้วันที่ก็อาจจะมีประโยชน์ หากคุณขายและอัพเกรดให้กับลูกค้าพวกเขาต้องการซื้อรุ่นที่มีคุณสมบัติเฉพาะ มันง่ายกว่าที่จะขายพวกเขาในการอัพเกรดหากรุ่นนี้มีชื่อที่ชัดเจนมันไม่สำคัญว่ามันจะเป็นอะไร แต่ยกตัวอย่างเช่นไม่มีใครซื้อฟอร์ดคาร์ 20 มกราคม 2012 ที่พวกเขาต้องการ Kia Model เช่นเดียวกับซอฟต์แวร์ การให้ชื่อรุ่นและรุ่นฮาร์ดหมายความว่ามีคุณสมบัติที่แตกต่างจากรุ่นเก่า สำหรับฉันเพียงแค่วันที่ไม่ได้ทำมันบอกว่าฉันทำมันแล้วมันอาจจะมีคุณสมบัติใหม่
โครงการที่เราใช้
ฉันไม่ได้อ้างว่าระบบของเราสร้างแบรนด์ที่ชัดเจนดังกล่าว ตอนนี้เราใช้โครงร่างสี่ส่วน หมายเลขเวอร์ชันรัฐวันที่และการตรวจสอบ
1200_GLD_120120_F0D1
สิ่งนี้อาจตะเข็บอยู่ด้านบน แต่ช่วยให้เรามีโครงสร้างหลายรุ่นสำหรับรุ่น 1200 ที่วิศวกรของเราสามารถใช้ได้และเราแยกความแตกต่างระหว่างพวกเขาตามวันที่ รัฐบอกคนถ้ามันเป็นรุ่นทดสอบภายในสร้างลูกค้าแพทช์หรือทองปล่อย การตรวจสอบเป็นเรื่องใหม่ช่วยให้วิศวกรหรือลูกค้าตรวจสอบว่าพวกเขาได้ดาวน์โหลดสิ่งที่ถูกต้องจากการจัดจำหน่ายของเรา
ดังนั้นเราอาจมีลำดับของ
1200_TST_120110_EF45
1200_GLD_120120_F0D1
1201_FIX_120125_123E
1201_TST_120130_31A5
1201_TST_120131_FDFD
ปกติแล้วเราจะอ้างถึงหมายเลขรุ่นหลัก ๆ ให้กับลูกค้าเช่น "12" แต่ลูกค้าจะได้รับทองคำรุ่นล่าสุดจำนวน 12 นั่นคือ 1200_GLD_120120_F0D1 เว้นแต่ว่าพวกเขาต้องการการแก้ไข
สมมติว่าลูกค้าบางรายใช้ผลิตภัณฑ์รุ่นที่สองของคุณและบางคนได้อัปเกรดเป็นรุ่นที่สามและการอัปเกรดนั้นไม่ใช่การตัดสินใจเล็กน้อย
สมมติว่าเวอร์ชันสุดท้ายของเวอร์ชันสองคือ 2.3.2 และเวอร์ชันสามคือ 3.0.3 ตอนนี้คุณพบช่องโหว่ที่จำเป็นต้องได้รับการแก้ไขอย่างสมบูรณ์ดังนั้นคุณจึงปล่อย 2.3.3 และ 3.0.4 ในวันเดียวกัน คุณเห็นหรือไม่ว่าวันที่วางจำหน่ายนั้นไม่เกี่ยวข้องกันโดยสิ้นเชิง? คุณอาจหยุดการทำงานกับรุ่นที่สองในปี 2013 และเปิดตัวการแก้ไขข้อบกพร่องบางอย่างที่สำคัญตั้งแต่นั้นมา วันที่ไม่เกี่ยวข้องเมื่อเทียบกับหมายเลขรุ่น
ฉันคิดว่ามันใช้งานได้ดี ฉันใช้สำหรับซอฟต์แวร์ภายในบางตัว (yyyy.mm.dd) และสำหรับซอฟต์แวร์โอเพนซอร์สบางตัวที่ฉันเปิดตัว
อาจไม่ทำงานในทุกกรณี
ในทางเทคนิคมันไม่สามารถใช้วันที่สำหรับหมายเลขรุ่น แต่มันสามารถแสดงหมายเลขวันที่สำหรับลูกค้า ตัวอย่างเช่น macOS 16.7.23 --- หมายความว่า: 23/7/2016
ฉันคิดว่าเทคโนโลยีไม่ใช่ปัญหาปัญหาคือว่ามันรู้สึกอย่างไร หากใช้หมายเลขวันที่ที่สามารถทำให้ซอฟต์แวร์มีชีวิตอยู่ได้เช่นเดียวกับคนที่หมายเลขวันเกิดทุกปีที่เราเติบโตขึ้นเช่นเดียวกับซอฟต์แวร์ที่เติบโตขึ้นเรื่อย ๆ
หมายเลขอาคารดูเหมือนเครื่องจักรเครื่องไม่มีชีวิตไม่มีชีวิต