Я знайшов досить широкий список читання на всі теми машинного навчання, пов'язані з кодуванням .
Як бачите, люди намагаються застосувати машинне навчання до кодування, але завжди в дуже вузьких областях, а не лише в машині, яка може обробляти всі способи кодування або налагодження.
Решта цієї відповіді зосереджена на вашій відносно широкій області «налагодження» машини, і чому цього ще не було зроблено на спробах (наскільки показує моє дослідження з цієї теми).
Я відредагував довгу частину відповіді. Підводячи підсумок (це важливо для наступної частини): виконуючи діючу методологію машинного навчання, все, чому людина може навчитися, також може і машина. Нас обмежує лише фізична область (швидкість процесора, розмір машини, ...), а не передбачувана обмеженість застосування самого алгоритму навчання.
які дослідження були зроблені поки що щодо застосування машинного навчання до розробки коду? Як щодо налагодження?
Проблема тут не в тому, що це неможливо, а в тому, що це надзвичайно складна тема.
Люди навіть не наблизилися до визначення універсального стандарту кодування, з яким всі згодні. Навіть найбільш узгоджені принципи, такі як SOLID, все ще є джерелом для дискусій щодо того, наскільки глибоко він повинен бути реалізований. Для всіх практичних цілей неможливо повністю дотримуватися SOLID, якщо у вас немає фінансових (або часових) обмежень; що просто неможливо в приватному секторі, де відбувається найбільший розвиток. SOLID - це орієнтир, а не жорсткий межа.
За відсутності об'єктивної міри правильності та неправильності, як ми зможемо дати машині позитивний / негативний зворотний зв’язок, щоб він навчився?
У кращому випадку ми можемо багато людей висловити власну думку машині ("це хороший / поганий код"), а результат машини буде "середньою думкою". Але це не обов’язково те саме, що правильне рішення . Це може бути, але це не гарантовано.
По-друге, для налагодження, зокрема, важливо визнати, що конкретні розробники схильні до введення конкретного типу помилки / помилки. На характер помилки може в деяких випадках впливати розробник, який її ввів.
Наприклад, оскільки я часто беруть участь у помилках коду інших людей на роботі, я маю на увазі якесь помилку, який схильний робити кожен розробник. Враховуючи певну проблему, я знаю, що dev A, ймовірно, забуде оновлення конфігураційного файлу, тоді як dev B часто записує погані запити LINQ. На основі розробника я спершу можу поглянути на конфігураційний файл чи LINQ.
Так само я зараз працював у кількох компаніях як консультант, і я чітко бачу, що типи помилок можуть бути упередженими щодо певних типів компаній. Це не важке і швидке правило, яке я можу остаточно зазначити, але є певна тенденція.
Чи може машина це навчитися? Чи можна зрозуміти, що розширення A швидше зіпсує конфігурацію, а dev B швидше зіпсує запит LINQ? Звичайно, це може. Як я вже говорив раніше, все, чому людина може навчитися, може і машина.
Однак як ви знаєте, що ви навчили машині повного спектру можливостей? Як ви можете коли-небудь надати йому невеликий (тобто не глобальний) набір даних і знати, що він представляє весь спектр помилок? Або ви б замість цього створили конкретні налагоджувачі, щоб допомогти певним розробникам / компаніям, а не створювати налагоджувач, який є універсальним для використання?
Просити налагодженого на машині налагоджувача - це як просити машинознавчого Шерлока Холмса. Це неможливо неможливо створити, але часто основна аргументація бути налагоджувачем / Шерлок залежить від суб'єктивних оцінок, які залежать від предмета до теми та стосуються неймовірно широкого спектру знань / можливих недоліків.
Відсутність швидко доказових правильних / неправильних результатів ускладнює легко навчати машині та перевіряти, чи добре вона прогресує.