มีข้อได้เปรียบในการฝึกฝนแบบคล่องแคล่วนอกเหนือจากการสร้างงานระหว่าง sprints หรือไม่?


9

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

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

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

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

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

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


คุณมีประเด็น ฉันต้องการจะชี้ให้เห็นว่าคำว่า 'ฟอลส์' ไม่มีนิยามสากล 1 ข้อ (เหมือนกับคำอื่น ๆ ในไอที) คนส่วนใหญ่คิดว่าคุณไม่ได้รับอนุญาตให้เขียนโค้ดเว้นแต่ว่าหน้าข้อกำหนดทั้งหมดจะเขียนและลงนามเต็ม 2000 หน้า นี่ไม่จำเป็นต้องเป็นอย่างนั้น
NoChance

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

3
@EmmadKareem: จริง ๆ แล้วใน Waterfall เหมาะสมนี่เป็นกรณีที่เกิดขึ้นจริง คุณจะไม่เริ่มเขียนโค้ดจนกว่ารายละเอียดทั้งหมดของการออกแบบถือเป็นที่สิ้นสุด โชคดีที่ Waterfall ที่เกิดขึ้นจริงนั้นไม่ค่อยมีใครใช้ในการพัฒนาซอฟต์แวร์ - ส่วนใหญ่เป็นเพราะมันใช้งานไม่ได้จริง ๆ
tdammers

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

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

คำตอบ:


7

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

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

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

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

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

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


ขอบคุณมาก สำหรับทุกคนที่ต้องการอ่านข้อมูลเกี่ยวกับวิธีการออกแบบที่ทำงานได้อย่างคล่องตัวและทำไมมันถึงไม่เลว: http://jamesshore.com/Agile-Book/incremental_design.html
tux91

8

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

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

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


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

2
ประสบการณ์ของฉันกับโครงการ Waterfall คือพวกเขามักจะตรงต่อเวลาใน 90% แรกของเวลาที่วางแผนไว้ แบบจำลองของ Agile ที่ยืนยันในการสาธิตการวิ่งทุกครั้งทำให้มีโอกาสน้อยกว่านี้มาก เมื่อคนรู้ว่าพวกเขาจะต้องรับผิดชอบในหนึ่งสัปดาห์ครึ่งพวกเขามักจะมีแรงจูงใจที่ดีกว่าเมื่อพวกเขาจะต้องรับผิดชอบในเก้าเดือน มันเป็นเพียงจิตวิทยาของมนุษย์
Gort the Robot

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

2
ส่วนใหญ่ความปลอดภัยที่สำคัญคนเช่นสัญญาณรถไฟ, การบิน - - กรณีที่ลูกค้ามีพื้นที่ไม่กี่ทำอ่านรายละเอียดอย่างระมัดระวัง มันค่อนข้างหายากและมีแนวโน้มที่จะนำไปสู่วิธีการพัฒนาที่แตกต่างกันอย่างมากมาย
Donal Fellows

4

เพื่อตอบสนองต่อคำพูดจากคำถามซึ่งเป็นความเข้าใจผิดขั้นพื้นฐานของฝ่ายตรงข้ามต่อต้านเปรียว

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

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

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

เช่นเดียวกันกับ YouTube, Twitter และ บริษัท อื่น ๆ อีกนับไม่ถ้วน

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

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


3
ด้วยการใช้คำว่า "ไม่เคย" คุณกำลังบอกว่าไม่มีผลิตภัณฑ์ซอฟต์แวร์ที่ทำโดยใช้น้ำตกหรือไม่? นอกจากนี้ทำไม "ไม่เคย" ปล่อยอะไรเลยถ้าคุณมีชุดข้อกำหนดสำหรับเหตุการณ์สำคัญที่คุณนำไปใช้สำเร็จ
tux91

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

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

1
@ tux91 wrt การใช้งานของ "ไม่เคย" ฉันอยู่กับ Jarrod ที่นี่: คำถามบอกว่า"น้ำตกช่วยให้คุณสมบูรณ์แบบ ... " - ซึ่งเขาตอบโต้ด้วยความเหมาะสมอย่างสมบูรณ์ เหตุผลเดียวที่ฉันไม่ได้ลงคะแนนคือฉันพยายามหลีกเลี่ยงการลงคะแนนในคำตอบสำหรับคำถามที่ไม่สร้างสรรค์
gnat

1
@gnat ใช่ฉันเดาฉันไม่คิดว่าเมื่อฉันใช้คำว่าสมบูรณ์แบบที่ไม่ต้องการฉันหมายถึงจริง
tux91

3

การต่อสู้ด้วยตัวเองไม่ได้กำหนดแนวทางปฏิบัติทางเทคนิคใด ๆ เพราะเป็นกรอบทั่วไป

การพัฒนาซอฟต์แวร์ Agile นั้นต้องใช้ความเป็นเลิศทางเทคนิคจากทีม สิ่งนี้มาจากการปฏิบัติทางเทคนิคจาก XP (การเขียนโปรแกรมขั้นสูง) ตัวอย่างเช่นคุณต้องเรียนรู้เกี่ยวกับการเปลี่ยนโครงสร้าง, tdd, ทั้งทีม, การเขียนโปรแกรมคู่, การออกแบบที่เพิ่มขึ้น, ci, การทำงานร่วมกันเป็นต้น

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

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


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

@ tux91 อัปเดตคำตอบของฉัน สำหรับสถาปัตยกรรมฉันแนะนำให้อ่านสิ่งนี้หรือดูสิ่งนี้ที่ 26:20เกี่ยวกับสิ่งที่เราเรียกว่า "การออกแบบที่เพิ่มขึ้น"
Martin Wickman

2

สำหรับฉันประโยชน์หลักของความคล่องตัวคือการลดความเสี่ยงในโครงการ

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

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


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

1

ในหลายกรณีสถาปัตยกรรมจะต้องมีการปรับเปลี่ยนอย่างมากซึ่งหมายความว่าคุณจะต้องใช้คุณลักษณะทั้งหมดที่อาศัยสถาปัตยกรรมเก่าอีกครั้ง

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

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


0

ในหลายกรณีสถาปัตยกรรมจะต้องมีการปรับเปลี่ยนอย่างมากซึ่งหมายความว่าคุณจะต้องใช้คุณลักษณะทั้งหมดที่อาศัยสถาปัตยกรรมเก่าอีกครั้ง ดังนั้นจุดโดยรวมของค่าใช้จ่ายลดลงเลยหายไปที่นี่

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

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

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