คำถามติดแท็ก rewrite

25
เมื่อไหร่ที่จะตอบกลับยิ่งใหญ่คำตอบ?
เพียงอ่านคำถามเกี่ยวกับการเขียนซ้ำครั้งใหญ่และฉันจำคำถามที่ฉันต้องการตอบเอง ฉันมีโปรเจ็กต์ที่แย่มากที่ฉันเขียนลงใน Java เก่าโดยใช้ Struts 1.0, ตารางที่มีความสัมพันธ์ที่ไม่สอดคล้องกันหรือไม่มีความสัมพันธ์เลยแม้แต่กับตารางที่ไม่มีคีย์หลักหรือเขตข้อมูลก็ถือว่าเป็นคีย์หลัก แอพส่วนใหญ่ใช้งานได้ หน้าส่วนใหญ่จะถูกนำมาใช้ซ้ำ (คัดลอกรหัสวาง) และฮาร์ดโค้ด ทุกคนที่เคยทำงานในโครงการได้สาปมันในรูปแบบเดียวหรืออื่น ๆ ตอนนี้ฉันได้พิจารณาที่จะเสนอผู้บริหารระดับสูงให้เขียนใหม่ทั้งหมดของแอปพลิเคชั่นที่น่ากลัวนี้ ฉันพยายามอย่างช้าๆในเวลาส่วนตัว แต่ฉันรู้สึกว่ามันสมควรได้รับทรัพยากรที่ทุ่มเทบางอย่างเพื่อให้มันเกิดขึ้น ต้องอ่านบทความเกี่ยวกับการเขียนครั้งใหญ่ฉันมีความคิดที่สอง และนั่นก็ไม่ดีเมื่อฉันต้องการโน้มน้าวผู้บังคับบัญชาของฉันเพื่อสนับสนุนการเขียนใหม่ของฉัน (ฉันทำงานใน บริษัท ขนาดเล็กพอสมควรดังนั้นข้อเสนอมีความเป็นไปได้ที่จะได้รับการอนุมัติ) TL; DR เมื่อใดคำตอบใหญ่ ๆ จะเขียนอีกครั้งและคุณสามารถใช้อาร์กิวเมนต์ใดในการสนับสนุน

21
ส่วนใหญ่ของรหัสของฉันมีข้อบกพร่องในการออกแบบที่สำคัญ ปิดมันหรือแก้ไขมันตอนนี้เหรอ? [ปิด]
ฉันเป็นนักเรียนมัธยมปลายที่ทำงานในโครงการ C # กับเพื่อนของฉันเกี่ยวกับระดับทักษะเดียวกันกับฉัน จนถึงตอนนี้เราได้เขียนโค้ด 3,000 บรรทัดและโค้ดทดสอบ 250 บรรทัดในช่วง 100 คอมมิต เนื่องจากโรงเรียนฉันจึงเลื่อนโครงการไปสองสามเดือนและเมื่อเร็ว ๆ นี้ฉันสามารถเลือกได้อีกครั้ง เมื่อถึงเวลาหยิบขึ้นมาฉันเข้าใจว่ารหัสที่ฉันเขียนนั้นได้รับการออกแบบมาไม่ดีเช่นการรวมเธรดที่มากเกินไปในโหมดแสดงภาพการป้องกันสภาวะการแข่งขันที่ไม่ดีในการทำงานร่วมกันระหว่างซีพียู GPU และเกมตลับ เช่นเดียวกับรหัสที่ซ้ำซ้อนและสับสนเพียงอย่างเดียว ปัญหาคือฉันยังไม่เสร็จแม้ฟังก์ชั่นหลักของโปรแกรมของฉันดังนั้นฉันจึงไม่สามารถปรับโครงสร้างได้อย่างแท้จริงและฉันรู้สึกท้อแท้ที่จะรู้อย่างสมบูรณ์แบบว่าการออกแบบรหัสของฉันนั้นมีข้อบกพร่อง ในขณะเดียวกันฉันไม่ต้องการละทิ้งโครงการ มีความคืบหน้าเป็นจำนวนมากและงานต้องไม่ไปเสีย ฉันรู้สึกราวกับว่าฉันมีทางเลือกสองทาง: เพียงแค่ทำฟังก์ชั่นให้สมบูรณ์โดยการแก้ไขการออกแบบที่ไม่ดีและทำการปรับโครงสร้างใหม่เมื่อทุกอย่างทำงานหยุดทำงานทุกอย่างและทำงานเพื่อแก้ปัญหาทุกอย่างก่อนที่การทำงานจะเสร็จสิ้น ทั้งหมดนี้อยู่ในใจฉันใหม่อีกครั้งหรือทิ้งโครงการอย่างจริงจังเนื่องจากมีขนาดที่มากเกินไป จากประสบการณ์ของผู้อื่นในโครงการดังกล่าวการขอความช่วยเหลือในการกลับไปสู่เส้นทางที่ถูกต้องคืออะไร? จากคำตอบในเว็บไซต์นี้ฉันทามติทั่วไปคือการเขียนใหม่โดยไม่จำเป็นแต่เป็นตัวเลือกที่ใช้ได้หากไม่สามารถดูแลรักษารหัสได้โดยไม่ต้องเสียค่าใช้จ่ายมากเกินไป ฉันต้องการดำเนินโครงการนี้อย่างแท้จริง แต่อย่างที่มันเป็นรหัสของฉันไม่ได้ออกแบบมาอย่างดีพอสำหรับฉันที่จะดำเนินการต่อและความรู้สึกของความสิ้นหวังทำให้ฉันไม่สามารถดำเนินการต่อได้

