Skip to content

AdvancedJavaLabs/software_testing_lab1_spring_2026

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

Цель

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Примечания

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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages