คุณจัดการกับการออกแบบใน Scrum ได้อย่างไร


26

คุณจัดการกับการออกแบบใน Scrum ได้อย่างไร คุณยังมีเอกสารการออกแบบที่ดีสำหรับการทำซ้ำในการต่อสู้แต่ละครั้งหรือไม่? คุณเพิ่งออกแบบบันทึกที่มีไดอะแกรม UML หรือไม่? หรือคุณเพิ่งมีรหัสความคิดเห็นดี?

การวนซ้ำแต่ละครั้งอาจเกี่ยวข้องกับการเปลี่ยนแปลงการออกแบบดังนั้นฉันแค่อยากจะรู้ว่าผู้คนจับสิ่งนี้ได้อย่างไรเพื่อให้นักพัฒนาใหม่มีงานง่าย ๆ ในการทำความเข้าใจโดเมน


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

คำตอบ:


11

เพียงเพราะมันเป็นการต่อสู้ไม่ได้หมายความว่าทุกอย่างเปลี่ยนแปลงการวิ่งแต่ละครั้ง!

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

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


9

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

สำหรับการทำซ้ำอย่างรวดเร็วในการทำงานคุณควรทำการพัฒนาที่ขับเคลื่อนการทดสอบ (ฉันหยุดพูดสั้น ๆ ว่าคุณต้องทำ TDD อย่างไม่เต็มใจ) ใน TDD การทดสอบของคุณจะแสดงการออกแบบและเจตนาของรหัส (เมื่อพวกเขาพูดว่า "รหัสคือเอกสารประกอบ" สิ่งที่พวกเขาควรพูดคือ "การทดสอบคือเอกสารประกอบ") โดยการเขียนการทดสอบหน่วยที่แสดงความเข้าใจของคุณเกี่ยวกับคุณลักษณะในมือคุณกำลังระบุสิ่งที่คุณเชื่อว่ารหัสต้องทำอย่างชัดเจน จากนั้นคุณเขียนรหัสที่ทำ จากนั้นคุณปรับโครงสร้างรหัสนั้นใหม่เพื่อให้เป็นไปตามหลักการสถาปัตยกรรมที่ดี "Red-Green-Refactor"

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

นี่คือการอ่านที่แนะนำ

เหล่านี้เป็นสถานที่ที่ดีในการเริ่มมองหาที่จะเรียนรู้วิธีการพัฒนาความคล่องตัวอย่างแท้จริง


4
@Murph: ความคิดคือสถาปัตยกรรมที่เกิดขึ้นที่คุณควรค้นหาผ่านการทดสอบแทนที่จะกำหนดไว้ล่วงหน้า
Martin Wickman

5
@ มาร์ตินฉันดู - แต่ยังมีปัญหาที่น่ากลัวของขนาดมี ฉันพอใจกับมันในระดับหนึ่ง แต่นอกเหนือจากนั้น ... ฉันคิดว่าคุณน่าจะทำแบบนั้น (หรืออย่างน้อยก็มีโครงสร้างเริ่มต้น) ก่อนที่คุณจะไปถึงระดับการพัฒนา (ซึ่งอาจคาดว่า ทีมงานในการปรับแต่งและพัฒนาสถาปัตยกรรมระดับสูงเช่นเดียวกับระดับต่ำ)
Murph

2
@Murph: ใช่ bootstrapping เป็นปัญหา คุณต้องเลือกภาษาการเขียนโปรแกรมอย่างน้อย ข้อกำหนดที่ไม่ใช้งานได้เช่นความสามารถในการปรับขนาดและประสิทธิภาพมีผลต่อสถาปัตยกรรมเป็นจำนวนมากและต้องคำนึงถึงโดยเร็ว แต่นอกเหนือจากที่ฉันชอบที่จะเริ่มต้นที่เรียบง่ายที่สุดเท่าที่จะเป็นไปได้อย่างสมบูรณ์แบบจากนั้นค่อยเพิ่มและเพิ่มคุณลักษณะการใช้งาน (yagni) ชิ้นโดยการแบ่ง มุ่งเน้นไปที่การปรับโครงสร้างใหม่เพื่อให้ฐานรหัสสะอาดและแยกสิ่งต่าง ๆ จนกว่าการออกแบบจะปรากฏขึ้น
Martin Wickman