13
คุณเคยมีส่วนร่วมในการเขียนใหญ่หรือไม่? [ปิด]
Joel Spolskyพูดถึงหนึ่งในกระทู้ที่โด่งดังของเขา: ความผิดพลาดเชิงกลยุทธ์ครั้งเดียวที่เลวร้ายที่สุดที่ บริษัท ซอฟต์แวร์รายใดสามารถทำได้: เขียนโค้ดใหม่อีกครั้งตั้งแต่เริ่มต้น Chad Fowlerเขียนว่า: คุณเคยเห็นวิดีโอโพสต์ในเว็บบล็อกและโฆษณาและคุณตัดสินใจว่าคุณจะนำผลิตภัณฑ์ของคุณไปใช้ใหม่ใน Rails (หรือ Java หรือ. NET หรือ Erlang เป็นต้น) ระวัง. นี่เป็นเส้นทางที่ยาวกว่าหนักกว่าและมีแนวโน้มที่จะเกิดความล้มเหลวมากกว่าที่คุณคาดไว้ คุณเคยมีส่วนร่วมในการเขียนใหญ่หรือไม่? ฉันสนใจประสบการณ์ของคุณเกี่ยวกับหัวข้อที่น่าสลดใจนี้และโดยเฉพาะอย่างยิ่งในการเขียนครั้งใหญ่ที่เสร็จสมบูรณ์แล้ว (ถ้ามี)
55 rewrite 

