Открыть сервис

FACTS

FACTS — это статический анализатор кода с открытым исходным кодом, предназначенный для поиска ошибок, уязвимостей и несоответствий стандартам программирования в исходных текстах программ на языке Си. Инструмент разработан в 2020-х годах и распространяется под лицензией MIT. В отличие от многих коммерческих анализаторов, FACTS ориентирован на глубокий семантический анализ, а не только на синтаксические проверки, и способен выявлять сложные логические дефекты, включая ошибки работы с памятью, переполнения буфера, состояния гонки и некорректное использование API.

История

Проект FACTS был основан в 2021 году группой российских разработчиков, специализирующихся на системном программировании и статическом анализе. Первоначальная версия была опубликована на платформе GitHub в январе 2022 года. Создатели ставили перед собой задачу создать бесплатный и эффективный инструмент, способный конкурировать с проприетарными решениями, такими как PVS-Studio или Coverity, но при этом с открытым исходным кодом, позволяющим сообществу вносить улучшения.

В 2023 году вышла версия 1.0, которая включала поддержку стандартов C99 и C11, а также базовые проверки на соответствие MISRA C. В 2024 году была добавлена экспериментальная поддержка языка C++ (ограниченный набор правил). Проект активно развивается силами сообщества, а его код доступен для изучения и модификации.

Архитектура и принцип работы

FACTS работает в несколько этапов:

  1. Лексический анализ — разбиение исходного кода на токены (ключевые слова, идентификаторы, операторы, литералы).
  2. Синтаксический анализ — построение абстрактного синтаксического дерева (AST) на основе грамматики языка C.
  3. Семантический анализ — построение графа потока управления (CFG) и графа потока данных (DFG). На этом этапе анализатор отслеживает, как значения переменных передаются между операторами, и выявляет возможные пути выполнения программы.
  4. Анализ по правилам — применение набора встроенных и пользовательских правил к AST, CFG и DFG. Каждое правило представляет собой шаблон, описывающий определённый класс ошибок.
  5. Генерация отчёта — формирование списка предупреждений с указанием файла, строки, типа ошибки и кратким описанием.

Основные компоненты

Классификация проверок

Правила FACTS делятся на несколько категорий:

Ошибки работы с памятью

Логические ошибки

Ошибки многопоточности

Нарушения стандартов кодирования

Применение

FACTS используется в различных областях разработки программного обеспечения:

Примеры использования

Сравнение с другими анализаторами

ХарактеристикаFACTSPVS-StudioCoverityClang Static Analyzer
ЛицензияMIT (открытая)ПроприетарнаяПроприетарнаяApache 2.0 (открытая)
Поддержка CДаДаДаДа
Поддержка C++ЭкспериментальнаяДаДаДа
Глубина анализаСредняяВысокаяВысокаяСредняя
Скорость работыВысокаяСредняяНизкаяВысокая
ЦенаБесплатноОт 30 000 руб./годОт 50 000 руб./годБесплатно

Ограничения

Как и любой статический анализатор, FACTS не лишён недостатков:

Развитие и сообщество

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

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →