Дипломная работа: Оценка возможностей применения инструментов статического анализа в учебном процессе для проверки решений задач по программированию

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

ProxyPassReverse /sas/ http://localhost:8081/

3.8 Доработка web-клиента

1. Аутентификация в приложении статического анализа

Значение заголовка Authorization, сохраненное в браузере при аутентификации в системе дистанционного практикума недоступно в JavaScript-коде, поэтому необходимо пройти авторизацию в системе статического анализа в момент обработки CGI-запроса. Для этого в подпрограмму authenticate_process скрипта common_func.plдобавляется вызов сервиса /sas/auth, с передачей ему исходного заголовка Authorization. Полученный в ответ заголовок Set-Cookie необходимо вернуть на web-клиент. Таким образом, в браузере сохранится cookie сессии, созданной в приложении статического анализа.

$ua = LWP::UserAgent->new;

$req = HTTP::Request->new(GET => "http://" . $ENV{"HTTP_HOST"} . "/sas/auth");

$req->header('Authorization' => "Basic " . $ENV{'HTTP_CGI_AUTHORIZATION'});

$res = $ua->request($req);

print header(-status=>"301 Moved Permanently",

-cookie=>[$cookie_login],

-Location=>$new_url,

-Set_Cookie => $res->header('Set-Cookie'));

2. Отображение ошибок на странице просмотра решения

Шаблон страницы просмотра решения находится в файле src_full_ru.html.

Нужно подключить к странице скрипты jQuery и jQueryUI:

<script type="text/javascript" src="/jquery-3.4.1.min.js"></script>

<script type="text/javascript" src="/jquery-ui-1.12.1.custom/jquery-ui.min.js"></script>

На страницу добавляется div-блок с id=”accordion”, в котором будет отображаться выпадающий список ошибок.

При помощи jQuery необходимо назначить на событие загрузки DOM-модели страницы колбэк-функцию, в которой происходит инициализация определенного ранее блока выпадающего списка, но пока без загрузки его содержимого. Для этого используя функцию accordion библиотеки jQueryUI, инициализируется выпадающий список ошибок, на событие открытия которого назначается обработчик загрузки списка ошибок XHR-запросом к сервису /sas/issues. Полученный JSON приводится к списку ссылок (тегов <a>), который отрисовывается в раскрытой панели. После чего на ссылки в данной панели назначается колбэк-функция, которая подсвечивает в исходном тексте программы фрагмент текста с ошибкой.

В связи с тем, что тексты ошибок, генерируемыеcoala, изначально на английском языке, желательно предусмотреть возможность их перевода для русскоязычных пользователей. Для этого будет использованGoogleAPI. В теле страницы создается div-блок с class=”goog-trans-control” и подключается JS-скрипт Google-переводчика, который настраивается на этот класс и на класс объекта, содержимое которого необходимо перевести.

Полный текст кода JavaScript, определенного на странице просмотра решения, приведен в приложении 7.

3. Управление статическим анализом в панели администратора

В тело страницы добавляется div-блок с id=”static-analysis”, в котором в дальнейшем будет отрисовываться таблица компиляторов и модулей.На событие загрузки DOM-модели назначается колбэк-функция, котораяобращением к сервису /sas/admin/bears загружает список компиляторов и связанных с ними модулей статического анализа.

Для каждого компилятора в таблице создается строка, и в свою очередь в каждой из них также создается отдельная строка для связанных модулей coala с чекбоксами для включения/отключения статического анализа и включения/отключения отображения ошибок по решению.На события изменения состояния чекбоксов назначаются колбэк-функции, которые вызывают сервисы /sas/admin/analysis-state и /sas/admin/showing-state соответственно, которые изменяют состояние модулей в БД.

Полный текст кода JavaScript, определенного на странице администрирования, приведен в приложении 8.

В данной главе сформирован список инструментов, которые будут использованы в разработке системы. Разработана структура данных, представленная в формате DDL-скриптов. Настроено окружение для функционирования компонентов системы, в том числе AMQP-брокер, изолированная среда исполнения программы статического анализа и HTTP-сервер. Доработано существующее приложение проверяющей системы для уведомления разрабатываемого модуля о выполнении основной проверки решения. Реализовано приложение статического анализа, интегрированное в систему посредством технологий AMQP, REST, JDBC. В приложении реализован механизм аутентификации. Доработан web-клиент в соответствии с поставленными требованиями к отображению результатов статического анализа и управлению модулями статического анализа.

4. Тестирование

статический программный алгоритм

4.1 Обоснование методики тестирования

С целью проверки соответствия системы исходным требованиям будет проведено ее системное тестирование. На основе вариантов использования и поставленных требований будут определены тестовые случаи.

Тест-кейс №1 Проверка решения: ошибка компиляции.

Шаги

1. Авторизоваться в системе

2. Выбрать задачу, отправить заведомо некомплирующееся решение

3. Дождаться окончания окончания проверки

4. Перейти на страницу просмотра решения

Ожидаемый результат

Результаты статического анализа не отображаются, так как статический анализ не выполнялся

Тест-кейс №2 Проверка решения: успешная компиляция, ошибки дизайна

Предусловия

В панели администратора активирован анализ и отображение ошибок всех модулей

Шаги

1. Авторизоваться в системе

2. Выбрать задачу, отправить корректное решение, содержащее ошибки, обнаруживаемые статическим анализатором

3. Дождаться окончания проверки

4. Перейти на страницу просмотра решения

Ожидаемый результат

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

Тест-кейс №3 Изменение состояния активации модулей статического анализа в панели администратора

Шаги

1. Авторизоваться в системе под учетной записью администратора

2. Перейти в панель администрирования

3. Раскрыть список модулей, привязанных к любому компилятору, снять или поставить галку в чекбоксах «Enabled» и «Showed».

4. Обновить страницу

Ожидаемый результат

Состояние модулей сохранилось

Тест-кейс №4 Проверка решения: отсутствие ошибок

В панели администратора активирован анализ и отображение ошибок всех модулей

Шаги

1. Авторизоваться в системе

2. Выбрать задачу, отправить корректное решение, без ошибок, обнаруживаемых статическим анализатором

3. Дождаться окончания проверки

4. Перейти на страницу просмотра решения

Ожидаемый результат

Список ошибок дизайна программного кода не отображается

Тест-кейс №5 Скрытие результатов проверки определенными модулями

В панели администратора активирован анализ и отображение ошибок всех модулей

Шаги

1. Авторизоваться в системе

2. Выбрать задачу, отправить корректное решение, содержащее ошибки, обнаруживаемые статическим анализатором

3. Дождаться окончания проверки

4. Перейти на страницу просмотра решения

Ожидаемый результат

Список ошибок дизайна программного кодане отображается

Шаги

5. Авторизоваться под учетной записью администратора

6. В панели администратора отключить отображение ошибок по всем модулям для компилятора, который использовался при проверке решения

7. Перейти на страницу просмотра решения

Ожидаемый результат

Список ошибок дизайна программного кодане отображается

4.2 Результаты тестирования

Выполнено тестирование системы по составленным тест-кейсам. Результаты тестирования отражены в таблице 1.

Таблица 1 - Результаты тестирования

№ п/п

№ тест-кейса

Результат

1

1

пройден

2

2

пройден

3

3

пройден

4

4

пройден

5

5

пройден

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

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

Заключение

В выпускной квалификационной работе рассмотрены существующие системы дистанционного обучения программированию, изучены их возможности по анализу качества исходных кодов. Анализ показал, что наиболее популярные из существующих на рынке решений подобного функционала не предоставляют. Проведено исследование инструментов статического анализа с целью определения их применимости в системе дистанционного обучения, выбран инструмент, удовлетворяющий критериям применимости - coala.

Внедрение практики статического анализа было решено осуществить в систему дистанционного практикума по программированию кафедры АВТ Вологодского государственного университета. Спроектирован пользовательский интерфейс системы на основе существующего веб-интерфейса. Спроектирована архитектура разрабатываемой системы, связи между компонентами системы с учетом требований к минимальному вмешательству в существующую систему. Для интеграции компонентов было решено использовать обмен сообщениями по протоколу AMQP. Спроектированы структуры данных и алгоритмы для реализации поставленной задачи. Сформулированы требования к защите разрабатываемых сервисов от несанкционированного доступа.

Реализованы скрипты определения структуры базы данных, разработано приложение, выполняющее проверку решений статическим анализатором coala и предоставляющее API для работы пользователя через web-клиент. Осуществлена доработка web-клиента для отображения результатов статического анализа решения и управления модулями статического анализа. Отличительной особенностью решения является также то, что в нем применен механизм запуска статического анализа в изолированной среде, что сводит к минимуму требования к окружению, в котором развертывается система.

Выполнено тестирование системы, дефекты в ходе которого не обнаружены. Система удовлетворяет поставленным требованиям.

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

Реализованное решение показало, что практики статического анализа программного кода могут быть успешно применены к учебному процессу.

Литература

1. Статический анализ кода[Электронный ресурс] // PVS-Studio-Режим доступа: https://www.viva64.com/ru/t/0046/

2. Макконнелл С. Совершенный код. Мастер-класс / Пер. с англ. - М.: Издательско-торговый дом "Русская редакция"; СПб.: Питер, 2005. - 896 стр.: ил. ISBN 5-7502-0064-7.

3. Codesmell[Электронный ресурс] // Wikipedia - Режим доступа: https://en.wikipedia.org/wiki/Code_smell

4. 30+ онлайн ресурсов для изучения программирования в 2017 [Электронный ресурс] / Денис Зарицкий // Хабр - Режим доступа: https://habr.com/ru/post/331530/

5. List of tools for static code analysis [Электронный ресурс] // Wikipedia - Режим доступа:http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis

5. awesome-dynamic-analysis [Электронный ресурс] / Matthias Endler // GitHub - Режим доступа: https://github.com/mre/awesome-static-analysis

6. Статический анализ и регулярные выражения [Электронный ресурс] // PVS-Studio-Режим доступа: https://www.viva64.com/ru/b/0087/

7. coala.io [Электронный ресурс]: офиц. сайт. - Режим доступа: https://docs.coala.io/en/latest/index.html

8. Андрианов, И.А. Архитектура электронного ресурса для обучения информационно-коммуникационным технологиям / Андрианов И.А., Петров И.А., Ржеуцкая С.Ю. // Вузовская наука - региону: материалы Всероссийской научной конференции. - Вологда: ВоГТУ, 2008. - С. 44-47.

9. Spring Boot Reference Guide [Электронный ресурс] // Spring Framework - Режим доступа: https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/

10. Simple Amqp Client [Электронный ресурс] / Alan Antonuk // GitHub - Режим доступа: https://github.com/alanxz/SimpleAmqpClient

11. AMQP 0-9-1 Complete Reference Guide [Электронный ресурс] // RabbitMQ - Режим доступа: https://www.rabbitmq.com/amqp-0-9-1-reference.html

12. jQuery API Documentation [Электронный ресурс] // jQuery - Режим доступа: https://api.jquery.com/

13. Андрианов, И.А. Разработка и особенности использования дистанционного лабораторного практикума по программированию / Андрианов И.А., Менухова Н.О. // Современное общество, образование и наука: Сб. науч. тр. по материалам Между-нар. науч.-практ. конф. 2012. - С. 10-12.