Текст / Облако Alibaba - Цинь Ци
Эта статья представляет собой серию статей. В основном она знакомит со многими интересными задачами (задачами), связанными с областью Code Intelligence. Она будет представлена с точки зрения введения, истории и текущей ситуации с этими задачами. Надеюсь, у вас будет глубокое понимание анализа кода. понимание (предыдущая статья:Рассказать о рекомендации смарт-кода).
Главный герой этой статьиОбнаружение дефекта кода, то есть определить, есть ли ошибка в фрагменте кода. Звучит немного загадочно, но на самом деле, на основе имеющегося опыта и исторических данных делать выводы, так что вы думаете, это немного похоже на "гадание"?Примечание. Обнаружение дефекта в этой статье относится только к проверке наличия ошибки и не включает в себя части обнаружения дефекта и устранения дефекта.
Обнаружение дефектов
Обнаружение воображаемого дефекта должно быть таким,
или вот так:
Однако это не так, обнаружение дефектов только предсказывает, есть ли ошибка в фрагменте кода, и не имеет значения, где и какая ошибка. Таким образом, обнаружение дефектов не особенно полезно при реальной разработке или тестировании. Представьте, если я скажу вам, что в фрагменте кода есть ошибка, но не скажу, что это за ошибка, разве это не сумасшествие? И в случае, когда я не могу гарантировать, что должны быть ошибки, хорошо иметь возможность найти проблему, но если ее нельзя найти, не будет ли сложнее ее отловить? Сумасшедший. Это становится "Как вы думаете, есть ошибка в конце?" Только одно предложение: я не хочу, чтобы ты думал, я хочу, чтобы я думал. . .
Вернемся к теме,Обнаружение дефектовЭто не для сценариев разработки.Единственное, что может быть полезно, это во время Code Review.Например, он говорит вам, что есть большая вероятность, что есть проблема с текущим файлом.В это время людям, которые делают CR, нужно обратить особое внимание. Хотя фактический эффект скромен, это не мешает ему быть интересной маленькой задачей в области анализа кода и существовала всегда.
История обнаружения дефектов
Можно сказать, что история обнаружения дефектов такая же, как и история определения дефектов, т.дефектКогда он определен, кто-то думает о том, как инструменты могут обнаружить эти дефекты или избежать некоторых дефектов. Например, скомпилированный язык может обнаружить некоторые статические ошибки в процессе компиляции, что приведет к неудачной компиляции, а инструменты анализа кода, или инструменты статического сканирования, также могут заранее обнаружить некоторые дефекты, которые относятся к части выявления и локализации дефектов, мы будем следить Давайте поговорим.
Идея дефектоскопии
Обычно используемые идеи обнаружения дефектов:Полезные функции извлекаются из исторического кода, а затем на основе этих функций обучается прогностическая модель для прогнозирования последующих кодов.Единицей обучения здесь может быть фрагмент кода и файл или коммит.По сравнению с файлом предсказание фрагмента кода и коммита относительно более эффективно, и найти дефект проще. Сложность обнаружения дефектов также возрастает из-за чрезмерной длины документа.
Общие особенности включают следующее:
- Характеристики, основанные на метаданных изменений, таких как разработчик, время фиксации, журнал изменений, количество измененных строк файла и т. д.
- Изменения, основанные на содержимом измененного кода, таких как характеристики сложности кода, частота слов измененного кода, журналы и имена файлов, или разница в количестве узлов одного типа на основе абстрактного синтаксического дерева (AST). ) файла кода до и после изменения.
- Изменения, основанные на процессе эволюции программного обеспечения, то есть количественные изменения, основанные на истории изменений кода проекта, такие как количество изменений связанных файлов, количество разработчиков, которые изменили файлы и т. д.
- В сочетании с системой управления программными проектами можно извлекать более широкие возможности, такие как информация о CR, информация о дефектах и т. д.
- Информационные функции дефектного кода, обычно исходный код или соответствующее абстрактное синтаксическое дерево.
Первые три пункта более смещены в сторону некоторых количественных характеристик показателей, имеют слабую корреляцию с дефектами, но их легче получить и подсчитать, а последние два больше связаны с дефектами, но их труднее получить.
Будущее обнаружения дефектов
Как упоминалось ранее, технология обнаружения дефектов сама по себе не может дать нам многого, и необходимо использовать больше в сочетании с дефектами, такими как определение местоположения дефекта и устранение дефекта. В последние годы из-за быстрого развития глубоких нейронных сетей появилось много статей и исследований, связанных с обнаружением и исправлением дефектов на основе глубоких моделей, и были запущены некоторые продукты, такие как DeepDebug от Microsoft, который утверждает, что может автоматически исправлять дефекты Python. Это не было опробовано, поэтому эффект неизвестен. Однако можно догадаться, что, как и в случае с рекомендациями по коду, многие из них все еще находятся на стадии PR, и до практического применения еще далеко. Однако мы всегда должны твердо верить в то, что технологии всегда развиваются, нельзя сказать, что когда-нибудь у нас появится робот, который автоматически исправляет ошибки.
Не говори так, измени ошибку. . .