ทีม Agile ควรส่งมอบคุณสมบัติใหม่ทุกวันหรือไม่?


31

บริษัท ของฉันกำลังอยู่ในช่วงเปลี่ยนผ่านจากการพัฒนาสไตล์น้ำตกเป็น Agile / Scrum เหนือสิ่งอื่นใดเราได้รับการบอกว่าความคาดหวังนั้นมีไว้สำหรับเราที่จะมีคุณสมบัติการทำงานใหม่ทดสอบได้ (โดย QA) ในตอนท้ายของแต่ละวัน

devs ส่วนใหญ่ของเราสูญเสียประมาณ 2 ชั่วโมงต่อวันสำหรับการประชุมและค่าใช้จ่ายอื่น ๆ ขององค์กร ซึ่งหมายความว่าในระยะเวลา 6 ชั่วโมง (อย่างดีที่สุด) เราต้องออกแบบเขียนทดสอบหน่วยสร้างและปรับใช้ (พร้อมบันทึกประจำรุ่น) รหัสเพียงพอที่จะสร้างคุณลักษณะที่สมบูรณ์สำหรับ QA เพื่อเล่นด้วย ฉันเข้าใจว่าบันทึกการสร้าง / ปรับใช้ / วางจำหน่ายอาจเป็นไปโดยอัตโนมัติด้วยการตั้งค่า CI ที่เหมาะสม แต่เรายังไม่ได้มี

นอกจากนี้เรายังมีการเขียนโค้ดฝั่งเซิร์ฟเวอร์ขนาดใหญ่ในต่างประเทศและความแตกต่างของเวลา 12 ชั่วโมงทำให้ยากยิ่งขึ้น

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

นี่เป็นก้าวปกติของทีม Agile หรือไม่? แม้ว่าเราจัดการเพื่อใช้การตั้งค่า CI ฉันไม่สามารถดูว่าเราจะสามารถรักษาจังหวะนี้ไว้ได้อย่างไรและยังคงสร้างซอฟต์แวร์ที่มีคุณภาพ

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

คำตอบ:


52

อาชญากรรมที่เกิดขึ้นในนามของ Agile ทุกวันนี้ทำให้ฉันเศร้า ผู้คนจำนวนมากกำลังประสบกับความยากลำบากในการเปลี่ยนแปลงนี้

ประกาศ Agile: "เราให้ความสำคัญกับผู้คนและการมีปฏิสัมพันธ์กับกระบวนการและเครื่องมือ" เมื่อผู้คนเจ็บปวดอย่างเห็นได้ชัดกระบวนการนี้ผิด ฉันไม่ต้องการที่จะบอกคุณว่าจะทำอย่างไร แต่จะแบ่งปันวิธีที่ฉันทำ

ในทีมของฉันส่วนที่สำคัญคือหลีกเลี่ยงการมอบรหัส repo ที่ใช้งานร่วมกันซึ่งแตกหักในรูปแบบที่จะทำให้เวลาที่เหลือของทีมหมดไป ในแง่นี้เท่านั้นฉันมุ่งมั่นที่จะ 'ส่งมอบรหัสทำงานทุกวัน' อย่าทำลาย QA อย่าบล็อกนักพัฒนาซอฟต์แวร์รายอื่น เป็นการดีที่ฉันไม่เคยตรวจสอบข้อบกพร่องใด ๆ (ฮ่า).

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

ในทีม QA ของฉันคงที่ ฉันสร้างผลิตภัณฑ์เชิงพาณิชย์ดังนั้นโครงการจึงไม่จบจนกว่าผลิตภัณฑ์จะล้าสมัย วิศวกร QA ทดสอบคุณสมบัติที่มีให้ทดสอบ วิศวกร QA มีงานในมืออยู่เสมอ ไม่มีเวลาเพียงพอที่จะทดสอบหรือทำให้ทุกอย่างที่เราต้องการในอุดมคติ

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

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

สำหรับฉันแล้ว Agile Manifesto ได้สรุปสิ่งที่ดีที่สุดของความคิดใหม่เกี่ยวกับกระบวนการพัฒนาที่เกิดขึ้นในปี 1990 ฉันเป็นผู้เชื่อที่แท้จริงในหลักการเหล่านั้น แต่รายละเอียดกระบวนการอาจแตกต่างกันไป อย่างที่ฉันเห็นจุดของ Agile คือการปรับกระบวนการของคุณให้สอดคล้องกับความต้องการของผลิตภัณฑ์และลูกค้าของคุณไม่ใช่เพื่อเป็นทาสของกระบวนการ


2
+1: คำตอบที่ดีเลิศ บางมุมมองที่ดีจริงๆเกี่ยวกับสิ่งที่ "เปรียว" ควรหมายถึงอะไร
จิมจี.

24

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

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


ฉันพูดคำถามไม่ดี ฉันถูกถามจริงๆเกี่ยวกับความเป็นไปได้ในการส่งมอบคุณสมบัติใหม่ทุกวันไม่ใช่เกี่ยวกับการป้องกันไม่ให้ผลิตภัณฑ์ที่มีอยู่ถูกทำลายโดยการสร้างรายวัน ฉันได้อัปเดตคำถามแล้ว
Joshua Smith

@JoshuaSmith: ถ้าเรื่องราวของคุณมีขนาดเล็กพอจะเป็นไปได้ที่จะมีสิ่งใหม่ ๆ ทุกวัน และถ้าคุณมีเซิร์ฟเวอร์รวมอย่างต่อเนื่องการมีผลิตภัณฑ์ที่ใช้งานไม่ได้นั้นไม่ใช่ตัวเลือก หากคุณสมบัติยังไม่พร้อมจะไม่ซิงค์กับเซิร์ฟเวอร์หรือดำเนินการในสาขาส่วนตัว ฉันชอบทางออกแรก

8

คำตอบสั้น: ไม่มี มันก็ไม่สามารถทำได้ทุกวัน

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

ในส่วนที่เกี่ยวกับซอฟต์แวร์ที่มีคุณภาพกระบวนการบูรณาการอย่างต่อเนื่อง (CI) จะช่วยให้มั่นใจได้ว่าการควบคุมคุณภาพจะถูกนำไปใช้กับความพยายามชิ้นเล็ก ๆ (การเช็คอิน) และทำได้บ่อยเท่าที่กำหนดไว้ นอกจากนี้ยังมีเป้าหมายเพื่อปรับปรุงquality of softwareและลดเวลาในการส่งมอบโดยแทนที่การปฏิบัติแบบดั้งเดิมของการใช้การควบคุมคุณภาพหลังจากเสร็จสิ้นการพัฒนาทั้งหมด


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

1
เรามาอธิบายกันดีว่า: "คุณไม่ควรโหลดอะไรไปยัง QA จนกว่าเรื่องราวของผู้ใช้จะเสร็จสิ้นและเช็คอิน"
EL Yusubov

การชี้แจงเพิ่มเติมเล็กน้อย: เรื่องราวยังไม่เสร็จจนกว่าจะมีการทดสอบรหัสสำหรับเรื่องราว
ไบรอันโอ๊กเลย์

@ElYusubov นอกจากนี้ยังเป็นความเข้าใจของฉันที่เราควรจะส่งมอบคุณสมบัติใหม่ / เรื่องราวในตอนท้ายของการวิ่งแต่ละครั้งซึ่งมีเหตุผลอย่างสมบูรณ์
Joshua Smith

4

ไม่ไม่ควรมีความคาดหวังในการส่งมอบคุณสมบัติใหม่ทุกวัน คุณสมบัติบางอย่างอาจไม่สามารถใช้งานได้ขนาดเล็กเช่นนี้เพื่อให้นักพัฒนาสามารถทำคุณสมบัติให้เสร็จในเวลาพัฒนา ~ 6 ชั่วโมง

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

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

