Привет, Хабр! Меня зовут Анфиса Одинцова, я — наставница в Яндекс Практикуме на курсе «Инженер по тестированию». Сейчас работаю в JoomPay, а раньше — в Яндекс Дзен и ВК. В этой статье расскажу о важном аспекте тестирования — работе с логами. Ведь в мире разработки программного обеспечения логирование играет ключевую роль в обеспечении качества и отладке приложений. Для тестировщиков логи — ценный инструмент, который помогает нам понять работу приложения, обнаружить потенциальные проблемы и сделать наше тестирование более эффективным.

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

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

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

Когда тестировщик смотрит в логи

В зависимости от вида проводимого тестирования тестировщик может воспользоваться информацией из логов. 

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

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

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

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

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

  • При работе с событиями системы. Вас могут попросить разработчики или вам самим потребуется более детальная информация для понимания работы системы. 

Типы и уровни логов

Для начала разберёмся в категориях логов. Логи бывают разных типов и уровней детализации и критичности. 

Уровни логирования 

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

Тестировщику они нужны для понимания того, есть ли ошибка / насколько она серьёзная и нужно ли заводить баг и отнести баг-репорт.

Уровни логирования бывают: 

  • FATAL: является наивысшим уровнем критичности логов и указывает на самые критические ошибки и проблемы, которые могут привести к немедленному завершению программы или системы. Логи с уровнем FATAL обычно означают серьезные сбои, которые требуют немедленного вмешательства и исправления. 

  • ERROR: этот уровень используется для записи ошибок и проблем, которые могут привести к некорректной работе приложения. Логи с уровнем ERROR указывают на проблемы, которые требуют вмешательства и исправления.

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

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

  • DEBUG: содержат подробности о ходе выполнения приложения, значимые переменные и другие данные, которые могут быть полезными при обнаружении и исправлении ошибок.

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

Уровни детализации, с которыми чаще всего сталкивается тестировщик

Тестировщик чаще всего работает с ошибками (ERROR, реже FATAL) и c предупреждениями (WARN). Но для получения информации иногда, бывает, обращается к информационным логам (INFO). 

Уровень логирования может быть настроен в зависимости от потребностей разработчика или тестировщика. 

Обычно в продакшене уровень детализации не устанавливается на самый высокий, чтобы не перегружать логи большим объёмом информации. В то время как во время разработки или отладки можно использовать такие уровни детализации, как DEBUG или TRACE, для более глубокого анализа и отслеживания проблем.

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

Сверху ошибки по уровню критичности, а ниже информационные логи, расположенные по степени подробности
Сверху ошибки по уровню критичности, а ниже информационные логи, расположенные по степени подробности

Какие виды логов бывают и зачем их знать тестировщику

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

Зачем их знать тестировщику? Чтобы понимать, к какому типу логов обратиться для проверки и дебага сервера или клиента,  например при тестировании бэкенда, нам скорее всего понадобятся логи сервера. 

Тестировщик чаще всего работает с логами приложения, логами сервера и системными логами. Разберёмся, что значит каждый из видов:

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

  1. Логи сервера (Server logs). Это логи, генерируемые серверами и веб-серверами. Они содержат информацию о работе сервера, запросах, ошибочных ситуациях, подключениях и других событиях, происходящих на сервере. Логи сервера помогают администраторам серверов и разработчикам отслеживать состояние сервера, обнаруживать проблемы с производительностью, безопасностью и настраивать серверное окружение.

Логи сервера часто делятся на два типа: 

  • Error logs (это информация об ошибках)

  • Access Logs (общая информация о запросах и ответах к серверу) 

  1. Системные логи (System logs): Это логи, записываемые операционной системой. Они содержат информацию о работе операционной системы, событиях, ошибках, состоянии системы, процессах, сетевых подключениях и других системных событиях.

Это основные виды логов, с которыми обычно приходится сталкиваться тестировщику. Также существуют и другие виды, но чаще всего в работе тестировщик к ним не обращается. 

Схема с некоторыми примерами логов.
Схема с некоторыми примерами логов.

Что хранится в логах

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

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

  • системную информацию (время и дата события, ID события и другая служебная информация);

  • уровень лога;

  • текст сообщения (например, сообщения об ошибке);

  • контекст (дополнительная информация).

Разберем, как это выглядит, на сообщении об ошибке: 

Дата и время: 2023-05-18 10:23:45 — указывает точное время, когда произошла ошибка.

Уровень лога: [ERROR] — указывает на уровень ошибки.

Контекст: [Server] — указывает на компонент или модуль системы, в котором произошла ошибка.

Сообщение об ошибке: Exception occurred while processing request — описание самой ошибки.

Стек вызовов: Последующие строки показывают стек вызовов и указывают на классы и методы, в которых произошла ошибка. В данном примере указывается, что ошибка возникла в методе handleRequest класса MyController (строка 32), затем в методе processRequest класса Server (строка 87) и так далее.

Заключение

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

Комментарии (3)


  1. tas
    06.06.2023 07:10

    Еще пара нюансов:

    • если у вас есть персональные данные и/или гос. контракт логи закрывают требования к защите информации по 152 ФЗ и становятся событиями безопасности, описывающие доступ субъекта через программные средства к защищаемым объектам доступа , с указанием успешности вызова и прочее...

    • Если у вас есть процессы или обработка объекта, то логи должны быть коррелированы - в разных событиях лога должен быть атрибут с экземпляром процесса, id входящего сообщения и прочее...


    1. inquisitio
      06.06.2023 07:10

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


  1. ness_ui_dev
    06.06.2023 07:10
    +1

    ????????