Abstract

The main task described in this article is automatic fixing defects in C/C++ code found by a static analyzer on big software projects. We describe how we solved this task for Svace static analyzer and discuss main principles of automatic fixing defects of various types. We pay special attention to fixing null pointer dereference since it is the most important and sophisticated defect type among those we’ve supported. Statistics on fixes proposed for defects of this type is also provided. We discuss common limitations and other specificity of our task and explain why we cannot use existing automatic fixing tools for solving it. At the end we outline further steps of development of our tool.

Highlights

  • Далее мы обсудим некоторые общие аспекты поставленной задачи, опишем опыт её решения для статического анализатора Svace и подробно рассмотрим схему автоматического исправления для некоторых исправимых типов дефектов

  • В нашем случае использование подобных алгоритмов означало бы реализацию новых детекторов дефектов или принципиальную переделку имеющихся, что выходит за рамки поставленной задачи

  • Needs Join – доля семантически верных исправлений, которые, тем не менее, нужно объединить с соседними (т. е., например, если несколько соседних выражений оборачиваются в одно и то же условие, то следует объединить их в блок, который и поместить под это условие);

Read more

Summary

Автоматическое исправление в Svace

2.1 Общая схема В архитектуре Svace ([5], [6]) изначально не была заложена возможность автоматического исправления. Статический анализатор Svace работает над внутренним представлением, которое весьма далеко от исходного кода и из которого можно извлечь довольно ограниченный объем информации, нужной для исправления этого кода. 2.2 Входные данные В системе Svace поддерживается автоматическое исправление для некоторых типов дефектов в коде на C/C++. На вход он получает список дефектов, про каждый из которых известно следующее: тип; позиция в коде (строка и иногда столбец); для описания некоторых дефектов требуется несколько позиций, соответствующие примеры будут приведены ниже; указание, где искать исходный файл, который содержит ошибочный код С которыми работает инструмент исправления дефектов – это частично препроцессированный пользовательский код: в нём есть все препроцессорные директивы, кроме директивы #include, вместо которой присутствует содержимое соответствующих заголовочных файлов; макросы также не раскрыты. Их использование позволяет генерировать исправления без доступа к пользовательскому коду, например, на удалённом сервере

Принцип работы
Выходные данные
Подходы к исправлению дефектов
Шаблоны исправления
Автоматическое исправление разыменований нулевого указателя
Заключение и направление дальнейших исследований
Full Text
Published version (Free)

Talk to us

Join us for a 30 min session where you can share your feedback and ask us any queries you have

Schedule a call