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

Жизненный цикл

Проект начат…

Стартовая встреча.
Исследование.
План.

Спринт.

Итерация…
Итерация…
Итерация…

Сборка.
Веха.
Продукт.

Счастливый клиент.
Счастливый коллектив.

Непредсказуемый случай!

Обнаружение ошибок.

Итерация…
Исправление…
Исправление для исправления…
Исправление, устраняющее все ошибки, вызванные предыдущим исправлением…

Потеря нервной клетки.
Новая привычка спать.
Ведро кофе.

Новая сборка с новым опасением, что что-то, чего вы не предвидели, может внезапно разорвать ваш проект пополам.

Обеспокоенный клиент

Но почему?

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

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

Что происходило?

Откровение

Основная проблема заключалась в неправильном использовании термина «валидация».

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

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

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

Нам было известно о текущем состоянии проекта - продукт был только проверен.

Реальность

Я буду с вами откровенен ... всего этого на самом деле не было. На самом деле все пошло в совершенно другом направлении.

Мы предсказали это на этапах планирования и исследования проекта и сразу же обратились к нему.

Разрешите познакомить вас с областью применения данного приложения. Я опущу детали проверки, так как это немного удлинит пост. Может, напишу об этом в одном из будущих постов.

Приложение

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

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

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

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

Вот где реальный смысл валидации нашел хорошее применение, поскольку мы имели дело примерно с 1000 случаев состояния, полученных от серверной части.

Пуленепробиваемая проверка

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

Интерфейс включал панель, которая позволяла сократить набор тестов и проанализировать точное подмножество состояний. Вы можете интерпретировать его как интерактивный инструмент «отладки».

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

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

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

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

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

Будущее

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

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

__________
Мы открыты для партнерства и новых проектов. Если у вас есть идея, которую вы хотите обсудить, поделитесь ею с нашей командой!