Основные советы по обеспечению качества программного обеспечения для технологии Java

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

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

В этой статье я расскажу, как решить проблему качества программного обеспечения, создав набор инструментов в дополнение к тестированию. Я продемонстрирую всю настройку конвейера CI / CD для примера приложения Java.

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

С одного взгляда

Вот список тем, которые будут рассмотрены в этой статье по контролю качества программного обеспечения:

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

Инструменты

Для технологии Java в реализации конвейера будут использоваться следующие инструменты:

  • Maven - это основной инструмент для сборки исходного кода и выполнения тестов.
  • JaCoCo - собирает информацию о покрытии модульными тестами и создает отчет.
  • Sonarqube - он играет ключевую роль в анализе исходного кода, и конвейерный процесс будет прекращен, если исходный код не соответствует стандартам качества.

Покрытие модульных тестов - JaCoCo

Тестирование белого ящика

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

Тестовое покрытие

Как узнать, полностью ли покрывают ваши модульные тесты всю системную логику? Проверка - это трудоемкая задача, тем более, что в логике вашей программы есть несколько ветвей. JaCoCo - отличный инструмент для проверки покрытия.

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

Обзор на уровне приложения

Уровень класса со списком методов

Уровень исходного кода с выделенным покрытием

Настройка довольно проста, это просто конфигурация плагина в Maven pom.xml. Таким образом, вы можете включить его, добавив следующие строки в свой Maven pom.xml, и вы найдете отчет в target / site / jacoco после выполнения тестового примера.

Комплексный анализ кода - Sonarqube

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

Следовательно, вам, вероятно, понадобится компонент на стороне сервера, способный выполнять более расширенный анализ и сохранять результат. Sonarqube - популярный инструмент, безусловно, подходит для этой цели.

Отправив код в Sonarqube для сканирования, вы можете получить доступ к отчету на его веб-портале. В приведенном ниже примере показаны результаты по категориям - надежность, безопасность, безопасность, ремонтопригодность, дублирование кода, а также покрытие тестами.

Он поставляется с качественным воротом, который указывает общий статус Pass или Failed. Статус ремонтопригодности - это интересная цифра, которая иллюстрирует ориентировочные усилия по устранению неприятных запахов в коде. Команда, возможно, может использовать его как ориентир при планировании невыполненных работ по устранению технического долга.

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

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

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

Если вы получите список проблем без каких-либо подсказок, как с ними справиться, это головная боль. Не беспокойтесь, для вашего удобства сканер предоставляет объяснения и предлагаемые решения.

Помимо проблем, выделенных на уровне исходного кода, и списка проблем, Sonarqube предоставляет другие диаграммы, которые дадут вам представление с разных точек зрения.

Настройка

Развертывание компонентов с помощью докера - удобный способ, и это можно сделать за несколько минут. См. Определение docker compose ниже:



Вы можете клонировать репозиторий git и запустить команду docker compose, чтобы развернуть среду:

> git clone https://github.com/gavinklfong/docker-compose-collection.git
> cd cicd-stack
> docker-compose up

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



Частая проверка стиля кода - SonarLint

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

SonarLint является частью Sonarqube, это плагин IDE, доступный для многих популярных IDE, таких как Eclipse, IntelliJ и Visual Studio Code. Очевидно, что IDE - идеальный инструмент, чтобы предупреждать вас о любых проблемах во время написания кода, вам потребуется всего несколько минут, чтобы исправить любые ошибки. Тем не менее, этот инструмент - ваш помощник по кодированию, но он не заменяет Sonarqube, который предлагает более полный анализ кода.

Вот пример снимка экрана Eclipse с проблемой, выделенной в исходном коде:

Автоматизированный конвейер с проверкой качества - Дженкинс

Усиление контроля качества имеет важное значение для обеспечения соответствия стандартам. За счет настройки автоматизированного конвейера CI / CD с воротами качества качество вывода гарантируется, поскольку стандарты качества строго соблюдаются, и никакой нестандартный код не может быть развернут без прохождения контроля качества.

Проектирование трубопроводов

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

  1. Модульный тест - все модульные тесты пройдены.
  2. Анализ кода - соблюдены все стандарты качества по всем параметрам. В анализ кода вовлечены следующие параметры: надежность, безопасность, ремонтопригодность и охват модульных тестов.
  3. Тест интеграции - все тесты интеграции пройдены
  4. Сквозное тестирование - все тесты пройдены.

Реализация конвейера

Шаги конвейера определяются с помощью сценария Groovy, сценарий декларативен и интуитивно понятен, поэтому вы сможете быстро понять логику.

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

  • Модульный тест. Запустите все тестовые примеры с тегом «UnitTest» с помощью подключаемого модуля Maven surefire.
  • Тест интеграции - выполните все тестовые примеры с тегом «IntegrationTest» с помощью подключаемого модуля Maven surefire.
  • Сквозной тест - запуск целевого тестового примера java-класса с помощью отказоустойчивого плагина Maven. Это тест огурца, он автоматически запускает все файлы функций.

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

В моем примере вы можете найти Groovy-скрипт Jenkins в репозитории Git как часть исходного кода приложения.

Конвейер в действии

Этот пример демонстрирует сценарий, в котором исходный код не проходит проверку качества в Sonarqube. Поскольку порог качества НЕ пройден, вы можете видеть, что конвейер прерывает все последующие шаги.

Чтобы исправить проблемы с кодом, давайте подробно рассмотрим отчет Sonerqube. Он предлагает удобный способ перейти к проблемному исходному коду с подробным описанием проблем.

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

Репозиторий Git

Вы можете обратиться к этому репозиторию git для примера приложения с помощью сценария Jenkins Groovy и Maven pom.xml, если вас интересует реализация конвейера.



Последние мысли

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

Доступно множество отличных инструментов, таких как сканирование кода и автоматизированный конвейер CI / CD с контролем доступа. Таким образом, вы можете быстро установить и автоматизировать процесс контроля качества, не вкладывая огромных средств в настройку. Что еще более важно, процесс контроля качества в сочетании с командным духом и стремлением к достижению высокого качества, безусловно, будет иметь значение.

Если вы заинтересованы в создании конвейеров на облачной платформе, то статья ниже для вас, поскольку в ней подробно рассказывается, как построить такой же конвейер с проверками качества на популярной облачной платформе - CircleCI. .