ความซับซ้อนของจุดไม่กลับมา คุณเรียกว่าอะไร


13

ในฐานะนักพัฒนาซอฟต์แวร์หนึ่งในภารกิจหลักของฉันคือรักษาความซับซ้อนภายใต้การควบคุม

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

ช่วงเวลาที่เฉพาะเจาะจงนี้มีชื่อในภาษาโปรแกรมเมอร์หรือไม่

--edit--

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


1
ฉันเห็นการโต้เถียงในนิยามของคำถาม: ในเวลาน้อยกว่าที่คุณจะต้องเขียนใหม่ทุกอย่างตั้งแต่เริ่มต้นซึ่งหมายถึงผู้ที่จะเขียนโครงการใหม่นั้นดีพอหรืออย่างน้อยก็ดีกว่าใคร สร้างความยุ่งเหยิงในตอนแรก;)
mojuba

1
ฉันคิดว่าเหตุผลหนึ่งที่ไม่มีชื่อตกลงคือขึ้นอยู่กับว่าใครดูรหัส สิ่งที่ดูเหมือนจะซับซ้อนและไร้ความหวังต่อผู้พัฒนารายหนึ่งอาจดูสมเหตุสมผลสำหรับอีกฝ่าย ในกรณีที่รุนแรงฉันเพิ่งคอมไพล์เป็น DLL ด้วยคำนำหน้า "ms" และบอกว่ามันมาจาก Microsoft
Kevin Hsu

1
อาจจะทำเช่นนี้: หนี้ทางเทคนิคเหตุการณ์ Horizon
PeterAllenWebb

คำตอบ:


20

มันเป็นปัญหาของการบำรุงรักษามากกว่าความซับซ้อน

ปรากฏการณ์นี้ถูกเรียกว่า "หนี้ทางเทคนิค" และเมื่อถึงระดับวิกฤตโครงการก็กำลังจะล้มละลาย

นั่นคือสิ่งที่คุณหมายถึงอะไร


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

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

2
@Thibault J: ฉันไม่เชื่อว่ามีคำเฉพาะสำหรับช่วงเวลานั้น มันเป็นเรื่องของการตระหนักว่าคุณยังมีความสุขก่อนเวลานั้นหรือผ่านพ้นไปอย่างน่าเศร้า

1
@ Developer Art: ... ตระหนักดีว่าถ้าคุณยังมีความสุขก่อนเวลานั้นหรือผ่านไปอย่างน่าเศร้า - ฉันคิดว่านั่นเป็นกุญแจสำคัญในการให้คำจำกัดความที่ดี: โครงการที่ผ่านพ้นจุดนี้ไปแล้วคือโครงการที่ไม่มีวิศวกร เข้ายึดครอง
mojuba

3
ฉันจะไปสำหรับคำว่า "การล้มละลายทางเทคนิค" ฉันชอบมัน และฉันจะใช้คำจำกัดความของคุณ
Thibault J

16

"จุดที่ซับซ้อนเกินกว่า" ถูกอ้างถึงเป็นภาษาอังกฤษว่า:

โอ้พระเจ้าของฉันปูนี้คืออะไร

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

ดังนั้นการแยกบางสิ่งที่ซับซ้อนออกจากสิ่งที่น่ากลัวมากนั้นอาจเป็นเรื่องยาก

HOWEVER: สิ่งที่เกิดขึ้นจริงกับซอฟต์แวร์ทั้งหมดคือการประมวลผลแบบนี้:

ขั้นตอนที่ 1: มีสเป็คที่ดีทำการออกแบบที่ดีใช้สิ่งที่ดี ทุกคนมีความสุข

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

ขั้นตอนที่ 2: ทำการเปลี่ยนแปลงบางอย่างสิ่งต่าง ๆ เพิ่มฟังก์ชั่นใหม่รวมอยู่ด้วย สถาปัตยกรรมและโครงสร้างจากขั้นตอนที่ 1 ทำให้กระบวนการนี้ค่อนข้างเจ็บปวด [แต่โอ๊ะโอ "cruft factor" เพิ่มขึ้นเล็กน้อย]

ในตอนท้ายของขั้นตอนที่ 2: นักพัฒนาแสดงความยินดีกับความสง่างามของการออกแบบของพวกเขาและหายไปจากความคิดที่มีความสุข "Gee ฉันฉลาดมากที่ได้ทำเบี้ยเลี้ยงทั้งหมดในขั้นตอนที่ 1 นี่เป็นไปด้วยดีฉันมีมรดกที่ยอดเยี่ยม ที่นี่สำหรับผู้อื่นเพื่อเพิ่มสิ่งต่าง ๆ ในอนาคตมันจะวิเศษและโลกจะเป็นสถานที่ที่ดีกว่า "

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