1
เหตุผลการแย่งชิงกันซ้ำแล้วซ้ำอีกก็คือธรรมชาติของซอฟต์แวร์ทำให้เราไม่เคยทำให้ถูกต้องในครั้งแรก ในหลายกรณีผู้มีส่วนได้เสียไม่รู้ว่าพวกเขาต้องการอะไรจริงๆจนกว่าพวกเขาจะมีอะไรอยู่ข้างหน้าพวกเขา มีอะไรดีไปกว่า: ใช้เวลาสร้างการออกแบบสำหรับฟีเจอร์ (ที่จะต้องปรับปรุงหรือโยนทิ้งเมื่อยางกระทบพื้นถนน) และสื่อสารการออกแบบนั้นไปยังผู้ปฏิบัติ หรือใช้เวลาเหล่านั้นในการดำเนินการผ่านครั้งแรกที่คุณสมบัติและปรับแต่งผ่านการทดสอบและการปรับโครงสร้างใหม่
Michael Brown

3
โดยวิธีการที่คุณจะไม่ตระหนักถึงคุณค่าที่แท้จริงของ TDD จนกว่าคุณจะมีการทดสอบโดยไม่คาดคิดเปลี่ยนเป็นสีแดง นั่นคือช่วงเวลา "aha" ที่ยิ่งใหญ่ของฉันกับ TDD เมื่อดูการทดสอบที่เพิ่งเปลี่ยนเป็นสีแดงฉันรู้ว่าหากไม่มีการทดสอบข้อผิดพลาดจะยากมากที่จะติดตามหลังจากที่รหัสอยู่ในมือของผู้ทดสอบ หากคุณต้องการเห็นสถาปัตยกรรมจากบนลงล่างระดับสูงมีเครื่องมือมากมายที่สามารถสร้างลำดับและแผนภาพระดับจากรหัสของคุณ ใช้สิ่งเหล่านั้นเพื่อรับรายงานสแน็ปช็อตและกำจัดเพราะไม่ใช่กฎหมาย
Michael Brown

2

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


4
Scrum เป็นวิธีการที่คล่องตัวและมุ่งเน้นไปที่ทีมพัฒนาและผู้มีส่วนได้เสียและได้รับการส่งซ้ำของรหัสการทำงาน การจัดการโครงการจากบนลงล่างและการแย่งชิงกันเหมือนน้ำมันและน้ำ
Michael Brown

1
@ ไมค์เห็นด้วย แต่ฉันรู้สึกเสมอว่า Scrum เป็นวิธีการที่คล่องตัวของผู้จัดการโครงการในขณะที่ Extreme Programming เป็นวิธีการที่คล่องตัวของผู้พัฒนา ที่กล่าวว่าฉันได้เห็น Scrum นำไปใช้กับโครงการจำนวนมากนอกเหนือจากซอฟต์แวร์ ที่น่าสนใจวิกิพีเดียให้คำนิยามของการต่อสู้นี้: การต่อสู้คือซ้ำเป็นวิธีการที่เพิ่มขึ้นสำหรับการจัดการโครงการมักจะเห็นในการพัฒนาซอฟต์แวร์เปรียวประเภทของวิศวกรรมซอฟต์แวร์: en.wikipedia.org/wiki/Scrum_(development)
ahsteele

2
เพิ่งรู้ว่าฉันลดระดับความคิดเห็นของคุณโดยไม่ตั้งใจ ... ไม่ได้ตั้งใจ พวกเขาจะไม่ให้ฉันลบการลงคะแนนเว้นแต่ว่าคุณจะแก้ไขเล็กน้อย ฉันไม่เคยเห็น Scrum อธิบายว่าเป็นวิธีการจัดการโครงการมาก่อน น่าสนใจ ที่ถูกกล่าวว่าฉันคิดว่าการต่อสู้เพื่อทำงานกับซอฟต์แวร์โดยไม่ต้องใช้ TDD นั้นเป็นสาเหตุที่ทำให้ "การทำเปรียว" ล้มเหลว
Michael Brown

1

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

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


