Я нашел довольно обширный список для чтения по всем темам машинного обучения, связанным с кодированием .
Как вы можете видеть, люди пытались применить машинное обучение к кодированию, но всегда в очень узких областях, а не просто на машине, которая может обрабатывать все виды кодирования или отладки.
Остальная часть этого ответа посвящена вашему относительно широкому объему «отладочной» машины и тому, почему это еще не было предпринято (насколько показывает мое исследование по этой теме).
Я отредактировал длинную часть ответа. Подводя итог (это важно для следующей части): следуя текущей методологии машинного обучения, все, что может выучить человек, может и машина. Мы ограничены только физической областью (скорость процессора, размер машины, ...), а не предполагаемой ограниченной применимостью самого алгоритма обучения.
Какие исследования были сделаны до сих пор в применении машинного обучения для разработки кода? Как насчет отладки?
Проблема здесь не в том, что это невозможно, а в том, что это невероятно сложная тема.
Люди даже не приблизились к определению универсального стандарта кодирования, с которым все согласны. Даже самые широко согласованные принципы, такие как SOLID, все еще являются источником для обсуждения того, насколько глубоко это должно быть реализовано. Для всех практических целей невозможно полностью придерживаться SOLID, если у вас нет финансовых (или временных) ограничений; что просто невозможно в частном секторе, где происходит большая часть развития. SOLID - это руководство, а не жесткий предел.
В отсутствие объективного измерения правильного и неправильного, как мы сможем дать машине положительный / отрицательный отзыв, чтобы она научилась?
В лучшем случае у нас может быть много людей, которые высказывают свое мнение о машине («это хороший / плохой код»), и тогда результатом машины будет «среднее мнение». Но это не обязательно то же самое, что правильное решение . Это может быть, но это не гарантировано.
Во-вторых, для отладки, в частности, важно признать, что определенные разработчики склонны вносить определенный тип ошибок / ошибок. На природу ошибки в некоторых случаях может повлиять разработчик, который ее допустил.
Например, поскольку я часто участвую в исправлении чужого кода на работе, у меня есть своего рода ожидание того, какую ошибку допускает каждый разработчик. Учитывая определенную проблему, я знаю, что dev A, скорее всего, забудет обновить файл конфигурации, тогда как dev B часто пишет некорректные запросы LINQ. Основываясь на разработчике, я могу сначала посмотреть на файл конфигурации или LINQ.
Точно так же я работал в нескольких компаниях в качестве консультанта, и я ясно вижу, что типы ошибок могут быть смещены в отношении определенных типов компаний. Это не жесткое и быстрое правило, на которое я могу окончательно указать, но есть определенная тенденция.
Может ли машина научиться этому? Может ли он понять, что dev A, скорее всего, испортит конфигурацию, а dev B, скорее всего, испортит запрос LINQ? Конечно может. Как я уже говорил, все, что человек может выучить, может и машина.
Однако откуда вы знаете, что вы научили машину всем возможностям? Как вы можете предоставить ему небольшой (т.е. не глобальный) набор данных и точно знать, что он представляет полный спектр ошибок? Или вы вместо этого создадите специальные отладчики, чтобы помочь конкретным разработчикам / компаниям, а не создадите универсальный отладчик?
Запрашивать машинно-обученный отладчик - все равно, что просить машинно-обученного Шерлока Холмса. Это невозможно доказать невозможно, но зачастую основной аргумент в пользу того, чтобы быть отладчиком / Шерлоком, зависит от субъективных оценок, которые варьируются от предмета к предмету и затрагивают невероятно широкий спектр знаний / возможных недостатков.
Отсутствие быстро доказываемых правильных / неправильных результатов затрудняет простое обучение машины и проверку того, что она успешно работает.