понедельник, 2 июня 2014 г.

Testers: Get Out of the Quality Assurance Business

Котаны - я теперь так буду обращаться к своим воображаемым читателям - тут такое дело, гайда по тестированию безопасности пока буксует из-за моих сбоев целеполагания, но я нашла отличную статью и собираюсь ее вам вкратце пересказать. Кто хорош в английском, то вот вам она. А кто не очень - то вэлкам, буду рассказывать.
Короче, название у статьи малость провокационное: "Тестеры - нам пора убраться из обеспечения качества". Что за фигня?! - подумают тестеры. Но давайте по порядку.
Осенью 2008 попал автор статьи на конференцию и, в том числе, на лекции "Testing lies" (я не могу подобрать адекватный перевод вне контекста). И краем уха услышал короткий диалог одного из докладчиков с парой людей:
- Ты в QA?
- Да.
- А ты имеешь доступ к изменения исходного кода программ, которые вы тестите?
- Оу, нет. Вообще-то нет.
- Интересно. Тогда как вы можете обеспечивать качество?
Короче, такая штука. Как мы можем обеспечивать качество, не имея доступа к бюджету (планированию всего цикла разработки), коду, заказчику? Тут автор припоминает, что в 1996 Сэм Каннер говорил о том, что роль именно обеспечения качества в компании лежит на менеджменте и CEO (аналог гендира). Я бы еще добавила продакшн менеджера, но вероятно он входит в понятие просто "менеджмента". И на прошлой моей работе было именно так - хотя начальник часто и во всеуслышание заявлял о том, что мол это тестеры решают выходить на прод или нет, но по сути решал это один человек - PM. Это он знал все риски и мог взвесить что именно обойдется нам дороже - выпуск с багом или простой. Но что же тогда остается тестерам? А вот Quallity Assistance! Мы - ассистенты, помощники в обеспечении качества. Мы, кажется, лучше остальных отделов знаем продукт. Как со стороны пользователя, так и со стороны (но конечно менее полно) разработчиков. Таким образом мы не обеспечиваем качество, но мы помогаем непосредственно тем людям, которые его обеспечивают.
Аналогичным образом Джеймс Бах отмечает, что мы вовсе не гейткиперы качества. Мы отвечаем за качество не больше, чем любой другой отдел. Он вспоминает, что когда только пришел в Apple, то был одержим идеей, что именно он отвечает за качество: "Позже я понял, что такая позиция была ужасно обидна для остальной команды, потому что ее подтекст был таков: "Только я беспокоюсь о качестве, а вы, ребята, нет". Разработчики создают качество, они позволяют ему прийти. Без них не будет ничего и вы получите нулевое качество {нихрена, короче, не получите}. Так что это очень обидно и когда вы говорите, что именно вы обеспечиваете качество, то оскорбляете их до такой степени, что они не хотят с вами работать".
Дальше автор вспоминает еще одну конфу (STAR East Conference в Орландо) и как много раз его спрашивали другие тестеры как они могут заставить {на самом деле слова "заставить в тексте нет, но я не знаю как по-другому передать смысл} программистов применять "лучшие практики"; как они могут влиять на менеджеров, чтобы те делали свою работу лучше; как навязать модель или процесс разработчикам. На одном из докладов тестеры жаловались на качество требований, которые они получают от заказчиков (более того, все они делали ошибку, говоря "требований", в то время, как подразумевали именно "документы с требованиями" {ТЗ, я так понимаю - суть тут в том, что жаловались не на само ТЗ, а требования в нем}. Более того, один парень сказал, что они собираются вообще взять на себя работу по  написанию требований. В ответ на их запросы {вопросы/заявления} самый helpful {"полезный" вообще-то, но helpful это настолько полезный, насколько он вообще может быть полезным, всеобъемлюще полезный} совет, который может дать автор, это то, что предприятия с такими проблемами не подходящее место для работы квалифицированных тестировщиков.
Мы не мозги проекта. И мы даже не можем контролировать этот "мозг". Наша роль состоит в том, что бы быть дополнительными сверхчувствительными органами восприятия. Мы - это дополнительные глаза, уши, носы, пальцы и вкусовые рецепторы для программистов и менеджеров. Мы - расширение для их чувств. В идеале мы - как сверхчувствительные и хорошо откаллиброванные инструменты - микроскопы, телескопы, суперчувствительные микрофоны, штангенциркули, масс-спектрометры. Бомбо-обнаружительные детекторы. (И эта идея про инструменты принадлежит Сэму Каннеру). Мы помогаем программистам и менеджерам слышать, видеть и осязать что-то в ограниченное время, потому что из-за особенностей своего мышления, необходимого им для работы, они не могут сами услышать/увидеть/почувствовать это.
Если вы действительно хотите улучшить качество кода - станьте программистом. Я стал - пишет автор. Я уверяю вас, что если вы сделаете то же, то очень быстро поймете насколько сложна, скромна {в том смысле, что хрен ее кто видит - humbling - непритязательный, скромный, уничтожительный} и огромна работа действительно хорошего программиста - потому что, как и все инструменты, компьютер увеличивает вашу некомпетенцию настолько быстро, насколько быстро он увеличивает свою компетенцию (короче, вы тупеете тем быстрее, чем развиваются технологии - за ними трудно угнаться). Хотите управлять проектом - станьте менеджером. Им автор тоже стал и, судя по всему, отличным. Но попробуйте - и очень скоро вы сделаете открытие, что качество - величина, зависящая от многих людей, и что ваши стандарты качества намного менее ценны, чем стандарты качества тех, кто пользуется вашим продуктом и платит за него. Станьте продакшн менеджером и вы практически сразу осознаете, что решение о выпуске продукта невозможно принять, исходя только из технических задач без учета бизнесс-процессов и что такое баланс между стоимостью починки багов и расходами на устранение их возможных последствий.
Так что тому, кто никогда не были ни программистом, ни PM'ом, бесполезняк ныть автору, что он ничего не понимает в качестве. Хуже нытья могут быть только советы от людей, которые никогда не делали подобную работу. И в обоих случаях (когда был и программистом, и PM'ом) автор хотел получать от тестеров лишь информацию. Как программист - о проблемах в коде, как они были найдены, как должно быть и как воспроизвести их чтобы отдебажить и исправить. Как PM автор хотел бы знать какую информацию тестеры собрали о продукте и как они конфигурируют, управляют, получают и оценивают продукт. Я хотел знать как наш продукт работает в условиях, отличных от обычных условий использования; о внутренних противоречиях; как продукт работает в сравнении с другими подобными продуктами с рынка - лучше он или хуже и в чем.
Итак, вы хотите влиять и на качество, и на команду. Хотите знать, как влиять на программистов в положительном ключе?
  • Говорите программистам, что ваша цель - помочь им лучше делать свою работу. Вы не должны работать воплощением стыда, порицании или зла - не думаю, что мы даже должны шутить об этом, потому что это реально не смешно. От себя добавлю, что действительно считаю плохой и неконструктивной практику изображать из себя чью-либо совесть. Мы просто диагностируем проблемы, а не обвиняем кого-либо в их наличии;
  • Мы часто выступаем в роли гонцов с плохими вестями. Давайте признаем это и постараемся приносить их с состраданием и пониманием;
  • Мы тоже можем ошибаться - поэтому надо относиться к собственным суждениям с долей скепсиса;
  • Сфокусируйтесь на исследовании продукта, а не на подтверждении уже известных о нем вещей;
  • Сообщайте то, что узнали подобным образом;
  • Пытайтесь понять как работает продукт на всех уровнях, которые вы в состоянии понять, от сложных к простым. Оцените сложность продукта так, что бы когда вас посетит безрассудная идея про починку какого-нибудь простого бага, вы бы имели возможность остановиться и подумать;
  • Интересуйтесь тем, что делают программисты и, по возможности, код и как он работает;
  • Никогда не говорите программистам как они должны делать свою работу. Если вы все-таки считаете, что это ваша обязанность, подумайте вот о чем: Как бы вы себя чувствовали, если бы программисты указывали вам что и как вам проверять?
Хотите знать, как лучше взаимодействовать с менеджерами?
  • Предоставьте им нужную информацию для обоснованных решений и позвольте им самим принимать решения;
  • Поймите, что менеджеры руководствуются не только техническими аспектами, но должны учитывать еще и бизнесс-процессы {к примеру, починка мелкого бага может обойтись дороже, чем релиз с ним - по техническим аспектам баг конечно есть, но бизнес-процессы позволяют жить с ним и наоборот};
  • Знайте, что продукт не должен соответствовать именно вашим представлениям о стандартах качества;
  • Ни программисты, ни менеджеры не сделают вас счастливыми. Но вы можете сказать им что вам для этого нужно. Особенно обратите внимание на:
  • Задачи, которые замедляют тестирование. Они чертовски важны, потому что помогают багам окопаться глубже и основательнее. Поэтому рассказывайте не только о багах, но и задачах, которые тормозят процесс тестирования;
  • Предоставляйте отчеты о том, сколько времени вы тратите на задачи;
  • Обратите внимание на то, сколько вы на самом деле тратите времени непосредственно на тестирование и сколько еще - на настройки окружения, исследование багов, собрания;
  • Покажите менеджерам, что самые важные найденные баги были обнаружены не в бездумных повторениях обычных кейсов, а исследовательским тестированием;
  • Попросите помочь с автоматизацией {не уверена в точной передаче смысла, но с учетом предыдущего пункта важно, чтобы рутинное тестирование было действительно автоматизировано, что бы мы могли больше времени уделять исследовательскому тестированию};
  • Донесите плюсы и минусы автоматизации;
  • Помогите людям понять разницу между проверками и тестированием и ценность каждого из этих понятий;
  • Работайте, что бы показать, что ваше дело - именно квалифицированная разведка продукта {разведчики мы еще те, саперы блин} и помогите менеджерам понять как мы на самом деле находим проблемы {на свою голову в том числе};
  • Помогите команде избежать опасного заблуждения: разработка ПО это не линейный, но органический процесс {имеется ввиду - системный, взаимозависимый, сложный};
  • На самом деле у нас не "тестовая фаза", а "фаза исправлений" {not "testing phase, but "fixing phase" мы не просто тестируем, мы потом еще и проверяем, что все работает после починок};
  • Когда у вас просят разрешения на выпуск продукта - просто вежливо дайте отчет о тестировании, а решение о выпуске предоставьте тому, чье решение действительно важно - заказчику.
Хотите пользоваться уважением команды?
  • Будьте двигателем проекта, а не его тормозом. Вы - поставщик информации, а не инфорсер {жаргонное амер.: член гангстерской банды, функцией которого является принуждение к выполнению ее требований или приведение в исполнение ее приговоров};
  • Перестаньте пытаться присвоить качество себе и поймите, что все члены в команде обеспечивают его так же, как и вы;
  • Осознайте, что ваша роль - мыслить критически - помогите программистам и менеджерам предотвратить самообман и начните с того, чтобы перестать обманывать себя;
  • Разнообразьте свои умения, команду и тактику. Как говорит Карл Вейн: "Если вы хотите понять что-то сложное - вы должны усложнить себя" {чтобы найти баг - будь багом!, ы};
  • Улучшайте навыки критического мышления {хотя бы вот на русском и еще ссылки тут}
  • Найдите хорошего учителя - мол, интернет, если шо, вам в помощь;
  • Не становитесь товаром. Сертификация означает трату денег на то, что бы стать такими неразличимым в толпе таких же людей. Будьте уникальными {"make your own mark" - создайте свой стандарт, что ли};
  • Сосредоточьтесь на создании собственных mind skills (мышленческих навыков, брр}, которые вы сможете адаптировать под любой процесс;
  • Делитесь тем, что вы изучили {чем и занимаюсь :)}.
Короче, тестеры, пора нам перестать тянуть одеяло с качеством только на себя. Будьте лучшими, насколько сможете, тестировщиками, опытными исследователями, а не подражателями программистов или менеджеров.

Фух. Там в статье есть еще ссылки на интересные материалы, но пока я выдохлась - и так огромный материал получился :) 

четверг, 20 марта 2014 г.

Планы

Я обещалась сделать тему по тестированию безопасности сайтов по прочтении гайда от QWASP'а, но я все еще в процессе. Что бы начать излагать хотя бы отдельные главы мне нужно дочитать хотя бы первый раз целиком до конца и это движется, но медленно. Тупо переводить дело гиблое, я застряну сразу, а вот начать вольный пересказ - вполне по силам имхо. Осилила уже половину и в скором времени надеюсь уже начать излагать по кусочкам. Не переключайтесь, у меня обширный дополнительный материал :)

вторник, 21 января 2014 г.

В идеальном мире: мифология тестирования

Чем хороший специалист отличается от плохого? Почему платные клиники по большей части бесполезны? Чем так смешит фраза: "Вы не даете нам тестировать!" - читайте в рубрике "монологи о профессионализме".
 Итак, тут я делала акцент на том факте, что тестирование - это не столько поиск багов. Задача тестировщика в бОльшей степени состоит как раз в понимании этой простой истины, и только потом уже - в ее реализации. Хотя на практике все происходит наоборот, т.к. нельзя натянуть теорию на голое место. Теория - это концентрированный опыт, а концентрат в голом виде либо бесполезен, либо вообще опасен, его нужно добавлять во что-то, нужна основа. И этим "что-то" служит практика тестирования, опыт проверок, изучение процесса и анализ повторяющихся ситуаций. Нельзя просто так взять, почитать теорию и думать, что знаешь как это устроено. Сдача на сертификат, как и любой экзамен, часто дает ложноположительный результат: признаками положительного служит тот факт, что человек рассказывает теорию (повторяет слова), а отрицательным фактом является то, что он не понимает сути этих слов. И надежного и унифицированного способа выяснить это понимание не существует. Все мы помним зубрил, которым незаслуженно ставили "отлично", но последствия ложного оценивания на единичных экзаменах (не все преподаватели любят зубрил) не так губительны, как выдача сертификата специалисту, который на самом деле не является таковым. Хотя конечно несмертельно, тем более с учетом того факта, что работодатель может довольно быстро проверить насколько знания теории соответствуют умениям (зазубрены они или есть понимание применения).
Но вернемся к основной задаче и важности ее понимания. Во второй половине 70х подход к тестированию заключался именно в поиске как можно большего кол-ва багов и мне кажется, что многие тестировщики так и застряли на этом этапе развития. Поиск багов является побочным продуктом деятельности тестировщика, а его прямой задачей является - я прошу прощения за повторы - полный, развернутый отчет о состоянии проекта. Проверить работоспособность каждой части системы в разных условиях. Может быть так, что с основными "обязанностями" отдельная функция справляется, а в какой-то нестандартной ситуации ведет себя не очень хорошо - и тут опять могут быть градации - от простого неудобства для пользователя, до полного отказа, но в столь нестандартном случае, что он практически невозможен. И вот именно в таких случаях - когда тестировщик в одиночку не может оценить целесообразность починки подобных вещей - нужно не кричать: "Чини его!", а просто донести до команды проблему и принять решение. Кстати, оценка последствий починки или не-починки багов, тоже привилегия тестировщика - именно он, зная систему, с большей точностью способен предсказать как именно окончательное решение повлияет на проект. И так по каждому багу практически :) Разумеется, есть вещи, которые видно сразу - оно сломалось и надо чинить, но в этих случаях вопрос о починке даже не стоит - он и так ясен. При таком подходе конфликта с программистами и споров до хрипоты "Баг или фича?!" не возникает вообще.
Так чем же хороший специалист отличается от плохого? Гибкостью подхода. Умением оперировать не шаблонами, а разными, годными, пластичными шаблонами подходами к проблемам. Не "есть симптом - лечить/чинить, нет - симптома - нет болезни/бага", а "что будет симптомом для данного человека/программы?", "давление в 90/60 может быть нормальным для человека? - да, если он себя при этом прекрасно чувствует" - "у программы ломается интерфейс, если пользователь издевался над ней вводом невалидных данных - баг или пользователь неумный?" и прочие гибкие методологии. Возвращаясь к вопросу о платных клиниках - плохие специалисты, которые получили диплом, просто вызубрив энцикплопедические связки, никогда не смогут подходить к проблеме гибко, а так и будут гонять пациента сдавать анализы и качать головой, вместо того, чтобы подойти к проблеме индивидуально, с анализом бОльшего количества параметров. А наткнуться на такого "специалиста" как в платной, так и в обычной поликлинике, вероятность примерно одинакова. Конечно, это не значит, что в платных клиниках сплошь зубрилы с красными дипломами, это просто замечание, что даже платная клиника не панацея. Найти хорошего врача также трудно, как и любого другого хорошего специалиста.
Ну и к последней части. "Вы не даете нам тестировать!" - почему это смешно. Можете вы представить себе ситуацию, когда, наняв по трезвому и взвешенному размышлению, тестировщиков в команду, им не дают делать свою работу? Да это как купить Porsche с бриллиантовыми стразиками и поставить в гараж потому что "бензин дорогой"! Можно сделать вывод, что если тестировщикам "не дают тестировать", т.е. времени, которое они требуют на проверку билда, то это плохие, негодные тестировщики. Они пытаются не дать оценку проекту, а именно "найти все баги" чтобы прикрыть попу от возможных претензий в последствии. Они живут в идеальном мире, считая себя людьми, которые выносят вердикт "выходить на прод или нет". Но, как я уже говорила, решают это не тестировщики. И ответственность не только на них, так что нет смысла пытаться сначала всю на себя ее перетянуть, а потом думать как бы съехать. Не нужно создавать себе дополнительных сложностей :) Мы живем не в идеальном мире, и это - хорошо!

вторник, 22 октября 2013 г.

Что же делает QA/QC?


Вдогонку к заблуждениям. QC - это не поиск только багов, как уже говорилось ранее, это - предоставление полной информации о состоянии проекта. Сколько раз я читала эту фразу, но только сейчас она выкристализовалась в моем мозгу со всей своей ясностью - протестировать проект - это сделать его полное вскрытие и донести этот разрез до PM'а и/или разработчиков. И QC делает это вскрытие, а QA - показывает где и как резать, чтобы было лучше видно все детали.

пятница, 30 августа 2013 г.

Заметки на полях

Просто интересно - две компании, разработчики игр. На главных страницах - ВНЕЗАПНО - указана одна и та же игра, только у первых на мейле, у вторых - на одкл. С теми же...гм...ляпами. Нет, это не функционал (хотя я глубоко не копала), но в нашей фирме локализация поставлена так, что даже на банке с краской в арте вы не найдете следов английского текста. Т.е. у товарищей либо в куске движка остались англицизмы, либо это было портирование, поделенное между компаниями на 2 сети. Вторая интересная весчь - прикалываются они что ли - у обоих компаний открыты вакансии на QA (на сайтах с работой), но на сайтах собственных в перечне доступных вакансий - ВНЕЗАПНО! - ни у одной компании нет вакансии для QA. Это типа мы так пытаемся сразу определить насколько кандидат пошарился по сайту и нашел "баг" или просто несколько неактуальное состояние вакансий на сайте? У одних есть форма обратной связи - спросила интереса ради почему так - ответа нет. У второй компании даже формы обратной связи нет, только мыло - спрашивать лень. Но все равно интересно.
Еще наблюдизм - по ходу никто не отличает QA от QC - на всех сайтах с работой пишут QA, хотя по факту часто нужен QC. Если говорить о разнице, то QA это больше менеджмент (направление, постановка процесса для QC), а QC - практическая часть (тест-кейсы, выполнение, фиксация ошибок, проверки фиксов, пр). Такие хи-хи. UPD: они реально издеваются - еще одна контора, имеющая вакансию на сайте с работой, но которой нет на сайте (есть все, кроме как на тестировщика).

четверг, 22 августа 2013 г.

Большое заблуждение тестировщиков


Вот кто мне cкажет - что должен делать тестировщик? У 9/10 в голове всплывает "искать баги". Увы, это именно то, что хоронит проекты. Если тестировщик заинтересован только в поиске багов - пиши пропало. Если у него - после туевой хучи уебанных треннингов аля "Как найти удовольствие в работе? - Радоваться найденным багам!" - мозг настроен исключительно на поиск багов - проект либо вообще не будет выпущен, либо будет выпущен поздно (упущенная выгода + потеря лидирующих позиций) и все равно хромой. Поясняю на пальцах навожу порчу по IP - все знают, что программу невозможно полностью избавить от багов. Все знают, что если хорошенько искать - то найдется. А уж если речь идет о сложной программе, когда чиним уши - отваливается нос, то и подавно - багогенератор, точнее, эндорфиногенератов у вышеозначенных товарищей. Они не заинтересованы в затыкании фонтана своего удовольствия, а, следовательно, в выходе проекта. "Но что же тогда должен делать тестировщик?! Неужели пропускать баги, закрывать глаза на произвол?!" - в пылу воскликнет молодой и/или неопытный тестировщик. В первую очередь тестировщик должен уметь правильно расставлять приоритеты. Не у тикетов, нет, а в голове. "Насколько ломает игровой процесс этот баг? Сложен ли он в повторении? Реальна ли эта ситуация для пользователя? Сколько времени (читай - денег) может занять его починка?". Если это действительно важно - тикет. Если это может подождать до багфикса после выхода - запишите себе в отдельный список и не мучайте команду обновляющимися через каждые 5 минут тикетами. Конечно, не все эти вопросы тестировщик может решить сам - подойдите к PM'у - они не кусаются. Более того, именно PM лучше вас даст оценку - будет это чинится срочно или нет и будет в курсе всех проблем. И ваша совесть будет чиста - вы не просто умолчали, а доложили и приняли решение вместе (ваша задача для этого - дать PM'у понять всю полноту картины). Далее. Не нужно плодить кучу однородных тикетов - "тут съехал текст", "тут кривая кнопка", "тут вылез английский/китайский/афрояпонский текст" - сделайте один с пунктами и вы увидите, насколько вы облегчите собственную жизнь и жизнь программиста. Куда легче обновлять тикет пачкой, чинить и проверять, чем жонглировать 10 однотипными. Ну, про уточнение условий писано-переписано уже сто раз. Не пишите условия "шаг влево, шаг вправо - расстрел" - исследуйте вширь - только ли при таких условиях, а если чуть изменить/убрать шаг? Не пишите "тут сломалось, наверное в <аналогичное место> тоже поломано" - посмотрите бога ради в это аналогичное место! Чем больше информации вы дадите для починки, тем меньше времени уйдет на починку, ведь именно вы, а не программист работаете с клиентской частью, вы знаете ее куда лучше. И последнее - помните про приемочное тестирование - именно этим вы должны заниматься перед выходом проекта, а не поиском багов.
А радоваться надо не найденным багам, а починенным. Если вы радуетесь только найденным - получается, что вам совсем неважно? что ваш проект - хромой, убогий и болезный, да вы именно этому и рады. А если вы радуетесь починкам - значит, вы улучшаете качество вашего продукта, радуетесь его росту, улучшению.