การกำหนดเวอร์ชันความหมายใน Agile


10

สมมติว่าฉันมีเวลาทำซ้ำ 14 วันที่ฉันมีหลายเรื่องสำหรับคุณสมบัติใหม่การปรับปรุงเล็กน้อยและข้อบกพร่องบางอย่างที่ต้องแก้ไข ฉันยังปรับใช้การเปลี่ยนแปลงเหล่านั้นเมื่อพวกเขาพร้อมฉันไม่รอให้จบการวิ่ง

ปัญหาของฉันคือ - จะติดตามการกำหนดเวอร์ชันแบบ semantic ของผลิตภัณฑ์ที่พัฒนาและดูแลเช่นนี้ได้อย่างไร หากจะมีการเผยแพร่ทุก ๆ 14 วันมันจะง่ายฉันจะเพิ่มหมายเลขรุ่นและบันทึกการเปลี่ยนแปลงทั้งหมดในรายการเปลี่ยนแปลง แต่ถ้าหากมีการปรับใช้การเปลี่ยนแปลงอย่างต่อเนื่อง ควรมีรุ่นที่เพิ่มขึ้นทุกครั้งที่มีการปรับใช้หรือไม่ หรือฉันควรรอจนกว่าการวิ่งจะสิ้นสุดและหลังจากนี้ให้ "ดำเนินการต่อ" บางส่วนและเพิ่มหมายเลขรุ่นเพียงครั้งเดียวต่อการทำซ้ำอย่างอิสระในการปรับใช้จริง แนวทางปฏิบัติที่ดีที่สุดสำหรับการกำหนดเวอร์ชันความหมายใน Agile คืออะไร

แก้ไข:เพื่ออธิบายความต้องการของฉันได้ดีขึ้นฉันต้องการเปลี่ยนผู้มีส่วนได้เสียในตอนแรก ฉันไม่คิดว่าพวกเขาจะสนใจบันทึกใหม่ในการเปลี่ยนแปลงหลังจากการเปลี่ยนแปลงทุกครั้งที่ปรับใช้



คุณหมายถึงอะไรโดย "การกำหนดเวอร์ชันเชิงความหมาย" Build-day-time ใน versionnumner?
k3b

2
@ k3b: ลองใช้ Google คุณจะมาที่semver.org หรือไม่
Doc Brown

3
คุณนำไปใช้กับใครในการวิ่งกลางคัน? โดยตรงกับผู้ใช้? ถึงผู้ทดสอบบางคน?
Doc Brown

@DocBrown โดยตรงกับผู้ใช้ปลายทาง เมื่อทำอะไรเสร็จแล้วมันจะถูกปรับใช้กับการผลิต
Pavel Štěrba

คำตอบ:


7

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

เวอร์ชัน 'การตลาด' ของคุณซึ่งโดยปกติจะใส่ไว้ในบันทึกประจำรุ่นหรือเผยแพร่ในเว็บไซต์ของคุณไม่ควรอัปเดตแต่ละเวอร์ชัน บันทึกย่อประจำรุ่นเหล่านั้นควรได้รับการรวบรวมและจัดกลุ่มเข้าด้วยกันซึ่งอาจหมดเวลากับการสิ้นสุดการวิ่งของคุณ


ใช่การเปลี่ยนแปลงรุ่น "การตลาด" นี้เป็นสิ่งที่ฉันต้องการ ทำให้อ่านง่ายแม้สำหรับผู้มีส่วนได้เสียที่ไม่ใช่ด้านเทคนิค
Pavel Štěrba

6

ถ้าคลาสสิกความหมายเวอร์ชันโครงการ "MAJOR.MINOR.PATCH" ทำให้รู้สึกขึ้นอยู่กับที่คุณปรับใช้และโดยเฉพาะอย่างยิ่งเมื่อใดและอย่างไรที่คุณมักจะใช้กับผู้ใช้ ชุดรูปแบบมีประโยชน์มากที่สุดถ้าคุณทำงานกับรุ่นเสถียร "4.5" ซึ่งคุณเริ่มต้นด้วย 4.5.0 เวอร์ชัน 4.5.1, 4.5.2 และอื่น ๆ จะมีเพียงการแก้ไขข้อบกพร่องในขณะที่คุณทำงานในเวอร์ชัน 4.6 ภายในแล้ว

ตัวอย่างเช่นหากคุณให้ "สาขาที่มั่นคง" แก่ผู้ใช้ของคุณให้เป็นเวอร์ชัน 4.5.0 สำหรับการปรับใช้เริ่มต้นและ 4.5.1, 4.5.2 เมื่อใดก็ตามที่คุณปล่อยแพตช์ ในการพัฒนาแบบ "ว่องไว" ภายในและการปรับใช้แบบ mid-sprint คุณสามารถมีเวอร์ชัน 4.6 แล้วเรียกมันว่า "รุ่นเบต้า" เมื่อใดก็ตามที่คุณปรับใช้เป็น mid-sprint ให้เพิ่มหมายเลขบิลด์ที่สร้างโดยอัตโนมัติเช่น "4.6.beta build 123" เมื่อการวิ่งของคุณสิ้นสุดให้กำหนด "4.6.0" และเปลี่ยนหมายเลขรุ่นสำหรับการวิ่งครั้งต่อไปเป็นการภายใน "4.7" การเริ่มต้นด้วย ".0" เป็นเพียงการประชุมคุณสามารถใช้ ".0" สำหรับการติดแท็กรุ่นเบต้าและเริ่มต้นด้วย ". 1" สำหรับผู้ใช้ปลายทางของคุณ IMHO คำว่า "เบต้า" มีความหมายมากกว่าและบอกทุกคนว่าการวิ่ง "ยังไม่เสร็จ"

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

