คำถามติดแท็ก large-scale-project

10
วิธีการทำให้ codebase ขนาดใหญ่เข้าใจง่ายขึ้น
สมมติว่าฉันกำลังพัฒนาโครงการที่ค่อนข้างใหญ่ ฉันได้บันทึกคลาสและฟังก์ชั่นทั้งหมดของฉันกับ Doxygen แล้วอย่างไรก็ตามฉันมีความคิดที่จะใส่ "โน้ตของโปรแกรมเมอร์" ลงในไฟล์ซอร์สโค้ดแต่ละไฟล์ แนวคิดเบื้องหลังนี้คือการอธิบายในแง่ของคนธรรมดาว่าคลาสเฉพาะทำงานอย่างไร (และไม่เพียง แต่เหตุผลที่ความคิดเห็นส่วนใหญ่ทำ) กล่าวอีกนัยหนึ่งคือการให้มุมมองอื่น ๆ เกี่ยวกับการทำงานของโปรแกรมเมอร์ ตัวอย่างเช่น: /* * PROGRAMMER'S NOTES: * * As stated in the documentation, the GamepadManager class * reads joystick joystick input using SDL and 'parses' SDL events to * Qt signals. * * Most of the code here is …

3
การออกแบบสถาปัตยกรรมทำได้อย่างไรในสภาพแวดล้อมที่คล่องตัว
ฉันได้อ่านหลักการสำหรับสถาปนิกว่องไวที่พวกเขานิยามหลักการต่อไป: หลักการ # 1 ทีมที่ใช้รหัสออกแบบระบบ หลักการ # 2 สร้างสถาปัตยกรรมที่ง่ายที่สุดที่อาจเป็นไปได้ หลักการ # 3 เมื่อมีข้อสงสัยรหัสมันออกมา หลักการ # 4 พวกเขาสร้างมันพวกเขาทดสอบ หลักการ # 5 ยิ่งระบบยิ่งใหญ่ หลักการ # 6 สถาปัตยกรรมของระบบคือการทำงานร่วมกันของบทบาท หลักการ # 7 ไม่มีการผูกขาดกับนวัตกรรม บทความกล่าวว่าการออกแบบสถาปัตยกรรมส่วนใหญ่เสร็จสิ้นในระหว่างขั้นตอนการเข้ารหัสและการออกแบบระบบก่อนหน้านั้นเท่านั้น นั่นเป็นเรื่องปกติ ดังนั้นการออกแบบระบบทำได้อย่างไร? ใช้ UML หรือเปล่า หรือเอกสารที่กำหนดอินเทอร์เฟซและบล็อกหลัก อาจจะเป็นอย่างอื่น?

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

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

2
การรวมกลุ่มอย่างต่อเนื่องเป็นอย่างไรใน บริษัท ขนาดใหญ่
ใน บริษัท ของฉันเป็นเรื่องปกติที่จะไม่ทำบิลด์ขั้นกลางใด ๆ เพื่อตรวจสอบว่าแต่ละฟีเจอร์ / สาขาแก้ไขข้อผิดพลาดรวมอยู่ใน dev มีบิลด์รายวันเท่านั้นซึ่งจะทำให้การทดสอบล้มเหลวและสร้างข้อผิดพลาดได้เสมอ ฉันได้รับการบอกว่ามันไม่สมเหตุสมผลที่จะสร้างสำหรับการผสานแต่ละครั้งสำหรับนักพัฒนามากกว่า 1,000 คน ดังนั้นฉันจึงค้นหาวิธีการจัดระเบียบ CI ใน บริษัท ที่มีนักพัฒนาจำนวนมากหรือมากกว่านั้น (Microsoft, Facebook) และไม่พบอะไรเลย บางทีคนวงในสามารถบอกฉันได้?

8
คอขวดที่ใหญ่ที่สุดคืออะไรเมื่อพัฒนาโครงการขนาดใหญ่ [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา สมมติว่า บริษัท ของฉันคือการพัฒนาแบบจำลองของ MS Word (เช่นเป็นตัวอย่าง) สิ่งที่จะเป็นคอขวดในกระบวนการพัฒนาสมมติว่ามีเงินสดไม่ จำกัด และองค์กรเช่น Microsoft กล่าวอีกนัยหนึ่งว่าอะไรคืออุปสรรคที่พบบ่อยที่สุดจากการพัฒนาซอฟต์แวร์ดังกล่าวอย่างรวดเร็ว? สมมติว่าข้อกำหนดทั้งหมดอยู่ในสถานที่และองค์กรทำงานอย่างสมบูรณ์แบบดังนั้นเราจึงมุ่งเน้นไปที่การพัฒนาซอฟต์แวร์จนกว่าผลิตภัณฑ์จะพร้อมจัดส่ง ทางเลือกบางอย่างอาจเป็น: - การเขียนโค้ด - การทดสอบการเขียน - การทดสอบผลิตภัณฑ์สุดท้าย - การเขียนโค้ดซ้ำเนื่องจากการออกแบบที่ไม่ดีตั้งแต่แรก - การออกแบบรหัส - การตรวจสอบโค้ดที่ทำโดยนักพัฒนาที่มีประสบการณ์ - การออกแบบ GUI - การออกแบบ GUI / ผลตอบรับผู้ใช้เบต้า - การประมวลผลความคิดเห็นจากผู้ใช้ - รอผลตอบรับจากผู้ใช้อัลฟ่า / เบต้า กรุณาใช้การอ้างอิงในคำตอบของคุณหรือระบุประสบการณ์ของคุณในเรื่อง

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

1
Build-In-Source และ vs. Out-Of-Source Build
ในการพัฒนาของฉัน (เป็นหลัก C ++) ฉันได้ปฏิบัติตามการใช้งานบิลด์ที่มาจากแหล่งต่าง ๆ มานาน นั่นคือที่มาของฉันมักจะนั่งอยู่ใน/project/srcไดเรกทอรีและสร้างอาศัยอยู่ใน/project/build/bin/release, /project/build/bin/debugไดเรกทอรี ฉันทำสิ่งนี้เพราะมันทำให้ไดเรกทอรีต้นทางของฉันสะอาดจากไฟล์ระดับกลางฉันมีที่เดียวสำหรับไบนารีทั้งหมดของฉันบรรจุภัณฑ์ง่ายกว่าการทำความสะอาดง่ายขึ้นและการควบคุมเวอร์ชันทำได้ง่ายขึ้น (ฉันคิดถึงอะไรเหรอ?) ฉันกำลังสืบทอดโครงการ (ขนาดใหญ่) ในขณะนี้ที่ใช้การสร้างในแหล่งที่มา แรงจูงใจสำหรับโครงสร้างประเภทนี้คืออะไรและมีข้อดีอย่างไร? (ฉันกังวลมากที่สุดกับเหตุผลระดับวิศวกรรมกับเหตุผลส่วนตัวที่ชอบ) ฉันหวังว่า "การออกแบบซอฟต์แวร์ C ++ ขนาดใหญ่ของ Lakos" จะมีน้ำหนักอยู่ในนั้น แต่ฉันก็พลาดถ้ามันทำ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.