Saya menemukan daftar bacaan yang cukup luas pada semua topik pembelajaran mesin yang berhubungan dengan pengkodean .
Seperti yang Anda lihat, orang telah mencoba menerapkan pembelajaran mesin ke pengkodean, tetapi selalu di bidang yang sangat sempit, bukan hanya mesin yang dapat menangani segala macam pengkodean atau debugging.
Sisa dari jawaban ini berfokus pada mesin "debugging" lingkup yang relatif luas dan mengapa ini belum benar-benar dicoba (sejauh penelitian saya menunjukkan topik).
Saya membuat ulang sebagian jawaban yang panjang. Untuk meringkas (penting untuk bagian selanjutnya): mengikuti metodologi pembelajaran mesin saat ini, apa pun yang dapat dipelajari manusia, mesin juga bisa. Kami hanya dibatasi oleh ranah fisik (kecepatan CPU, ukuran mesin, ...), bukan penerapan yang seharusnya terbatas dari algoritma pembelajaran itu sendiri.
penelitian apa yang telah dilakukan sejauh ini dalam menerapkan pembelajaran mesin untuk pengembangan kode? Bagaimana dengan debugging?
Masalahnya di sini bukanlah bahwa itu tidak mungkin, tetapi itu adalah topik yang sangat kompleks.
Manusia bahkan belum mendekati mendefinisikan standar pengkodean universal yang disetujui semua orang. Bahkan prinsip-prinsip yang paling banyak disepakati seperti SOLID masih menjadi sumber diskusi tentang seberapa dalam itu harus dilaksanakan. Untuk semua tujuan praktis, tidak mungkin untuk sepenuhnya mematuhi SOLID kecuali Anda tidak memiliki kendala keuangan (atau waktu) apa pun; yang tidak mungkin dilakukan di sektor swasta di mana sebagian besar pembangunan terjadi. SOLID adalah pedoman, bukan batas keras.
Dengan tidak adanya ukuran obyektif tentang benar dan salah, bagaimana kita bisa memberikan mesin umpan balik positif / negatif untuk membuatnya belajar?
Paling-paling, kita dapat meminta banyak orang untuk memberikan pendapat mereka sendiri kepada mesin ("ini adalah kode yang baik / buruk"), dan hasil mesin tersebut kemudian akan menjadi "opini rata-rata". Tapi itu belum tentu sama dengan solusi yang benar . Bisa saja, tetapi tidak dijamin.
Kedua, untuk debugging secara khusus, penting untuk mengakui bahwa pengembang spesifik cenderung memperkenalkan jenis bug / kesalahan tertentu. Sifat kesalahan dalam beberapa kasus dapat dipengaruhi oleh pengembang yang memperkenalkannya.
Misalnya, karena saya sering terlibat dalam memperbaiki bug kode orang lain di tempat kerja, saya memiliki semacam harapan tentang kesalahan macam apa yang cenderung dilakukan oleh setiap pengembang. Diberikan masalah tertentu, saya tahu bahwa dev A cenderung lupa memperbarui file konfigurasi, sedangkan dev B sering menulis kueri LINQ yang buruk. Berdasarkan pengembang, saya mungkin melihat ke arah file konfigurasi atau LINQ terlebih dahulu.
Demikian pula, saya telah bekerja di beberapa perusahaan sebagai konsultan sekarang, dan saya dapat dengan jelas melihat bahwa jenis bug dapat bias terhadap jenis perusahaan tertentu. Ini bukan aturan yang keras dan cepat yang bisa saya tunjukkan, tapi ada tren yang pasti.
Bisakah mesin mempelajari ini? Dapatkah ia menyadari bahwa dev A lebih cenderung mengacaukan konfigurasi dan dev B lebih cenderung mengacaukan kueri LINQ? Tentu saja bisa. Seperti yang saya katakan sebelumnya, apa pun yang bisa dipelajari manusia, mesin juga bisa.
Namun, bagaimana Anda tahu bahwa Anda telah mengajarkan mesin berbagai kemungkinan? Bagaimana Anda bisa menyediakannya dengan set data kecil (yaitu bukan global) dan mengetahui fakta bahwa ia mewakili seluruh spektrum bug? Atau, apakah Anda akan membuat debugger khusus untuk membantu pengembang / perusahaan tertentu, daripada membuat debugger yang dapat digunakan secara universal?
Meminta debugger yang dipelajari dengan mesin sama seperti meminta Sherlock Holmes yang dipelajari dengan mesin. Bukan tidak mungkin untuk membuatnya, tetapi seringkali alasan utama untuk menjadi debugger / Sherlock bergantung pada penilaian subyektif yang bervariasi dari satu subjek ke subjek lainnya dan menyentuh pada variasi pengetahuan / kemungkinan kelemahan yang sangat luas.
Kurangnya hasil yang benar / salah yang dapat dibuktikan dengan cepat membuat sulit untuk dengan mudah mengajarkan mesin dan memverifikasi bahwa itu membuat kemajuan yang baik.