The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Сравнение качества кода Firebird, MySQL и PostgreSQL в анализаторе PVS-Studio (реклама)

14.12.2017 12:54

Компания СиПроВер опубликовала результаты сравнения качества кода СУБД Firebird, MySQL и PostgreSQL, проведённого по результатам проверки при помощи продукта PVS-Studio, позволяющего выявить ошибки, дефекты и потенциальные уязвимости на основе статического анализа кода.

Если рассматривать все выданные анализатором предупреждения, то результат проверки выглядит следующим образом:

СУБД

Высокий уровень достоверности предупреждений

Средний уровень достоверности

Низкий уровень достоверности

Всего

Firebird

156

680

1045

1881

MySQL

902

1448

2925

5275

PostgreSQL

611

1432

1576

3619

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

При рассмотрении числа предупреждений по отношению к количеству строк кода, Firebird и PostgreSQL показали примерно одинаковые результаты (у PostgreSQL много предупреждений в автосгенерированном коде). В MySQL число предупреждений немного выше, но не существенно. Другая ситуация наблюдается при попытке ручной проверки типовых предупреждений. Например, MySQL присвоено 3 штрафных балла за проблемы затирания приватных данных, 1 штрафной балл за отсутствие проверки валидности указателя, возвращаемого malloc, 3 штрафных балла за использование потенциально нулевого указателя, 2 балла за подозрительное использование элементов перечислений, 2 балла за неверное вычисление размера блока памяти и 2 балла за пропущенное ключевое слово throw.

В свою очередь, PostgreSQL получил лишь 3 штрафных балла за использование потенциально нулевого указателя, а Firebird получил 1 штрафной балл за подозрительное использование элементов перечислений, 2 балла за вызов неверного оператора освобождения памяти и 1 балл за использование потенциально нулевого указателя. В итоге, меньше всего штрафных баллов получил PostgreSQL - 3, на втором месте Firebird - 4 и худший результат показал MySQL - 13 штрафных баллов.

