Группы дефекта Bug Finder

Для удобства дефектные средства проверки в Bug Finder классифицируются в различные группы.

Эта тема дает обзор различных групп.

Исключения C++

Эти дефекты связаны с обработкой исключения C++. Дефекты включают:

  • Испускание необработанного исключения от noexcept функция

  • Непредвиденная исключительная ситуация, возникающая во время построения объекта аргумента throw оператор

  • catch операторы, отлавливающие исключения значением вместо ссылкой

  • catch операторы, скрывающие последующий catch операторы.

Для получения дополнительной информации об определенных дефектах, смотрите Дефекты Исключения C++.

Параметр командной строки: cpp_exceptions

Параллелизм

Эти дефекты связаны с многозадачным кодом.

Дефекты гонки данных

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

Для определенных дефектов смотрите Дефекты Параллелизма.

Параметр командной строки: concurrency

Блокировка дефектов

Дефекты блокировки происходят, когда критические разделы не настраиваются соответственно. Например:

  • Критические разделы вовлечены в мертвую блокировку.

  • Функция блокировки не имеет соответствия, разблокировали функцию.

  • Функция блокировки вызвана дважды без промежуточного вызова разблокировать функции.

Критические разделы защищают совместно используемые переменные от параллельного доступа. Polyspace® ожидает, что критические разделы будут следовать за определенным форматом. Критический раздел должен находиться между вызовом функции блокировки и вызовом разблокировать функции.

Для определенных дефектов смотрите Дефекты Параллелизма.

Параметр командной строки: concurrency

Криптография

Эти дефекты связаны с неправильным использованием стандартных программ криптографии от библиотеки OpenSSL. Например:

  • Использование криптографически слабых алгоритмов

  • Отсутствие существенных элементов, таких как шифр ключевой или вектор инициализации

  • Неправильный порядок криптографических операций

Для определенных дефектов смотрите Дефекты Криптографии.

Параметр командной строки: cryptography

Поток данных

Эти дефекты являются ошибками, относящимися, как информация перемещается в вашем коде. Дефекты включают:

  • Мертвый или недостижимый код

  • Неиспользованный код

  • Неинициализированная информация

Для определенных дефектов смотрите Дефекты Потока данных.

Параметр командной строки: data_flow

Динамическая память

Эти дефекты являются ошибками, относящимися к использованию памяти, когда память динамически выделяется. Дефекты включают:

  • Освобождение динамически выделенной памяти

  • Незащищенные выделения памяти

Для определенных дефектов смотрите Дефекты Динамической памяти.

Параметр командной строки: dynamic_memory

Хорошая практика

Эти дефекты позволяют вам наблюдать хорошие методы кодирования. Дефекты собой не могут вызвать катастрофический отказ, но они иногда подсвечивают более серьезные логические ошибки в вашем коде. Дефекты также делают ваш код уязвимым для нападений и трудно обеспечить.

Дефекты включают:

  • Трудно закодированные константы, такие как buffer size и контур цикла

  • Неиспользованные параметры функции

Для определенных дефектов смотрите Хорошие Дефекты Практики.

Параметр командной строки: good_practice

Числовой

Эти дефекты являются ошибками, относящимися к переменным в вашем коде; их значения, типы данных и использование. Дефекты включают:

  • Математические операции

  • Переполнение преобразования

  • Операционное переполнение

Для определенных дефектов смотрите Числовые Дефекты.

Параметр командной строки: numerical

Объектно-ориентированный

Эти дефекты связаны с объектно-ориентированным аспектом программирования на C++. Дефекты подсвечивают проблемы проекта класса или проблемы в иерархии наследования.

Дефекты включают:

  • Элемент данных, не инициализированный или неправильно инициализированный в конструкторе

  • Неправильное переопределение методов базового класса

  • Повреждение скрытия данных

Для определенных дефектов смотрите Объектно-ориентированные Дефекты.

Параметр командной строки: object_oriented

Производительность

Эти дефектные средства проверки обнаруживают определенные шаблоны кода, которые непосредственно вызывают или способствуют проблемам эффективности. Фиксация дефектов или непосредственно удаляет проблемы эффективности или удаляет влияющие факторы, которые могут вызвать проблемы эффективности позже.

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

  • Более эффективный шаблон кода может заменить текущее использование, не изменяя функциональности, но шаблон не требуется правилами языка.

    Например, средство проверки отмечает пустые деструкторы в классах, которые не имеют конструкторов перемещения или перемещают операторы присваивания. Пустой деструктор позволен языком C++, управляет, но предотвращает автоматическую генерацию операторов перемещения. Удаление деструктора позволяет сгенерированные компилятором деструкторы (и операторы перемещения) и делает код более эффективным, не изменяя функциональности.

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

    Например, средство проверки отмечает использование std::endl в операциях I/O. Оба std::endl и \n введите новую строку, но если сбрасывание не предназначается, последний более эффективен.

После того, как эти дефекты фиксируются, исходный код более эффективен, или намерение разработчика является более явным, и компилятор может более настойчиво оптимизировать код.

Дефекты включают:

  • Проблемы, которые непреднамеренно вызывают копию вместо операций пересылки

  • Неэффективное или ненужное создание временной переменной

  • Использование функции, которая имеет возможно более эффективную альтернативу

Для определенных дефектов смотрите Дефекты Эффективности.

Параметр командной строки: performance

Программирование

Эти дефекты являются ошибками, относящимися к программированию синтаксиса. Эти дефекты включают:

  • Присвоение по сравнению с операторами равенства

  • Несоответствия между переменными спецификаторами или объявлениями

  • Плохо отформатированные строки

Для определенных дефектов смотрите Дефекты Программирования.

Параметр командной строки: programming

Управление ресурсами

Эти дефекты связаны с обработкой файла. Дефекты включают:

  • Открытый поток файла

  • Операции на потоке файла после того, как это закрывается

Для определенных дефектов смотрите Дефекты управления ресурсами.

Параметр командной строки: resource_management

Статическая память

Эти дефекты являются ошибками, относящимися к использованию памяти, когда память статически выделяется. Дефекты включают:

  • Доступ к массивам вне их границ

  • Нулевые указатели

  • Кастинг указателей

Для определенных дефектов смотрите Дефекты Статического ЗУ.

Параметр командной строки: static_memory

Безопасность

Эти дефекты подсвечивают места в вашем коде, которые уязвимы для взламывания или других нападений безопасности. Многие из этих дефектов не вызывают ошибки периода выполнения, но вместо этого указывают на опасные области в вашем коде. Дефекты включают:

  • Уязвимые данные управления

  • Используя опасные или устаревшие функции

  • Генерация случайных чисел

  • Внешне управляемые пути и команды

Для получения дополнительной информации об определенных дефектах, смотрите Дефекты безопасности.

Параметр командной строки: security

Испорченные данные

Эти дефекты подсвечивают элементы в вашем коде, которые являются из необеспеченных источников. Атакующие могут использовать входные данные или пути, чтобы напасть на вашу программу и отказы причины. Эти дефекты подсвечивают элементы в вашем коде, которые уязвимы. Дефекты включают:

  • Использование испорченных переменных или указателей

  • Внешне управляемые пути

Для получения дополнительной информации об определенных дефектах, смотрите Испорченные Дефекты Данных. Можно изменить поведение испорченных дефектов данных при помощи дополнительной команды -consider-analysis-perimeter-as-trust-boundary. Смотрите -consider-analysis-perimeter-as-trust-boundary.

Параметр командной строки: tainted_data

Смотрите также