ผมพบว่าค่อนข้างรายการอ่านอย่างกว้างขวางในทุกการเข้ารหัสที่เกี่ยวข้องกับหัวข้อการเรียนรู้เครื่อง
อย่างที่คุณเห็นผู้คนพยายามใช้การเรียนรู้ของเครื่องกับการเข้ารหัส แต่มักจะอยู่ในเขตแคบ ๆ ไม่ใช่เฉพาะเครื่องที่สามารถจัดการการเข้ารหัสหรือการดีบักได้ทุกรูปแบบ
ส่วนที่เหลือของคำตอบนี้จะเน้นไปที่เครื่อง "ดีบั๊ก" ในขอบเขตที่ค่อนข้างกว้างของคุณและสาเหตุที่ยังไม่ได้รับการทดลองจริง ๆ (เท่าที่งานวิจัยของฉันแสดงให้เห็นในหัวข้อ)
ฉันแก้ไขส่วนที่มีความยาวของคำตอบอีกครั้ง เพื่อสรุป (เป็นสิ่งสำคัญสำหรับส่วนถัดไป): ดำเนินการตามวิธีการเรียนรู้ของเครื่องจักรในปัจจุบันทุกสิ่งที่มนุษย์สามารถเรียนรู้ได้เครื่องจักรก็สามารถทำได้เช่นกัน เราถูก จำกัด ด้วยขอบเขตทางกายภาพเท่านั้น (ความเร็ว CPU, ขนาดของเครื่อง, ... ) ไม่ใช่การบังคับใช้ขั้นตอนวิธีการเรียนรู้ที่ จำกัด อย่างแน่นอน
มีการวิจัยอะไรบ้างที่นำการเรียนรู้ของเครื่องไปใช้ในการพัฒนาโค้ด วิธีการเกี่ยวกับการแก้จุดบกพร่อง?
ปัญหาที่นี่ไม่ได้เป็นไปไม่ได้ แต่เป็นเรื่องที่ซับซ้อนอย่างเหลือเชื่อ
มนุษย์ไม่ได้เข้ามาใกล้เพื่อกำหนดมาตรฐานการเข้ารหัสสากลที่ทุกคนเห็นด้วย แม้แต่หลักการที่ตกลงกันอย่างกว้างขวางที่สุดอย่างเช่น SOLID ก็ยังเป็นแหล่งข้อมูลสำหรับการอภิปรายว่าจะต้องนำไปปฏิบัติอย่างไร สำหรับจุดประสงค์ในทางปฏิบัติทุกประการคุณไม่สามารถปฏิบัติตาม SOLID ได้อย่างสมบูรณ์เว้นแต่คุณจะไม่มีข้อ จำกัด ด้านการเงิน (หรือเวลา) ใด ๆ ซึ่งเป็นไปไม่ได้ในภาคเอกชนที่การพัฒนาส่วนใหญ่เกิดขึ้น SOLID เป็นแนวทางไม่ใช่ข้อ จำกัด อย่างหนัก
หากไม่มีการวัดวัตถุประสงค์ที่ถูกและผิดเราจะสามารถให้เครื่องตอบรับเชิงบวก / ลบเพื่อให้เรียนรู้ได้อย่างไร
ที่ดีที่สุดเราสามารถมีคนจำนวนมากให้ความเห็นของตัวเองกับเครื่อง ("นี่คือรหัสที่ดี / ไม่ดี") และผลลัพธ์ของเครื่องจะเป็น "ความเห็นเฉลี่ย" แต่นั่นไม่จำเป็นต้องเหมือนกับโซลูชันที่ถูกต้องวิธีการแก้ปัญหาที่ถูกต้องอาจเป็นไปได้ แต่ไม่รับประกันว่าจะเป็น
ประการที่สองสำหรับการดีบักโดยเฉพาะเป็นสิ่งสำคัญที่ต้องยอมรับว่านักพัฒนาเฉพาะมีแนวโน้มที่จะแนะนำข้อผิดพลาดประเภท / ข้อผิดพลาดเฉพาะ ธรรมชาติของความผิดพลาดในบางกรณีอาจได้รับอิทธิพลจากผู้พัฒนาที่นำมาใช้
ตัวอย่างเช่นเมื่อฉันมีส่วนร่วมในการแก้ไขข้อผิดพลาดของรหัสของผู้อื่นในที่ทำงานฉันมีความคาดหวังว่าผู้พัฒนาแต่ละคนจะทำผิดพลาดประเภทใด ด้วยปัญหาบางอย่างฉันรู้ว่า dev A น่าจะลืมอัปเดตไฟล์ปรับแต่งในขณะที่ dev B มักจะเขียนคำสั่ง LINQ ที่ไม่ดี จากนักพัฒนาฉันอาจมองไปที่ไฟล์ปรับแต่งหรือ LINQ ก่อน
ในทำนองเดียวกันฉันได้ทำงานกับ บริษัท หลายแห่งในฐานะที่ปรึกษาในตอนนี้และฉันสามารถเห็นได้อย่างชัดเจนว่าข้อบกพร่องประเภทต่างๆสามารถมีอคติต่อ บริษัท บางประเภทได้ ไม่ใช่กฎที่ยากและรวดเร็วที่ฉันสามารถชี้ให้เห็นอย่างชัดเจน แต่ก็มีแนวโน้มที่ชัดเจน
เครื่องเรียนรู้สิ่งนี้ได้ไหม? มันสามารถรู้ได้หรือไม่ว่า dev A มีแนวโน้มที่จะทำให้การกำหนดค่าล้มเหลวและ dev B นั้นมีแนวโน้มที่จะทำให้แบบสอบถาม LINQ สับสนมากขึ้นหรือไม่ แน่นอนมันสามารถ อย่างที่ฉันพูดไปก่อนหน้านี้ทุกอย่างที่มนุษย์เรียนรู้ได้เครื่องจักรก็เช่นกัน
อย่างไรก็ตามคุณจะรู้ได้อย่างไรว่าคุณได้สอนเครื่องจักรให้มีความเป็นไปได้อย่างเต็มรูปแบบ? คุณจะให้ชุดข้อมูลขนาดเล็ก (เช่นไม่ใช่ระดับโลก) และรู้ได้อย่างไรว่าเป็นชุดของข้อบกพร่องแบบเต็มรูปแบบ หรือคุณจะสร้าง debuggers ที่เฉพาะเจาะจงแทนเพื่อช่วยนักพัฒนา / บริษัท ที่เฉพาะเจาะจงแทนที่จะสร้างดีบักเกอร์ที่ใช้งานได้ในระดับสากลหรือไม่
การขอดีบักเกอร์ที่เรียนรู้ด้วยเครื่องเปรียบเสมือนการขอ Sherlock Holmes ที่เรียนรู้ด้วยเครื่อง มันเป็นไปไม่ได้ที่จะสร้างมันขึ้นมาไม่ได้ แต่บ่อยครั้งที่เหตุผลหลักในการเป็นผู้ดีบั๊ก / เชอร์ล็อคในการประเมินอัตนัยที่แตกต่างกันไปจากเรื่องหนึ่งไปยังอีกกลุ่มหนึ่งและสัมผัสกับความรู้ / ข้อบกพร่องต่างๆ
การขาดผลลัพธ์ที่ถูกต้อง / ไม่ถูกต้องที่พิสูจน์ได้อย่างรวดเร็วทำให้ยากที่จะสอนเครื่องจักรได้ง่ายและตรวจสอบว่ามีความก้าวหน้าที่ดี