Выполняет анализ кода на языках: C, C++, C++/CLI, C++/CX, C#. Plugin для Visual Studio 2010-2015. Интеграция с SonarQube, QtCreator, CLion, Eclipse CDT, Anjuta DevStudio и т.д. Быстрый старт (мониторинг компиляции). Прямая интеграция анализатора в системы автоматизации сборки и утилита BlameNotifier (рассылка писем). Режим автоматического анализа изменённых файлов. Почему нужны анализаторы кода?
Сравнение статического анализа общего назначения из Visual Studio 2010 и PVS-...Tatyanazaxarova
В статье показаны ошибки, выявленные с помощью статического анализатора кода, встроенного в Visual Studio 2010. Исследование проводилось на пяти open source проектах. Эти же проекты были проверены с помощью PVS-Studio. Приведены результаты сравнения этих двух инструментов.
Как показывает практика, повсеместное применение классического, основанного на callback’ах подхода к асинхронному программированию обычно оказывается неудобным. Для упрощения написания и поддержки сложного асинхронного кода можно использовать иной подход — с использованием сопрограмм. Он значительно сокращает объём и сложность кода, превращая код из асинхронного в синхронный.
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Platonov Sergey
Кто-то верно подметил, что разработчики статических анализатора часто сталкиваются с "проблемой айсберга". Им сложно объяснить разработчикам, почему сложно написать и развивать статические анализаторы кода. Дело в том, что сторонние наблюдатели видят только вершину всего процесса, так как им доступен для изучения только простой интерфейс, который предоставляют анализаторы для взаимодействия с миром. Это ведь не графический редактор с сотнями кнопок и рычажков. В результате и возникает ощущение, что раз прост интерфейс взаимодействия, то и прост продукт. На самом деле статические анализаторы кода — это сложные программы, в которых живут и взаимодействуют разнообразнейшие методы поиска дефектов. В них реализуется множество экспертные системы, выдающие заключения о коде на основе как точных, так и эмпирических алгоритмах. В парном докладе, основатели анализатора PVS-Studio расскажут о том, как незаметно потратить 10 лет, чтобы написать хороший анализатор. Дьявол кроется в деталях!
Многие разработчики не представляют, как дорого обходятся ошибки в программах. Причем я имею в виду не падения ракет и прочие катастрофы, а обыкновенное прикладное программное обеспечение. Хочется показать всю важность нахождения ошибок на самых ранних этапах. Одним из способов выявить ошибку как можно раньше является статический анализ кода. Поговорим мы не только об этом, но и о различных приемах при написании кода, которые позволят избежать множество типовых ошибок.
О сложностях программирования, или C# нас не спасет?Tatyanazaxarova
Программирование это сложно. С этим никто, надеюсь, не спорит. Но вот тема новых языков программирования, а точнее поиск "серебряной пули" всегда находит бурных отклик в умах разработчиков программного обеспечения. Особенно "модной" является тема превосходства одного языка программирования над другим. Ну, к примеру, что C# "круче", чем C++. И хотя holy wars – это не та причина, по которой я пишу этот пост, тем не менее, что называется "наболело". Ну не поможет C#/lisp/F#/Haskell/... написать изящное приложение, взаимодействующее с внешним миром, и все тут. Вся изящность теряется, стоит захотеть написать что-то реальное, а не пример "сам в себе".
Статический анализ кода: борьба с удорожанием ошибокAndrey Karpov
Нет смысла говорить, что "надо писать код без ошибок". Ошибки были, есть и будут. Все хорошо понимают, что ошибки следует исправлять. Люди забывают, что ошибка должна быть исправлена с минимальными временными и денежными затратами!
Разница в подходах анализа кода компилятором и выделенным инструментомTatyanazaxarova
У компилятора и сторонних инструментов статического анализа кода есть общая задача - выявление опасных фрагментов кода. Однако существует существенная разница в том, анализ какого типа они осуществляют. Я попробую на примере компилятора Intel C++ и анализатора PVS-Studio продемонстрировать различия подходов, и пояснить, чем они вызваны.
Сравнение статического анализа общего назначения из Visual Studio 2010 и PVS-...Tatyanazaxarova
В статье показаны ошибки, выявленные с помощью статического анализатора кода, встроенного в Visual Studio 2010. Исследование проводилось на пяти open source проектах. Эти же проекты были проверены с помощью PVS-Studio. Приведены результаты сравнения этих двух инструментов.
Как показывает практика, повсеместное применение классического, основанного на callback’ах подхода к асинхронному программированию обычно оказывается неудобным. Для упрощения написания и поддержки сложного асинхронного кода можно использовать иной подход — с использованием сопрограмм. Он значительно сокращает объём и сложность кода, превращая код из асинхронного в синхронный.
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Platonov Sergey
Кто-то верно подметил, что разработчики статических анализатора часто сталкиваются с "проблемой айсберга". Им сложно объяснить разработчикам, почему сложно написать и развивать статические анализаторы кода. Дело в том, что сторонние наблюдатели видят только вершину всего процесса, так как им доступен для изучения только простой интерфейс, который предоставляют анализаторы для взаимодействия с миром. Это ведь не графический редактор с сотнями кнопок и рычажков. В результате и возникает ощущение, что раз прост интерфейс взаимодействия, то и прост продукт. На самом деле статические анализаторы кода — это сложные программы, в которых живут и взаимодействуют разнообразнейшие методы поиска дефектов. В них реализуется множество экспертные системы, выдающие заключения о коде на основе как точных, так и эмпирических алгоритмах. В парном докладе, основатели анализатора PVS-Studio расскажут о том, как незаметно потратить 10 лет, чтобы написать хороший анализатор. Дьявол кроется в деталях!
Многие разработчики не представляют, как дорого обходятся ошибки в программах. Причем я имею в виду не падения ракет и прочие катастрофы, а обыкновенное прикладное программное обеспечение. Хочется показать всю важность нахождения ошибок на самых ранних этапах. Одним из способов выявить ошибку как можно раньше является статический анализ кода. Поговорим мы не только об этом, но и о различных приемах при написании кода, которые позволят избежать множество типовых ошибок.
О сложностях программирования, или C# нас не спасет?Tatyanazaxarova
Программирование это сложно. С этим никто, надеюсь, не спорит. Но вот тема новых языков программирования, а точнее поиск "серебряной пули" всегда находит бурных отклик в умах разработчиков программного обеспечения. Особенно "модной" является тема превосходства одного языка программирования над другим. Ну, к примеру, что C# "круче", чем C++. И хотя holy wars – это не та причина, по которой я пишу этот пост, тем не менее, что называется "наболело". Ну не поможет C#/lisp/F#/Haskell/... написать изящное приложение, взаимодействующее с внешним миром, и все тут. Вся изящность теряется, стоит захотеть написать что-то реальное, а не пример "сам в себе".
Статический анализ кода: борьба с удорожанием ошибокAndrey Karpov
Нет смысла говорить, что "надо писать код без ошибок". Ошибки были, есть и будут. Все хорошо понимают, что ошибки следует исправлять. Люди забывают, что ошибка должна быть исправлена с минимальными временными и денежными затратами!
Разница в подходах анализа кода компилятором и выделенным инструментомTatyanazaxarova
У компилятора и сторонних инструментов статического анализа кода есть общая задача - выявление опасных фрагментов кода. Однако существует существенная разница в том, анализ какого типа они осуществляют. Я попробую на примере компилятора Intel C++ и анализатора PVS-Studio продемонстрировать различия подходов, и пояснить, чем они вызваны.
Как команда PVS-Studio может улучшить код операционной системы TizenAndrey Karpov
Цель: Контрактная работа команды PVS-Studio по исправлению ошибок и регулярному аудиту кода. Сейчас анализатор PVS-Studio выявляет более 10% ошибок, которые присутствуют в коде проекта Tizen. В случае регулярного использования PVS-Studio, в новом коде можно будет предотвратить около 20% ошибок.
Я прогнозирую, что команда PVS-Studio может на данный момент выявить и исправить около 27000 ошибок в проекте Tizen.
Улучшение качества открытого программного обеспечения с помощью инструментов ...Andrey Karpov
Одним из способов внести свой вклад в развитие открытого программного обеспечения, является поиск и исправление
различных программных ошибок и потенциальных уязвимостей. Достаточно просто, это можно осуществить, используя статические анализаторы кода. Это можно делать даже в том случае, если вы ещё мало знакомы с устройством работы проекта, но хотите внести вклад в его улучшение. Поговорим о методологии анализа исходного кода, бесплатных инструментах и автоматизации процессов проверки.
Запись доклада: https://youtu.be/-eUxbZ6W5Ig
Всё о статическом анализе кода для Java программистаAndrey Karpov
Этот доклад для тех, кто не знаком со статическими анализаторами кода, или знаком, но ещё не внедрил эти инструменты в процесс разработки. Будет описана методология статического анализа и как она используется для выявления ошибок и запахов кода. Будут кратко рассмотрены некоторые популярные инструменты статического анализа для языка Java, а также платформа SonarQube способная объединить и визуализировать отчёты различных анализаторов. Немного заглянем внутрь и поговорим о технологиях, используемых в современных статических анализаторах кода и позволяющих находить разнообразнейшие паттерны ошибок. Затронем вопрос, почему несмотря на уже существующие инструменты наша команда решила сделать ещё один: PVS-Studio for Java :). В конце рассмотрим важный вопрос интеграции инструментов статического анализа в большие старые проекты и почему так важно регулярное использование подобных инструментов.
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptSergey Platonov
Шаблоны — мощный инструмент, добавляющий в язык новые возможности, а программистам в команде — новые проблемы. Доклад покажет, как тщательно продуманный шаблонный код может не усложнить, а упростить жизнь и дать надёжную абстракцию межпроцессных межъязыковых асинхронных вызовов функций. С помощью шаблонов можно:
адаптировать Promise/A+ из Javascript для C++
автоматически проверять и раскладывать динамический массив аргументов на статичные аргументы функции
сделать аналог std::bind для weak_ptr.
Эти вещи будут показаны на примере взаимных вызовов между C++ и Javascript в одном приложении с помощью CEF3.
В этот раз победу одержало добро. А вернее, исходные коды проекта Chromium. Chromium - один из лучших проектов, который мы проверяли с помощью PVS-Studio.
SAST и Application Security: как бороться с уязвимостями в кодеAndrey Karpov
Проблематика: Объёмы кода растут; Плотность ошибок растёт нелинейно; Все хотят качественный и БЕЗОПАСНЫЙ код; Старых методов контроля качества уже недостаточно.
Intel IPP Samples for Windows - работа над ошибкамиTatyanazaxarova
Это моя очередная заметка о том, как PVS-Studio делает программы более надёжными. То есть где, и какие ошибки он обнаруживает. На этот раз под молоток попали примеры, демонстрирующие работу с библиотекой IPP 7.0 (Intel Performance Primitives Library).
основы ооп на языке C#. часть 1. введение в программированиеYakubovichDA
Основы объектно-ориентированного программирования на языке C#. Часть 1. Введение в программирование.
Рассматривается базовые понятие алгоритмов, блок-схем, объектно-ориентированного программирования на базе платформы .NET Framework.
Слайды доклада на конференции C++ Corehard Winter 2017 (г.Минск).
Автор доклада давно и успешно использует Модель Акторов при разработке приложений на C++. В основном это был положительный опыт. Но есть некоторые неочевидные моменты, про которые было бы хорошо узнать заранее. О том, где использование Модели Акторов уместно, а где нет, на какие грабли довелось наступить, какие шишки были набиты, как можно упростить себе жизнь и пойдет речь в докладе.
Современный статический анализ кода: что умеет он, чего не умели линтерыcorehard_by
Статический анализ появился почти 40 лет назад. В своём докладе мы хотим показать, чему за это время научились статические анализаторы. Мы рассмотрим различные методики анализа, как они появлялись и какие ошибки можно найти с помощью них. Посмотрим на примеры ошибок, найденных PVS-Studio в Open Source проектах. Поговорим о том, чем статический анализатор отличается от "линтеров" и некоторых других инструментов, а также какие проблемы решает современный статический анализатор C++ кода, помимо собственно анализа кода.
Павел Беликов
@PVS-Studio, Тула, Россия
Основы ооп на языке C#. Часть 2. базовый синтаксис.YakubovichDA
Рассматриваются базовые понятия и конструкции языка C#:
- структура консольного приложения;
- переменные и типы данных;
- арифметические и логические операторы;
- условные вычисления;
- циклы;
- массивы;
- ввод и вывод данных.
Григорий Демченко — Асинхронное программирование и сопрограммыYandex
Как показывает практика, повсеместное применение классического, основанного на callback’ах подхода к асинхронному программированию обычно оказывается неудобным. Для упрощения написания и поддержки сложного асинхронного кода можно использовать иной подход — с использованием сопрограмм. Он значительно сокращает объём и сложность кода, а также существенно упрощает реализацию нетривиальных сценариев, связанных с отменой вычислений и таймаутами операций.
Performs code analysis in C, C++, C++/CLI, C++/CX, C#. Plugin for Visual Studio 2010-2015. Integration with SonarQube, QtCreator, CLion, Eclipse CDT, Anjuta DevStudio and so on. Standalone utility. Direct integration of the analyzer into the systems of build automation and the BlameNotifier utility (e-mail notification). Automatic analysis of modified files. Great scalability. Why do people need code analyzers?
PVS-Studio advertisement - static analysis of C/C++ codeAndrey Karpov
This document advertises the PVS-Studio static analyzer. It describes how using PVS-Studio reduces the number of errors in code of C/C++/C++11 projects and costs on code testing, debugging and maintenance. A lot of examples of errors are cited found by the analyzer in various Open-Source projects. The document describes PVS-Studio at the time of version 4.38 on October 12-th, 2011, and therefore does not describe the capabilities of the tool in the next versions. To learn about new capabilities, visit the product's site <a>http://www.viva64.com</a> or search for an updated version of this article.
Как команда PVS-Studio может улучшить код операционной системы TizenAndrey Karpov
Цель: Контрактная работа команды PVS-Studio по исправлению ошибок и регулярному аудиту кода. Сейчас анализатор PVS-Studio выявляет более 10% ошибок, которые присутствуют в коде проекта Tizen. В случае регулярного использования PVS-Studio, в новом коде можно будет предотвратить около 20% ошибок.
Я прогнозирую, что команда PVS-Studio может на данный момент выявить и исправить около 27000 ошибок в проекте Tizen.
Улучшение качества открытого программного обеспечения с помощью инструментов ...Andrey Karpov
Одним из способов внести свой вклад в развитие открытого программного обеспечения, является поиск и исправление
различных программных ошибок и потенциальных уязвимостей. Достаточно просто, это можно осуществить, используя статические анализаторы кода. Это можно делать даже в том случае, если вы ещё мало знакомы с устройством работы проекта, но хотите внести вклад в его улучшение. Поговорим о методологии анализа исходного кода, бесплатных инструментах и автоматизации процессов проверки.
Запись доклада: https://youtu.be/-eUxbZ6W5Ig
Всё о статическом анализе кода для Java программистаAndrey Karpov
Этот доклад для тех, кто не знаком со статическими анализаторами кода, или знаком, но ещё не внедрил эти инструменты в процесс разработки. Будет описана методология статического анализа и как она используется для выявления ошибок и запахов кода. Будут кратко рассмотрены некоторые популярные инструменты статического анализа для языка Java, а также платформа SonarQube способная объединить и визуализировать отчёты различных анализаторов. Немного заглянем внутрь и поговорим о технологиях, используемых в современных статических анализаторах кода и позволяющих находить разнообразнейшие паттерны ошибок. Затронем вопрос, почему несмотря на уже существующие инструменты наша команда решила сделать ещё один: PVS-Studio for Java :). В конце рассмотрим важный вопрос интеграции инструментов статического анализа в большие старые проекты и почему так важно регулярное использование подобных инструментов.
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptSergey Platonov
Шаблоны — мощный инструмент, добавляющий в язык новые возможности, а программистам в команде — новые проблемы. Доклад покажет, как тщательно продуманный шаблонный код может не усложнить, а упростить жизнь и дать надёжную абстракцию межпроцессных межъязыковых асинхронных вызовов функций. С помощью шаблонов можно:
адаптировать Promise/A+ из Javascript для C++
автоматически проверять и раскладывать динамический массив аргументов на статичные аргументы функции
сделать аналог std::bind для weak_ptr.
Эти вещи будут показаны на примере взаимных вызовов между C++ и Javascript в одном приложении с помощью CEF3.
В этот раз победу одержало добро. А вернее, исходные коды проекта Chromium. Chromium - один из лучших проектов, который мы проверяли с помощью PVS-Studio.
SAST и Application Security: как бороться с уязвимостями в кодеAndrey Karpov
Проблематика: Объёмы кода растут; Плотность ошибок растёт нелинейно; Все хотят качественный и БЕЗОПАСНЫЙ код; Старых методов контроля качества уже недостаточно.
Intel IPP Samples for Windows - работа над ошибкамиTatyanazaxarova
Это моя очередная заметка о том, как PVS-Studio делает программы более надёжными. То есть где, и какие ошибки он обнаруживает. На этот раз под молоток попали примеры, демонстрирующие работу с библиотекой IPP 7.0 (Intel Performance Primitives Library).
основы ооп на языке C#. часть 1. введение в программированиеYakubovichDA
Основы объектно-ориентированного программирования на языке C#. Часть 1. Введение в программирование.
Рассматривается базовые понятие алгоритмов, блок-схем, объектно-ориентированного программирования на базе платформы .NET Framework.
Слайды доклада на конференции C++ Corehard Winter 2017 (г.Минск).
Автор доклада давно и успешно использует Модель Акторов при разработке приложений на C++. В основном это был положительный опыт. Но есть некоторые неочевидные моменты, про которые было бы хорошо узнать заранее. О том, где использование Модели Акторов уместно, а где нет, на какие грабли довелось наступить, какие шишки были набиты, как можно упростить себе жизнь и пойдет речь в докладе.
Современный статический анализ кода: что умеет он, чего не умели линтерыcorehard_by
Статический анализ появился почти 40 лет назад. В своём докладе мы хотим показать, чему за это время научились статические анализаторы. Мы рассмотрим различные методики анализа, как они появлялись и какие ошибки можно найти с помощью них. Посмотрим на примеры ошибок, найденных PVS-Studio в Open Source проектах. Поговорим о том, чем статический анализатор отличается от "линтеров" и некоторых других инструментов, а также какие проблемы решает современный статический анализатор C++ кода, помимо собственно анализа кода.
Павел Беликов
@PVS-Studio, Тула, Россия
Основы ооп на языке C#. Часть 2. базовый синтаксис.YakubovichDA
Рассматриваются базовые понятия и конструкции языка C#:
- структура консольного приложения;
- переменные и типы данных;
- арифметические и логические операторы;
- условные вычисления;
- циклы;
- массивы;
- ввод и вывод данных.
Григорий Демченко — Асинхронное программирование и сопрограммыYandex
Как показывает практика, повсеместное применение классического, основанного на callback’ах подхода к асинхронному программированию обычно оказывается неудобным. Для упрощения написания и поддержки сложного асинхронного кода можно использовать иной подход — с использованием сопрограмм. Он значительно сокращает объём и сложность кода, а также существенно упрощает реализацию нетривиальных сценариев, связанных с отменой вычислений и таймаутами операций.
Performs code analysis in C, C++, C++/CLI, C++/CX, C#. Plugin for Visual Studio 2010-2015. Integration with SonarQube, QtCreator, CLion, Eclipse CDT, Anjuta DevStudio and so on. Standalone utility. Direct integration of the analyzer into the systems of build automation and the BlameNotifier utility (e-mail notification). Automatic analysis of modified files. Great scalability. Why do people need code analyzers?
PVS-Studio advertisement - static analysis of C/C++ codeAndrey Karpov
This document advertises the PVS-Studio static analyzer. It describes how using PVS-Studio reduces the number of errors in code of C/C++/C++11 projects and costs on code testing, debugging and maintenance. A lot of examples of errors are cited found by the analyzer in various Open-Source projects. The document describes PVS-Studio at the time of version 4.38 on October 12-th, 2011, and therefore does not describe the capabilities of the tool in the next versions. To learn about new capabilities, visit the product's site <a>http://www.viva64.com</a> or search for an updated version of this article.
Листування помічника президента Росії Владислава Сурковаtsnua
Українські хакери "КіберХунта" заявили, що нібито отримали доступ і повністю контролюють листування у пошті помічника президента Росії Владислава Суркова.
Consulting and Relationship holds to key for effective sales leaders across the world. What drives synergy, is Domain Experience clubbed with being a Trusted Adviser to gain the confidence of the client, understand the Situation and Challenges and then provide a Value Proposition through your solution offering.
как разбить системный диск на два логических диска средствами Windows 10Татьяна Мишевская
Как разбить системный диск, разбить системный диск на разделы, как разбить системный диск на два, добавить раздел диска, как добавить разделы на жестком диске
Account-Based Content Marketing: Building an effective content strategy to su...Adam Monago
Building an effective #ContentStrategy to support your account-based #marketing efforts. Presented at the @Demandbase Impact Tour stop in San Jose on January 28, 2016. #ABMIMPACT #B2B #ABM
Healthcare Compliance: A Short Guide For BusinesspeopleScott Maurice
It can be difficult to navigate operational compliance when it comes to protecting healthcare data. Scott Maurice takes a closer look at steps businesses can take to ensure that the information they are responsible for is secure,
Análisis sobre el Traslado de Residuos No Peligrosos a nivel nacional entre las distintas Comunidades Autónomas y el Real Decreto 180/2015, de 13 de marzo, por el que se regula el traslado de residuos en el interior del territorio del Estado.
In this second part, we'll continue the Spark's review and introducing SparkSQL which allows to use data frames in Python, Java, and Scala; read and write data in a variety of structured formats; and query Big Data with SQL.
4 Ridiculous Reasons Why You Weren’t HiredResume Valley
Is there a more disappointing experience than to be rejected for a job you prepared for, for years? You gathered all the necessary experiences, you know your capabilities, and you even spent months brushing up on your skills but it’s all for naught.
Sometimes hiring managers make poor judgement calls they end up hiring the wrong people. Why? Here the possible reasons:
Data & Analytic Innovations: 5 lessons from our customersNick Smith
Nick Smith, managing director at Informatica Australia & New Zealand presented at Chief Data and Analytics Officer Forum in March 2017. In this presentation, he revealed the 5 key lessons learned by Informatica's customers on their quest for data-driven innovation.
44CON 2014: Using hadoop for malware, network, forensics and log analysisMichael Boman
The number of new malware samples are over a hundred thousand a day, network speeds are measured in multiple of ten gigabits per second, computer systems have terabytes of storage and the log files are just piling up. By using Hadoop you can tackle these problems in a whole different way, and “Too Much Data to Process” will be a thing of the past.
Что могут статические анализаторы, чего не могут программисты и тестировщикиAndrey Karpov
Одной из технологий выявления ошибок на ранних этапах является статический анализ кода. К сожалению, ряд инструментов реализуют анализ весьма поверхностно, что снижает доверие к методологии статического анализа в целом. Некоторые программисты начинают думать, что анализ кода — это нечто, базирующееся на регулярных выражениях и они сами легко найдут такие ошибки. На самом деле всё гораздо сложнее и интересней. Более того, многие ошибки невероятно сложно найти, если не использовать инструменты статического анализа кода. И в этом докладе будет продемонстрировано множество таких случаев. Послушав доклад, вы взглянете на статический анализ совсем по-новому. Дополнительно будет рассказано с чего начать, если вы захотите внедрить инструмент статического анализа в уже существующий процесс разработки.
Статический анализ кода: Что? Как? Зачем?Andrey Karpov
Методология статического анализа год за годом зарекомендовывает себя в поисках дефектов в исходном коде программ.
Максим расскажет про:
- методологию статического анализа и какие плюсы и минусы у нее есть;
- технологии этой методологии, которые позволяют выявлять разнообразнейшие дефекты в коде;
- интересные примеры ошибок в реальных проектах, которые были найдены при помощи статического анализа;
- интеграцию инструментов статического анализа в проекты любой сложности, и почему так важно регулярное использование подобных инструментов.
Поиск уязвимостей с использованием статического анализа кодаcorehard_by
Поиск уязвимостей с использованием статического анализа кода, Андрей Карпов и Евгений Рыжков
В последнее время мы все слышим о новых и новых уязвимостях, обнаруженных в программном обеспечении. Уже стало очевидно, что писать код без уязвимостей человечество не может. Но могут ли современные инструменты разработки помочь обнаружить хотя бы некоторые ошибки? В докладе НЕ будет фраз типа «купите такой-то инструмент, чтобы не допускать уязвимостей в своем и чужом коде». На реальных примерах мы попробуем показать какие типы уязвимостей или по-другому программных дефектов могут быть найдены с помощью технологий анализа кода, а какие – пока нет. Ну и конечно как писать код так, чтобы снизить вероятность появления уязвимостей в своем коде.
Поиск уязвимостей с использованием статического анализа кодаAndrey Karpov
Уязвимости - это те же самые обыкновенные ошибки. Зачем их выделять? Делайте это, если хотите заработать больше денег. CWE - Common Weakness Enumeration. CVE - Common Vulnerabilities and Exposures. Теперь с помощью Valgrind вы ищете не утечку памяти, а отказ в обслуживании!
Статический анализ исходного кода на примере WinMergeTatyanazaxarova
Сегодня я хочу посвятить пост тематике, почему инструменты анализа исходного кода полезны вне зависимости от уровня знаний и опыта программиста. А польза такого анализа будет продемонстрирована на примере инструмента, который известен всем программистам - WinMerge.
Многим читателя понравилась моя статья "Последствия использования технологии Copy-Paste при программировании на Си++ и как с этим быть" [1]. Обратил на неё внимание и Scott Meyers [2] и задал вопрос о том, как же собственно статический анализ помог выявить описанные в статье ошибки.
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Andrey Karpov
Есть ошибки, которые легко прячутся от программистов на обзорах кода. Чаще всего они связаны с опечатками или недостаточным знанием тонких нюансах языка/библиотеки. Давайте посмотрим интересные примеры таких ошибок и как их можно выявить с помощью статического анализа. При этом анализаторы не конкурируют с обзорами кода или, например, юнит-тестами. Они отлично дополняют другие методологии борьбы с ошибками.
Андрей Карпов
Вы узнаете, что такое статический анализ кода и историю его развития. Узнаете, как эффективно применять инструменты статического анализа в своей работе, увидите практические примеры использования этой методологии. Доклад ориентирован на программистов, использующих языки Си/Си++, но будет полезен всем
Статический анализ: ищем ошибки... и уязвимости?Andrey Karpov
Новости об очередной найденной уязвимости регулярно всплывают то тут, то там. Сопутствующие потери $, как правило, колоссальны. Поэтому вместо исправления уязвимостей, следует не допускать их появления. Один из способов борьбы с ошибками в коде – использование статического анализа. Но насколько он подходит для поиска уязвимостей? И так ли велика разница между простыми ошибками и уязвимостями с точки зрения кода? Эти вопросы мы и обсудим в ходе доклада, а заодно поговорим о том, каким образом использовать статический анализ так, чтобы извлечь из него максимум пользы.
PVS-Studio - это инструмент для выявления ошибок и потенциальных уязвимостей в исходном коде программ, написанных на языках С, C++, C# и Java. Работает в 64-битных системах на Windows, Linux и macOS и может анализировать код, предназначенный для 32-битных, 64-битных и встраиваемых ARM платформ.
Статический анализ и написание качественного кода на C/C++ для встраиваемых с...Andrey Karpov
Как учит печальный опыт множества инцидентов, требования к качеству программного кода встраиваемых систем намного выше, чем для классического программного обеспечения (игры, офисные пакеты, графические редакторы и т.д.). Поговорим о стандартах кодирования, таких как MISRA, SEI CERT, и инструментах статического анализа кода. Статические анализаторы решают две смежные, но всё-таки разные задачи: поиск ошибок и поиск запахов кода. Оба эти направления важны и должны использоваться. Однако часто эти два направления смешивают, что приводят к недоразумениям и отторжению методологии статического анализа кода. Попробуем расставить точки над i.
C++/CLI Now Supported in PVS-Studio and CppCatAndrey Karpov
Supporting C++/CLI projects has never been a first-priority target in PVS-Studio and CppCat. Such projects are pretty few, but we still happen on them from time to time. The Microsoft company is not going to stop supporting the C++/CLI language for now, so we decided we should add support for this language specification too.
SAST, CWE, SEI CERT и другие умные слова из мира информационной безопасностиAndrey Karpov
Поговорим о таких терминах, связанных с информационной безопасностью, как SAST, CWE, CVE, SEI CERT, DevSecOps и как они между собой связаны. Доклад ориентирован на разработчиков и знакомит их с некоторыми понятиями и стандартами кодирования, помогающими создавать надежные, безопасные приложения. Другими словами, как писать код с меньшим количеством потенциальных уязвимостей.
Опыт разработки статического анализатора кодаAndrey Karpov
Один из основателей проекта PVS-Studio расскажет об опыте разработки статического анализатора кода C++. У инструментов статического анализа кода существует "проблема айсберга". От пользователей скрыты сложные механизмы анализа кода, и иногда им кажется, что статические анализаторы – это просто какие-то утилиты, ищущие опечатки с помощью регулярных выражений. Автор доклада постарается в общих чертах описать, как всё обстоит на самом деле. Он покажет на примерах, почему нормальный анализ с помощью регулярных выражений нереализуем, что такое Data Flow анализ, а также расскажет о других технологиях, применяемых при анализе кода. Вкратце будет затронут вопрос использования нейронных сетей, обсуждение которых сейчас является очень модной темой, и рассказано, почему с точки зрения анализа кода отношение к этому направлению является очень скептическим.
Есть такая штука как инструментирование кода. Мало кто знает о ней, даже пользуясь результатами ее применения. Между тем, с инструментированием можно делать много всего интересного и, главное, полезного. Например, это может вам помочь лучше понять код или сделать процесс разработки более эффективным. Примеры инструментирования кода и принципы его работы.
В лекции рассказано о доступных средствах по отладке веб-сайтов, их возможностях, а также способах их использования. Также речь пойдет о том, как искать ошибки у пользователей в продакшене и контролировать качество продукта.
Здесь вы найдёте 60 вредных советов для программистов и пояснение, почему они вредные. Всё будет одновременно в шутку и серьёзно. Как бы глупо ни смотрелся вредный совет, он не выдуман, а подсмотрен в реальном мире программирования.
In this article, you're going to find 60 terrible coding tips — and explanations of why they are terrible. It's a fun and serious piece at the same time. No matter how terrible these tips look, they aren't fiction, they are real: we saw them all in the real programming world.
When should you start using PVS-Studio? What can PVS-Studio detect? Supported standards: MISRA, CWE, CERT, OWASP, AUTOSAR. What about analysis options? What about legacy code?
Двойное освобождение ресурсов. Недостижимый код. Некорректные операции сдвига. Неправильная работа с типами. Опечатки и copy-paste. Проблемы безопасности. Путаница с приоритетом операций.
Make Your and Other Programmer’s Life Easier with Static Analysis (Unreal Eng...Andrey Karpov
What is static analysis and what is it for? How does static analysis work? (Unreal Engine 4). How to introduce static analysis in your project: best practices.
Does static analysis need machine learning?Andrey Karpov
Introduction to static analysis. Existing solutions and approaches they implement. Problems and pitfalls when creating an analyzer. When learning «manually». When learning on a real large code base. Most promising approaches.
Typical errors in code on the example of C++, C#, and JavaAndrey Karpov
Objectives of this webinar
How we detected error patterns
Patterns themselves and how to avoid them:
3.1 Copy-paste and last line effect
3.2 if (A) {...} else if (A)
3.3 Errors in checks
3.4 Array index out of bounds
3.5 Operator precedence
3.6 Typos that are hard to spot
How to use static analysis properly
Conclusion
Q&A
How to Fix Hundreds of Bugs in Legacy Code and Not Die (Unreal Engine 4)Andrey Karpov
How to fight bugs in legacy code?
Should you do it at all?
What to do if there are hundreds or even thousands of errors?(that’s usually the case)
How to avoid spending a plethora of man-hours on this?
And still, how did you work with Unreal Engine?
C++ Code as Seen by a Hypercritical ReviewerAndrey Karpov
We all do code reviews. Who doesn't admit this – does it twice as often. C++ code reviewers look like a sapper. .. except that they can make a mistake more than once. But sometimes the consequences are painful . Brave code review world.
Static Code Analysis for Projects, Built on Unreal EngineAndrey Karpov
Why Do You Need Static Analysis? Detect errors early in the program development process. Get recommendations on code formatting. Check your spelling. Calculate various software metrics.
Are С and C++ Alive? Even More, IBM RPG Is! C and C++ Are Not Just for Old Systems. Are С and C++ Alive? Summary for C, C++. Embedded: C and С++ Are on the Rise.
Zero, one, two, Freddy's coming for youAndrey Karpov
This post continues the series of articles, which can well be called "horrors for developers". This time it will also touch upon a typical pattern of typos related to the usage of numbers 0, 1, 2. The language you're writing in doesn't really matter: it can be C, C++, C#, or Java. If you're using constants 0, 1, 2 or variables' names contain these numbers, most likely, Freddy will come to visit you at night. Go on, read and don't say we didn't warn you.
PVS-Studio Is Now in Chocolatey: Checking Chocolatey under Azure DevOpsAndrey Karpov
We continue making the use of PVS-Studio more convenient. Our analyzer is now available in Chocolatey, the package manager for Windows. We believe this will make it easier to deploy PVS-Studio, particularly in cloud services. So right off the bat, we also checked the source code of the same Chocolatey. Azure DevOps took on the role of the CI system.
2. Статический анализатор кода PVS-Studio
• Выполняет анализ кода на языках: C, C++, C++/CLI, C++/CX, C#
• Поддерживаются проекты, разрабатываемые с помощью:
• Windows: Visual C++, Clang, MinGW, Visual C#
• Linux: Clang, GCC
• Plugin для Visual Studio 2010-2015
• Интеграция с SonarQube, QtCreator, CLion, Eclipse CDT, Anjuta
DevStudio и т.д.
• Утилита Standalone
3. На начало 2017 года в PVS-Studio
реализовано
• C, C++ диагностик: 349
• C# диагностик: 130
• Подробная on-line документация на
русском и английском языке
• PDF
4. Основные возможности
• Быстрый старт (мониторинг компиляции)
• Windows утилита: CLMonitoring
• Linux утилита: pvs-studio-analyzer
• Прямая интеграция анализатора в системы автоматизации сборки
и утилита BlameNotifier (рассылка писем)
• Режим автоматического анализа изменённых файлов
• Отличная масштабируемость
• Работа с ложными срабатываниями
6. Почему C и C++?
• Эффективные, но сложные языки, в которых легко допустить
ошибку
• Причём, так дело обстоит десятилетиями и вряд ли изменится
• Давайте проверим с помощью PVS-Studio первую версию
компилятора Cfront, вышедшую в свет в 1985.
• “К тридцатилетию первого C++ компилятора: ищем ошибки в Cfront”
http://www.viva64.com/ru/b/0355/
7. Ошибка в компиляторе Cfront (1985)
Pexpr expr::typ(Ptable tbl)
{
....
Pclass cl;
....
cl = (Pclass) nn->tp;
cl->permanent=1;
if (cl == 0) error('i',"%k %s'sT missing",CLASS,s);
В начале указатель разыменовывается. Далее идёт проверка,
которая говорит нам, что указатель мог быть nullptr.
8. Прошло 30 лет
• Ничего не изменилось. Язык C++ всё так же сложен и опасен.
• Размер кодовой базы растёт, и все важнее использовать
инструменты статического анализа
• Давайте проверим с помощью PVS-Studio код современного
компилятора Clang
• 2016 год. “Находим ошибки в коде проекта LLVM с помощью анализатора
PVS-Studio”
http://www.viva64.com/ru/b/0446/
9. Clang (ошибка найдена в октябре 2016)
bool PPCDarwinAsmPrinter::doFinalization(Module &M) {
....
MachineModuleInfoMachO &MMIMacho =
MMI->getObjFileInfo<MachineModuleInfoMachO>();
if (MAI->doesSupportExceptionHandling() && MMI) {
Вначале указатель разыменовывается.
Далее идёт проверка, которая говорит нам,
что указатель мог быть nullptr.
10. Почему C#?
• Быть может с C# ситуация лучше?
• Некоторые типы ошибок в C# невозможны
• Поэтому лучше, но не сильно
• На месте остаются опечатки, логические ошибки и т.д.
• Да и от того, что указатели назвали ссылками лучше не стало
• Мы видим всё ту же ошибку с нулевой ссылкой
• Давайте проверим, например, проект Microsoft PowerShell:
http://www.viva64.com/ru/b/0447/
11. Такие ошибки актуальны и для C#
public CommandMetadata(CommandMetadata other)
{
....
_parameters = new Dictionary<string, ParameterMetadata>(
other.Parameters.Count, .....);
if (other.Parameters != null)
Ошибка в проекте PowerShell: в начале
используем ссылку, а затем проверяем.
12. Мы можем очень долго демонстрировать
подобные примеры
• Анализатор PVS-Studio легко находит ошибки в известных
проектах:
• Linux kernel - http://www.viva64.com/ru/b/0460/
• GCC - http://www.viva64.com/ru/b/0425/
• MSBuild - http://www.viva64.com/ru/b/0424/
• Qt - http://www.viva64.com/ru/b/0424/
• И так далее - http://www.viva64.com/ru/inspections/
• Это говорит о востребованности статического анализа кода
• Давайте посмотрим какие ошибки умеет искать PVS-Studio
14. Ошибки при переносе кода на 64-битные
платформы
Эту ошибку мы нашли с помощью PVS-Studio в проекте TortoiseSVN
DialogBoxParam(g_hmodThisDll,
MAKEINTRESOURCE(IDD_LOGIN),
g_hwndMain,
(DLGPROC)(LoginDialogProc),
(long)this);
V220 Suspicious sequence of types castings: memsize -> 32-bit integer ->
memsize. The value being casted: 'this'. logindialog.cpp 105
Пояснение. Тип long в Win64 по прежнему 32-битный. В 64-битной программе объект может быть
создан за пределами младших 4 Гигабайт памяти. В этом случае значение указателя будет
испорчено. Неприятная ошибка, которая может проявляться очень редко после долгой работы
программы. Правильно: (LPARAM)(this).
15. Адрес локальной переменной
возвращается из функции по ссылке
Эту ошибку мы нашли с помощью PVS-Studio в проекте LLVM
V558 Function returns the reference to temporary local object: res. LiveInterval.h
679
SingleLinkedListIterator<T> &operator++(int) {
SingleLinkedListIterator res = *this;
++*this;
return res;
}
16. Арифметическое переполнение, потеря
значимости
Эту ошибку мы нашли с помощью PVS-Studio в проекте OpenXRay
V636 The '1 / 100' expression was implicitly cast from 'int' type to 'float' type.
Consider utilizing an explicit type cast to avoid the loss of a fractional part. An
example: double A = (double)(X) / Y;. gl_rendertarget.cpp 245
float CRenderTarget::im_noise_time;
....
param_noise_fps = 25.f;
param_noise_scale = 1.f;
im_noise_time = 1/100;
....
17. Выход за границу массива
Эту ошибку мы нашли с помощью PVS-Studio в проекте Notepad++
V557 Array overrun is possible. The value of 'i' index could reach 46. Notepad++
preferencedlg.cpp 984
int encodings[] = {1250, 1251, 1252, .... };
for (int i = 0; i <= sizeof(encodings)/sizeof(int); i++)
{
int cmdID = em->getIndexFromEncoding(encodings[i]);
....
}
18. Мёртвый код
Эту ошибку мы нашли с помощью PVS-Studio в проекте Unreal Engine 4
V607 Ownerless expression 'NumByteProperties'. codegenerator.cpp 633
int32 NumByteProperties = 0;
....
if (bIsByteProperty)
{
NumByteProperties;
}
19. Недостижимый код
Эту ошибку мы нашли с помощью PVS-Studio в проекте Linux Kernel
V695 Range intersections are possible within conditional expressions. Example: if
(A < 5) { ... } else if (A < 2) { ... }. Check lines: 439, 441. ad5933.c 441
if (val > 511)
val = (val >> 1) | (1 << 9);
else if (val > 1022)
val = (val >> 2) | (3 << 9);
20. Неинициализированные переменные
Эту ошибку мы нашли с помощью PVS-Studio в проекте Mono
V3070 Uninitialized variable 'schema' is used when initializing the
'ResourceSchema' variable. ResXResourceWriter.cs 59
class ResXResourceWriter : IResourceWriter, IDisposable
{
public static readonly string ResourceSchema = schema;
....
static string schema = ....;
}
Пояснение. На момент инициализации ResourceSchema поле schema будет
проинициализировано значением по умолчанию (null в данном случае).
21. Неиспользуемые переменные и аргументы
Эту ошибку мы нашли с помощью PVS-Studio в проекте Xenko
V3065 Parameter 'height' is not utilized inside method's body. SiliconStudio.Xenko
Image.cs 473
public static Image New3D(int width, int height, int depth, ....)
{
return new Image(
CreateDescription(
TextureDimension.Texture3D,
width, width, depth,
mipMapCount, format, 1),
dataPointer, 0, null, false);
}
22. Некорректные операции сдвига
Эту ошибку мы нашли с помощью PVS-Studio в проекте Bitcoin
V629 Consider inspecting the '0x80 << (8 * (vch.size() - 1))' expression. Bit shifting
of the 32-bit value with a subsequent expansion to the 64-bit type. script.h 169
Пояснение. Происходит переполнение при сдвиге 32-битного значения 0x80.
Сейчас исправленный вариант кода выглядит так:
static int64_t set_vch(....) {
int64_t result = 0;
....
return -(result & ~(0x80 << (8 * (vch.size() - 1))));
return -((int64_t)(result & ~(0x80ULL << (8 * (vch.size() - 1)))));
23. Неопределенное поведение
Эту ошибку мы нашли с помощью PVS-Studio в проекте
Network Security Services
V567 Undefined behavior. The 'j' variable is modified while being used twice
between sequence points. pk11slot.c 1926
waste[j & 0xf] = j++;
24. Неправильная работа с типами
Эту ошибку мы нашли с помощью PVS-Studio в проекте VirtualBox
V745 A 'wchar_t *' type string is incorrectly converted to 'BSTR' type string.
Consider using 'SysAllocString' function. vboxcredentialprovider.cpp 231
HRESULT EventClassID(BSTR bstrEventClassID);
static HRESULT VBoxCredentialProviderRegisterSENS(void)
{
hr = pIEventSubscription->put_EventClassID(
L"{d5978630-5b9f-11d1-8dd2-00aa004abd5e}");
25. Неправильное представление о работе
функции/класса
Эту ошибку мы нашли с помощью PVS-Studio в проекте Unity3D
V3057 Invalid regular expression patern in constructor. Inspect the first argument.
AssetBundleDemo ExecuteInternalMono.cs 48
private static readonly Regex UnsafeCharsWindows =
new Regex("[^A-Za-z0-9_-.:,/@]");
Пояснение. При попытке создания экземпляра класса Regex с данным
паттерном мы получим исключение System.ArgumentException с сообщением:
parsing "[^A-Za-z0-9_-.:,/@]" -
Unrecognized escape sequence '_'.
26. Отсутствие виртуального деструктора
Все примеры длинные и их сложно поместить в
презентацию. Поверьте, мы ищем такие проблемы.
А пока предлагаю заварить чашечку кофе. Впереди у
нас ещё долгий интересный путь.
27. Оформление кода не совпадает с логикой
его работы
Эту ошибку мы нашли с помощью PVS-Studio в проекте Sony ATF
V3043 The code's operational logic does not correspond with its formatting. The
statement is indented to the right, but it is always executed. It is possible that
curly brackets are missing. Atf.Core.vs2010 QuatF.cs 282
public static QuatF Slerp(QuatF q1, QuatF q2, float t)
{
double dot = q2.X * q1.X + q2.Y * q1.Y +
q2.Z * q1.Z + q2.W * q1.W;
if (dot < 0)
q1.X = -q1.X; q1.Y = -q1.Y; q1.Z = -q1.Z; q1.W = -q1.W;
28. Ошибки при работе с исключениями
Эту ошибку мы нашли с помощью PVS-Studio в проекте OpenMW
V596 The object was created but it is not being used. The 'throw' keyword could
be missing: throw logic_error(FOO); components exprparser.cpp 101
if (t1==t2)
mOperands.push_back (t1);
else if (t1=='f' || t2=='f')
mOperands.push_back ('f');
else
std::logic_error ("failed to ....... ");throw
29. Переполнение буфера
Эту ошибку мы нашли с помощью PVS-Studio в проекте FreeBSD
V512 A call of the 'strcpy' function will lead to overflow of the buffer 'p->vendor'.
aacraid_cam.c 571
#define SID_VENDOR_SIZE 8
char vendor[SID_VENDOR_SIZE];
....
strcpy(p->vendor,"Adaptec ");
Пояснение. Строка содержит 8 символов. Однако, следует учитывать, что
функция strcpy добавит терминальный ноль. Он будет записан за пределами
буфера.
30. Проблемы безопасности
Эту ошибку мы нашли с помощью PVS-Studio в проекте PostgreSQL
V597 The compiler could delete the 'memset' function call, which is used to flush
'final' buffer. The RtlSecureZeroMemory() function should be used to erase the
private data. pgcrypto crypt-md5.c 157
Компилятор удаляет вызов функции memset: http://www.viva64.com/ru/w/V597/
char *px_crypt_md5(....) {
unsigned char final[MD5_SIZE];
....
/* Don't leave anything around in vm they could use. */
memset(final, 0, sizeof final);
}
31. Путаница с приоритетом операций
Эту ошибку мы нашли с помощью PVS-Studio в проекте Linux Kernel
V502 Perhaps the '?:' operator works in a different way than it was expected. The
'?:' operator has a lower priority than the '|' operator. core.c 1046
static int nvme_pr_preempt(struct block_device *bdev,
u64 old, u64 new, pr_type type, bool abort)
{
u32 cdw10 = nvme_pr_type(type) << 8 | abort ? 2 : 1;
1
2
32. Разыменование нулевого указателя /
нулевой ссылки
Эту ошибку мы нашли с помощью PVS-Studio в проекте LibreOffice
V595 The 'pSysWin' pointer was utilized before it was verified against nullptr.
Check lines: 738, 739. updatecheckui.cxx 738
MenuBar *pMBar = pSysWin->GetMenuBar();
if ( pSysWin && pMBar )
{
AddMenuBarIcon( pSysWin, true );
}
33. Ошибки синхронизации
Эту ошибку мы нашли с помощью PVS-Studio в проекте Unity3D
V3083 Unsafe invocation of event 'unload', NullReferenceException is possible.
Consider assigning event to a local variable before invoking it. AssetBundleDemo
AssetBundleManager.cs 47
internal void OnUnload()
{
m_AssetBundle.Unload(false);
if (unload != null)
unload();
}
34. Целочисленное деление на 0
Эту ошибку мы нашли с помощью PVS-Studio в проекте Inkscape
V609 Divide by zero. Denominator range [0..999]. lpe-fillet-chamfer.cpp 607
} else if (type >= 3000 && type < 4000) {
unsigned int chamferSubs = type-3000;
double chamfer_stepsTime = 1.0/chamferSubs;
Диапазон
[0..999]
35. Опечатки и Copy-Paste
• Анализатор PVS-Studio эффективно выявляет опечатки и
последствия неудачного Copy-Paste
• В анализаторе реализовано много диагностик для выявления
ошибок этого рода
• Остановимся на них чуть подробнее и рассмотрим несколько
примеров ошибок этого типа
• Дополнительно рекомендуем для чтения интересную статью
“Эффект последней строки” - http://www.viva64.com/ru/b/0260/
36. Опечатки и Copy-Paste (пример N1)
Эту ошибку мы нашли с помощью PVS-Studio в проекте Clang
V501 There are identical sub-expressions 'OpcodeLHS == BO_LE' to the left and to
the right of the '||' operator. RedundantExpressionCheck.cpp 174
if ((OpcodeLHS == BO_EQ ||
OpcodeLHS == BO_LE ||
OpcodeLHS == BO_LE)
&&
(OpcodeRHS == BO_EQ ||
OpcodeRHS == BO_GT ||
OpcodeRHS == BO_GE))
37. Опечатки и Copy-Paste (пример N2)
Эту ошибку мы нашли с помощью PVS-Studio в проекте GCC
V501 There are identical sub-expressions '!strcmp(a->v.val_vms_delta.lbl1, b-
>v.val_vms_delta.lbl1)' to the left and to the right of the '&&' operator.
dwarf2out.c 1428
return (!strcmp (a->v.val_vms_delta.lbl1,
b->v.val_vms_delta.lbl1)
&& !strcmp (a->v.val_vms_delta.lbl1,
b->v.val_vms_delta.lbl1));
38. Опечатки и Copy-Paste (пример N3)
Эту ошибку мы нашли с помощью PVS-Studio в проекте MySQL
V525 The code containing the
collection of similar blocks. Check
items '0', '1', '2', '3', '4', '1', '6' in
lines 680, 682, 684, 689, 691, 693,
695. sql records.cc 680
static int rr_cmp(uchar *a,uchar *b)
{
if (a[0] != b[0])
return (int) a[0] - (int) b[0];
if (a[1] != b[1])
return (int) a[1] - (int) b[1];
if (a[2] != b[2])
return (int) a[2] - (int) b[2];
if (a[3] != b[3])
return (int) a[3] - (int) b[3];
if (a[4] != b[4])
return (int) a[4] - (int) b[4];
if (a[5] != b[5])
return (int) a[1] - (int) b[5];
if (a[6] != b[6])
return (int) a[6] - (int) b[6];
return (int) a[7] - (int) b[7];
}
5
39. Опечатки и Copy-Paste (пример N4)
Эту ошибку мы нашли с помощью PVS-Studio в проекте PowerShell
V3001 There are identical sub-expressions 'BaseMaximumVersion != null' to the
left and to the right of the '&&' operator. System.Management.Automation
ImportModuleCommand.cs 1663
internal Version BaseMinimumVersion { get; set; }
internal Version BaseMaximumVersion { get; set; }
protected override void ProcessRecord()
{
if (BaseMaximumVersion != null &&
BaseMaximumVersion != null &&
BaseMaximumVersion < BaseMinimumVersion)
40. Опечатки и Copy-Paste (пример N5)
Эту ошибку мы нашли с помощью PVS-Studio в проекте Roslyn
V3004 The 'then' statement is
equivalent to the 'else' statement.
GetSemanticInfoTests.cs 2269
if (i % 2 == 0)
{
thread1.Start();
thread2.Start();
}
else
{
thread1.Start();
thread2.Start();
}
41. Опечатки и Copy-Paste (пример N6)
Эту ошибку мы нашли с помощью PVS-Studio в проекте MonoDevelop
V3012 The '?:' operator, regardless of its conditional expression, always returns
one and the same value: result.Test.FullName. GuiUnit_NET_4_5
NUnit2XmlOutputWriter.cs 207
xmlWriter.WriteAttributeString("name",
suite.TestType == "Assembly" ?
result.Test.FullName : result.Test.FullName);
43. Демонстрация возможностей PVS-Studio
• Для демонстрации возможностей анализатора мы проверяем
открытые проекты. На начало 2017 года нами проверено 280
проектов.
• Побочный результат: в этих проектах нашей командой было
найдено 10700 ошибок
• Это именно 10700 ошибок, а не количество сообщений,
выданных анализатором
44. Демонстрация возможностей PVS-Studio
• Благодаря нашей команде и анализатору PVS-Studio, в открытых
проектах исправили более 10000 ошибок
• Вы можете увидеть все эти ошибки здесь:
http://www.viva64.com/ru/examples/
• База ошибок постоянно пополнятся и её можно использовать при
написании статей о качестве кода и составлении стандартов
кодирования
45. Демонстрация возможностей PVS-Studio
• В среднем, в одном открытом проекте мы нашли 10700 / 280 = 38
ошибок
• 38 ошибок на проект - это мало
• Поэтому важно подчеркнуть, что это - побочный эффект
• У нас нет цели найти как можно больше ошибок. Часто мы
останавливаемся, когда нашли достаточное количество дефектов
в проекте для написания статьи.
46. Демонстрация возможностей PVS-Studio
• Мы добились колоссальных результатов в устранении ошибок в
мире open-source проектов, не ставя такую цель
• В этом нам помогли:
• мощные диагностические возможности PVS-Studio
• возможность быстрого анализа даже незнакомых проектов
47. Правильный сценарий использования
• Конечно, интересно и полезно запустить анализатор PVS-Studio и
найти ошибку, которую до этого безуспешно искали 50 часов
• http://www.viva64.com/ru/b/0221/
• Хорошо проверять проекты и описывать найденные ошибки, как
делаем это мы в рекламных целях
• http://www.viva64.com/ru/inspections/
• Но следует помнить, что разовые проверки - это неправильный
способ использования анализаторов кода!
48. Правильный сценарий использования
• Статический анализатор приносит пользу, когда он используется
регулярно
• Два основных варианта:
• Автоматический анализ изменённого кода
• Ночные проверки
• Подробнее эти режимы рассмотрены в документации
50. Используемые технологии
• На примерах было продемонстрировано, что PVS-Studio
эффективно выявляет разнообразные типы ошибок
• Кратко перечислим технологии, которые положены в основу
анализатора
• Подробнее эта тема раскрыта в статье
“Как PVS-Studio ищет ошибки: методики и технологии”
http://www.viva64.com/ru/b/0466/
51. Используемые технологии
• Сопоставление с шаблоном (pattern-based analysis) на основе
абстрактного синтаксического дерева применяется для поиска
мест в исходном коде, которые похожи на известные шаблоны
кода с ошибкой.
Пример. Иногда не там прибавляют 1 при
использовании функции strlen:
realloc(name, strlen(name+1))
На самом деле следовало написать:
realloc(name, strlen(name)+1)
52. Используемые технологии
• Вывод типов (type inference) на основе семантической модели
программы позволяет анализатору иметь полную информацию о
всех переменных и выражениях, встречающихся в коде.
Самый просто пример: чтобы знать, что
функция printf используется неправильно,
нужно знать типы фактических аргументов.
53. Используемые технологии
• Символьное выполнение (symbolic execution) позволяет
вычислять значения переменных, которые могут приводить к
ошибкам, производить проверку диапазонов (range checking)
значений
• Анализ потока данных (data-flow analysis) используется для
вычисления ограничений, накладываемых на значения
переменных при обработке различных конструкций языка.
Например, какие значения может принимать переменная внутри
блоков if/else.
54. Используемые технологии
• Аннотированние методов (method annotations) предоставляет
больше информации об используемых методах, чем может быть
получено путём анализа только их сигнатуры.
• C/C++. На данный момент проаннотировано 6570 функций
(стандартные библиотеки C и C++, POSIX, MFC, Qt, ZLib и так
далее).
• C#. На данный момент проаннотировано 920 функций.
55. Используемые технологии
• Для разработки
эффективных диагностик
наша команда
использует большой
набор регрессионных
тестов
• Написан специальный
инструментарий для
работы с тестовой базой
открытых проектов
56. Используемые технологии
• Тестовая база:
• C++ Windows (Visual C++): 120 проектов
• C++ Linux (GCC): ещё 34 проекта
• C# Windows: 54 проекта
• Всего мы используем 7 методик тестирования нашего проекта
• См. раздел “Тестирование PVS-Studio” http://www.viva64.com/ru/b/0466/
58. • Думаю, вы уже устали, поэтому минутка юмора
• Кратко суть статического анализа кода сводится к следующему:
Опять
Copy-Paste!
59. Использование PVS-Studio: внедрение
• Бывает непросто начать использовать статический анализ в
большом проекте
• Непонятно, что делать с сообщениями в старом коде…
• Мы предлагаем решение: база разметки
• Подробнее: http://www.viva64.com/ru/b/0364/
60. Использование PVS-Studio: подавление
ложных срабатываний
• Различные способы подавить ложные срабатывания в
конкретных строках кода
• Подавление ложных срабатываний в макросах
• Подавление ложных предупреждений с помощью файлов
конфигурации диагностик pvsconfig
• Подробнее: http://www.viva64.com/ru/m/0017/
61. Использование PVS-Studio: исключение из
анализа
• Возможность исключить из анализа файлы по имени, папке или
маске
• Интерактивная фильтрация результатов анализа (лога) в окне PVS-
Studio:
• по коду диагностики
• по имени файла
• по включению слова в текст диагностики
64. Использование PVS-Studio: непрерывная
интеграция
• Запуск из командной строки для проверки всего решения:
позволяет интегрировать PVS-Studio в ночные сборки, чтобы
утром у всех был свежий лог
• Сохранение и загрузка результатов анализа: можно ночью
проверить код, сохранить результаты, а утром загрузить их и
смотреть
• Утилита BlameNotifier: инструмент позволяет рассылать письма
разработчикам об ошибках, которые PVS-Studio нашел во время
ночного прогона
• Использование относительных путей в файлах отчета
65. Использование PVS-Studio: прочее
• Удобная online-справка по всем диагностикам, которая доступна и
из программы, и на сайте, а также документация в .pdf одним
файлом
• Интерактивная фильтрация результатов анализа (лога) в окне PVS-
Studio
• Статистика ошибок в Excel
• Автоматическая проверка на наличие новых версий PVS-Studio
66. Использование PVS-Studio: Linux
• С PVS-Studio легко работать в Linux
• Но, чтобы не гадать с настройками и ключами запуска, просим
познакомиться с инструкцией
• Как запустить PVS-Studio в Linux:
http://www.viva64.com/ru/m/0036/
• Я знаю, что мы все не любим читать инструкции. Но поверьте,
этот тот случай, когда всё просто, кратко и экономит ваше время!
67. Использование PVS-Studio: быстрый старт
• Отдельного внимания заслуживает возможность быстро
попробовать PVS-Studio на любом проекте
• Для этого можно отследить запуски компилятора и собрать всю
необходимую для анализа информацию
• Windows:
• Утилита Standalone
• Инструкция: http://www.viva64.com/ru/m/0033/
• Linux
• Утилита pvs-studio-analyzer
• Инструкция: см. «Быстрый старт» в документе
http://www.viva64.com/ru/m/0036/
68. Использование PVS-Studio: SonarQube
• Для импорта результатов анализа в
SonarQube мы разработали плагин
sonar-pvs-studio-plugin
• Использование плагина позволяет
добавлять сообщения, найденные
анализатором PVS-Studio, в базу
сообщений сервера SonarQube
69. Использование PVS-Studio: SonarQube
• Подробности изложены в статье
«Контролируем качество кода с помощью платформы SonarQube»
http://www.viva64.com/ru/b/0452/
71. Скачать и попробовать PVS-Studio
• Можно скачать и попробовать демонстрационную версию
• Windows: http://www.viva64.com/ru/pvs-studio-download/
• Linux: http://www.viva64.com/ru/pvs-studio-download-linux/
• Про ограничения демонстрационной версии:
http://www.viva64.com/ru/m/0009/
• Вы можете написать нам и получить на время полную версию:
support@viva64.com
76. Типы лицензий
Team License Enterprise License
Подходит небольшим отделам, обычно это первый опыт
использования анализаторов
Подходит сразу для нескольких отделов в компании
Только Windows-версия Версии для Linux и Windows
Поддержка систем непрерывной интеграции
(continuous integration)
Интеграция с SonarQube
Инструмент BlameNotifier
Возможность предлагать для реализации собственные
диагностики.
Лицензию возможно купить только на 1 год Лицензию возможно купить на 1, 2 или 3 года
Ответ на письма в течение 48 часов Ответ на письма в течение 24 часов
Обычно используется в командах до 9 человек В основном используется при размере команд более 10
человек
77. Индивидуальные лицензии
• Мы позиционируем свой продукт как B2B решение и у нас нет
индивидуальных лицензий
• Почему так получилось: http://www.viva64.com/ru/b/0320/
• Индивидуальные разработчики могут воспользоваться вариантом
бесплатного лицензирования
• Как использовать PVS-Studio бесплатно:
http://www.viva64.com/ru/b/0457/
78. Купить PVS-Studio
• Для заказа лицензии и получения информации о ценах,
пожалуйста, напишите нам: support@viva64.com
80. Сотрудничество: аудит
• Выполнение аудита кода и правка ошибок
• Примеры сотрудничества подобного типа:
• Как команда PVS-Studio улучшила код Unreal Engine:
http://www.viva64.com/ru/b/0330/
• Как перенести проект размером в 9 млн строк кода на 64-битную
платформу: http://www.viva64.com/ru/b/0342/
• Мы можем на регулярной основе контролировать качество кода и
вносить в него правки
• Имеем опыт работ в этом направлении, но эта информация попадает под
NDA
81. Сотрудничество
• На базе нашего анализатора мы можем разработать на заказ
специализированное решение
• Мы также готовы обсуждать сотрудничество, кто готов за процент
с продаж привести к нам клиентов
• По этим и другим вопросам: support@viva64.com
83. Полезные ссылки
• Расскажем о некоторых интересных и полезных материалах,
которые можно найти на сайте компании
• Электронная книга «Главный вопрос программирования,
рефакторинга и всего такого» - http://www.viva64.com/ru/b/0391/
• Электронная книга «Разработки 64-битных приложений на языке
Си/Си++» - http://www.viva64.com/ru/l/full/
84. Полезные ссылки
• Как 10 лет назад начинался проект PVS-Studio:
http://www.viva64.com/ru/b/0465/
• Контролируем качество кода с помощью платформы SonarQube:
http://www.viva64.com/ru/b/0452/
• Руководство по разработке модулей расширений на C# для Visual
Studio 2005-2012 и Atmel Studio:
http://www.viva64.com/ru/a/0082/
85. Всем спасибо! До свидания
• Написать письмо: support@viva64.com
• Подписаться на твиттер: @Code_Analysis
• Скачать PVS-Studio для Windows:
http://www.viva64.com/ru/pvs-studio/
• Скачать PVS-Studio для Linux:
http://www.viva64.com/ru/pvs-studio-download-linux/