Введение 4
1. Постановка задачи 7
2. Требования к системе 8
2.1. Функциональные требования 8
2.2. Нефункциональные требования 10
3. Обзор предметной области 11
3.1. Обзор существующих подходов и решений 11
3.2. Обзор инструментов 11
3.3. Выводы 13
4. Архитектура системы и особенности реализации 15
5. Апробация прототипа 20
Заключение 22
Список литературы 23
«Хороший код», «качество кода» - это понятия, которые имеют как довольно общее определение, так и определенную специфику в рамках компании или даже конкретного проекта. Некачественный код характеризуется смешением стилей программирования, это приводит к усложнению разработки. Для того, чтобы избежать смешения разных стилей написания кода в одном проекте, существуют руководства, описывающие общие принципы работы с кодом. Такие документы могут быть разработаны в масштабе компании, рабочей группы или проекта. Обычно в них описываются общеизвестные аспекты, например:
• рекомендации по использованию регистров в названиях переменных, методов или классов, такие как CamelCase, snake_case, kebabcase [4];
• запрет на использование функции вывода в консоль для приложений, исполняемых в браузере;
• рекомендации по расстановке скобок, ограничивающих логические блоки.
В частных случаях, в рамках конкретных проектов, руководства могут содержать и другие рекомендации:
• запрет на использование ’’магических” констант: цветов ”#42f4d9” или чисел ”54362”;
• запрет на использование url-ссылок на ресурсы, не входящие в список разрешенных;
• ограничение на длину и количество строк в файле с исходным кодом.
Если программисты не следуют стандартам, читаемость кода ухудшается, появляются проблемы с безопасностью, а время, затрачиваемое на разработку, увеличивается. Например, использование печати в консоль в веб-приложении может привести к тому, что пользователь увидит информацию, которая ему не предназначена. Неиспользование точки с запятой в конце строк JavaScript-кода может привести к неопределенному поведению программы.
В каждой языковой среде существуют свои правила и практики разработки. В рамках проекта рассматривается написание приложений на языке JavaScript с использованием закрытого фреймворка SAP UI5 [9] - это набор инструментов, основанный на технологиях HTML5, CSS3, OData, поддерживающий разработку как мобильных, так и веб-приложений. SAP UI5 используется для создания сложных бизнес решений с множеством данных и сервисов, вследствие этого были разработаны наборы правил для стандартизации клиентского кода. Но при разработке некоторые правила нарушаются и игнорируются, таким образом возникла задача проверки качества клиентского кода в проектах.
Проверку кода можно производить с помощью статического [11] и динамического анализа [2]. Для статического анализа не требуется запуск программы, с помощью него можно обнаружить неопределенное поведение или ошибки в повторяющемся коде. Динамический анализ требует запуск программы, но дополнительно помогает найти программные ошибки, определить используемые ресурсы. Статический анализ кода встроен в продукт компании SAP Web IDE [8], однако зачастую клиенты могут игнорировать замечания, пользоваться устаревшей версией Web IDE, где не была встроена проверка или использовать другую среду разработки. Впоследствии необходимо вручную проводить проверки, чтобы обнаружить блоки кода, несоответствующие описанным стандартам.
Существует множество программных решений для выполнения автоматической проверки JavaScript-кода, например, ESLint [17], JsInspect [12]. Однако в ситуации, когда клиент компании просит сделать оценку качества кода, необходимо произвести многочисленные действия, например:
• применить набор инструментов;
• свести результаты в один отчет и выдать его клиенту;
• учесть особенности продукта клиента (к примеру, использование SAP UI5).
Поэтому возникает необходимость в разработке системы, которая позволила бы оптимизировать и ускорить процесс оценки качества кода, выделить основные проблемы, наметить пути решения и обладала расширяемостью, необходимой для увеличения функциональности проверок. Таким образом моей задачей стала автоматизация процесса, который ранее выполнялся вручную не оптимально по затрачиваемым ресурсам.
В ходе выполнения выпускной квалификационной работы были достигнуты следующие результаты.
• Разработаны требования к системе.
• Сделан обзор существующих решений для анализа качества кода.
• Разработана архитектура системы, основанная на принципе простоты расширяемости.
• Реализован прототип системы, включающий следующие компоненты:
• набор уникальных правил для оценки клиентского кода;
• набор скриптов для анализа качества кода;
• графический веб-интерфейс, выполненный с использованием инструмента SAP UI5.
• Апробация продукта проведена на 35 проектах, разработанных с использованием SAP UI5.