Всем привет, меня зовут Иван, я инженер по тестированию (Manual and Automation). В ремесле более 2-х лет. В этой статье мы рассмотрим методы черного, серого и белого ящиков, а так же как JavaScript может быть использован для перехода от метода черного ящика к серому и белому.

Со мной сегодня senior фронтенд-разработчик, Алексей - специалист с большим опытом, он научит вас дебажить код в Devtools и ставить точку останова. Даст советы для QA как стать самостоятельнее и определять ошибки в коде с базовыми знаниями JavaScript. Ссылка на канал Алексея "Рассказ фронтендера"

Для чего нам нужна точка останова и как это связано с методами тестирования?

Что такое метод тестирования? Это метод подхода к тестированию: можно подойти к тестированию закрытыми глазами с тест-дизайном "Исследовательское тестирование", а можно изучить, что происходит под капотом и уже как механик капаться в грязи в чужом коде. Точка останова это один из гаечных ключей, которые помогут проверить код и его реализацию в проекте.

ТЕОРИЯ (1 мин)

QA подходит к тестированию по трём методам:

Метод черного ящика - тестирование ПО без знания его внутренней структуры и реализации.

Независимость от внутренней реализации: QA-специалисты могут тестировать ПО, не зная деталей его реализации. Это позволяет им сосредоточиться на проверке функциональности и пользовательского опыта.

Метод серого ящика - тестирование с некоторым представлением о внутренней структуре ПО.

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

Метод белого ящика - тестирование внутренней структуры и реализации ПО.

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

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

Elements - вкладка, позволяющая просматривать и редактировать HTML-структуру страницы, а также изменять стили элементов.

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

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

Sources - позволяет просматривать и отлаживать JavaScript-файлы (картинки, css- файлы и др.), а также устанавливать точки останова в исходном коде для отладки js скрипта.

ПРАКТИКА (20 мин)

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

В новом функционале заложены переменные speed и rotate, у которых есть значения. Необходимо сравнить ожидаемый результат (требования) с фактическим.

https://ivaniksanov.github.io - тестируемый сайт на котором вы можете сами следовать инструкции ниже. Рекомендую использовать Chrome Browser.

Переходим на сайт и открываем инструмент разработчика (devtools) - вкладка Sources.

Sources - Page - ivanIksanov.github.io - main.js
Sources - Page - ivanIksanov.github.io - main.js

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

Веб-сайт обычно состоит из трех основных компонентов:

HTML (HyperText Markup Language) - это язык разметки, используемый для создания структуры и содержимого веб-страницы.

CSS (Cascading Style Sheets) - это язык стилей, который определяет внешний вид и оформление веб-страницы.

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

Легенда скриншота указана ниже соответствующим цветом
Легенда скриншота указана ниже соответствующим цветом

???? В оранжевой области код JavaScript. Для удобства понимания кода мы оставили комментарии по каждому блоку функций наших снежинок.

???? В зелёной - номера строк, при нажатии на строку мы активируем точку останова.

???? В фиолетовой - управление точкой останова. Пропустить точку, пойти по шагам функции, отобразить значения переменной и т.д.

ТРЕБОВАНИЯ:

Скорость снежинок должна быть разной для реалистичности, примерно speed (2-3 сек) и задается случайным числом. Поворот rotate (направо и налево) снежинок так же случайным числом, но не слишком быстро. Снежинки также не должны перегружать интерфейс веб-сайта. Протестировать кол-во снежинок при нахождении на сайте более 5 мин.

Breakpoint — это инструмент отладки, который позволяет нам выбрать определенную строку кода, на которой мы хотим остановиться, чтобы проанализировать данные и состояние программы в этой точке. Breakpoint = Точка останова

Точку останова нельзя поставить на инициализацию функции:

????function createSnowflake() {

Инициализация функции createSnowflake() представляет собой объявление функции и определение ее тела. Это лишь создает функцию в памяти, но само выполнение кода внутри функции происходит только при вызове этой функции.

Легенда скриншота указана ниже соответствующим цветом
Легенда скриншота указана ниже соответствующим цветом

После активации точки останова необходимо запустить дебаг кода путем любого клика на веб-сайте. (После клика активируется функция и соответсвенно точка останова)

Установив breakpoint, мы останавливаем выполнение функции на этой строчке. Это позволяет нам продолжить выполнение кода построчно, чтобы отследить изменения нашей переменной.

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

???? Зеленым выделены значения по каждой строке кода и значения переменных.

???? Синим обозначен раздел Watch, в котором можно добавить наименования переменных и смотреть их значения. Также эти же значения можно увидеть в зеленой области.

Пришло время понять значения переменных и сравнить с требованиями

randomSize - случайное значение размера снежинок в пределах от 20px до 80px.

startX - случайное значение появление снежинки от левого края.

speed - случайная скорость, но не падения, а поворота снежинок.

Легенда скриншота указана ниже соответствующим цветом
Легенда скриншота указана ниже соответствующим цветом

???? Голубым цветом указана переменная speed она используется в повороте снежинок rotate ${speed}s linear infinite

???? Оранжевым указано значение скорости снежинок - 3 секунды, snowfall 3s linear infinite - это означает отклонение от требований. Скорость снежинок одинаковая, а должна зависеть от случайного числа переменной speed.

Уже можно завести задачку в Jira и прикрепить ОР и ФР.

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

❄️ Напишите в комментариях, что происходит на сайте, если пользователь будет находится более 5 минут, и что можно поменять в коде для исправления ошибки.

Подсказка:

Комментарий с ошибкой намеренно)
Комментарий с ошибкой намеренно)

Спасибо нашему фронтенд-разработчику, Алексею, за переход от метода черного ящика к серому, путем прекрасного инструмента браузера - Devtools (Breakpoint).

❄️ Ссылка на канал Алексея, где он помогает понять JavaScript "Рассказ фронтендера"

❄️ Контакт QA Ивана - тг для связи @evanovnew

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


  1. r_anisimov
    23.12.2023 11:14

    Ничего не понял, но, полагаю, они не удаляются, судя по коду, и никакие точки останова не нужны, ибо не тот код, чтобы с этим заморачиваться, слишком простой. А у вас отсутствие понимания назначения спойлеров. И странно, что 2000 мс у вас равно 0,5 с.


    1. ivaniksanov Автор
      23.12.2023 11:14

      Легкий код, потому-что для джунов! И вы правы, что комментарий неверный тк 2000 это 2 секунды, а описано как 0,5.


  1. yarkov
    23.12.2023 11:14

    И так полстатьи скрыто. Нафига? ))


    1. ivaniksanov Автор
      23.12.2023 11:14

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


  1. nronnie
    23.12.2023 11:14

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

    И еще. У вас на скриншотах простой, обычный JS. Попробуйте это провернуть с каким-нибудь приложением angular, которое до того как уходит в браузер сначала transpile-ится, пакуется, и минимизируется. Потому что сто лет прошло, а source map в JS так толком и не работает, и, обычно, единственно действующий вариант это вставлять в исходный код руками console.log('Я тут!); и искать нужное место через выхлоп в окне консоли.


    1. 19Zb84
      23.12.2023 11:14

      сто лет прошло, а source map в JS так толком и не работает

      Может быть так и должно быть. Сейчас в js модули появились и код можно без бандлов запускать.


      1. nronnie
        23.12.2023 11:14

        Ну ладно, бандлы, а TS -> JS, а минификация? Почему, вот, блин, на бекенде в .NET я просто в студии ставлю где мне надо точку останова, запускаю с "F5" и все всегда происходит ровно так, как я ожидаю, а на фронтенде даже для таких элементарных вещей постоянно требуется какое-то шаманство :)


  1. disco18
    23.12.2023 11:14

    А можно просто дать ссылку на Гугл хром девтулз ну чтоб человек ничего не пропустил мало ли


  1. dsh2dsh
    23.12.2023 11:14

    QA теперь ещё и отлаживать код должны? Исправления к найденным ошибкам тоже QA писать должны? Простите, несколько оторвался от жизни.


    1. ivaniksanov Автор
      23.12.2023 11:14

      Если планируете стать QA senior в большой ИТ компании, то должны. Если оставаться на уровне принеси-подай, то не должны получается)


      1. 0Bannon
        23.12.2023 11:14

        А можно сразу без ручного тестирования, в авто джуном попасть? Или это называется sdet и ты всё равно типа разработчик.


      1. AndyStatic
        23.12.2023 11:14

        Зачем тогда Dev, если QA это может делать? Сгенерил код в ChatGPT и отдал "QA senior в большой ИТ компании на отладку". Похоже Вас на текущем месте разводят что вы QA, на самом деле вы джун Dev, который реально "принеси-подай" для Senior Dev.

        JavaScript для QA - это автоматизированные тесты на playwright/cypress/etc. для этой функциональности.

        Да и разве IDE не будет дебажить код гораздо эффективней чем DevTools. Нельзя проблему из статьи попытаться повторить локально через IDE и в ней поймать ошибку? Но опять же, зачем мне как QA это когда либо делать?


        1. ivaniksanov Автор
          23.12.2023 11:14

          Статья о переходе из метода черного ящика в метод серого и белого. Писать про IDE я буду уже для junior+ и middle. Если QA специалист (ключевое слово специалист) владеет навыками Dev, то это не означает, что он это будет делать за разработчика)))) Советую перечитать вступление. Devtools для всех необходим и писать «Зачем ты сюда лезешь, закрой» прям по-детски????


    1. Tempest23
      23.12.2023 11:14

      Как QA могу сказать, что всякое приходится делать. Да, если вы откроете ISTQB, то там скажут, что мы баги ищем, а разработчики дебажат.

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

      Так что соглашусь с автором: хотите приносить пользу и чего-то достичь в профессии, придётся что-то уметь.


  1. aladkoi
    23.12.2023 11:14

    Очень странная статья. Как можно вести web разработку, не зная данных элементарных вещей ?


    1. valeravv
      23.12.2023 11:14

      Так тут поделили: разработка и QA, видимо разработчики знают "все", QA - "ничего".


    1. ivaniksanov Автор
      23.12.2023 11:14

      Статья для джунов, для джунов не элементарно, и судя по количеству сохранений статьи в закладки - не так уж это элементарно)