Преподавателям на заметку: PVS-Studio для знакомства студентов с инструментами анализа кода

    PVS-Studio и обучение

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

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

    • MS DOS 1.0: 4 000 строк кода. Один человек мог прочитать код целиком, разобраться, найти ошибки.
    • Ядро Linux 1.0.0: 176 000 строк кода. У команды ещё есть возможность сделать подробный обзор кода, хотя на это придётся затратить много времени и сил.
    • Ядро Linux 5.0: более 26 000 000 строк кода. Осознать проект невозможно.

    На примере ядра Linux видно, что размер кодовой базы за 25 лет вырос в 150 раз. Теперь программисту невозможно просто сесть и сделать обзор кода всего приложения, разобраться в нём, найти ошибки, улучшить архитектурные решения. Устройство современных программ просто не помещается в голове одного человека, и больше нет специалистов, которые могут ответить на любой вопрос касательно устройства проекта.

    Невозможность осознать проект — это только пол беды. С ростом размера проекта растёт и плотность ошибок. Подчеркну: речь идёт не просто о росте количества ошибок, а именно об их плотности! В программе, написанной в рамках курсовой работы, можно написать 1000 строк кода и не допустить ни одной ошибки. И нереально добавить в большое приложение 1000 строк кода и не допустить несколько ошибок. Для пояснения опять прибегнем к числам:

    Рисунок 1. Типичная плотность ошибок в проектах различного размера

    Рисунок 1. Типичная плотность ошибок в проектах различного размера. Данные взяты из книги Стива Макконнелла «Совершенный код».

    Итак, невозможно писать надёжные программы, используя те же подходы, что и 20-30 лет назад. Необходимо использовать комплекс методологий, помогающих контролировать рост сложности программного проекта и обеспечивать необходимое качество кода:

    • Стандарты кодирования
    • Обзоры кода
    • Юнит-тесты
    • Регрессионное тестирование
    • Нагрузочное тестирование
    • Ручное тестирование
    • ....
    • Динамический анализ
    • Статический анализ

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

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

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

    PVS-Studio — это инструмент для выявления ошибок и потенциальных уязвимостей в исходном коде программ, написанных на языках С, C++, C# и Java. Работает в 64-битных системах на Windows, Linux и macOS и может анализировать код, предназначенный для 32-битных, 64-битных и встраиваемых ARM платформ.

    Анализатор PVS-Studio можно рассматривать как пример современного инструмента статического анализа кода. Во-первых, на его примере хорошо показывать возможности инструментов статического анализа в выявлении ошибок и дефектов безопасности (SAST). Во-вторых, можно продемонстрировать его интеграцию в цикл разработки программного обеспечения, чтобы контроль кода был непрерывен. На его примере можно показывать возможность интеграции с такими системами, как Jenkins, TeamCity, Azure DevOps, SonarQube, Travis CI и т.д.

    Для того, чтобы начать использовать PVS-Studio в рамках обучения, не надо ничего специального делать или согласовывать.

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

    // This is a personal academic project. Dear PVS-Studio, please check it.
    // PVS-Studio Static Code Analyzer for C, C++, C#, and Java: http://www.viva64.com

    Чтобы начать бесплатно использовать статический анализатор PVS-Studio, следует выполнить два следующих шага:

    Шаг первый

    Если вы используете PVS-Studio как плагин к Visual Studio или используете утилиту Standalone, то введите следующий лицензионный ключ:

    Name: PVS-Studio Free
    Key: FREE-FREE-FREE-FREE

    Если Вы используете PVS-Studio for Linux, то сразу переходите ко второму шагу, файл с лицензией вам не понадобится.

    Шаг второй

    Вы должны вписать в начало каждого файла две строки с комментарием. Внесите правки во все компилируемые файлы вашего проекта. Имеются в виду файлы с расширениями c, cc, cpp, cs, java и так далее. Заголовочные h-файлы менять не требуется.

    Вы можете добавлять комментарии как вручную, так и воспользоваться для этого вспомогательной утилитой. Скачать утилиту (вместе с исходным кодом) можно здесь: how-to-use-pvs-studio-free.

    Всё это более подробно описано в статье "Как использовать PVS-Studio бесплатно". Попросите студентов ознакомиться с ней. В частности, надо учитывать, что поддержку для бесплатных пользователей мы оказываем через сайт StackOverflow. Но при этом не надо путать поддержку и уведомления о багах. Как раз про такие моменты и рассказывается в статье.

    Спасибо за внимание. В случае каких-то вопросов мы готовы оказать помощь и консультации. Смело пишите нам в поддержку.

    Дополнительные ссылки:

    1. Иван Пономарёв. Доклад на конференции Heisenbug 2019 Moscow: Непрерывный статический анализ кода.
    2. Сергей Хренов, Филипп Хандельянц. Мастер-класс на конференции Saint HighLoad++ 2019: Анализатор кода PVS-Studio.
    3. Андрей Карпов. Бесплатные варианты лицензирования PVS-Studio.
    4. PVS-Studio. Документация.



    Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Andrey Karpov. For professors' note: use PVS-Studio to get students familiar with code analysis tools.
    • +37
    • 3,2k
    • 4
    PVS-Studio
    411,81
    Static Code Analysis for C, C++, C# and Java
    Поделиться публикацией

    Похожие публикации

    Комментарии 4

      +3

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

        +1
        Да, можете.
        0
        Вопрос у меня тоже. Я тоже преподаю. Для IAR компилятора действует предложение? Если студенты код кладут в Github, то им тоже добавлять комментарии в каждый файл? И если они используют частично мой код, который уже проверен Lintом, но входит в их проект, им его тоже комментировать надо?
          0
          Для IAR компилятора действует предложение?
          Да.

          Если студенты код кладут в Github, то им тоже добавлять комментарии в каждый файл?
          На их усмотрение. Они могут воспользоваться другим вариантом лицензии "для открытых проектов".

          И если они используют частично мой код, который уже проверен Lintом, но входит в их проект, им его тоже комментировать надо?
          Не совсем понял вопрос. Если они не добавят, то не проверят. Так что видимо ответ, да.

        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

        Самое читаемое