Всем привет! Сейчас расскажем про внутреннюю программу обучения для QA. В наших продуктовых командах все QA-инженеры пишут автотесты, для этого мы используем связку Java+Selenium. У всех разный уровень владения инструментами и опыт программирования. Чтобы выровнять уровень владения Java в командах и помочь новым сотрудникам быстрее влиться в нашу среду автотестов, в 2022 году мы решили сделать внутреннюю программу обучения, определив минимально необходимый уровень владения технологическим стеком. В статье поговорим о том, как мы создавали нашу программу, расскажем, из чего она состоит и разберем нюансы.
Подготовка
Наша цель — получить штат специалистов с набором навыков, необходимых для выполнения своих задач. Количество QA в hh.ru на текущий момент приближается к 50, а новые команды появляются с завидной регулярность, и в них всегда нужны новые QA. Поэтому мы решили, что курс будет читаться регулярно: раз в полгода для всех пришедших новичков за этот период. При желании к ним могут присоединиться и более опытные сотрудники, чтобы поглубже изучить интересующую тему.
Окей, у нас есть стек для обучения и аудитория. Теперь необходимо определить, какая информация и в каком объеме будет даваться в ходе занятий. Был велик соблазн просто взять готовые темы из наиболее адекватных и популярных учебников и просто отдать на изучение нашим “студентам”. Удобно ли это для нас? Безусловно. Будет ли это эффективно в плане обучения новичков? Вряд ли. В общем, мы решили проводить лекции по каждой теме с актуализацией внимания на ключевых моментах.Осталось только понять, где взять эти темы. Для начала решили провести ревью кода наших “учеников” и посмотреть, где наблюдаются самые серьезные просадки по знаниям. Так мы нашли темы.
Процесс
В результате код-ревью и последующего анализа образовался список конкретных тем. После прохождения каждой темы выдается домашнее задание для закрепления. Некоторые задания взаимосвязаны — последующие домашки расширяют предыдущие с использованием новых подходов.
В итоге у нас получился следующий набор тем:
Типы данных, условные ветвления, циклы, массивы
Виды функций, области видимости, параметры, перегрузка, рекурсия
4 принципа ООП, абстрактные классы и интерфейсы, статические члены класса, вложенные классы
Иерархия исключений, try..catch..finally, throw-throws, собственные типы исключений
Generics, wildcards, ограничения сверху и снизу, функциональные интерфейсы, лямбды
Иерархия коллекций, list, queue, set, map, итераторы, stream api, Optional.
Виды паттернов, паттерны в автотестировании
Фреймворки: testng, selenium, maven, Log4j
Структура проекта автотестов на hh.ru. Основные классы, пакаджи и структура тестов
Разработка автотестов: общие правила написания тестов, рекомендации по их написанию и разбор типовых ошибок
Basic sql: виды запросов, joins, агрегирование
JDBC: сущности, создание подключения, отправка запросов, обработка запросов
Интеграционные тесты: теория, выбор сервиса для тестирования, типовая структура тестов и ее кодогенерация
Формат, периодичность, материалы
Лекции проводятся онлайн, в формате созвона с демонстрацией презентации и экрана. Чтобы аудитория не скучала, по завершении мини-блока темы лектор задает небольшие задачки по материалу. Средняя продолжительность лекции в районе 1-1,5 часов. Мы остановились на таком формате, чтобы сохранить живое общение. Обучающиеся могут задавать вопросы и уточнять непонятные моменты. Занятия проводятся два раза в неделю. Такая частота позволяет оптимизировать нагрузку на сотрудников и избежать потери мотивации. Полный курс занимает 8 недель.
Поскольку за время лекции невозможно раскрыть тему полностью, каждая лекция сопровождается статьей в нашей wiki. Статьи состоят из презентации, используемой во время лекции, текстового сопровождения презентации и ссылок на справочные материалы. В качестве базы мы выбрали великого и ужасного Шилдта. Ему на помощь привлекаем мощь всего интернета, начиная с официальной документации и заканчивая материалами с Хабра и внутренней wiki.
Примеры домашек
Первые несколько домашек ориентированы на понимание базового синтаксиса Java и состоят в основном из математических задачек. Внезапно оказалось, что именно математика вызывает наибольшие затруднения — приходится гуглить и вспоминать школьный курс математики. Но есть ощущение, что математика здорово бустит мозг перед написанием кода. Мы считаем, что решение математической задачи перед ее реализацией в коде служит разогревающим процессом перед выполнением основной задачи. Мозг переходит в “режим берсерка” и процесс написания кода идет легче. Для примера приводим пару заданий из домашки по первой теме:
Задачка 1
Напишите программу, которая принимает с клавиатуры целое трехзначное положительное число и изменяет его следующим образом:
для чисел, больше 500, - переставляет местами числа единиц и сотен (вместо 672 - 276);
в остальных числах переставляются местами числа десятков и единиц (вместо 363 - 336).
Задачка 2
В инструкции по использованию лифта в торговом центре написано: «Не более 6 человек или не более 450 кг». Перед входом в лифт установлен прибор, который подсчитывает входящих в лифт и определяет вес до входа в лифт. Прибор автоматически прекращает доступ к лифту, если вход очередного человека может нарушить инструкцию. Напишите программу, которая принимает с клавиатуры значения, каждое из которых - вес очередного человека, входящего в лифт. Ввод данных продолжается до тех пор, пока соблюдается требование, указанное в инструкции. Программа должна выводить на экран следующую итоговую информацию:
количество людей, вошедших в лифт;
их общий вес;
причина, по которой прекращен вход людей в лифт.
У этих задачек есть несколько вариантов решения. Однако на ревью мы стараемся обозначить обучающимся наиболее оптимальные варианты. К примеру, первую задачу можно решить и через массивы, и через строки. Но оптимальный вариант решения — через математические операции. Такой подход вырабатывает привычку предварительно думать над оптимизацией решения прежде, чем решать задачу в лоб.
Результаты
За два месяца мы доводим общий уровень обучающихся до необходимого нам на проекте. Цели вырастить мега-программистов в столь сжатые сроки перед программой не стоит. Побочным положительным эффектом у нас оказался небольшой справочник Java-автоматизатора в нашей wiki, к которому всегда можно обратиться для освежения своих знаний.
Пишите в комментах, как обучают новичков у вас в компаниях. Будет очень интересно узнать про ваш опыт.