четверг, 26 января 2012 г.

Кто такие тестировщики... или должен ли тестировщик уметь программировать?

Этим постом я постараюсь ответить на поставленный вопрос в заголовке.  Могу лить много воды... просто считайте это потоком сознания :-).

"Мне часто задают вопрос, должен ли тестировщик уметь программировать" (с) Стас :-)



Ответ на данный вопрос не совсем однозначен. И очень коротко я на него уже ответил в комментариях к более раннему посту. Расширенный ответ начну из далека :-).
Правильней, наверное, будет сформулировать вопрос так: "Кто такие тестировщики и какими навыками они должны обладать?".

Мое мнение, к тестировщикам надо отнести всех людей, которые в детстве разбирали игрушки с любопытством и упертостью, только что бы посмотреть как это все работает... Конечно не надо обходить стороной тех, которые не только смотрели как это работает, но потом после сборки проверяли что оно работает :-). Это вроде раннего теста на пригодность к профессии :-), Но это мое мнение.
В более старшем возрасте (когда уже игрушки вроде как разбирать поздно) эти люди с не меньшим любопытством ищут лазейки в чужих программах. Некоторые это делают ради забавы, другие ради выгоды, а третьи таким образом зарабатывают себе на хлеб.
Так что тестировщик - это человек с пытливым умом, живым воображением, задором в характере, и... немного маньяк :-), хорошем смысле этого слова :-).
А вот далее надо разделять уже тестировщиков на различные группы. Кто-то любит изучать неизведанное, кому-то в кайф проверят на соответствие функционал, другим по душе настраивать роботов, что бы они делали за него его же работу, а кто-то просто "мартышка" :-) , т.е. ему нравиться однообразная рутинная работа.
Так вот, программировать должен уметь, по моему мнению, из всех выше перечисленных групп, только тестировщик, который любит роботов (нежной, такой, не подкупной и не порочной  любовью :-) ).
Я сейчас нахожусь в состоянии смены места работы (если говорить про сферу тестирования). Так вот, на текущем месте работы, не так давно, я со своим нынешним руководством как раз решал задачку "Какие требования надо указать в вакансии?". Необходимо было произвести замещение вакансии тестер-автоматизатор. В конечном итоге пришли к выводу, что проще сейчас взять человека, который умеет программировать и обучить его основам тестирования, чем сделать наоборот. Но это как я уже не раз говорил автоматизация.
В другом случае (и это видно из контингента задействованного в сфере) очень хорошо на роль тестировщика подходят девушки... У них есть некоторые врожденные качество, как то аккуратность, усидчивость, внимательность к мелочам (а то так делая мейкап забудет одинг глаз нарисовать :-) ). И не в обиду прекрасному полу будет сказано, что количество девушек в сфере программирования значительно меньше чем в тестирование, так что тестировщик != программист :-)

Это вроде как все, что хотелось сказать сейчас. Если у кого есть вопросы, непонятные моменты? Задавайте в комментариях, отвечу на все...


P.S.: А мороз крепчает...

9 комментариев:

  1. Вот он пост моей мечты)

    ОтветитьУдалить
  2. Вы планируете тестировать только по средствам чёрного ящика?
    А в таком случае можно ли отследить утечки памяти, переполнение типов, переполнение буфера?
    Мне кажется, имея опыт программирования, за подобными нюансами следить куда проще, т.к. знаешь куда копать, знаешь распространённые ошибки в коде..

    ОтветитьУдалить
    Ответы
    1. Тем, по-моему, это уже отладка, а не тестирование. Мне кажется, тестировщик должен уметь поломать программу, а как ее лечить, это уже не его забота)

      Удалить
    2. Нет, я не говорю об отладке, все эти вещи относятся к критическим уязвимостям в ходе работы.
      Зная где и что ломать, ломать всегда проще.

      Удалить
    3. Стас, а Вы взгляните на программу выплаты наград за найденные баги у того же Гугла. Чем подробнее отчёт Вы предоставите, тем больше шанс получить серьёзное вознаграждение. Там вход идут и фаззинг, и статический анализ кода, и whitebox- с blackbox-тестингом. Если Вы в состоянии "ткнуть носом" разработчика в нужный участок кода и разжевать, что же там не так, то и Ваша цена, как специалиста, будет на несколько порядков выше, чем тех тестеров, которые просто окошки мышками в делфи-приложениях разводят (у нас Фёдор Алексеевич любит будильники студентов ломать так: "Ой, да у тебя интерфейс поплыл!" :-) ).
      Моё мнение, чем больше Вы знаете о том, как всё это работает, тем на большую ЗП должны расcчитывать (Ну, конечно, не в какой-нибудь местной быдлокодерской конторке за углом, где подрабатывают студенты по вечерам).
      Считаю, что требования к подобному роду тестировщикам в серьёзной компании должны быть такие:
      - Знание инструментария, на котором создаётся продукт, понимание принципов работы базовых фреймворков, компиляторов, языков.
      - Владение скриптовыми языками программирования, годными для rapid-девелопмента. Отличный выбор здесь - python, который хорошо годится для написания тестов и обвязок при модульном тестировании, фаззеров, всевозможных логгеров (нам ведь надо разработчику лог сунуть, мол: "Вот, не отвертишься!").

      "А как же интерфейс?" - возможно, спросите Вы, - "Как же те девушки, вымеряющие линейкой отступы краёв и прочее?"
      Вот тут уже, следует отделять тестировщиков, проверяющих внешний интерфейс приложений (если этот интерфейс есть). Для этого вполне подойдут мартышки с блондинками:
      - Ой, а у меня после закрытия формы кнопка неактивна. Что делать!?
      - Писать багрепорт.
      - А вот тут у вас цветовая схема - чёрный с красным - не соответствуют требованиям ISO, номер такой-то... Она слишком негативно влияет на психику пользователя, нужно всё перекрасить в цвет неба и травы!

      Потому тестировщиков надо делить на несколько категорий с разными требованиями к вакансиям. Для первых перечислил выше, возможно, что-то упустил или забыл.
      Второй категории всё это нафиг не нужно, им будет огромным плюсом знание психологии и поведения пользователя, а это огромная отдельная тема (если интересно, попросите у Фёдора Алексеевича литературку, он на парах что-то там нахваливал). Нужно ли этой категории программирование? Нет, конечно! Они смотрят на приложение, как пользователи. Им важно уметь донести до дизайнера интерфейса, что их не устраивает!
      Вот здесь и вытекает размытая линия для каждой категории: между тестером и разработчиком, а также тестером и дизайнером.

      Ну, и про тестирование безопасности (его надо выделить в отдельную категорию), которое Фёдор Алексеевич почему-то обозвал фаззингом (мож, просто выразился неверно, или я не так понял? Ну, да ладно), хотя на западе, вообще говоря, для этого направления существует более правильный термин - "Penetration testing" или просто пентестинг, который входит в такую область знаний как "Информационная безопасность". Фаззинг лишь один из приёмов наряду с другими (там и реверс инжиниринг, и анализ кода, и изучение протоколов). Спрос на подобных специалистов самый низкий по нескольким причинам:
      1. Дофига балбесов, мнящих себя спецами в ИБ, которые обычно на практике тупо кивают: "Ага, у вас всё ок!".
      2. Широкий круг используемых технологий, в которых необходимо разбираться, как минимум, не хуже разработчиков. А потому чрезмерно высокий уровень вхождения.
      Думаю, что по данную группу тестировщиков глубже расписывать не стоит - это тема для отдельного обсуждения.

      Удалить
    4. Вау :-)
      Спасибо Вам, Аноним, за столь интересный и подробный комментарий...
      Я когда его читал, сначала, решил на него реагировать иначе... А потом просто передумал. :-)
      Еще раз спасибо за комментарий.
      Если интересны ответы или мое мнение по поводу того, что Вы выше написали, дайте знать... я отвечу. :-)

      Удалить
  3. А вот тут мой выход :-)
    Есть такое направление в тестирование, которое называется "Тестирование безопасности..." или просто FUZZING. Так вот там, методу белого ящика, если занимаешься изучением не только ПО, но и его кода (если конечно тебе его предоставили :-) ), тогда тебя можно считать супер квалифицированным тестировщиком (здесь звучат фанфары и танец тумба юмбы). НО FUZZING это один из автоматизированных методов тестирования и для него написано куча инструментов. Т.е. если дать инструмент молодому тестировщику, который ни чего не знает о программировании, и рассказать как пользоваться инструментом, то все эти переполнения, утечки и прочее инструмент найдет сам (и ему код будет точно полезен), а тестировщик отдаст лог программистам и скажет "ВОТ... правьте :-)".
    Итог. Тестировщику программировать в этом случае не надо... Можно и без этого, но если он будет уметь программировать, то это не плохо...

    ОтветитьУдалить
  4. Ответы
    1. Артем, если интересно, идем сюда http://software-testing.ru/books/security-books/773--fuzzing- , ищем указанную книгу и читаем. :-)

      Удалить