จำไว้ว่าเป้าหมายคือการมีคุณสมบัติที่ทำและทดสอบในตอนท้ายของการวิ่ง! คุณไม่ต้องการให้ QA รอจนกระทั่งวันสุดท้ายของการวิ่งเพื่อให้คุณสร้างและจากนั้นให้พวกเขาทดสอบคุณสมบัติทั้งหมด พวกเขาไม่มีเวลาที่จะทดสอบมันทั้งหมดและคุณจะไม่มีเวลาแก้ไขข้อผิดพลาดใด ๆ ...

หากคุณไม่สามารถตั้งค่าเซิร์ฟเวอร์ CI ได้การฝึกฝนควรเป็นไปได้ว่าคุณต้องสร้างบิลด์ใหม่สำหรับ QA ในแต่ละครั้งที่นักพัฒนาตรวจสอบรหัสที่เสร็จแล้วและอ้างว่าเขาทำเสร็จพร้อมฟีเจอร์และพร้อมส่ง QA


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

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

2

จริง ๆ แล้วมันขึ้นอยู่กับขนาดของโครงการ ถ้าโครงการมีขนาดใหญ่ไม่มีวิธีที่เป็นไปได้ที่จะบรรลุเป้าหมายนี้

การสร้างรายวัน (หรือบ่อยกว่า) การสร้างซึ่งมาจากเครื่องมือการรวมอย่างต่อเนื่องไม่ได้หมายถึงซอฟต์แวร์ที่ใช้งานได้ มันแทบจะหมายถึงรหัสที่คอมไพล์ได้


ด้วยวิธีการบางอย่างที่ฉันคิดว่าการได้รับคุณสมบัติใหม่ในการควบคุมคุณภาพประจำวันควรง่ายขึ้นในโครงการขนาดใหญ่ เช่นถ้าคุณมี 5 ทีม devs / dev คุณสามารถให้พวกเขาทำ 1 สัปดาห์วิ่งแต่ละครั้งโดยหนึ่งวันจากถัดไป
Dan Neely

1

มีหลายโครงการที่ส่งมอบงานสร้างรายวันซึ่งต้องขอบคุณการผนวกรวมอย่างต่อเนื่องเป็นซอฟต์แวร์ที่ใช้งานได้ อย่างน้อยก็ในทางทฤษฎี

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

ในทางทฤษฎีหากคุณไม่สามารถเพิ่มงาน QA ของคุณได้มากขึ้นทุกวันคุณต้องเพิ่มจำนวนผู้พัฒนาหรือลดจำนวนผู้ทดสอบ ความคิดแย่มาก!

งานของคุณคือทำสิ่งต่างๆให้เสร็จ

บอก QA ว่าพวกเขาจะได้รับสิ่งทดสอบเมื่อเสร็จแล้ว คุณต้องอธิบายให้พวกเขาฟังว่าทำไม


1
พันครั้งนี้ ฉันบอกหัวหน้าโครงการว่าการรักษาคุณภาพให้กับงานไม่ใช่ความรับผิดชอบของทีมและถูกปฏิเสธอย่างรุนแรง
Joshua Smith

ลองกลับมาพร้อมกับข้อเท็จจริงที่น่าเชื่อถือมากขึ้น: developersurvivalguide.com/how-to-convince-your-boss

@JoshuaSmith: ฉันแก้ไขคำตอบของฉันเพื่อให้ตรงกับการแก้ไขล่าสุดของคุณ แต่ฉันเกรงว่ามันไม่ใช่คำตอบที่คุณกำลังมองหา ...

0

ฉันคิดว่าคุณสับสนเกี่ยวกับแนวคิดของ "CI" คุณอาจต้องการเยี่ยมชมบทความที่ยอดเยี่ยมนี้โดย Martin Fowler เกี่ยวกับการทำงานของ CI ในทางปฏิบัติซึ่งควรตอบคำถามของคุณอย่างถูกต้อง

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