Рубрики
Без рубрики

Тестирование устаревшего кода, часть 1: С чего начать

Как убить монстра со спагетти-кодом? Один тест за раз. Помечено тестированием, java, устаревшим кодом, рефакторингом.

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

Намерения ясны, вы должны быть в состоянии извлечь из этого выгоду, если эти моменты звучат знакомо:

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

С чего начать?

Статический анализ кода

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

Почему это так важно?

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

SonarQube может предоставить вам довольно подробный отчет о покрытии, поэтому, если ваша цель на самом деле найти хороших кандидатов для тестирования это то место, с которого нужно начать. Это также очень легко настроить, и преимущества хорошо видны также для нетехнических людей (диаграммы и тому подобное).

Анализ индивидуального кода

Вам также нужно будет приложить некоторые усилия для индивидуального анализа. Это мои обычные наблюдения о унаследованном коде:

  • код не поддается модульной проверке (большие методы – нет модулей, классы берут на себя слишком много обязанностей, отсутствует внедрение зависимостей, сложная иерархия классов и т.д.)
  • бизнес-логика сложна и требует большой подготовки тестовых данных
  • для выполнения определенных операций требуются внешние библиотеки или сторонние приложения (внешний API, база данных и т.д.).

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

Следуйте за нитью

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

Например, если приложение предоставляет общедоступные API-интерфейсы, начните с написания тестов API. Если это серверная система “обработки данных”, попробуйте придумать возможные тестовые/ожидаемые данные и так далее. Обычно вам следует искать то, что я люблю называть наименее неясным черным ящиком . Это компонент с известной функциональностью, но неизвестной реализацией.

Почему это так важно?

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

Собирая все это вместе

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

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

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

Оригинал: “https://dev.to/rapasoft/testing-legacy-code-part-1-how-to-start-2km7”