ระเบียบวิธี Agile: รวดเร็วและสกปรกหรือวางแผนก่อน


10

คำถามเปรียว: เปรียวเชื่อมั่นในการทำให้สิ่งต่าง ๆ และดำเนินการ "วิธีที่รวดเร็วและสกปรก" - หรือไม่เปรียวต้องการสร้างอย่างแน่นหนาจากพื้นดินขึ้นมา? หรือนี่ไม่ใช่คำถามวิธีการและอีกคำถามที่คุณประเมินเป็นกรณี ๆ ไป?

ฉันเทคนิค "สร้างใหม่" รากฐานของระบบหลังจากที่ฉันสร้างโครงสร้างตัวเองขึ้นมาแล้ว ... มันไม่ใช่งานที่มีขนาดใหญ่มาก ... จะคล่องแคล่วว่องไวอยากให้ฉันระบุสเป็คการไหลทั้งหมดก่อนวิเคราะห์ ปรับแต่งแล้วสร้าง? ฉันรู้สึกว่ามันเป็นวิธีที่ดีกว่านี้ ... เมื่อฉันวางระบบที่ยุ่งเหยิงฉันเห็นว่ามันจะต้องดีขึ้นอย่างไร ... ในอีกแง่หนึ่งมันไม่ได้จัดระเบียบ ... แค่อยากรู้ว่าการพัฒนาที่ดีที่สุดคืออะไร การปฏิบัติอยู่ในเรื่องนี้

ฉันเชื่อว่าคำถามนี้ค่อนข้างแตกต่างจากAgile และ Protypingเนื่องจากฉันไม่ได้ถามเกี่ยวกับการทำ Prototyping และ Throwaway Code ฉันสนใจเปรียวสำหรับรหัสเกรดการผลิต




7
ฉันมักจะเห็นผู้จัดการดูเวลาการทดสอบและการวางแผนทั้งหมดในแผนโครงการ 'ดั้งเดิม' และถามว่า "เราไม่สามารถตัดสิ่งเหล่านั้นออกทั้งหมดและใช้ Agile แทน" ... ซึ่งคิดถึงจุดกว้าง ขอบ
JeffUK

1
สิ่งนี้อาจช่วยได้ i.redd.it/bxsitfsewho01.png
JeffUK

คำตอบ:


46

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

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

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

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

ในระยะยาวคุณควรวางแผนให้ฉลาดขึ้น เขียนโค้ดที่ยืดหยุ่น จากนั้นการฉลาดขึ้นไม่ได้ทำให้เสียใจ


1
+1 แต่ฉันต้องการจดบันทึกเป็นพิเศษว่า "ยืดหยุ่น" ไม่ได้แปลว่า "มีบทคัดย่อมากขึ้น" อีกวิธีหนึ่งในการเพิ่มความยืดหยุ่นคือการตรวจสอบให้แน่ใจว่าโค้ดนั้นเข้าถึงได้ (อ่านง่ายเข้าใจง่าย)
jpmc26

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

5
+1 Agile เป็นเรื่องเกี่ยวกับการวางแผนเพียงพอที่จะรู้สึกสะดวกสบายในการเขียนโค้ดที่รับผิดชอบและยืดหยุ่น อีกต่อไปเป็นการสิ้นเปลืองทรัพยากร ไม่ใช่ "ไม่มีการวางแผน" และไม่ใช่ "วางแผนทุกอย่าง" แต่อยู่ที่อื่นระหว่างนั้น
Eric King

23

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

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

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

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

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


6

ทั้ง

มันคือ "เริ่มง่ายและปรับปรุงในขณะที่คุณย้ายไป"

รวดเร็วและสกปรกเปราะ แต่รวดเร็ว (หากโครงการมีขนาดเล็กและอายุสั้นเพียงพอ)

แผนแรกนั้นเข้มงวด แต่มั่นคง (หากโครงการเสร็จสมบูรณ์ก่อนที่จะเกิดข้อ จำกัด ทางการเงินหรือทางโลก)

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


2

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

ดังนั้นแนวทางของคุณก็ใช้ได้ แม้ว่าจะเป็นอันตรายแล้วจะพูดว่า "ดีมันใช้งานได้ฉันทำอะไรต่อไป?" คุณยังไม่ได้ทำมีมุมตัดมากมายที่จะยืดออกและคุณควรจะได้รับ / ใช้เวลาในการทำอย่างถูกต้องเมื่อเห็นได้ชัดว่าวิธีการของคุณให้ผลกับระบบที่ใช้งานได้ นั่นคือการเขียนแบบทดสอบเอกสาร StyleCop เพิ่มประสิทธิภาพให้ความรู้แก่เพื่อนร่วมงานเกี่ยวกับสิ่งที่คุณทำและวิธีการที่คุณทำมันมีการตรวจสอบ ฯลฯ


1

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

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

กล่าวอีกนัยหนึ่งวางแผนสำหรับภารกิจทันที แต่ไม่ได้วางแผนอะไรไว้ล่วงหน้า

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