ในตอนท้ายของขั้นตอนที่ 3: นักพัฒนาแสดงความยินดีกับความสง่างามที่ยอดเยี่ยมของการออกแบบของพวกเขาและหายไปจากความคิดที่ค่อนข้างมีความสุข "Gee สถาปัตยกรรมนี้ค่อนข้างดีที่จะอนุญาตให้มีการเปลี่ยนแปลงมากมาย เกี่ยวกับ X และ Y และ Z พวกเขาสามารถทำความสะอาดได้ในตอนนี้ แต่ !!! Ahhh !!! ฉันฉลาดที่ได้ทำเบี้ยเลี้ยงเหล่านั้นทั้งหมดในขั้นตอนที่ 1 มันดีมากฉันมีมรดกที่ยอดเยี่ยมที่นี่สำหรับ คนอื่นจะเพิ่มสิ่งต่าง ๆ ในอนาคตมันจะวิเศษและโลกจะเป็นสถานที่ที่ดีกว่า "

ขั้นตอนที่ 4: เช่นเดียวกับขั้นตอนที่ 3 ยกเว้น:

ในตอนท้ายของขั้นตอนที่ 4: นักพัฒนาคิดว่า: "สิ่งนี้เป็นสิ่งที่ดีเพื่อให้ UGLY รักษาไว้มันต้องการการเปลี่ยนแปลงที่จริงจังจริง ๆ ฉันไม่ชอบการทำงานนี้จริง ๆ แล้วมันต้องการ refactoring ฉันสงสัยว่าเจ้านายเป็นใคร จะบอกว่าเมื่อฉันบอกเขาว่าต้องใช้เวลา 6 สัปดาห์และจะไม่มีอะไรให้ผู้ใช้เห็นในตอนท้าย ... แต่ฉันจะมีขอบเขตการดัดแปลงในอนาคตอีก 5 ปีด้วยการทำเช่นนี้ .... hmmm .. เวลาที่จะไปผับเพื่อดื่มเบียร์.

ขั้นตอนที่ 5: ต้องทำการเปลี่ยนแปลงจำนวนมาก

และในระหว่างขั้นตอนที่ 5 นักพัฒนาพูดกัน: "รหัสนี้แย่มากใครเขียนสิ่งนี้พวกเขาควรถูกยิงมันน่ากลัวเราต้องเขียนซ้ำ"

ขั้นตอนที่ 5 เป็นอันตรายถึงชีวิต นี่คือสิ่งที่ปัจจัย cruft แย่มากจนโค้ดไม่สามารถเปลี่ยนแปลงได้อีกเพียงไม่กี่ครั้งมันต้องมีการเปลี่ยนแปลงครั้งใหญ่

ปัญหาในขั้นตอนที่ 5 คือความปรารถนาที่จะทิ้งมันและเริ่มต้นใหม่อีกครั้ง สาเหตุที่เป็นอันตรายถึงชีวิตคือ "ปัจจัย Netscape" ไปที่ google it บริษัท ตาย ณ จุดนี้เนื่องจากการเริ่มต้นอีกครั้งหมายความว่าคุณเริ่มต้นด้วยสมมติฐานประมาณ 50% แทนที่จะเป็นข้อเท็จจริงความกระตือรือร้น 150% แทนที่จะเป็นความรู้ความหยิ่ง 200% แทนที่จะเป็นความอ่อนน้อมถ่อมตน ("พวกนั้นโง่มาก!") และคุณแนะนำบั๊กใหม่ทั้งหมด

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


ฉันเดิมพันว่าคุณจะได้รับคะแนนมากขึ้นถ้าคุณทำตามขั้นตอนของคุณสั้นลง
Codism

ฉันต้องเพิ่มว่าธุรกิจส่วนใหญ่ไม่มีงบประมาณสำหรับเรื่องนี้ดังนั้นการรีแฟคเตอร์จึงสายเกินไปเสมอ ในการจัดการ entropy ที่เพิ่มขึ้นของระบบคือการตั้งค่าที่ตั้งแต่วันที่ 1 งบประมาณ (10% -20%) จะถูกจัดสรรจากทุกงานเพื่อทำความสะอาด มันไม่ใช่งบประมาณแก้ไขข้อผิดพลาด การใช้จ่ายงบประมาณนั้นตัดสินใจโดยวิศวกรรมไม่ใช่การจัดการหรือการตลาดหรือการขาย มันถูกใช้เพื่อแยกแยะเอนโทรปีที่เกิดจากการพัฒนาและการใช้จ่ายลดลงเมื่อผลิตภัณฑ์ใกล้ถึงจุดสิ้นสุดของชีวิต
mattnz

