Всем привет! Сейчас расскажем про внутреннюю программу обучения для QA. В наших продуктовых командах все QA-инженеры пишут автотесты, для этого мы используем связку Java+Selenium. У всех разный уровень владения инструментами и опыт программирования. Чтобы выровнять уровень владения Java в командах и помочь новым сотрудникам быстрее влиться в нашу среду автотестов, в 2022 году мы решили сделать внутреннюю программу обучения, определив минимально необходимый уровень владения технологическим стеком. В статье поговорим о том, как мы создавали нашу программу, расскажем, из чего она состоит и разберем нюансы. 

Подготовка

Наша цель — получить штат специалистов с набором навыков, необходимых для выполнения своих задач. Количество QA в hh.ru на текущий момент приближается к 50, а новые команды появляются с завидной регулярность, и в них всегда нужны новые QA. Поэтому мы решили, что курс будет читаться  регулярно: раз в полгода для всех пришедших новичков за этот период. При желании к ним могут присоединиться и более опытные сотрудники, чтобы поглубже изучить интересующую тему.

Окей, у нас есть стек для обучения и аудитория. Теперь необходимо определить, какая информация и в каком объеме будет даваться в ходе занятий. Был велик соблазн просто взять готовые темы из наиболее адекватных и популярных учебников и просто отдать на изучение нашим “студентам”. Удобно ли это для нас? Безусловно. Будет ли это эффективно в плане обучения новичков? Вряд ли. В общем, мы решили проводить лекции по каждой теме с актуализацией внимания на ключевых моментах.Осталось только понять, где взять эти темы. Для начала решили провести ревью кода наших “учеников” и посмотреть, где наблюдаются самые серьезные просадки по знаниям. Так мы нашли темы. 

Процесс

В результате код-ревью и последующего анализа образовался список конкретных тем. После прохождения каждой темы выдается домашнее задание для закрепления. Некоторые задания взаимосвязаны — последующие домашки расширяют предыдущие с использованием новых подходов.

В итоге у нас получился следующий набор тем:

  1. Типы данных, условные ветвления, циклы, массивы

  2. Виды функций, области видимости, параметры, перегрузка, рекурсия 

  3. 4 принципа ООП, абстрактные классы и интерфейсы, статические члены класса, вложенные классы

  4. Иерархия исключений, try..catch..finally, throw-throws, собственные типы исключений

  5. Generics, wildcards, ограничения сверху и снизу, функциональные интерфейсы, лямбды

  6. Иерархия коллекций, list, queue, set, map, итераторы, stream api, Optional.

  7. Виды паттернов, паттерны в автотестировании

  8. Фреймворки: testng, selenium, maven, Log4j

  9. Структура проекта автотестов на hh.ru. Основные классы, пакаджи и структура тестов

  10. Разработка автотестов: общие правила написания тестов, рекомендации по их написанию и разбор типовых ошибок

  11. Basic sql: виды запросов, joins, агрегирование

  12. JDBC: сущности, создание подключения, отправка запросов, обработка запросов

  13. Интеграционные тесты: теория, выбор сервиса для тестирования, типовая структура тестов и ее кодогенерация

Формат, периодичность, материалы

Лекции проводятся онлайн, в формате созвона с демонстрацией презентации и экрана. Чтобы аудитория не скучала, по завершении мини-блока темы лектор задает небольшие задачки по материалу. Средняя продолжительность лекции в районе 1-1,5 часов. Мы остановились на таком формате, чтобы сохранить живое общение. Обучающиеся могут задавать вопросы и уточнять непонятные моменты. Занятия проводятся два раза в неделю. Такая частота позволяет оптимизировать нагрузку на сотрудников и избежать потери мотивации. Полный курс занимает 8 недель.

Поскольку за время лекции невозможно раскрыть тему полностью, каждая лекция сопровождается статьей в нашей wiki. Статьи состоят из презентации, используемой во время лекции, текстового сопровождения презентации и ссылок на справочные материалы. В качестве базы мы выбрали великого и ужасного Шилдта. Ему на помощь привлекаем мощь всего интернета, начиная с официальной документации и заканчивая материалами с Хабра и внутренней wiki. 

Примеры домашек

Первые несколько домашек ориентированы на понимание базового синтаксиса Java и состоят в основном из математических задачек. Внезапно оказалось, что именно математика вызывает наибольшие затруднения — приходится гуглить и вспоминать школьный курс математики. Но есть ощущение, что математика здорово бустит мозг перед написанием кода. Мы считаем, что решение математической задачи перед ее реализацией в коде служит разогревающим процессом перед выполнением основной задачи. Мозг переходит в “режим берсерка” и процесс написания кода идет легче. Для примера приводим пару заданий из домашки по первой теме: 

Задачка 1

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

  • для чисел, больше 500, - переставляет местами числа единиц и сотен (вместо 672 - 276);

  • в остальных числах переставляются местами числа десятков и единиц (вместо 363 - 336).

Задачка 2

В инструкции по использованию лифта в торговом центре написано: «Не более 6 человек или не более 450 кг». Перед входом в лифт установлен прибор, который подсчитывает входящих в лифт и определяет вес до входа в лифт. Прибор автоматически прекращает доступ к лифту, если вход очередного человека может нарушить инструкцию. Напишите программу, которая принимает с клавиатуры значения, каждое из которых - вес очередного человека, входящего в лифт. Ввод данных продолжается до тех пор, пока соблюдается требование, указанное в инструкции. Программа должна выводить на экран следующую итоговую информацию: 

  • количество людей, вошедших в лифт; 

  • их общий вес; 

  • причина, по которой прекращен вход людей в лифт.

У этих задачек есть несколько вариантов решения. Однако на ревью мы стараемся обозначить обучающимся наиболее оптимальные варианты. К примеру, первую задачу можно решить и через массивы, и через строки. Но оптимальный вариант решения — через математические операции. Такой подход вырабатывает привычку предварительно думать над оптимизацией решения прежде, чем решать задачу в лоб.

Результаты

За два месяца мы доводим общий уровень обучающихся до необходимого нам на проекте. Цели вырастить мега-программистов в столь сжатые сроки перед программой не стоит. Побочным положительным эффектом у нас оказался небольшой справочник Java-автоматизатора в нашей wiki, к которому всегда можно обратиться для освежения своих знаний. 

Пишите в комментах, как обучают новичков у вас в компаниях. Будет очень интересно узнать про ваш опыт.

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