В нескольких статья меня пнули ногой (и правильно), что я путаю QA и QC. Ну, слава богу, уже разобрался.
Хотя как показала практика, не один я такой. В Google ищем «QA engineer» — получаем 1M результатов, «QC engineer» — 200k. Судя по всему, большинство таки людей хотя сказать QC используют QA.
Но, я собственного говоря не об этом. Я совсем о другом.
Почему-то в последнее время повеяла такая мода программистам побольше QC задач подкидывать и пытаться размыть границу между программистами и QC engineer (я дальше буду писать тестировщиком, хотя это и не идеально выражает то, что делают QC engineer’ы).
Проще говоря, когда менеджер говорит, ты код напиши и оттестируй полностью, чтобы после тебя тестировщам не надо было тратить много времени.
Или например, в Scrum, есть попытка ввести понятие Team member, без разделения на программиста и тестировщика. И типа, что нужно то и делай для окончания задачи.
Честно говоря, я не в восторге от обоих инициатив. Разобью по пунктам, собственно в чем состоит мое недовольство.
а) Разделение труда
Достаточно странно, что везде идет разделение труда для повышения эффективности, тут же наоборот начинают смешивать труд.
б) Квалификация
Квалификация среднего тестировщика может быть (и обычно бывает) гораздо ниже чем у программиста.
Само по себе это ничего не значит, но влияет на следующий пункт.
в) Стоимость работы
Спрос на программистов и более высокие требования к квалификации удерживают зарплаты программистов выше чем зарплаты тестировщиков.
Можете бросаться в спор. Мне уже пытались доказывать обратное. Однако, цены на сайтах по предложений работы подтверждают именно мою теорию.
г) Односторонняя взаимозаменяемость
Да, программист может выполнять тестирование и достаточно легко может научиться писать планы тестирования и придумывать стресс тесты.
В обратную сторону, тестировщик чаще всего либо не может программировать вообще, либо является очень слабым программистом.
Опять же из этой асимметрии следует, что программисты должны таки работать над той задачей, которую тестировщики не могут решить.
В личных спорах мне говорили, что я типа зараза пытаюсь программистов выделить в высшую касту и что типа это ужас как плохо. На самом деле никакой высшей/нижшей касты нету — есть работа, которую делают и программисты и тестировщики и программисты просто (как по мне) являются более дорогим ресурсом.
Никаких супер привелегий у них нету, просто они делают работу которую тестировщик не умеет делать.
Как пример, нейрохирург вполне может вполне знать педиатрию. Но это же не значит, что он должен работать по этому поводу педиатром.
Суммируя. В целом, я не против некоторого количество тестирования на стороне программистов, которые уменьшает суммарное бюджет необходимый для доведения до ума. Но я категорически против того, когда из разряда «некоторое количество» это пытаются перевести в раздел — программист обязан делать полное регрессионное тестирование.
Дописал большой P.S.
Дисскусия в нескольких ветках упала в сторону, кто быстрее выучиться программист — тестировщиком или тестировщик программистом.
Откинем вопрос, хотят ли они учиться и примем за данность, что у обоих есть голова на плечах.
Плюс, сразу выкинем из рассуждения фразы типа «я вот знал тестировщика, который стал хорошим программистом, а наоборот не знаю ни одного».
Мы будем говорить о статистической сложности переучивания, а не разбирать конкретный пример Васи или Пети.
Возьмем двух человек
а) Хорошего программиста
б) Хорошего тестировщика
Начнем с того, что хороший тестировщик вполне может не уметь программировать вообще (оставим на секунду автоматизированное тестирование за бортом). Он может заниматься написание планов тестирования, стресс тестированием, обучение молодежи как тестировать,тестировать безопасность, тестировать usability и т.п.
То есть, тестировщик знает как тестировать, но при этом легком может не иметь даже базовых знаний программирования.
В обратную же сторону -хороший программист НЕ может работать без базовых знаний тестирования. Он в общих чертах понимает, что такое план тестирования (просто за X лет работы он уже с ним не раз сталкивался), он делает минимальное тестирование сам перед отдачей тестерам. Я не говорю, что программист отлично понимает, но базовые понятие у него уже есть.
Таким образом, когда программиста нужно обучить тестированию, то по большему счету ему нужно углубить свои знания в
а) Стресс тестировании
б) Почитать несколько книг по планированию тестирования
в) Поменять мышление, для того, мыслить не с точки зрения «вот, что надо сделать, чтобы оно работало» а на «вот, что надо сделать, чтобы оно НЕ работало».
г) Изучить некоторое количество инструментов для тестирования
д) Потестировать, чтобы разобраться что правильно, а что неправильно
То есть, как по мне, база знаний необходимая тестировщику не слишком большая, частично программист ей владеет. Ему нужно ее углубить и получить опыт.
Теперь тестировщику нужно обучиться программированию.
И вот тут база оказывается достаточно большой
а) Изучить основы программирования
б) Изучить язык программирования
в) Изучить API операционной системы/browser/базы данных
г) Изучить инструменты для программирования
д) Изучить такие вещи как ООП
е) Пописать программы, чтобы понять, что правильно, а что неправильно
То есть база знаний больше. А знание основ этой базы у тестировщика меньше.
Проблема в сложности изучения программирования (по сравнению с тестирование в двух вещах)
— В программировании гораздо больше информации нужно просто запомнить, которая не поддается логическому объяснению (на начальных этапах учебы). В тестировании же больше вещей логичны с самого начала
— В программировании результат работы гораздо медленней становится видим (например можно неделю работать над кусочком программы) и поэтому ошибки и опыт накапливаются медленнее.
Уже через неделю программист может выполнять простые элементы тестирования на __РЕАЛЬНЫХ__ (это ключевое слово) проектах.
В обратную же сторону, тестировщик сможет в этот момент только учиться на маленьких программках, которые не являются настоящими проектами. И только через долгое время сможет делать даже простые задачи на реальном проекте.
И возвращаясь к автоматизированному тестированию. Да, безусловно у тестировщика занимающегося автоматизацией, очень хорошая фора перед тестировщиком. Тем не менее скрипты по автоматизации на порядок проще, чем реальный код.
Таким образом тестировщик, который занимался автоматизацией имеет уже некий задел в основах программирования и может быть языке. Тем не менее все остальные пункты все еще остаются той базой, которую ему придется выучить до того, как стать программистом, приносящим пользу.