ตกลง ฝ่ายบริหารต้องการที่จะลดทอนสิ่งนั้นเสมอ บางครั้งคุณสามารถหลบซ่อนได้ (เพิ่มประมาณ 20% ของประมาณการการพัฒนาสำหรับการทำอะไรก็ได้และเมื่อจำเป็นต้องทำการปรับโครงสร้างใหม่ - ใช้ IT)
quick_now

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

2

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


1

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

  • ความซับซ้อนอยู่ในข้อกำหนดของเอกสาร
  • เครื่องมือใหม่ใช้งานยากกว่าเว็บไซต์แฟลชที่สัญญาไว้
  • ทีมใหม่ไม่ร้อนแรงอย่างที่คิด

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

ฉันไม่ได้รวมไว้ในกรณีนี้ที่มีการใช้การวัดเพื่อระบุโมดูลหรือการออกแบบที่มีปัญหา specfic ซึ่งถูกคัดและแทนที่แล้ว


ฉันได้เห็นโครงการดังนั้น f ** ed up ว่างบประมาณการบำรุงรักษาของพวกเขาคือสามหรือสี่เท่าของงบประมาณการพัฒนาเริ่มต้น อย่างไรก็ตามคำที่ฉันกำลังมองหาไม่ใช่สิ่งที่ "เป็นทางการ" และจริงจัง แต่ก็มีบางอย่างที่มากกว่า "Ballmer peak" ใน xkcd ขออภัยถ้าฉันไม่ชัดเจนมาก
Thibault J

แต่มันเกิดขึ้นได้อย่างไร หากเป็นเพราะความต้องการที่ซับซ้อนการจัดการที่ไม่ดีมากกว่าวิศวกรที่ดีที่สุดทำไมการเขียนซ้ำจึงแก้ไขได้
mattnz

เพราะทีมเขียนใหม่มันไม่เหมือนกับคนที่เขียนมันตอนแรก?
Thibault J

1

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

แต่ฉันชอบที่เราสามารถตั้งชื่อได้ "สุภาพบุรุษ" คุณสามารถพูดได้ดึงนักพัฒนาเพื่อนของคุณขึ้นมารอบตัวคุณ "เราได้ผ่านการดูแลรักษา Hellespont ส่งข้อความถึงภรรยาของคุณและบอกให้เธอรู้ว่าคุณจะไม่เห็นเธอสักพัก"


"ทุก ๆ การกระทำใน codebase นั้นทำด้วยความเชื่อว่าเป็นการปรับปรุงใน codebase นั้น" ดูเหมือนว่าเราไม่เคยทำงานใน บริษัท เดียวกัน :)
Thibault J

@ThibaultJ - บางทีเพื่อนร่วมงานของคุณเป็นโรคจิต?
Dan Ray

@Thibault J: ฉันเชื่อว่าการกระทำทุกอย่างเกิดขึ้นจากความเชื่อที่ว่ามันเป็นการปรับปรุงใน codebase นั้น แน่นอนว่าความเชื่อนั้นได้รับการค้นคว้าและไม่มีมูลความจริงอย่างแน่นอน
David Thornley

ในงานสุดท้ายของฉันฉันไม่คิดว่าจะมีการบำรุงรักษาใด ๆ ที่ใครก็ตามที่เคยทำด้วยความเชื่อว่ามันเป็นการปรับปรุงโค้ดเบส
Bobby Tables

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

-1

ฉันไม่รู้ว่ามีชื่อ แต่ถ้าไม่มีฉันจะเสนอให้เรียกมันว่า "จุดหลอมละลาย"


หรือจะขอยืมอีกวาระนิวเคลียร์: มวลวิกฤต
John Cromartie

-2

นี่ไม่ใช่คำถามที่น่าสนใจมาก

แน่นอนมันเล็กน้อย

มันช่างน่ารำคาญเหลือเกินที่เราได้พัฒนาวิธีการมากมายในการรับมือ

  1. วิธีการน้ำตก ผู้คนจำนวนมากใช้เวลาทบทวนข้อกำหนดและเอกสารการออกแบบเพื่อให้แน่ใจว่ามีการจัดการความซับซ้อน

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

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

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

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

