Уменьшает вероятность получения ошибок в огромной системе

#git #codeigniter

#git #codeigniter

Вопрос:

У меня есть онлайн-система, которая продает игры для лотереи. Система создает конкурсы, генерирует игры (для разных лотерей), управляет результатами, проверяет эти результаты, регистрирует клиентов, управляет кредитами и создает отчеты.

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

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

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

Что я могу сделать, чтобы уменьшить вероятность ошибок в такой большой системе, как эта?

OBS:

  • Да, я использую Git.
  • Я использую Codeigniter (мой — hmvc).
  • Это подходящее место, чтобы спросить об этом, или я должен спросить в другом StackExchange?

Комментарии:

1. Сколько модульных тестов у вас есть?

2. Ручное тестирование является неправильным. Мне нравится называть это «исследованием». Вам нужны автоматические тесты, особенно модульные тесты.

3. @X3074861X На самом деле я не использую модульные тесты. Интересная идея.

Ответ №1:

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

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

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

В качестве начального средства, особенно для разработки на PHP, PHPUnit — отличный выбор.

Хотя это может быть новой концепцией для вас, вы быстро поймете, насколько невероятно полезными могут быть модульные и интеграционные тесты даже на этапе разработки. На самом деле существует целая методология разработки, посвященная этой концепции, которая называется TDD. Я бы просто ознакомился с некоторыми из этих концепций, составил план покрытия (что и где вы хотите протестировать), а затем попробовал бы написать пару самостоятельно.