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

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

![0675_pvs_studio_academic_ru/image1.png](https://import.viva64.com/docx/blog/0675_pvs_studio_academic_ru/image1.png)


> \*\*Примечание\\\.\*\* Вариант бесплатного лицензирования, основанный на добавлении в код специальных комментариев, больше не поддерживается\\\.

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

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

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

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

![0675_pvs_studio_academic_ru/image2.png](https://import.viva64.com/docx/blog/0675_pvs_studio_academic_ru/image2.png)

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

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

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

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

Про динамический анализ сейчас я ничего говорить не буду, хотя он не менее [важен](https://pvs-studio.ru/ru/blog/posts/0643/), чем статический\.

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

[PVS\-Studio](https://pvs-studio.ru/ru/pvs-studio/) \- это инструмент для выявления ошибок и потенциальных уязвимостей в исходном коде программ, написанных на языках С, C\+\+, C\# и Java\. Работает в 64\-битных системах на Windows, Linux и macOS и может анализировать код, предназначенный для 32\-битных, 64\-битных и встраиваемых ARM платформ\.

Анализатор PVS\-Studio можно рассматривать как пример современного инструмента статического анализа кода\. Во\-первых, на его примере хорошо показывать возможности инструментов статического анализа в выявлении [ошибок](https://pvs-studio.ru/ru/blog/inspections/) и дефектов безопасности \([SAST](https://pvs-studio.ru/ru/pvs-studio/sast/)\)\. Во\-вторых, можно продемонстрировать его интеграцию в цикл разработки программного обеспечения, чтобы контроль кода был непрерывен\. На его примере можно показывать возможность интеграции с такими системами, как [Jenkins](https://pvs-studio.ru/ru/blog/posts/0668/), [TeamCity](https://pvs-studio.ru/ru/docs/manual/0049/), [Azure DevOps](https://pvs-studio.ru/ru/blog/posts/csharp/0670/), [SonarQube](https://pvs-studio.ru/ru/docs/manual/0037/), [Travis CI](https://pvs-studio.ru/ru/blog/posts/cpp/0661/) и т\.д\.

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

Мы предоставляем несколько [вариантов](https://pvs-studio.ru/ru/blog/posts/0614/) бесплатного лицензирования 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 или используете утилиту "C and C\+\+ Compiler Monitoring UI" \(Standalone\.exe\), то введите следующий лицензионный ключ:

Name: PVS\-Studio Free

Key: FREE\-FREE\-FREE\-FREE

Если Вы используете PVS\-Studio for Linux/macOS, то воспользуйтесь командой:

pvs\-studio\-analyzer credentials PVS\-Studio Free FREE\-FREE\-FREE\-FREE

Примечание\. Ранее для активации бесплатной лицензии для Linux\-версии было достаточно только комментария\. Теперь требуется вводить и этот специальный ключ, так как без него некоторые сценарии использования анализатора оказались неудобными\. [Подробнее](https://stackoverflow.com/a/65475501/7772356)\.

**Шаг второй**

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

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

Всё это более подробно описано в статье "[Как использовать PVS\-Studio бесплатно](https://pvs-studio.ru/ru/blog/posts/0457/)"\. Попросите студентов ознакомиться с ней\. В частности, надо учитывать, что поддержку для бесплатных пользователей мы оказываем через сайт Stack Overflow\. Но при этом не надо путать поддержку и уведомления о багах\. Как раз про такие моменты и рассказывается в статье\.

Спасибо за внимание\. В случае каких\-то вопросов мы готовы оказать помощь и консультации\. Смело [пишите](https://pvs-studio.ru/ru/about-feedback/) нам в поддержку\.

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

1. Иван Пономарёв\. Доклад на конференции Heisenbug 2019 Moscow: [Непрерывный статический анализ кода](https://youtu.be/_Wv-PvZeRlI)\. 
1. Сергей Хренов, Филипп Хандельянц\. Мастер\-класс на конференции Saint HighLoad\+\+ 2019: [Анализатор кода PVS\-Studio](https://youtu.be/l5eosO_iBVw)\.
1. Андрей Карпов\. [Бесплатные варианты лицензирования PVS\-Studio](https://pvs-studio.ru/ru/blog/posts/0614/)\. 
1. PVS\-Studio\. [Документация](https://pvs-studio.ru/ru/docs/)\.