Преподавателям на заметку: 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.
    • +36
    • 2.9k
    • 4
    PVS-Studio
    676.35
    Static Code Analysis for C, C++, C# and Java
    Share post

    Comments 4

      +3

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

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

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

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

        Only users with full accounts can post comments. Log in, please.