Как обучить девушку основам тестирования веб-приложений?
Читать много, нужен совет.
Немного нетривиальная задача мне выпала. Девушка, можно сказать, моя гражданская жена, хочет стать тестировщиком. Сама не особо знает, каким именно, но хочет в IT на начальные позиции. После некоторых раздумий остановились на тестировании интерфейсов веб-приложений, т.к. это, во-первых, тренд (время SPA), который будет только расти, а во-вторых, в вебе огромная свобода в тестировании. Иные виды приложений (мобильные, десктоп), решили отсечь, т.к. входной порог выше (узкие инструменты, менее популярные, более привязывающие к технологии). Иные виды тестирования - тем более. Во-первых, значительную часть тестов, которые "близко к коду" или "близко к критическим фичам", делают программисты, во-вторых, про далекие тесты (вроде нагрузочного, дымового и т.п.) можно забыть на начальном этапе. Сам я с вебом очень давно знаком, фулстек разработчик, как щас говорят. Из технологий: python/js/django/flask/backbone и всякое смежное. В основном пишу модульные тесты (питоний unittest), фронтенд тестил редко, ибо фриланс и проекты не такие большие, но есть опыт с mocha/jasmine + selenium, а также python + selenium для e2e тестирования. Для себя я много что пробую, но все-таки я не тестировщик, просто приходится знать и интересоваться, как оно, плюс есть вещи, где нельзя без тестирования.
Так вот, в общем, имеем мое понимание, как оно устроено и может быть устроено, и практически нулевые знания у девушки. У нее за плечами довольно техническое образование (безопасность в IT), что-то она кодила, про веб знает немного. Можно охарактеризовать так: html/css, немного питона (по моей инициативе), примерное представление о парадигмах программирования (ООП), что-то знает про сети (шлюз, роут, днс, дхцп, скорее всего, помнит даже, что такое бгп (sic!) и т.п.), но опыта нет ни в чем вообще. Есть аналитическое мышление, но нет уверенности, "нет наглости делать так, как кажется правильным и не бояться писать велики".
И я, осмыслив эту ситуацию, решил немного помочь. Мы сейчас имеем такую задачу в вебе, что нужны люди, которые бы проводили тестирование интерфейсов, писали бы тест-кейсы, юзали бы какой-нибудь язык для автоматизации, писали отчеты, взаимодействовали с UI-дизайнерами. Я вижу это самым перспективным на данный момент, кроме того, оттуда потенциально возможен выход куда угодно, хоть в разработку, хоть в менеджеры, либо можно, после получения значительно бекграунда, выйти в тестирование мобильных приложений (тем более с учетом того, что веб туда тоже пробивается и довольно уверенно), а при огромном желании можно вообще куда угодно выйти. И вакансии есть (я сам особо не мониторил, просто знаю, что есть).
Но с моей точки зрения знать надо много: у меня есть ощущение, что тестировщик - это почти разработчик. Как можно тестить интерфейс без понимания того, как устроена верстка (html/css/svg, особенно фичи с селекторами)? Как можно тестировать сложные сценарии без знания основ взаимодействия фронтенда и бэкенда (кукисы, аякс, основы js, чтобы не пугаться, если что)? Кроме того, хорошо было бы знать что-нибудь про бекенд. Кроме того, в реальном месте вообще может оказаться какая-нибудь связка ангуляра, кармы тест раннера, жасмина или чего-то в этом роде, надо бы быть в теме.
Что я сделал: решил начать с питона, потому как JS учить как первый язык и умереть в прототипах, очень интересном приведении типов, 100 способах объявить приватный член и стрелять по ногам, с миллионами фреймворков/парадигм/стандартов/модулей/классов... Это очень сложный язык, я считаю. Начинать с популярной джавы - это вообще провал, потому как я сам с ним знаком на уровне универа всего лишь, во-вторых, я считаю, что это не лучший язык для разработки и обучения, кроме того, мы все-таки в области фронтенда. На питоне мы уже написали тестовый класс и юнит-тестик для него, чтобы примерно понимать суть тестирования. Потом я сказал, что если сделать наоборот, то это будет TDD. А если перед TDD подумать и описать, что надо, то это будет BDD. Понимаю, что нюансов много, но стараюсь сделать так, чтобы возникли вопросы у человека, и он пошел гуглить. По пути я объясняю некоторые фичи вроде того, зачем нужен self (для непитонистов - this - указатель на текущий объект), что такое типизация, ООП, даю ссылки на хабру, в доки, показываю, как дебажить, разбирать ошибки, в общем, стараюсь объяснить как можно больше всего из программирования вообще, могу параллельно залечивать на темы "а ты знаешь, вот в си есть указатели, и они там работают вот так ...", потому как язык - это все фигня. С вероятностью значительной ей придется учить либо js, либо, прости господи, джаву. И все это будет очень просто, я считаю, если она будет знать базовые концепции.
Кроме того, мы поставили селениум вебдрайвер и сейчас пишем в том же питоне функциональные тесты (e2e) реальных сайтов, на кнопочки нажимаем, поля заполняем, по страницам ходим. Иногда я пишу тестовые странички, где надо мышой подвигать, покликать, ховеры разные и визибилити проверить, чтобы было посложнее. Все это надуманные примеры, но суть объясняет.
Периодически объясняю, что селениум - это не только вебдрайвер и что сущесвуют иные запускальщики тестов, это все для кругозора. Про само тестирование (какое бывает) я посоветовал лекции от Яндекса + пару тройку статей с Хабры, т.к. считаю, что брать книжку, где тестируют абстрактные светофоры - это бесполезно.
Я думаю, мой подход понятен, я учу читать доки и стараюсь из обрывков инфы в ее голове создать что-то, причем моя задача - это "знать суть + моментальная практика, а нюансы нужны только тогда, когда знаешь, что они существуют". Смотрим доки, если что не известно, то тут же надо гуглить, если нужна фундаментальная инфа, то статьи/обрывки книг по основам и так далее.
Так вот. Прав ли я вообще? Моя задача объяснить основы веба, в т.ч. программирования, популярные инструменты для тестирования, популярные парадигмы, чтобы можно было пойти джуном тестером. Я чувствую, что я не учитель, ибо у меня есть какое-то видение автоматически, как должно быть, и я строю все уже из него. Есть ощущение, что говорю очень много инфы сразу, что вводит в ступор. Есть ощущение, что я не могу передать все, что знаю, ибо всего очень много и часто все затягивается на длинные монологи, когда я что-то показываю, делаю, но у человека разрывает мозг. Кто-нибудь считает, что я дико не прав, возможно? Может, есть фундаментальная литература с основами по тестированию веба вообще? Она начинала читать "тестирование дот ком" от кого-то, по моему мнению ее вообще читать не стоит, ибо все, что там есть, можно увидеть на вики, немного подумав. Может, есть какие-то прямо суперские книги, такие как Кормен в алгоритмах, например? Или мне стоит вообще изменить подход?
Сам нахожусь в некотором замешательстве, ибо начал чувствовать, что я, скорее, "укладываю инфу в своей голове", чем что-то объясняю ей... %)
ужас какой, а самог не напрягает возится с этим? Это ж сколько времени убивается. Пусть жена сама учит =) Роль няньки конечно прикольная, но она контрпродуктивная.
мейби стоит попробовать курсы какие-то,их в интернетах много,конкретно про основы веба и тд, вебинары тоже вариант,а вообще самый лучший способ это как-то привить ей интерес к it, допустим чтобы вместо женских пабликов вк она любила почитать "типичный программист" и тому подобное, с интересом и продуктивность обучения пойдет на подъем
littleguga: это все актуально в 20-летнем возрасте. Потом начинаешь понимать бредовость данной затеи. Абсолютно неблагодарное занятие. Тот, кто хочет научится всегда найдет способ сделать это. А кому нужно внимание, тот будет мозги канифолить по пустякам до последнего ) Имхо, если есть интерес - пусть сама учится. В том числе учится находить нужную информацию. А совсем уж непонятные вопросы пусть обсуждает с автором. Но так как это сейчас происходит по описанию автора... годится только для ролевых постельных игр в учителя и ученицу =)
многие перестали читать... Вам такую информацию надо было поместить в конце. В стиле "да, вот ещё - эта девушка моя гражданская жена".
Есть всякие исторические анекдоты на эту тему. Мне нравится следующий:
Поклонник: Шерр Моцарт, я подумываю начать писать симфонии. Не могли бы Вы подсказать, как мне начать?
Моцарт: Симфония – это очень сложная музыкальная форма. Начинайте с каких-нибудь простых частушек, и постепенно усложняя, двигайтесь к симфонии.
Поклонник: Но герр Моцарт, Вы начали писать симфонии с 8 лет.
Моцарт: Всё верно. Потому что никогда ни у кого не спрашивал, как их надо писать.
В принципе ваша жена, пусть и гражданская, поступает правильно, что пытается понять, что вы делаете. У вас очень хорошая жена. Расскажите ей, но не будьте занудой. Она сама выберет, что из того, чем вы занимаетесь будет ей интересно.
Ха-ха, да. Просто не рефакторил совсем сообщение, вот все как было в виде потока мыслей, так и попало сюда, поэтому много лишнего написал, но зато читать, думаю, прикольно, если кто-таки прочел это. С анекдотом на 100% согласен :)
Много текста - мало сути. Боюсь, и учите вы также.
прочесть:
1. Савин "Тестирование Dot Com"
2. Программу базового уровня ISTQB - rstqb.org/sertifikacija/materialy/materialy-istqb.html
Для минимум изучения:
1. Общую информацию про http протокол.
2. Как правильно писать баги (необходимая информация, ясность, лаконичность, пр)
3. Консоль браузера.
4. SQL - базовые запросы, join'ы
5. Посмотреть как выглядит процесс CI, инструменты типа Jenkins
6. Selenium - постольку-поскольку. Маловероятно, что сходу дадут писать прям автотесты. Если будет время, до кучи с ним еще XPath
7. Xml
8. Всякие полезные фичи, типа инструментов для быстрой обработки скриншотов.
Вероятно, вы правы. Насчет Савина - да, это был он, я написал в статье, что она его читает. Хотя, по моему мнению, это вообще никакая книженция, хотя стиль там хорош для новичка.
Насчет минимума - понял вас. Не совсем только ясно, зачем нужен SQL тестировщику.
littleguga: ну, с инъекциями и оптимизацией - это оверкилл. Никогда бы не доверил это тестировщику, потому как множество нюансов зависит от архитектуры БД, от ее типа, от ОРМ, от применяемых паттернов, в общем, это чисто программерская задача (либо архитектора БД). Тестировщику для кругозора, наверное, стоит этим интересоваться, но не более.
mipan: тестовые данные - это данные для теста или данные о том, как отработал тест? Если второе, то еще могу представить, а если первое и речь идет про юнит-тесты, то это чисто программерская задача, если речь идет про тестовые данные для разных функциональных/e2e кейсов, то последний раз я видел, что это делали программисты (и сам так делаю). Во-первых, с ORM это делать удобнее в разы, особенно, если таблицы массивны (а иногда без нее не обойтись вообще, когда требуются опредленные функции для парсинга/вставки данных), во-вторых, прямой вставкой в БД можно напортачить с ключами, с путями до чего-нибудь, нарушить нормализацию БД. Если тестировщик что-то делает с SQL, то это выглядит костылем, т.к. во всех случаях оно опасно, кроме того, есть способы его от этого обезопасить.
Дмитрий Филимонов: инъекции ни коем образом не зависят от архитектуры БД, от ее типа, от ОРМ. Они зависят от кода, который тестировщик и будет проверять.
littleguga: от ОРМ они зависят и напрямую, т.к. именно в ней происходит ескейпинг данных. Если есть raw запросы, то это, во-первых, редкость, во-вторых, их проверка далеко не всегда тривиальная задача, кроме того, надо хорошо знать схему БД. Тестировщик, конечно, может проверять на инъекции, но это точно не тот тестировщик, который тестирует интерфейсы в вебе, делает функциональные тесты.
Дмитрий Филимонов: оба варианта.
Полно вариантов, когда проще что-то изменить в БД для тестирования, чем проходить весь бизнес процесс на 20 минут еще пяток раз.
Женись на ней! И пусть варит борщ и нянчит детей. Зачем засорять голову тестированием)))
Ибо с описания понятно, что тестирование ей не идет. И вообще, что за мода пошла приводить своих подруг в тестирование.
единственный источник по тест-дизайну который может рассказать как тестировать кроме как ориентируясь на свой субъективный здравый смысл A Practitioner’s Guide to Software Test Design
Lee Copeland
По идее спрос на тестировщиков должен расти. Но что-то в моем большом городе Тюмени из 167 вакансий программистов, только 3 вакансии тестировщиков. И вакансии новые редко бывают по этой профессии.
С Савиным согласна.
ISTQB - ну, под вопросом. Мне кажется, с этого начинать немного жестковато.
По тестированию минимум:
-----------------------------------
Мануальное тестирование
1) Основы тест-дизайна (для начала уверенных знаний partitioning достаточно, но можно для ознакомления и что-то посложнее взять).
2) Работа с требованиями - просто must have (анализ, оценка качества требований, умение задавать вопросы стейкхолдерам)
3) Работа с дефектами - качество и приоритезация.
4) Основы сетевых протоколов
5) Основы SQL
6) Основы REST
7) Основы архитектуры ПО
8) Работа по Agile и отличие от других SDLC
9) XML/JSON
10) Основные тулы для работы
Автоматизация:
1) Автоматизация UI (Selenium)
2) Автоматизация REST
3) Автоматизация мобилок (Appium или что-то из этой оперы)