คุณจะพบกลยุทธ์ในการปล่อยสาขาที่แยกจากกันสองสาขาสาขา "เสถียร" หนึ่งสาขาที่มีหมายเลขรุ่นความหมายและ "สาขาการพัฒนา" ที่ทำเครื่องหมายด้วยหมายเลขบิลด์หรือสิ่งที่คล้ายกันในผลิตภัณฑ์โอเพ่นซอร์สมากมายเช่น Inkscape, Firefox หรือ 7-zip

อย่างไรก็ตามหากคุณไม่ได้ทำงานกับสาขาที่มีเสถียรภาพและการพัฒนาแยกต่างหากและปล่อยรุ่นใหม่ให้กับผู้ใช้ปลายทางรายวันคุณควรเพิ่มหมายเลขเวอร์ชันทุกวัน สำหรับกรณีดังกล่าวหมายเลขรุ่น "4.5.1", "4.5.2", ... อาจแสดงถึงการปรับใช้แต่ละรายการของคุณและไม่ได้ระบุความแตกต่างระหว่างการแก้ไขข้อบกพร่องและการเปลี่ยนแปลงอื่น ๆ อาจเป็นไปได้ว่ามันไม่ใช่แค่ "semantic versioning" แบบคลาสสิกอีกต่อไป ในสถานการณ์นี้คุณสามารถปรับใช้เวอร์ชัน 4.5, 4.6, 4.7, 4.8 ซึ่งไม่แตกต่างอย่างแท้จริง

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


3

ฉันจะใช้หมายเลขบิลด์ โดยทั่วไปหมายเลขบิลด์จะสอดคล้องกับเวอร์ชันสูงสุดของระบบควบคุมเวอร์ชัน หากวันบิลด์ของการสร้างเป็น 1745 และมีการตรวจสอบการเปลี่ยนแปลง 5 ครั้งในช่วงวันอังคารจำนวนการสร้างของวันอังคารตอนเย็นจะเป็น 1750

จากนั้นทำการสรุปสั้น ๆ เกี่ยวกับสิ่งที่เปลี่ยนแปลงระหว่าง 1745 ถึง 1750

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


3

วิธีที่ฉันชอบซึ่งฉันใช้มาเป็นเวลาอย่างน้อยสองสามปีตอนนี้คือการชนจำนวนหลังจากแต่ละเรื่องเสร็จสมบูรณ์ ซึ่งหมายความว่ารุ่นที่วางจำหน่ายในตอนท้ายของการวิ่งจะไม่ต่อเนื่องเช่นหลังจาก 1.2.3 คุณอาจพบ 1.5.2 มากกว่า 1.4.0

ในรายการเปลี่ยนแปลงคุณสามารถระบุรุ่นกลางพร้อมคำอธิบายที่เกี่ยวข้องหรือเพียงแค่จัดกลุ่มการเปลี่ยนแปลงทั้งหมดในรุ่น "วางจำหน่าย" และข้ามรุ่นที่อยู่ระหว่าง

ตอนแรกฉันกลัวว่าผู้ใช้จะพบ "หลุม" ระหว่างหมายเลขรุ่นที่มีปัญหา แต่เมื่อพวกเขารู้เกี่ยวกับมันแล้วมันก็ไม่ใช่ปัญหาในทางปฏิบัติ ข้อได้เปรียบที่สำคัญคือการเพิ่มจำนวนหลังจากแต่ละเรื่องทำให้เกิดข้อผิดพลาดน้อยลง - คุณไม่จำเป็นต้องตรวจสอบงานทั้งหมดจาก 2 สัปดาห์เพื่อตัดสินใจว่าหมายเลขรุ่นถัดไปจะเป็นอย่างไร - เมื่อดูเรื่องเดียวจะเห็นได้ชัด . นอกจากนี้ "leaps" ในหมายเลขเวอร์ชันระหว่างแต่ละรุ่นให้การประมาณคร่าวๆว่ามีการเปลี่ยนแปลงจำนวนเท่าใดในการเปิดตัว โดยรวมแล้วฉันพบว่าระบบนี้ใช้งานได้ดี (นี่คือกับลูกค้าภายใน บริษัท แต่ถ้าคุณทำงานในวงจรการเปิดตัวแบบเปรียวก็ควรทำงานให้กับลูกค้าภายนอกด้วย)

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