Существует старая идея, что программы, выглядящие необычно, обычно ошибочны. И даже если он верен, код, понятный лишь немногим, в конечном итоге приведет к проблемам с ремонтопригодностью. В результате на протяжении многих лет наблюдается значительный исследовательский интерес к поиску аномалий кода. Однако, за исключением нескольких интересных случаев обнаружения и исправления необычно написанных драйверов Linux [1], текущие результаты показывают, что подавляющее большинство отчетов не являются ошибками (также называемыми ложными срабатываниями [2]). И даже продвинутые методы глубокого обучения [3,4] оказались неэффективными для достижения прогресса, что затрудняло реализацию этих идей на практике.

Добро пожаловать в DeepCode Anomalies, первое крупномасштабное практическое обнаружение аномалий в коде. Наша цель - помочь вашему проекту избежать ошибок и предоставить более быструю продукцию с меньшим количеством дефектов.

Несколько компонентов делают подход DeepCode уникальным и полезным:

  • DeepCode не только находит шаблоны маловероятного кода, изучая миллиарды строк кода, но также требует, чтобы шаблон был исправлен где-то ранее. Это позволяет увидеть, как аналогичная проблема была решена другими, и сделать более уверенным, что исправление необходимо.
  • DeepCode объясняет, почему что-то является аномалией и какой шаблон кода ожидает увидеть DeepCode. Кроме того, он дает сообщения о фиксации предыдущих исправлений.
  • DeepCode использует чрезвычайно быстрый, но точный межпроцедурный статический анализ, основанный на методах машинного обучения. DeepCode найдет и сообщит о плохих шаблонах даже в нескольких методах и нескольких классах.
  • DeepCode позволяет разработчикам видеть аномалии во время запросов на слияние git и исправлять свой код в начале цикла проверки, удаляя ошибки и сокращая технический долг.

В качестве примера ниже мы показываем аномалию, которую мы автоматически узнали из нескольких проектов с открытым исходным кодом. В версии кода с ошибками программа считывает сетевой Mac-адрес с первого сетевого адаптера и использует этот адрес для генерации уникальных идентификаторов или аутентификации Mac-адреса. Однако иногда первым адаптером является интерфейс обратной связи или другой интерфейс без Mac-адреса, что по существу делает программу некорректной только на некоторых конфигурациях машины. Это делает тестирование таких ошибок невероятно сложным. Тем не менее, DeepCode учится на коллективном знании многих проектов с открытым исходным кодом, что проблема существует, и сразу же указывает на проблему.

Мы будем рады помочь вам в написании более правильного кода. Чтобы увидеть только обнаруженные аномалии, вы всегда можете нажать синюю кнопку «Аномалия» и отфильтровать предложения по этой категории.

[1] Доусон Р. Энглер, Дэвид Ю Чен, Энди Чоу. Ошибки как отклоняющееся поведение: общий подход к выявлению ошибок в системном коде. Симпозиум ACM по принципам операционных систем, 2001 г., стр. 57–72

[2] Анджей Васильковски, Андреас Целлер, Кристиан Линдиг. Выявление аномалий использования объектов, симпозиум ACM SIGSOFT «Основы программной инженерии», 2007 г., стр. 35–44

[3] Виджаярагаван Мурали, Сварат Чаудхури, Крис Джермейн. Обучение байесовской спецификации для поиска ошибок использования API, Основы программной инженерии, 2017 г.

[4] Милтиадис Алламанис, Марк Брокшмидт, Махмуд Хадеми. Учимся представлять программу с помощью графиков, Международная конференция по обучающим представлениям, 2018 г.