Ошибка не в проблеме, а в симптомах проблемы

Ошибка не в проблеме, а в симптомах проблемы

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

Перевод на русский. Оригинал статьи здесь

В IT, когда мы находим ошибку, мы ее исправляем. Исправление — это решение, поэтому кажется логичным, что ошибка — это проблема, и как только она исправлена, у нас все в порядке, верно?

Не совсем. Ошибки — это не проблемы, а скорее симптомы проблемы.

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

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

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

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

Помните: проблема не в ошибках; Они являются симптомом. Лечение симптома без решения проблемы нелогично и рискованно.

Чтобы определить проблему, мы должны определить и проанализировать симптомы

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

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

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

  • Непонимание того, что нужно делать: функция не работает должным образом. Например, предполагается, что функция оплаты открывает диалоговое окно оплаты как для аутентифицированных, так и для гостевых пользователей при нажатии кнопки «Оплатить сейчас». Однако ничего не происходит, когда тестер нажимает «Оплатить сейчас» в качестве гостевого пользователя. В данном случае разработчик не понял, что диалог оплаты должен открываться как для аутентифицированных, так и для гостевых пользователей.
  • Непонимание условий использования или «невыполнение нефункциональных требований (NFR)». Например, тестировщик по понятным причинам будет рассматривать это как ошибку, если диалоговое окно оплаты открывается только после того, как страница не отвечает в течение 5 минут. Если разработчик не понимает условия использования (диалог должен открываться сразу после нажатия, независимо от того, аутентифицирован пользователь или является гостем), исправление его один раз не решит корень проблемы.
  • Непонимание инженерии. Обычноэто происходит, когда объекты непредсказуемо взаимодействуют с другими признаками. Например, тестировщик авторизуется как аутентифицированный пользователь и открывает диалоговое окно оплаты. После этого тестер выходит из системы, но окно оплаты со всеми ранее вошедшими в систему данными пользователя остается открытым. В данном случае разработчику не хватало информации о том, как модуль должен взаимодействовать с функционалом входа/выхода.

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

Мы также должны учитывать, как культура влияет на эти ситуации. Если у людей возникают конфликты или они искренне не заинтересованы в качестве продукта, то потеря информации будет еще более значительной. Подумайте об этом как о тяжелой инфекции в дополнение к перелому кости — инфекция не только замедлит выздоровление, но и повлияет на выбор лекарств и лечения.

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

Чтобы решить проблему, мы должны выбрать оптимальное решение

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

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

Например, у меня был опыт различных методов лечения проблем, связанных с «непониманием того, что нужно делать», таких как:

  • организационное совещание, на котором разработчики и тестировщики договариваются с менеджером по продукту о своем понимании функции и записывают более подробную спецификацию, включая NFR, пограничные и негативные случаи, а также все счастливые пути. Это собрание также может быть использовано для тестирования требований.
  • Разработчик в паре с менеджером по продукту создает функционирующий прототип функции, чтобы понимание функции прояснялось во время работы.
  • Команда использует ансамблевую работу (mob) для создания и тестирования функции, поэтому спецификация пишется коллективно вместе с разработкой функции.

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

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

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

Чтобы оценить эффективность решения, мы должны проанализировать и пересмотреть его

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

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

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

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

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

Ни один диагноз не является идеальным. Использование TMS и документирование процессов похоже на обновление медицинских записей — хранение информации для будущего анализа значительно упрощает переоценку и экспериментирование с новыми методами лечения и решениями.

11
1 комментарий

Согласен. Часто мы гонимся за быстрыми решениями, не вникая в корень проблемы. А это приводит к тому, что ошибки повторяются снова и снова..

1