การใช้รหัสซ้ำเป็นความคิดที่ดี ไม่ได้เป็นหนึ่งที่ดี
ฉันมีมุมมองจากวิศวกรรมซอฟต์แวร์ประมาณ 30 ปีพยายาม "ใช้ซ้ำ"
ฉันเริ่มตรวจสอบ "การใช้รหัสซ้ำ" เป็นหัวข้อการวิจัยย้อนกลับไปในยุค 80 หลังจากค้นพบว่าฉันได้นำการออกแบบระบบปฏิบัติการเดียวที่ฉันสร้างขึ้นในช่วงต้นยุค 70 กลับมาใช้ใหม่สำหรับระบบปฏิบัติการอื่นที่ฉันสร้างขึ้นในปลายยุค 70
ส่วนที่ดีของการใช้รหัสซ้ำคือความสามารถในการใช้รหัสที่มีอยู่ก่อนหน้าแบบซื่อสัตย์ต่อพระเจ้าในบางครั้ง แต่โลกเต็มไปด้วยรหัส จะค้นหาสิ่งที่คุณต้องการได้อย่างไร นี่คือสิ่งที่ฉันเรียกว่าReuse Curse :
ฉันเป็นซานตาคลอส (โอเพ่นซอร์สโอเค) และฉันมีส่วนประกอบของซอฟต์แวร์ 1 พันล้านรายการ คุณสามารถมีหนึ่งในนั้น
ขอให้โชคดีในการเลือก
วิธีแก้ปัญหาการใช้ซ้ำ:
- reuser ต้องระบุสิ่งที่เขาต้องการอย่างใด (functionaly, ประสิทธิภาพ, ภาษาเป้าหมาย, สมมติฐานสภาพแวดล้อม, ... )
- จะต้องมีห้องสมุดของรหัส "นำมาใช้ใหม่" ที่ได้รับการจัดทำดัชนีในรูปแบบต่างๆโดยเกณฑ์ที่เป็นไปได้เหล่านี้
- กลไกบางอย่างต้องมีอยู่เพื่อเลือกองค์ประกอบที่มีตัวเลือก (ที่องค์ประกอบหนึ่งพันล้านคุณไม่สามารถดูได้ทั้งหมด)
- ต้องมีวิธีในการระบุลักษณะของตัวละครที่ผู้สมัครที่ได้รับเลือก
- กระบวนการปกติบางอย่างควรมีอยู่เพื่ออนุญาตให้ reuser แก้ไขโค้ดที่เลือกใช้ซ้ำได้ (นี่คือผลงานที่ยิ่งใหญ่ที่สุดของ OOP: คุณสามารถแก้ไขส่วนประกอบ / วัตถุที่มีอยู่โดยการแทนที่ช่องของ OOP ไม่ได้ให้ความช่วยเหลืออื่น ๆ )
- ทั้งหมดนี้ต้องชัดเจนว่าถูกกว่าเพียงแค่บันทึกใหม่
ส่วนใหญ่สิ่งที่ได้รับการค้นพบในช่วงหลายปีที่ผ่านมาก็คือเพื่อให้โค้ดสามารถนำกลับมาใช้ใหม่ได้มันต้องได้รับการออกแบบมาเพื่อจุดประสงค์นั้นหรือมีข้อสันนิษฐานมากมาย ไลบรารีที่นำโค้ดกลับมาใช้ใหม่ที่ประสบความสำเร็จมากที่สุดนั้นมีขนาดค่อนข้างเล็ก เนื้อหาและไลบรารีเฟรมเวิร์กเป็นรหัส "นำกลับมาใช้" และพวกเขาจะประสบความสำเร็จอย่างมาก; Java และ C # ไม่ได้ประสบความสำเร็จเพราะพวกเขาเป็นภาษาคอมพิวเตอร์ที่ดี แต่เป็นเพราะพวกเขามีห้องสมุดขนาดใหญ่ที่ได้รับการออกแบบใช้งานและมีเอกสารเป็นจำนวนมาก แต่ผู้คนไม่ได้ดูซอร์สโค้ดในไลบรารี พวกเขาเรียก API ที่มีเอกสารอย่างดี (ออกแบบมาให้ใช้งานได้โดยทั่วไป)
การใช้ซ้ำรหัสใดที่ยังไม่ได้ทำ (ไม่รวม OOP) คือคำสั่งให้ปรับปรุงขนาดในความสามารถของเราในการใช้ระบบรหัส
ผมคิดว่าข้อบกพร่องที่สำคัญคือชนิดของรหัสนำมาใช้ใหม่ใด ๆ จะถูก จำกัด พื้นฐานเนื่องจากรหัสมีสมมติฐานมากเกินไปสร้างขึ้นใน หากคุณทำโค้ดจิ๋วคุณจะลดสมมติฐานลง แต่ค่าใช้จ่ายในการสร้างตั้งแต่เริ่มต้นนั้นไม่มากและการใช้ซ้ำจะไม่ได้ผล หากคุณทำให้โค้ดมีขนาดใหญ่มันจะไร้ประโยชน์ในบริบทใหม่ เช่นกัลลิเวอร์พวกมันถูกผูกติดกับชายหาดด้วยเชือกเล็ก ๆ นับล้านเส้นและคุณก็ไม่สามารถตัดมันได้หมด
สิ่งที่เราควรจะทำงานในคือนำมาใช้ใหม่ของความรู้ในการสร้างรหัส หากเราสามารถทำสิ่งนี้ได้เราสามารถนำความรู้นั้นไปใช้ในการสร้างรหัสที่เราต้องการจัดการกับชุดของสมมติฐานปัจจุบัน
ในการทำเช่นนี้เรายังต้องการความสามารถในการกำหนดคุณสมบัติแบบเดียวกันเพื่อกำหนดลักษณะองค์ประกอบของซอฟต์แวร์ (คุณต้องพูดในสิ่งที่คุณต้องการ!) แต่จากนั้นคุณใช้ความรู้ "การก่อสร้าง" นี้กับข้อกำหนดเพื่อสร้างรหัสที่คุณต้องการ
ในฐานะชุมชนเรายังไม่ค่อยดีเท่านี้ แต่คนทำตลอดเวลา ทำไมเราไม่ทำให้เป็นอัตโนมัติ? มีงานวิจัยมากมายและสิ่งนี้แสดงให้เห็นว่าสามารถทำได้ในหลาย ๆ สถานการณ์
เครื่องจักรที่สำคัญชิ้นหนึ่งที่จำเป็นสำหรับสิ่งนี้คือเครื่องมือทางกลสำหรับการยอมรับ "คำอธิบายส่วนประกอบ" (นี่เป็นเพียงเอกสารทางการและสามารถแยกวิเคราะห์เช่นภาษาโปรแกรม) และใช้การแปลงโปรแกรมกับพวกเขา
คอมไพเลอร์ทำสิ่งนี้แล้ว: -} และพวกเขาเก่งในระดับของปัญหาที่พวกเขาแก้ไข
โมเดล UML ที่มีการสร้างรหัสเป็นความพยายามหนึ่งในการทำเช่นนี้ ไม่ใช่ความพยายามที่ดีมาก ค่อนข้างที่สิ่งหนึ่งที่พูดในรุ่น UML ส่วนใหญ่คือ "ฉันมีข้อมูลที่มีลักษณะเช่นนี้" ค่อนข้างยากที่จะสร้างโปรแกรมจริงหากฟังก์ชันการทำงานถูกปล่อยออกมา
ฉันพยายามที่จะสร้างระบบการเปลี่ยนแปลงโปรแกรมการปฏิบัติเครื่องมือที่เรียกว่า DMS เคยถูกเบี่ยงเบนไปจากการใช้การแปลงโปรแกรมไม่มากกับข้อกำหนดนามธรรมเพื่อสร้างรหัส แต่แทนที่จะเป็นรหัสดั้งเดิมเพื่อทำความสะอาด (สิ่งเหล่านี้เป็นปัญหาเดียวกันในนามธรรม!) (ในการสร้างเครื่องมือดังกล่าวใช้เวลานานฉันได้ทำสิ่งนี้มา 15 ปีและในเวลาที่คุณต้องกิน)
แต่ DMS มีคุณสมบัติหลักสองอย่างที่ฉันอธิบายไว้ข้างต้น: ความสามารถในการประมวลผลข้อมูลจำเพาะที่เป็นทางการโดยพลการและความสามารถในการจับ "ความรู้เกี่ยวกับการสร้างรหัส" เป็นการแปลงและนำไปใช้ตามต้องการ และที่น่าทึ่งคือเราสร้างในบางกรณีพิเศษบางรหัสที่น่าสนใจจากสเปค; DMS ส่วนใหญ่สร้างขึ้นโดยใช้ตัวมันเองเพื่อสร้างการใช้งาน ที่ได้รับสำหรับเราอย่างน้อยคำสัญญาของ (ความรู้) นำมาใช้ใหม่: การเพิ่มผลผลิตที่สำคัญอย่างยิ่ง ฉันมีทีมงานประมาณ 7 คนด้านเทคนิค เราได้เขียนอาจเป็น 1-2 MSLOC ของ "ข้อมูลจำเพาะ" สำหรับ DMS แต่มี 10MSLOC ของรหัสที่สร้างขึ้น
สรุป: การนำความรู้กลับมาใช้ใหม่เป็นเรื่องชนะไม่ใช่การใช้รหัสซ้ำ