1
ฉันจะไม่พูดความต้องการที่เปลี่ยนแปลงตลอดเวลา Infact ระหว่างการวิ่งความต้องการจะคงที่และไม่เปลี่ยนแปลง หลังจากการวิ่งแต่ละครั้งสามารถจัดลำดับความสำคัญของข้อกำหนดใหม่ได้ ซื้อเป้าหมายโดยรวมของคุณจะไม่เปลี่ยนแปลง
Martin York

@ มาร์ตินจุดดี ฉันเดาว่าฉันควรใช้ถ้อยคำใหม่พวกเขาเปลี่ยนจากการต่อสู้เป็นการต่อสู้
Vadim

1

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

คุณต้องวางแผนสักหน่อยเพื่อให้เรื่องนี้ทำงานได้ เข้าสู่การประชุมวางแผนการวิ่งโดยที่ทีมประมาณงานสำหรับการวิ่งล่วงหน้า คนส่วนใหญ่ไม่ได้ตระหนักถึงสิ่งนี้ไม่เพียง แต่เป็นการประชุมประเมิน แต่ยังมีความพยายามในการออกแบบเช่นกัน ตัวอย่างเช่นงานอาจเป็น "เพิ่มรหัสสำหรับรุ่นรถใหม่" คุณยังไม่สามารถประมาณสิ่งนี้ได้คุณจำเป็นต้องรู้มากกว่านี้ ดังนั้นทีมจึงพูดคุยเกี่ยวกับการออกแบบและมาพร้อมกับโซลูชั่นที่หลากหลาย ("subclass Car?") และเสริมว่าเป็นการเตือนความจำให้กับงาน คุณไม่ค่อยต้องการพิธีการมากกว่านั้น ตอนนี้คุณมีความคิดวิธีแก้ปัญหา คุณยังไม่มีรายละเอียดทั้งหมดและคุณก็รู้ว่าการออกแบบเพียงพอที่จะประเมินได้อย่างสะดวกสบาย โดยไม่ต้องสร้างไดอะแกรมใด ๆ เลย (ณ จุดนี้)

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

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

และใช่รหัสที่อ่านได้นั้นเป็นเอกสารอย่างแน่นอน


1

สถาปัตยกรรมโดยรวมของโครงการและการออกแบบระดับสูงจะกระทำนอกทีมการต่อสู้เมื่อเจ้าของโครงการกำลังสร้างเรื่องราว

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

การออกแบบที่จำเป็นสำหรับแต่ละเรื่องจะทำในการวางแผนและเจรจากับเจ้าของผลิตภัณฑ์ระหว่างการวางแผน

ส่วนใหญ่ของความพยายามออกแบบสำหรับเรื่องราวจะทำในการวิ่ง

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


0

ความเข้าใจของฉันคือการที่คุณทำการออกแบบในระดับที่สูงขึ้นพร้อมกับความต้องการขั้นต้นที่คุณรวบรวมเมื่อเริ่มต้นโครงการ คุณบันทึกการออกแบบนี้ไว้อย่างดี

จากนั้นเมื่อคุณไปปฏิบัติตามข้อกำหนดจริงคุณเปลี่ยนการออกแบบระดับล่างตามที่คุณต้องการ แต่คุณหลีกเลี่ยงการเปลี่ยนแปลงการออกแบบระดับที่สูงขึ้น

นั่นเป็นวิธีอธิบายให้ฉันเมื่อห้านาทีที่แล้ว ...


0

ทุกวันนี้มีการแบ่งแยกภายในชุมชน Eclipse ระหว่างเครื่องมือ UML แบบดั้งเดิมที่เน้น MDD ซึ่งตัวแบบจำลองนั้นใช้รหัส / การพัฒนาและ Omondo ซึ่งพิจารณาว่าการวนซ้ำควรผลักดันกระบวนการพัฒนาและไม่เพียง แต่รูปแบบเท่านั้น

ฉันเห็นด้วยกับพวกเขาเพราะ MDD เป็นอึในขณะที่ UML เป็นวิธีที่ยอดเยี่ยมเพราะเป็นมาตรฐานในการสื่อสารกับสมาชิกในทีมคนอื่น ๆ ข้อความแสดงแทน

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