Skip to content

Latest commit

 

History

History
63 lines (46 loc) · 7.6 KB

File metadata and controls

63 lines (46 loc) · 7.6 KB

Задание 1: Тестирование и анализ покрытия кода для сервиса аналитики пользователей

Цель

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

Важно: код сервиса может содержать ошибки. Спецификацией считаются JavaDoc-комментарии к методам. Если поведение метода не соответствует его спецификации — это баг. Ваша задача — обнаружить такие расхождения с помощью тестов.

Этап 1: Тестирование по спецификации

  1. Изучите спецификацию методов сервиса:

    • Ознакомьтесь с кодом класса UserAnalyticsService и спецификацией методов, представленных в комментариях к коду.
  2. Создайте план тестирования:

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

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

Этап 2: Анализ покрытия

  1. Проверьте покрытие кода:

    • Используйте инструмент для анализа покрытия кода, например, JaCoCo или встроенный в IDE, чтобы определить, какие части кода были протестированы. Покрытие измеряется для текущего кода как есть — исправлять код сервиса не нужно.
    • Проверьте два вида покрытия:
      • Покрытие строк (line coverage):
        • Убедитесь, что каждая строка в коде метода была протестирована хотя бы один раз.
      • Покрытие ветвей (branch coverage):
        • Убедитесь, что все возможные пути выполнения (ветви) были проверены. Это особенно важно для методов с условными операторами, например, if, else, и исключениями.
  2. Добейтесь достойного покрытия:

    • Попробуйте достичь как минимум 90% покрытия строк и 80% покрытия ветвей. Если в процессе тестирования не удаётся достичь этих показателей, объясните, почему не удалось покрыть определённые участки кода (например, из-за сложности условий или невозможности воспроизвести определённые сценарии).
  3. Обоснование покрытия:

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

Ожидаемые результаты (сдаём очно, никаких отчётов писать не надо, просто мне расскажете)

  • План тестирования:

    • Тесты должны покрывать основные сценарии работы сервиса, включая граничные случаи.
  • Реализованные тесты:

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

    • Для каждого обнаруженного бага расскажите: какой метод затронут, в чём расхождение со спецификацией, и какой тест это демонстрирует.
  • Обоснование покрытия:

    • Должно быть предоставлено обоснование, что выбранное покрытие тестов достаточно для проверки корректности сервиса.

Примечания

  • Код сервиса изменять запрещено. Тесты пишутся для кода «как есть».
  • Если во время написания тестов возникает какая-то неоднозначная ситуация, то решить её можно самостоятельно, не надо спрашивать преподавателя.