ความซับซ้อนควรถูก จำกัด โดยการตั้งเป้าหมาย

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

ไม่มี "จุดเปลี่ยน" หากการจัดการความซับซ้อนเป็นปัญหาอยู่แสดงว่ามีบางอย่างผิดปกติในองค์กร


1
ฉันไม่เห็นประเด็น โครงการที่ดำเนินการได้ดีนั้นไม่น่าเป็นไปได้ที่จะไม่เกิดผลตอบแทน แต่ทุกโครงการจะดำเนินไปด้วยดี บางโครงการที่ดำเนินการไม่ดีจะประสบความสำเร็จอยู่แล้วและที่เหลือจะล้มเหลวด้วยเหตุผลต่าง ๆ บางครั้งก็กระทบกับจุดที่ซับซ้อนซึ่งไม่ได้ผลตอบแทนและบางครั้งก็ไม่
David Thornley

@ David Thornley: นั่นคือประเด็นของฉัน ไม่มี "จุดซับซ้อนที่ไม่ส่งคืน" มันเป็นแค่การจัดการที่ไม่ดีแบบเก่า ไม่จำเป็นต้องมีชื่อที่ซับซ้อนหรือกฎ ความซับซ้อนเป็นเพียงอาการของการจัดการที่ไม่ดี ไม่ค่อยน่าสนใจเท่าไหร่
S.Lott

@ S.Lott: ฉันคิดว่ามันมีอยู่แม้ว่าจะไม่ได้อยู่ในโครงการที่มีการจัดการที่ดี มีโครงการที่ได้รับการจัดการที่ไม่ดีจำนวนมากและบางโครงการจะเข้าสู่ช่วงของเหตุการณ์ที่ซับซ้อนและบางโครงการก็ไม่ทำเช่นนั้น ฉันไม่คิดว่ามันมีประโยชน์ที่จะรวมการจัดการที่ไม่ดีเข้าด้วยกัน
David Thornley

@ David Thornley: ฉันคิดว่ามันยากมากที่จะคลี่คลายการจัดการที่ไม่ดี (ซึ่งนำไปสู่ความซับซ้อนที่น่ากลัว) จากการจัดการที่ไม่ดี (ซึ่งนำไปสู่การเลิกทุกคน) ฉันไม่เห็นวิธีที่จะบอกว่าโครงการจะซับซ้อนเกินไปหรือช้าหรือไร้ความสามารถ
S.Lott

@ S.Lott: อย่างไรก็ตามมีความแตกต่างระหว่างโครงการที่ทุกคนหยุดทำงานหรือประสบกับปัญหาสุขภาพที่สำคัญและโครงการที่มีความซับซ้อนมากเกินไป มีหลายวิธีที่จะล้มเหลวและอาจน่าสนใจหรือมีประโยชน์ในการจัดหมวดหมู่
David Thornley

-2

มีวิธีการที่จะมองเห็นและติดตามความเสี่ยงของการเพิ่ม complexitiy สำหรับ (ใหญ่) โครงการและรหัส เมื่อพวกเขาถูกนำไปใช้อย่างมีเหตุผลหวังว่าจะไม่จำเป็นต้องใช้ชื่อใหม่สำหรับจุดที่ไม่ต้องการผลตอบแทน (มี MOOC ที่เกี่ยวข้องที่ openHPI คือhttps://open.hpi.de/courses/softwareanalytics2015/ )

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

วิธีการบางอย่างเพื่อลดความซับซ้อนของโครงสร้างคือhttp://www.buch.de/shop/home/suche/?fq=3540878890 :

  • modularisation
  • หลีกเลี่ยงข้อเสนอแนะลูป
  • รูปสามเหลี่ยม

นอกจากนี้ยังมีแนวคิดของการออกแบบซึ่งเป็นจริง: https: \ en.wikipedia.org \ wiki \ Axiomatic_design \ ด้วยแนวคิดนี้ปัญหาที่น่าเชื่อถือเนื่องจากความซับซ้อนที่ไม่จำเป็นสามารถหลีกเลี่ยงได้

ดังนั้นจึงมีวิธีการมากมาย ในที่สุดมันก็เป็นเรื่องเกี่ยวกับการตัดสินใจที่จะคิดเกี่ยวกับพวกเขาเพราะโครงการมีขนาดใหญ่พอ


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