С учётом того, что в PostgreSQL выявлено достаточно много предупреждений в автосгенерированном коде, а отрыв в один бал от Firebird вызван проблемой среднего уровня достоверности, решено поделить первое место между PostgreSQL и Firebird.

  1. Главная ссылка к новости (https://www.viva64.com/ru/b/05...)
  2. OpenNews: Итоги проверки Tizen в статическом анализаторе PVS-Studio (реклама)
  3. OpenNews: Анализатор PVS-Studio бесплатно доступен экспертам по безопасности (реклама)
  4. OpenNews: Эксперимент по выявлению уязвимостей во FreeBSD при помощи PVS-Studio (реклама)
  5. OpenNews: Использование PVS-Studio для поиска дефектов безопасности (реклама)
  6. OpenNews: Методы работы и история возникновения анализатора кода PVS-Studio (реклама)
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/47740-pvs-studio
Ключевые слова: pvs-studio
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (48) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Дуплик (ok), 13:42, 14/12/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –9 +/
    Оно и понятно, MySQL та ещё дрянь. Не зря только KDE'шники её в составе своей DE тянут.
     
     
  • 2.13, Аноним (-), 14:17, 14/12/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    О как, MySQL уже включили в состав KDE Applications! Закнчивай уже грибы жрать.
     
     
  • 3.61, виндотролль (ok), 18:01, 14/12/2017 [^] [^^] [^^^] [ответить]  
  • +6 +/
    MariaDB, но суть та же




    [~]$ pacman -Si akonadi
    Repository      : extra
    Name            : akonadi
    Version         : 17.08.3-3
    Description     : PIM layer, which provides an asynchronous API to access all kind of PIM data
    Architecture    : x86_64
    URL             : https://community.kde.org/KDE_PIM/Akonadi
    Licenses        : LGPL
    Groups          : None
    Provides        : akonadi-client
    Depends On      : kio  kitemmodels  mariadb  hicolor-icon-theme
    Optional Deps   : postgresql: PostgreSQL backend
    Conflicts With  : akonadi-client
    Replaces        : akonadi-client
    Download Size   : 2.30 MiB
    Installed Size  : 9.75 MiB
    Packager        : Antonio Rojas <arojas@archlinux.org>
    Build Date      : Thu 07 Dec 2017 06:41:09 AM EST
    Validated By    : MD5 Sum  SHA-256 Sum  Signature



     
     
  • 4.77, Аноним (-), 22:33, 14/12/2017 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > MariaDB, но суть та же
    >


    > [~]$ pacman -Si akonadi

    [CODE]
    pkg options akonadi        
    akonadi - MYSQL: off
    akonadi - PGSQL: off
    akonadi - SQLITE: on
    [/CODE]

     
     
  • 5.85, Аноним (-), 08:42, 15/12/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Глюкавенько работает. Раньше тоже юзал sqlite, сейчас переключился на mariadb. Они, кстати, честно предупреждают об этом у себя на сайте, типа "мы пыталися, но нишмогли".
     
     
  • 6.106, MBG (?), 21:30, 15/12/2017 [^] [^^] [^^^] [ответить]  
  • +/
    А в переписке девелоперы аконади говорили, что не пытались... и от помощи отказались, я предлагал. Два студента из Пакистана (если правильно помню) сделали проект и оно работает - уже молодцы, а вот кто решил это как есть тащить в КДЕ - успешные менеджеры, видимо.
     
  • 2.27, Аноним (-), 15:12, 14/12/2017 [^] [^^] [^^^] [ответить]  
  • –13 +/
    Зачем эти люди тестировали MySQL, когда есть Percona? MySQL давно никому не нужен (разве что пацанам из PVS студио), MySQL мертв, его засосала корпоративная трясина.

    Кроме того в тесте не хватает SQlite.

     
  • 2.59, Fantomas (??), 17:45, 14/12/2017 [^] [^^] [^^^] [ответить]  
  • –3 +/
    В Постгре только сейчас появилась нормальная репликация и то только мастер-слейв.
     
     
  • 3.63, Аноним (-), 18:46, 14/12/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Юзаю потоковую репликацию уже х.з. мколько лет.
     
  • 3.72, Вареник (?), 21:22, 14/12/2017 [^] [^^] [^^^] [ответить]  
  • +/
    "Только сейчас" появились полноценные конфигурации кластера.
    Несколько лет как появились выборочные репликации (с анализом потока и фильтрами(.

    А просто горячая репликация мастер-реплики - лет 15 точно есть. Версии так с 7-й.

     
  • 3.74, Аноним (-), 21:27, 14/12/2017 [^] [^^] [^^^] [ответить]  
  • +/
    В постгрес нормальная репликация появилась давно, по сути в 8.0 уже был Warm standby.
    8.0 (2005): Point-in-time recovery
    8.2 (2006): Warm standby
    9.0 (2010): Hot Standby
    9.1 (2011): Synchronous Replication
    9.4 (2014): Slots, Logical decode
    9.6 (2016): Multiple sync standby, Remote apply
    10 (2017): Logical replication, Quorum commit
     
  • 3.76, Андрей (??), 21:58, 14/12/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А толку от бажного функционала?
     

  • 1.2, Аноним (-), 13:44, 14/12/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    > ...решено поделить первое место между PostgreSQL и Firebird.

    а MySQL в этом случае остаётся на третьем месте? или автоматически занимает освободившееся второе? автор, прошу -- допиши концовку, этож самое главное!

     
     
  • 2.4, Andrey Mitrofanov (?), 13:48, 14/12/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >> ...решено поделить первое место между PostgreSQL и Firebird.
    > а MySQL в этом случае остаётся на третьем месте? или автоматически занимает
    > освободившееся второе? автор, прошу -- допиши концовку, этож самое главное!

    Не главное -- это, где посадки, пожизненные дисквалификации, лишения флага и звёзды на спину!?

     

  • 1.10, commiethebeastie (ok), 14:11, 14/12/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +10 +/
    Сравнили firebird и postgres, у моего hello world'а еще меньше ошибок.
     
     
  • 2.15, A.Stahl (ok), 14:32, 14/12/2017 [^] [^^] [^^^] [ответить]  
  • +11 +/
    Так ведь цель не в сравнении, а в рекламе...
     
  • 2.35, Аноним (-), 15:54, 14/12/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > Сравнили firebird и postgres, у моего hello world'а еще меньше ошибок.

    И что там такого радикального кроме расширений и многофайловости?
    А если взять по нуждам текущего большинства пользователей то они вполне себе совпадают по функционалу для такой выборки.

     
     
  • 3.49, commiethebeastie (ok), 16:44, 14/12/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Издеваетесь? В огнептице даже репликации нет.
     
     
  • 4.58, анон (?), 17:30, 14/12/2017 [^] [^^] [^^^] [ответить]  
  • +/
    действительно, такая мелочь и отсутствует.
     
  • 4.60, Аноним (-), 17:54, 14/12/2017 [^] [^^] [^^^] [ответить]  
  • –10 +/
    Как будто в постгресе есть нормальная репликация.
     
     
  • 5.73, Вареник (?), 21:23, 14/12/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Как будто в постгресе есть нормальная репликация.

    Есть конечно. Полная, выборочная, мастер-мастер.

     
  • 4.107, Аноним (-), 18:47, 16/12/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > В огнептице даже репликации нет.

    На самом деле есть, но она не встроенная в движок и потому плохая... что-то типа slony.

     

  • 1.48, anonymous (??), 16:43, 14/12/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +9 +/
    Погонял на паре проектов. Ну что я могу сказать? Чуть получше clang-analyzer. Нашёл пару бесполезных условий, ну и кучу ложных срабатываний. Особенно не дружит с дефайнами и тем, что родил bison. Прога может и полезна, но ценник не радует совсем. Как-то слишком много за обычную утилиту.
     
     
  • 2.65, Andrey_Karpov (ok), 19:24, 14/12/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Предлагаю ради спортивного интереса более подробно поговорить про ложные срабатывания. По практике общения знаю, что иногда выясняется, что некоторые "ложные" предупреждения совсем не ложные. Не будем брать макросы. С ними всё понятно и предупреждения в них отключаются специальными комментариями. Да, требуется определённая настройка анализатора.
    Давайте рассмотрим несколько других ложных срабатываний.
     
     
  • 3.66, anonymous (??), 19:34, 14/12/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Я бы рад, но ключик уже того... И да, из спортивного интереса как-то несерьёзно для такого солидного проекта.
     
  • 3.67, anonymous (??), 19:47, 14/12/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Но чтобы не быть голословным, вот один пример ложного срабатывания, который мозолил глаза больше всего:
    warn V779 Unreachable code detected. It is possible that an error is present.

    Это он выдаёт на функцию с названием abort(), реализованную в классе. Отличий от abort() и ::abort() анализатор различить не в состоянии.

     
     
  • 4.70, Andrey_Karpov (ok), 20:47, 14/12/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Отличать он функции умеет. Но есть ряд функций, с "волшебными" именами, которые анализатор интерпретирует независимо в каком классе или namespace они находятся. К ним относится и функции с именем "assert". По нашей статистике в 95% случав, эти функции прекращают выполнение программы. Это или просто синоним стандартного abort или какая-то функция, которая что-то делает (например, пишет в лог), а уже потом останавливает программу. А раз так, значит надо реагировать на любую функцию abort, как прекращающую выполнение. Лучше угодить 95% разработчикам, чем не угодить 5% разработчиков. Что делать, вот такой он статический анализ.
     
     
  • 5.78, Ordu (ok), 01:22, 15/12/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А проверить любую функцию с именем abort на предмет того, не является ли она no-... большой текст свёрнут, показать
     
     
  • 6.92, Andrey_Karpov (ok), 09:42, 15/12/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Всё верно говорите. Анализатор по возможности заглядывает в функции и учитывает атрибуты no-return.  Но без межмодульного анализа (он пока только в планах) не всегда возможно проследить цепочку вызовов и понять, закончится всё завершением программы или нет. Впрочем, и межмодульный анализ не всегда поможет, так как отслеживать цепочки сложно, особенно когда они ветвятся при разных условиях. На аннотации тоже особенно надеяться не приходится. Просто мало кто их пишет, поэтому отсутствие у функции атрибута no-return ничего не означает.

     
     
  • 7.99, Ordu (ok), 17:51, 15/12/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Конкретно с этим случаем ведь не нужен никакой особый межмодульный анализ Доста... большой текст свёрнут, показать
     
     
  • 8.101, Andrey_Karpov (ok), 19:15, 15/12/2017 [^] [^^] [^^^] [ответить]  
  • +/
    То, про что вы говорите, мы называем базой разметки функций Про это я писал в с... текст свёрнут, показать
     
  • 6.103, anonymous (??), 19:44, 15/12/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > А проверить любую функцию с именем abort на предмет того, не является ли она no-return, как abort?

    Уже давно есть. Почему-то тот же QtCreator спокойно переходит на неё по F2, а не лезет в недра stdlib.h

     
     
  • 7.105, Ordu (ok), 20:01, 15/12/2017 [^] [^^] [^^^] [ответить]  
  • +/
    >> А проверить любую функцию с именем abort на предмет того, не является ли она no-return, как abort?
    > Уже давно есть. Почему-то тот же QtCreator спокойно переходит на неё по
    > F2, а не лезет в недра stdlib.h

    F2 -- это "сохранить файл"? Какое это отношение имеет к "проанализировать функцию на предмет, возвращает ли она управление или нет"?

     
  • 5.102, anonymous (??), 19:40, 15/12/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Это частный пример. Если для каждого ошибочного срабатывания набирать по 5%, то тогда ой. Как-то сложно пытаться потом вытащить из сотни ложных срабатываний реальные ошибки. И заметим, ценник на продукт весьма хорош.
     
     
  • 6.104, Andrey_Karpov (ok), 19:47, 15/12/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Анализатор PVS-Studio часто требует настройки. Как и любой другой анализатор. После настройки количество ложных срабатываний становится низким и с ними можно точечно бороться комментариями или изменением кода. Пример: Характеристики анализатора PVS-Studio на примере EFL Core Libraries, 10-15% ложных срабатываний - https://www.viva64.com/ru/b/0523/

     

  • 1.71, Andrey_Karpov (ok), 20:50, 14/12/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –7 +/
    Пользуясь случаем, приглашаю всех почитать статью "PVS-Studio 2018: CWE, Java, RPG, macOS, Keil, IAR, MISRA" и принять участие в голосовании: https://habrahabr.ru/company/pvs-studio/blog/344734/
     
     
  • 2.93, Аноним (-), 10:55, 15/12/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Пользуясь случаем

    Сколько заплатил опеннету за "случай"?

     

  • 1.82, лютый жабист__ (?), 05:24, 15/12/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    По-моему надо было Монгу проверить, у неё рыночная доля 80%, а FireBird видел 1 раз в махровом недоынтырпрайзе.
     
     
  • 2.108, Гоги (?), 19:56, 16/12/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Монга - лютая хипстота, хайп из пука. Фиребирд - какой-никакой, а коммерческий движок стандартных реляционных СУБД. Так что нет, тестирование вполне адекватное с серьёзным перевесом FB.
     

  • 1.83, Аноним (-), 07:18, 15/12/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    sqlite не включили чтобы сильно не ползорить остальных?
     
     
  • 2.84, лютый жабист__ (?), 07:59, 15/12/2017 [^] [^^] [^^^] [ответить]  
  • +/
    >sqlite не включили чтобы сильно не ползорить остальных?

    Просто эталонный код? На чём основаны Ваши фантазии?

     
  • 2.109, пох (?), 23:47, 17/12/2017 [^] [^^] [^^^] [ответить]  
  • +/
    бгг... но на самом деле в sqlite половина кода - автогенеренная, там пользы от статического анализатора будет мало, а ложных срабатываний дофига.

     

  • 1.94, Andrey_Karp0v (?), 11:46, 15/12/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А что насчёт https://scan.coverity.com/
     
     
  • 2.98, Andrey_Karpov (ok), 16:36, 15/12/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Хороший и очень дорогой инструмент. Впрочем, не так уж он и хорош. Иначе, не было бы статей, например, про проверку Clang (который проверяется с помощью Coverity): https://www.viva64.com/ru/b/0108/ , https://www.viva64.com/ru/b/0155/ , https://www.viva64.com/ru/b/0446/
     

  • 1.95, Аноним (-), 11:46, 15/12/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    мне больше cppcheck нравится
     
  • 1.96, Casm (??), 12:03, 15/12/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Для достоверности не хватает анализа кода самого PVS-Studio
     
     
  • 2.97, Andrey_Karpov (ok), 16:33, 15/12/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Проверяем исходный код плагина PVS-Studio с помощью PVS-Studio - https://habrahabr.ru/company/pvs-studio/blog/279437/
     

  • 1.110, Мирон (?), 06:12, 18/12/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Всё хорошо, но Постгресс глубокая база. Там по - настоящему знать надо, чтобы толком писать. А на MySQL каждый выпускник тех вуза чет слепит, посчитает расходы ресурсов, и вроде про.

    Ну и как - то так получилось, что Multiversion Concurrency Control (MVCC), только недавно "победила". Теперь все пишут MVCC или в стадии конверсии к MVCC.

    Наверное чем берёт, это поддержкой Oracle. Всё - таки когда у команды есть такой тыл, это многое решает. Ну и потом их InnoDB конечно встроил поддержку сложных структур с единым интегрированным потоком данных ( один файл/базу, ну или для улучшения скейла можно добавить на отдельные диски ), этого у Постгресса вплоть до версии 8 не видел, а с 9-й времени посмотреть пока не было, как был файл/таблица так и есть. А при многопоточной обработке данных с тысячами таблиц, это конечно распыляет ресурсы машины. Хотя в отличие от например MVCC в этом споре последнее слово пока не сказано.

    Так что конечно PVS-Studio создал удивительный продукт, которому ещё не на одном проэкте скажут спасибо, и баги, я думаю, исправят, но в плане выбора базы, здесь пожалуй три, да и десяток, потенциальных нуль - ссылок, дело не решат.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру