Показаны сообщения с ярлыком future of testing. Показать все сообщения
Показаны сообщения с ярлыком future of testing. Показать все сообщения

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

Дырка от бублика

Не знаю почему так получилось, но в тестировании, на мой взгляд, незаслуженно мало внимания уделяется анализу ошибок, того откуда и как они происходят, насколько катастрофичными они могут быть. Что, казалось бы, довольно странно - люди, работа которых искать ошибки, в первую очередь учатся кодить, болтать, мечтать стать менеджером и нараспев орать с табуретки набор заученных догматов-методологий (а как их иначе называть, если подкоркой не интересуемся?).

Для начала возьмем довольно старую и популярную модель, успользуемую для анализа рисков и управления ими - модель "швейцарского сыра". У нее (как и у любого обобщения) есть ряд недостатков, но она очень крутая в педагогическом плане. Про недостатки можно будет побеседовать потом, пока просто опишу что она из себя представляет.

Если вкратце, то модель представляет нам любую мало-мальски сложную социально-техническую систему в виде нескольких слоев швейцарского сыра, которые постоянно крутятся. Каждый слой сыра это своего рода барьер, которым организация/система пытается отгородиться от ошибок. Дырки в сыре это персональные недостатки того или иного куска системы - они все время меняются в размерах и перемещаются по различным кускам сыра. И когда все они совпадают происходит следующее:
Другими словами все становится очень нехорошо. Или просто нехорошо. Сложные системы штука такая - кумулятивный эффект от ошибок на разных уровнях скотина бездушная и легко может привести к чудовищным последствиям.

Дырки в сыре так же принято классифицировать как латентные и активные ошибки.

Чтобы было понятнее - разберем на примере.

Допусим у нас есть четыре слоя сыра:
  • Планирование
  • Код
  • Обучение
  • Сервера
На каких-то серверах не мониторится I/O. Это типичная латентная ошибка, т.к. сама по себе она проблему вызвать не может, но если что-то внезапно случится, то мы просто не сможем на этой стадии предотвратить проблему и все жахнет. И, скорее всего, пока не жахнет - эта ошибка будет существовать. Последнее, кстати, является крайне неприятным свойством латентных ошибок, но умный менеджер знает как с такими штуками бороться. Запишем эту ошибку:
  • Планирование
  • Код
  • Обучение
  • Сервера (не мониторим I/O - латентная ошибка)
Продолжим разбор гипотетического инциндента дальше.
Допустим группа умных людей немного ошиблась на стадии планирования емкостей и завизировала кривые расчеты у начальства. Получаем еще одну латентную дырку:
  • Планирование (ошиблись в расчетах емкостей - латентная ошибка)
  • Код
  • Обучение
  • Сервера (не мониторим I/O - латентная ошибка)
Все еще мало для катастрофы. Давайте добавим еще немного.
Пусть у нас тотальный непрерывный деплой и парочка unit-test'ов из тех, что прогоняются перед выкладкой кода на сервер ближайшие 20 минут не прогонятеся, т.к. рефакторится или находится в еще каком переходном состоянии. Ну бывает. Это непонятная ошибка, пусть будет латентная.
Еще кто-то взял и немножко нарушил стандарты кодирования. Наговнокодил, другими словами. Тоже бывает. Латентная ошибка.
А еще кто-то взял и зафигачил в код большой такой, сочный баг, который приводит к тому, что при вызове какой-то функции адово абузится запись на диск. Самая что ни на есть активная ошибка.
И чтобы жизнь медом не казалась кто-то намудил с фиче свичами перед выкладкой и открыл наружу вызовы той самой волшебной API и по ней автоматом обновилась дока. Опять активная ошибка.
Суммируем:
  • Планирование (ошиблись в расчетах емкостей - латентная ошибка)
  • Код (бага - активная ошибка, говнокод -  латентная  ошибка)
  • Обучение (открыли API наружу когда неположено - активная ошибка)
  • Сервера (не мониторим I/O - латентная ошибка, тесты мигрируют -  латентная  ошибка)
Если мы попытаемся сложить все вместе, то катастрофа случилась примерно так: 
  1. Запланировали емкостей явно меньше чем безопасно
  2. Случайно нашлась бага, которая абьюзит I/O
  3. Функцию с багой оказалось возможным вызвать через API снаружи
  4. Тесты не нашли внешний вызов и багу, т.к. мигрировали на юга
Говнокод и косяки с мониторингом к происхождению проблемы отношения не имеют, но чисто теоретически могут в этой ситуации привести к увеличению масштабов катастрофы. Их отсутствие предотвратить катастрофу не смогло бы, но сильно бы способствовало тому, чтобы приуменьшить ее вероятность/масштабы.

Если любое из приведенных 4-х событий не случилось (бага в другом месте, другие тесты мигрировали и т.д. и т.п.), то данной конкретной катастрофы могло бы и не случиться. Да и другой тоже. В этом плане "швейцарский сыр" мало чем отличается от модели "домино", разве что позволяет наглядно продемонстрировать все множество участников событий да как-то классифицировать ошибки на разных концах цепочки.

Вот такая вот гимнатиска. Какие меры стоит принимать для того чтобы такого больше не повторилось - думайте сами.
Явных козла отпущения у нас тут два - по числу активных ошибок. Еще пачка по остальным ошибкам. Но "сырная" модель сообщает, что поиск козлов отпущения не для правильных ребят.
Как нужно было делать до - теперь уже любой идиот скажет (мне, лично, в точке, где у нас просос по мониторингу еще откровения с Марса не приходили).

ЗЫ: Думаю какой-нибудь надмозг советской закалки уже снимает ремень чтобы выпороть того кто ему меньше всего понравился (примерно по этой причине планировать емкости безопаснее чем писать тесты - перед вами море материала для перевода стрелок). Т.е. хочет чисто гипотетически и совсем уж постфактум зыкрыть всего одну сырную дырку не обеспечив того что она никогда не повторится. Ну ок, сам себе злобный идиот раз создает такую корпоративную культуру.

ЗЗЫ: Еще раз повторюсь - модель говно и есть лучше. Но оно все так сложно...

среда, 23 мая 2012 г.

Системы управления Тест-кейсами. Часть вторая. Про ненависть

"essentially, all models are wrong, but some are useful"
- George E. P. Box

В продолжение вот этого поста.

Так уж сложилось, что софт для тестирования в большинстве своем отвратителен со множества сторон. Причем по большей части отвратителен именно как софт. Т.е. как нечто, что призвано решать какие-то проблемы тестирования. TCMS в большинстве своем не исключение.

Почему мне не нравится сама идея TCMS?
Что такое TCMS по своей сути? Это система электронного документооборота. Со своей спецификой документов, со своими workflow и прочая прочая. Хорошо если вы сможете настроить формат документтов и/или workflow, хотя с этим в большинстве TCMS все очень плохо.

Сколько у вас в вашей работе систем документооборота? Скорее всего есть багтрекер (да, он именно такой системой в какой-то мере и является). Может есть еще и какая-нибудь вики. Может еще что-нибудь. Т.е. как только у нас в голове оформляется проблема в тестировании/процессе/ватэва мы просто берем и фигачим в эту проблему системой документооборота. Нужно отслеживать какие есть баги и что с ними творится? Держите багтрекер. Нужно средство для совместной работы над спеками?  Ну возьмите вики. Запутались в том какие у вас есть тесты и не понимаете что происходит в тестировании? Держите TCMS.

Больше систем хороших и разных. С довольно поганой интеграцией друг с другом. И чтобы каждый работник в каждой из систем исправно и регулярно работал. Здорово? Не думаю.

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

Почему TCMS это трата времени?
Потому что переключение контекста это отличный способ демотивации сотрудников и подрыва их производительности. А если они проходят за день по здоровенным чеклистам, то вариантов у них мало:
  1. Вносить изменения по ходу работы. Т.е. это или будет постоянная сверка с чеклистом по ходу работы, или человек будет делать дампы небольшими кусками.
  2. Вносить изменения постфактум. Это тоже кушает время, но не требует переключать контекст во время работы.
Есть способы сделать жизнь легче. Вот такой, или вот такой, например. Только почему-то, AFAIK, в TCMS пока ничего подобного нет. А пока нет - ваше тестирование будет сродни пилоту, который вынес нафиг все показания датчиков на спинку своего кресла и должен постоянно оборачиваться чтобы понять что происходит и куда дальше.

При этом TCMS использует гениальнейший способ отображения больших кусков информации - таблицы. Нифига не агреггированные, по больше части, ввиду особенностей данных. Для того чтобы оценить то, насколько это круто, можете почитать книжки про работу с данными. Это не все, но верхних трех из списка хватит чтобы оценить масштабы бедствия.

При этом сами TCMS как правило ограничивают ваши тесты как формой так и форматом. Вам нужен бинарный результат. Вам скорее всего придется потратить время на такую вредную штуку как сведение всех ваших тестов до одного уровня атомарности. Делаете очень много маленьких тестов - получаете почти полную невозможность делать хорошие, сложные тесты. Много больших - получается обратная проблема. Много разных - ваши метрики вроде pass/fail ratio начинают трещать по швам от своей бесполезности.

Ну и конечно же "счастье" в виде поддержки тысяч кейсов для динамически развивающихся продуктов. Хотите? Считаете что оно стоит того? Есть компании, где существовали специально выделенные люди для актуализации тесткейсов. Вам к ним.

Почему сомнительные бонусы?
Из написанного выше следует, что мы или подгоняем всю свою тестовую активность под шаблоны TCMS или эта система как сборник и мониторинг вообще всей вашей тестовой деятельности никуда не годится. Но подгон под такие шаблоны это уже не тестирование, а самое натуральное вредительство.

Ведь если нам нужно понять в каком состоянии находится проект, то можно работать над такими штуками как Low Tech Testing Dashboard. Вот хороший пример. Это быстро, нет никакого мусора. Можно делать хоть на вашей доске прямо в кабинете.

Если вам нужно понять какие тесты у вас уже есть, а каких нет - рисуйте MindMap'ы, оформляйте используемые модели каким-нибудь более удобным способом чем стена текста всунутая в таблицу. Есть много отличных способов работать с многомерными моделями/данными.

История прогона тестов сама по себе ценности не несет. Есть ценность в материале для post mortem анализа, которым может являться история тестов. Но после данного анализа этот материал практически не нужен.

Ну и, конечно же, метрики вписанные в TCMS.
Хотите из результатов прошлых тестов получить за сколько будет выполнен следующий прогон? Тогда, наверное, вы не очень хорошо понимаете почему тестирование кушает больше или меньше времени. Сюда же можно записать отслеживание прогресса.
Хотите использовать их для pass/fail ratio? Тогда вы наверное забыли что такое "один единственный баг из-за которого ничего в продакшен не пойдет". К тому же если ваш тест начинает падать, то надо проблему чинить. Ну или выкидывать тест, если эта проблема всех устраивает.

Вместо "итого"
TCMS отлично подходят для:

  1. Тестов на примерно одном уровне абстракции
  2. Тестов не сильно отличающихся по вариативности
  3. Тестов с бинарным результатом
  4. Когда мы можем легко отслеживать выполнение тестов и логировать его
  5. ...
  6. Ну вы понели
Это все отлично подходит для большинства автоматических тестов, вписывающихся в Productivity модель. Т.е. сравнительно несложных, атомарных проверок, которые (так уж исторически сложилось) принято называть тестами. Для постобработки такого материала хорошая работа с табличными данными более чем пригодна. Увы она есть не во всех TCMS, но даже с этим можно что-то сделать.

Для ручных тестов получается три варианта:
  1. Вы осознанно отказываетесь от различной тестовой активности, которую нельзя уложить в шаблоны использования TCMS и которые приводят к уплыванию встроенных туда метрик. Можете еще попробовать отрубить себе ногу.
  2. Вы пытаетесь впихнуть в TCMS невпихуемое. Получается уродливо, неудобно, да к тому же большую часть бонусов от работы с TCMS вы потеряете.
  3. Вы честно признаетесь что в TCMS будут не все ваши замечательные тесты и не вся тестовая активность. И скорее всего там будут только автоматические тесты. Если вообще будут.



ЗЫ: Откровенный фашизм с визированием и разделением тестировщиков на "читателей" и "писателей" я не вижу смысла обсуждать. Оно имеет смысл в случае когда к вам пришло FDA, но даже там это не единственная возможная/нужная активность.

четверг, 10 мая 2012 г.

Системы управления Тест-кейсами. Часть первая. Про любовь.

В этот раз хочется обсудить кошмар под названием Test Case Management Systems.

Для тех кто не в курсе что это такое - поясню:

Жили были тестировщики. И писали они тесты. Иногда тесты получались гениальные или очень сложные, и тогда они их записывали куда-нибудь. Как только тестов становилось много, их начинали упорядочивать в аккуратненькие документики (мы ведь знаем, что тестировщик в душе своей тот еще бюрократ). Отделы росли, поколения тестировщиков сменяли друг-друга, и примерно через годик-другой ведения таких аккуратных документиков в любой мало-мальски большой конторе со средней паршивости текучкой кадров обычно образуется завал этих аккуратных документиков, которые можно смело назвать "интелектуальное наследие прошлого", aka "помойка".
На этой стадии морального разложения у команд тестирования, как правило, есть куча "очень важных" документов. Обычно это куча экселевских (или еще чего похуже) файликов в которых есть аккуратные таблички, где можно ставить классные галочки или крестики или что вам удобно для того чтобы отмечать прогресс. У протестированной версии продукта должны быть все копии этих ддокументиков завизированные кровью самого старшего тестировщика с отметкой "PASSED" или "ПРОЙДЕНО" (в особо клиническом случае - "БАГОВ НЕТ!!!"). Ну и, конечно же, все должно быть пройдено ручками с точностью до запятой. Эдакое "cover your ass" тестирование, не имеющие ничего общего с качеством, но логично вытекающие из роли тестировщика как козла отпущения. Козел умирать не хочет, потому как может, так и прикрывает свои филейные части.
Иногда есть еще и сакральный документ под названием "план тестирования", который в лучшем случае представляет из себя что-то отличное от сборника всех-всех документиков с тест-кейсами. Но это отдельная, не менее печальная история.
Расово верный тестировщик может годами обсуждать правильные формы для заполнения таких документиков, обмениваться такими формами с коллегами, думать о выделениях разными размерами шрифта и запятыми, и предаваться другим околографоманским забавам.

Но!

У этого вороха документиков есть ряд недостатков:

  1. С ним чертовски неудобно работать. Вообще. Надо создавать копии документиков, держать их открытыми у себя на мониторе, сверяться все ли заполнено. И там даже не стройные ряды чекбоксиков, а частные spreadsheet-like поля. Тысячи их.
  2. Все хорошо пока в отдельно взятой команде тестировщиков есть непрерывная линия устно-фолклорной передачи сакрального знания о пользовании данными документиками. Как только цепочка нарушается - разобраться в этом кошмаре становится очень сложно (тестировщик хоть и бюрократ и гарфоман, но не враг себе, и старается устроить все поудобнее). Иногда трудно понять, что же за кошмар творится в соседнем отделе. Иногда благославенным перстом какого-нибудь корпоративного фюрера вводится "удобная для всех форма", и все работают с ней.
  3. Чтобы понять, "что же эти тестировщики делают", в ряде случаев нужно собрать большой такой ворох документиков и долго, при помощи Microsoft Office'XX и такой-то матери понимать. Иногда это еще называется "в каком состоянии находится вверенный тестировщикам софт".
В общем радужный такой, пост-водопадный бюрократический северный пушной лис.

Для того чтобы избежать всего этого кошмара не придумали ничего лучше, чем:

TEST CASE MANAGEMENT SYSTEMS

Сначала были коммерческие, потом стали и не очень коммерческие. Горячо любимые нами вендоры тестерского софта вобрали в такие системы все лучшие практики индустрии:
  1. Вся прелесть пользовательских интерфейсов в лучших традициях Enterprise-решений
  2. Возможность задавать права соответствующие пищевой цепочке ваших тестировщиков (например "самый умный пишет - остальные выполняют") вместе с гибкими настройками рабочего процесса, когда вы можете наслаждаться тем, что изменение одной формочки - это будет не просто коммит, но еще и правко-визирование от N просвещенных тестировщиков
  3. Возможность наслаждаться наиполезнейшими метриками вроде pass/fail ratio и предсказывать сроки! Вам не придется самим считать это темными менеджерскими ночами! Теперь все будет сделано за вас любящей и знающей машиной!
  4. Возможность структурировать все в так горячо любимые тестировщиками таблички. Сотни! Тысячи табличек! Все с блестящей иерархией!
  5. Возможность отслеживать время выполнения. Да-да! Вам не хватает мест куда бы ваши сотрудники могли бы писать сколько минут и на что они потратили? Заведите себе еще и TCMS! Ведь учтенное время это время, потряченное не зря!
  6. Одни и те же тесты можно запускать в разной среде, от чего в обычных экселевских табличках многомерные данные просто не укладываются. Теперь вы можете привязывать конфигурации, и вообще все прямо на месте!
  7. Завизированные тесты теперь будут доступны всем важным лицам для ретроспективного анализа, и никто и никогда не сможет туда добавить что-то задним числом!
  8. Ну и конечно же вы сможете дружить эту волшебную систему со всем подряд, начиная от вашего багтрекера и заканчивая ковриком в кабинете генерального директора

Далее в комментариях я предлагаю обсудить все прелести и недостатки такого монументального решения. 

Свои взгляды на то почему это нихрена не работает я напишу позже. Ровно как и далекие от "Корней" и нарушающие все "Традиции" способы решать проблемы, которые, как думается, должны решать TCMS. Меня за это наверняка подстерегут в темной подворотне и прямо там с особым цинизмом предадут остракизму. А пока вы можете насладиться познанием такого явления как "Арифмомания".

вторник, 6 марта 2012 г.

Школы тестирования. Открытое будущее

В прошлом году James Whittaker и Alberto Savoia породили интересуню дискуссию на тему смерти тестирования вообще или в конкретных его проявлениях.
Янезнаючтоэтозначит, но оба, кстати, недавно покинули Google.

Еще не успела улечься эта волна дискуссий, как на прошлой неделе свет наш Cem Kaner заявил, что:
Даже если когда-то и существовала контекстная школа тестирования, то отныне ее нет.
Для того, чтобы разобраться в том, что случилось стоит вспомнить что вообще представляют из себя школы тестирования и какие они бывают.

Школы? Что это?
Эксперты в тестировании ПО очень часто не соглашаются друг с другом, спорят и вообще ведут себя странно в силу ряда причин, которые во многом кроются в сильно разных, зачастую противоречивых теоретических базах, подходах, разном определении одних и тех же терминов и еще сотне-тысяче других причин.
До 2003-го года общение на почве тестирования было затруднено, но ясно солнышко Bret Pettichord (дальше местами будет вольный пересказ его тезисов) сотоварищи постарался и ввел такое понятие как Школы Тестирование ПО. Эти школы это не "Средняя школа №17", а скорее что-то сродни школам мышления, научным школам.
Bred Pettichord это один из основателей контекстной школы, так что это разделение на школы в основном дело рук именно этих граждан.

На данный момент принято считать, что школ пять: Аналитическая, Стандартная, Обеспечения Качества, Контекстная и Школа Гибкого (Agile) Тестирования.

Школа не определяется какими-то специфичными техниками - все школы в той или иной мере используют все известные техники.
У школы нет своей доктрины.

Как правило школа это набор общих целей, ценностей, терминологии и, возможно, каких-нибудь организационных институтов (ISTQB, например).

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

С другой стороны в случае, если у вас в команде окажутся особо ортодоксальные последователи разных школ, то могут возникнуть серьезные проблемы. Да в общем-то хватит и парочки упертых тестировщиков, тупо заучивших какие-то вещи и не понимающих зачем и почему они нужны. Но это уже очень грустный клинический случай, не будем на нем останавливаться подробно.

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

ПО для Аналитической школы это целиком и полностью логический артефакт.
Тестирование - ветка Cumputes Science/Математики (т.е. объективный, понятный, регулируемый процесс)
Любые техники тестирования должны давать один правильный ответ, т.е. принимают четкую логико-математическую форму.

В итоге такое тестирование требует как можно более детальной спецификации, а процесс построен во многом вокруг сверки спецификации и конечного продукта. Эти проблемы практически нерешаемые, да и авторы этой школы сосредоточены больше на других вопросах - вопросе выбора техник обеспечивающих максимальное покрытие.

Pettichord в качестве примера авторов этой школы приводит Бориса Бейзера.

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

Матрица покрытия требований хороший пример данной школы. Ее основной принцип - все требования и тесты для них (или наборы тестовых случаев) должны быть перечислены и когда все тесты прошли успешно - продукт можно выпускать. Это очень интересный артефакт, который как правило не работает в полной мере, т.к. требования меняются или могут быть просто неточными, а тесты так же не всегда показывают то, что мы считаем они должны показывать (см. предвзятость подтверждения). Т.е. в итоге можно получить софт сомнительного качества, но зато все клеточки зелененькие.

Тестирование с Стандартной Школе это фактически измеритель прогресса.
Тестирование в ней должно быть легко управляемым, предсказуемым, повторяемым и легко планируемым. А так же эффективно по цене (дешевая рабочая сила под мудрым управлением).
Весь процесс должен быть хорошо регламенирован, так что основным вопросом является выбор правильных метрик.

Это вносит ряд сложностей, т.к. это практически ничем неприкрытый Тейлоризм, требующий четких границ между тестированием и любой другой активностью, т.е. четких критериев начала/остановки работы.
Так же с такими подходами очень сложно вносить изменения в уже имеющиеся планы.
Зато последователи этой школы очень много сделали на поприще генерации бесчисленных стандартов, "лучших практик" и сертификаций. В частности они породили мой любимый  IEEE Standard Classification for Software Anomalies.

Рекс Блэк отличный представитель данной школы, даже в последнем интервью для uTest сообщивший что основной проблемой тестирования является сложность подбора хороших, годных метрик.

Школа Контроля (Качества)
Школа Контроля Качества больше фокусируется на стандартах и процессах. Согласно их утверждениям тестирование является своего рода хранителем продукта.

Pettichord использует роль хранителя продукта как ключевой пример этой школы. Тест менеджер или QA лид является единственным лицом, которое решает можно релизить продукт или еще рано. Эдаким защитником конечного пользователя от плохого продукта. Это одно из основных отличий от остальных школ, где подобные решения возлагаются на менеджмент или же на всю команду.

Подобный подход требует чтобы помимо ответственности у контролирующего были и возможности остановить выпуск продукта, если он считает, что продукт слишком низкого качества чтобы его выпускать. Я видел случаи, когда компании пытались применять подобные стратегии, но в итоге когда менеджменту действительно хотелось чтобы продукт увидел свет, ответственного QA лида просто отодвигали в сторонку и выпускали продукт несмотря на его качество. Очень неприятные ощущения, надо сказать. Ведь если у вас есть ответственность и обязанность говорить что продукт выпускать нельзя, но нет никакой возможности приостановить выпуск, то, возможно, скоро на вам станут смотреть как на того мальчика, который кричал про волков. Есть и другой вариант - "идеальное качество у того продукта, который так никогда и не был зарелизен".

Такой подход может работать, если соблюден должный баланс ответственности и возможностей, а так же, если у ответственного лица есть возможность непосредственно влиять на процесс (и, желательно, только у него). В ряде случаев такие роли приводят к тому, что ответственное лицо фактически никаким тестированием не занимается.

Контекстная Школа
Контексттная школа это своего рода Agile Manifesto для тестировщиков. Оно базируется на следующих принципах:

  1. Ценность любой практики зависит от контекста ее применения
  2. Есть хорошие практики для определенного контекста, но нет лучших практик
  3. Люди работающие вместе это самая важная часть контекста проекта
  4. Проекты со временем могут развиваться совершенно непредсказуемымо
  5. Продукт это решение. Если проблема не решена, то продукт не работает
  6. Хорошее тестирование ПО это сложный интеллектуальный процесс
  7. Только через суждения и навыки используемые совместно по всему проекту могут привести к выполнению правильных вещей в правильное время для того чтобы эффективно протестировать ваш продукт
Контекстная школа и по сей день является одним из самых ярых сторонников исследовательского тестирования. В других школах так же применяются подобные практики, но в данном случае Bred ииспользовал этот пример потому, как он отдает все внимание продукту и людям, а не процессу, который, согласно Контекстной Школе, вторичен.

Как и Agile Manifesto пообный подход для многих показался слишком открытым и абстрактным, к тому же он не дает серебряной пули на все случаи жизни, не дает лучших практик, которые всегда спасут. К тому же у ряда кампаний/проектов есть определенные, жесткие жизненные циклы, вокруг которых выстроены избыточные процессы, которым обязательно нужно следовать. В такой среде контекстное тестирование не очень часто приживается.

Школа Гибкого Тестирования
Основные принципы этой школы предельно ясны - она фокусируется вокруг концепции непрерывной поставки. Всегда должен быть рабочий софт, который можно отправлять в мир.

Эта школа концентрируется вокруг массовой автоматизации всего. TDD, unit тесты и так далее. Все это аттрибуты этой школы (нет, другие школы тоже их могут использовать, но гибкого тестирования без этого просто быть не может). Кто-то из тестировщиков может сказать что это все дела разработчиков, но ему стоит задуматься хотя бы над тем, что такие компании как Microsoft или Google отказались от концепции тестировщика, который занимается только тестированием и нанимают SDET - разработчиков, которые занимаются тестированием.

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

Весьма примечательно, что в истоках этой школы стоят очень хорошо подкованные технически представители Контекстной Школы и люди, которые никогда не называли себя тестировщиками и/или QA/QC.

Промежуточное Итого
Bret Pettichord фактически является автором этого разделения, которое основатели Контекстной Школы подхватили и начали использовать как базис для дискуссий. Представители остальных школ со временем тоже взяли это деление на вооружение, хотя тот же Борис Бейзер первое время утверждал что знать не знает ничего ни о каких школах и не желает в этом принимать участие. Но со временем и они втянулись.

Это привело к определенной поляризации сообества и, местами, к более жесткой риторике, поскольку теперь неприятель был снабжен соответствующим ярлыком.

Но как представляется лично мне, Школы тестирования это отличная база для дискуссий, обучения и понимания. Но в реальности мы работаем не в рамках Школы, а в рамках организаций, у которых есть свой контекст, своя культура, свои цели, которым служит тестирование. В одних случаях лучше приживаются и работают одни Школы, в других другие. И когда мы собираемся на какую-то конференцию было бы неплохо иметь хорошую классификацию, чтобы не спорить о незначащих деталях, когда главная проблема кроется не в них, а в разице мировоззрения/парадигм. 
Когда мы идем устраиваться на работу классификация тоже может пригодиться, чтобы не работать в идеологически далекой от вас среде, так как если у вас есть хоть какие-то принципы и устоявшиеся взгляды на тестирование, то работать в таких условиях может быть очень неприятно.

Вместо Послесловия
У Контекстной Школы, породившей это разделение, было четыре основателя.
Brian Marick тихо ушел в сторону.
Bret Pettichord заявил, что Контекстное Тестирование это Гибкое Тестировние и тихонько ушел в ряды Гибкой Школы.
Cem Kaner написал, что школы нет, даже если она когда-нибудь была и всячески отрицает концепцию школ.
Остался James Bach, который агрессивно (что для него вполне нормально) отстаивает концепцию школ.

И, как я уже заметил в начале статьи - James Whittaker и Alberto Savoia практически сразу после своих замечательных выступлений на тему "Test is Dead" покинули Google, где занимали руководящие посты в тестировании.

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

пятница, 28 октября 2011 г.

Качество умерло, да здравствует качество

Качество умерло.

Собственно оно никогда и не являлось самоцелью для бизнеса. Конкурентным преимуществом? Да. Самоцелью? Маловероятно.

Раньше, когда весь софт был или в коробочках или требовал страшных плясок с бубном вокруг сервера, было очевидно, что исправлять и устранять ошибки на стадии планирования гораздо дешевле, чем во время разработки. И во время разработки гораздо дешевле, чем после выпуска. Тогда был и водопад, и то, что мы часто видим сейчас:

  • Тестирование требований
  • Тестирование после разработки
  • Тестирование по сути является лакмусовой бумажкой по которой определлялось выпускать продукт или нет
Системы были проще, код примитивнее, деревья выше и трава зеленее. С усложнением всего вокруг отдельные баги стало ловить проблемнее, и вся эта архаичная система (нет, есть отдельные примеры софта когда иначе очень трудно, хотя бы потому что "правительственные бюрократы") зачастую просто приводит к тому что мы может быть получим более качественный продукт, но он точно обойдется нам дороже.

Уже тогда для ряда софта было выгоднее исправлять проблемы по мере обнаружения их клиентами, а не стараться найти все и сразу.

Сейчас со всеми ниндзя-апдейтами (мы не замечаем, а софт апейтится сам даже на телефонах) и облачными сервисами стало проще. Фейсбук не проводит нагрузочного тестирования, а просто раскатывает новый код для небольшой части пользователей и смотрит что происходит. Аналогично поступают Твиттеры, Гугли и прочие Фликры с функциональными тестами. При этом критично не то, чтобы факапа вообще не случилось (это слишком сложно для таких сервисов), а чтобы можно было это все быстро исправить. Как это обеспечить?

TDD, мониторинг, хорошая обработка ошибок, атомарные функциональные проверки, местами избыточные, где функционал критичен. То, что Julian Harthy называет Productivity Tests - все это работает на то, чтобы разработчикам просто было сложнее чекинить плохой код и чтобы было легко обнаружить и локализировать (testability в экстремуме, практически). Если нет плохого кода и основная функциональность более или менее работает, то при возможности выкатывать на все свои сервера исправления чуть ли не каждые 10 минут реагировать на проблемы пользователя становится сильно проще. И потери от ошибок резко падают.

Еще раз для тех кто в каске - эффект достигается не за счет хорошего покрытия продукта автоматическими тестами вцелом, а за счет хорошей концентрации на аттрибутах качества вроде testability и на процессе, который сильно улучшает качество кода.

Виттакер и Ко. предлагают в связи с этим совсем избавиться от тестировщика в виде человека выполняющего black box тесты дни и ночи напролет. С их точки зрения имеет смысл или зарываться в глубокую специализацию (UX, производительность, Productivity тесты), или заниматься тестированием фактически на уровне требований, когда критично понять правильной ли мы дорогой идем, и что же тут делать. При этом часть специализаций вроде нагрузочных тестов и функциональщину они хоронят за крауддсорсингом и облаками. Спорно, но Google такой Google... как всегда, в общем-то.

Правда они не так громко говорят, что такая модель работает далеко не для всего софта, и что процессы ОК от силы у 10% команд. Более того - по тем же Productivity тестам есть куча софта и фреймворков в открытом доступе, но практически нигде не написано как писать, что искать, и насколько те или иные подходы оправданы.

У них качество умерло.

Кто пользовался гуглосервисами - поймет. Кто не понимает - можно вспомнить случившиуюся в начале этого года потерю гмейлом почты у 150 тысяч пользователей, или потрахаться с blogger.com (про рекламу пива на детских каналах в ютубе мы умолчим). Или факапы с биллингом у МТС. Или регулярные проблеммы фэйсбука с приватностью (тысячи их). Или то, что твиттер это довольно поганенький в плане качества сервис, который регулярно падает и если бы он был IM, то умер бы в агонии давным давно. Но он не IM, и его фиговую способность справляться с бешенно растущими нагрузками нам компенсируют тем, что все это очень быстро чинится.
И это не только там, где с процессом все хорошо и риски у пользователей сравнительно невелики. Банковский софт который мне встречался, это, наверное, самое отвратное с чем мне приходилось работать как конечному пользователю.
Пользователя в принципе не так сильно раздражают проблеммы, если он может быстро от них избавиться. А вот если его игнорируют - его это раздражает куда больше.

Но есть сферы применения тестирования, в которых оно приносит, или может приносить вполне очевидную, реальную пользу:
  • Можно создавать умные системные тесты, которые при правильном применении приносят много пользы, но при этом достаточно сложны в разработке.
  • Можно работать над обнаружением сложных проблем, вроде работы с большими и сложными структурами данных и анализа проблем на продакшене.
  • Нагрузочное тестирование это вообще очевидный профит для бизнеса, т.к. помогает корректно расходовать деньги на софт и железо.
  • Исследовательские навыки и умение задавать правильные вопросы. Это то о чем постоянно пишет Болтон и то, что все же упоминает Виттакер (хотя и в другом виде).
Добавим немного из примеров очевидно полезного тестирования от Виттакера:
  • Productivity тесты и прочая работа "на процесс".
  • Специализация а-ля UX, производительность.
  • Тестирование документации (хардкорная такая аналитика)
При этом старый, архаичный процесс с тяжелой бюрократией и размытыми объяснениями отдающими параноидальным бредом вызывает вопросы насчет своей пользы для бизнеса уже сейчас. Кто-то жалуется, что не понимает что вообще там в их тестировании происходит, кто-то говорит, что оно пустая трата денег и очень тормозит процесс. Ему грозит стать таким же рудиментом, как IE6 в корпоративных стандартах (нет, этот рудимент все еще приносит деньги, но он где-то далеко в пятой точке технологического прогресса).

И очень странно порой слышать, как тестировщик не может объяснить зачем он в принципе нужен, и какую пользу он приносит, а талдычит "тестирование это важно, потому что оно важно", "качество это важно, потому что оно качество" или "ну это очень сложно объяснить что такое тестирование и чем оно занимается, но верьте мне - это важно".

И еще раз процитирую Вейнберга: "Тестирование - это поиск информации с целью обеспечить ею принимаемые решения".
Очень сложно принимать какие-то своевременные решения, когда тебе создают 100500 багов, которые толком не объясняют где проблема, в чем проблема, а просто сообщают, что проблемма есть и сеют панику. Очень сложно принимать решения на основе тонн документации (и где они нашли на это время?) сомнительной полезности и нулевой прозрачности для Менеджера (нет, ну тестировщик-то написал и сам разберется, да... а нафига?).

Вейнберг дает такое определение качеству: "Качество - это то, что важно для кого-то". Надо знать этого кого-то. Надо понимать, что важно.

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