5
มีกรณีศึกษาจริง ๆ เกี่ยวกับการเขียนอัตราความสำเร็จ / ความล้มเหลวของซอฟต์แวร์ใหม่หรือไม่?
ฉันเคยเห็นหลายโพสต์เกี่ยวกับการเขียนแอปพลิเคชั่นที่ไม่ดีประสบการณ์ของผู้คนที่มีต่อมันที่นี่ในโปรแกรมเมอร์และบทความที่Joel Spolsky เตรียมไว้ในหัวข้อ แต่ไม่มีหลักฐานหรือกรณีศึกษาที่ยาก นอกเหนือจากสองตัวอย่างที่โจเอลให้และโพสต์อื่น ๆ ที่นี่คุณจะทำอย่างไรกับโค้ดเบสที่ไม่ดีและคุณจะตัดสินใจอย่างไรว่าจะทำอย่างไรโดยอ้างอิงจากการศึกษาจริง ในกรณีนี้มีลูกค้าสองคนที่ฉันรู้ว่าทั้งคู่มีรหัสเดิม พวกเขาเดินกะเผลกไปพร้อมกับมันเพราะอย่างหนึ่งที่พวกเขาค้นพบการเขียนซ้ำเป็นหายนะมันมีราคาแพงและไม่ได้ทำงานเพื่อปรับปรุงรหัสมากนัก ลูกค้ารายนั้นมีตรรกะทางธุรกิจที่ซับซ้อนมากเนื่องจากพบผู้เขียนใหม่ได้อย่างรวดเร็ว ในทั้งสองกรณีนี้เป็นแอปพลิเคชั่นที่สำคัญต่อภารกิจซึ่งสร้างรายได้มากมายให้กับ บริษัท สิ่งที่พยายามเขียนใหม่รู้สึกว่าพวกเขาจะชนกำแพงอิฐหากซอฟต์แวร์ดั้งเดิมไม่ได้รับการอัพเกรดในบางจุดในอนาคต สำหรับฉันแล้วความเสี่ยงประเภทนี้รับประกันการวิจัยและการวิเคราะห์เพื่อให้มั่นใจว่าเส้นทางที่ประสบความสำเร็จ มีกรณีศึกษาจริงที่ตรวจสอบเรื่องนี้หรือไม่? ฉันไม่ต้องการทดลองเขียนบทใหม่โดยไม่ทราบวิธีปฏิบัติที่ดีที่สุดข้อผิดพลาดและความสำเร็จจากการศึกษาจริง ควันหลง: โอเคหลังจากค้นหาเพิ่มเติมฉันได้พบสามบทความที่น่าสนใจเกี่ยวกับกรณีศึกษา: เขียนหรือนำมาใช้ใหม่ พวกเขาทำการศึกษาเกี่ยวกับแอป Cobol ที่ถูกแปลงเป็น Java อื่น ๆ ที่อยู่ในซอฟท์แว Reuse: นักพัฒนาประสบการณ์และการรับรู้ การใช้ซ้ำหรือเขียนซ้ำการศึกษาค่าใช้จ่ายในการบำรุงรักษาอีกครั้งกับการเขียนซ้ำ ฉันเพิ่งพบบทความอื่นในเรื่อง: The Great Rewrite ดูเหมือนว่าผู้เขียนจะตีประเด็นสำคัญบางอย่าง นอกจากนี้ยังมีแนวคิดของการสร้างต้นแบบโดยใช้เทคโนโลยีสแต็คใหม่ที่เสนอและการวัดว่า devs หยิบมันได้รวดเร็วแค่ไหน ทั้งหมดนี้เป็นเหมือนโหมโรงของการเขียนซึ่งฉันคิดว่าเป็นความคิดที่ยอดเยี่ยม!

3
ฝึกการควบคุมเวอร์ชันสำหรับเขียนซ้ำ
เราพัฒนาผลิตภัณฑ์ (ต้นแบบ) P_OLD ในภาษา X และตอนนี้เรากำลังเขียนมันใหม่ตั้งแต่ต้นเป็น P_NEW ในภาษา Y เนื่องจาก P_NEW และ P_OLD เป็นผลิตภัณฑ์เดียวกัน: P_NEW ควรเป็นเพียง brach ของ P_OLD เก่าหรือควรเป็นที่เก็บของมันเอง? เป็นวิธีปกติในการจัดการการเปลี่ยนแปลงครั้งใหญ่ในมุมมองการควบคุมเวอร์ชันอะไร

2
เรามีแอปพลิเคชั่น Ruby on Rails ขนาดใหญ่ (ผู้ใช้ 25 ล้านคนต่อเดือน) ผู้บริหารของเราตัดสินใจเขียนใหม่ใน Node.js ฉันบ้าไหม
กรุณาบอกฉันว่า: Node.js จะทำให้เว็บไซต์ของเราเร็วขึ้น! Node.js จะใช้ทรัพยากรเซิร์ฟเวอร์น้อยลงเราสามารถประหยัดเงินได้! Node.js จะทำให้เรามีประสิทธิผลมากขึ้น! Node.js หมายความว่าเราสามารถแบ่งปันรหัส JavaScript ฝั่งไคลเอ็นต์และเซิร์ฟเวอร์ เพื่อชี้แจงเรากำลังเขียนเซิร์ฟเวอร์ส่วนหน้าซึ่งจะพูดคุยกับแอพพลิเคชั่น Ruby on Rails ที่เรามีอยู่ในฐานะ API ในขณะเดียวกันเราจะปรับปรุงแอพพลิเคชัน Ruby on Rails ของเราให้เป็นบริการ รายละเอียดเพิ่มเติมเกี่ยวกับสถาปัตยกรรมที่มีอยู่: Memcachedสำหรับการแคช partials HTML redisสำหรับเซสชั่นและบางแคชข้อมูลที่มีโครงสร้าง MySQLหลักเดียวหลายทาส มีโต๊ะขนาดใหญ่ที่ยอมรับการเขียนได้มากมาย (ลองนึกภาพโพล) มิฉะนั้นส่วนใหญ่อ่าน MongoDBสำหรับข้อมูลเมตาบางส่วน Ruby on Rails 3.0 nginxและยูนิคอร์น

10
แนะนำให้มีการเปลี่ยนแปลงครั้งใหญ่ / เขียนใหม่เป็นนักศึกษาฝึกงาน [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว บริบท: มันเป็นโครงการภายใน (ที่ฉันไม่คิดว่ามีผู้ใช้งานมากมาย) มันเก่า เรากำลังอัพเดท ประเด็น: มันละเมิดเฟรมเวิร์ก mvc (ไม่ใช้รุ่น, ตรรกะทางธุรกิจในมุมมอง, ฯลฯ ) สิ่งที่เรากำลังขอให้ทำมีขนาดเล็ก แต่เนื่องจากการติดต่อกันต่ำเรามีสองตัวเลือก: ทำสิ่งต่อไปให้เรียบร้อย ย้ายชิ้นโค้ดขนาดใหญ่ไปรอบ ๆ หรือเขียนสิ่งใหม่ การแก้ปัญหา (ฉันเห็น): ทำงานกับมันต่อไปอย่าเพิกเฉยแนวปฏิบัติที่ดีที่สุดเพื่อไม่ให้ถูกทำเร็ว ๆ นี้และไม่แนะนำข้อบกพร่องใหม่ด้วยการเปลี่ยน / เขียนใหม่ refactor / เขียน ฉันเดาว่าคำถามของฉันเป็นจริง: ถ้าฉันต้องการเปลี่ยนแปลงโครงการขนาดใหญ่ฉันจะเสนอได้อย่างไรโดยไม่ดูถูกใคร หรือมันจะดีกว่าถ้าฉันจะไปกับการไหลแม้ว่าบางครั้งจะหมายถึง (อุปมา) ท่อเทป?

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

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

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

4
การปรับโครงสร้างใหม่ - เหมาะสมหรือไม่ที่จะเขียนรหัสใหม่อีกครั้งตราบใดที่การทดสอบทั้งหมดผ่าน?
ฉันเพิ่งดู"ทุกสิ่งเล็ก ๆ น้อย ๆ "จาก RailsConf 2014 ในระหว่างการพูดคุยนี้ Sandi Metz refactors ฟังก์ชั่นที่รวมถึงคำสั่ง if ซ้อนขนาดใหญ่: def tick if @name != 'Aged Brie' && @name != 'Backstage passes to a TAFKAL80ETC concert' if @quality > 0 if @name != 'Sulfuras, Hand of Ragnaros' @quality -= 1 end end else ... end ... …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.