Стоит ли тестировать внешнюю систему перед ее использованием? - PullRequest
2 голосов
/ 04 марта 2009

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

Я работаю над системой, которая взаимодействует с несколькими внутренними системами, которую можно сгруппировать в три типа

  • Реляционная база данных
  • Сервис SOAP или WCF
  • Файловая система (сетевой ресурс)

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

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

Мои вопросы по поводу этого дизайна:

  1. Есть ли серьезные проблемы с этим? (такие мелкие вещи, как тот факт, что между завершением теста и выполнением кода может произойти сбой, понятны)
  2. Есть ли лучшие способы для реализации такого дизайна?
  3. Будет ли лучше использовать традиционную обработку исключений и / или транзакции?

Обновления

  • Системе необходимо согласованно взаимодействовать с внутренними системами.
  • Система очень асинхронна по своей природе, поэтому использование таких вещей, как технологии очередей, вполне подойдет.
  • Система должна работать, даже если одна или несколько внутренних систем не работают, поскольку другие могут работать, и обработка некоторой информации возможна.

Ответы [ 3 ]

2 голосов
/ 04 марта 2009

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

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

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

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

И, как всегда, реальная стабильность может быть достигнута только путем устранения основной причины проблемы. У меня была исправлена ​​ошибка 25-летней давности в стеке TCP / IP мэйнфреймов, потому что мы ее переполняли, поэтому возможно .

1 голос
/ 04 марта 2009

Microsoft Smartclient Framework предоставляет класс ConnectionMonitor. Должно быть простым в использовании или дублировании.

0 голосов
/ 05 марта 2009

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

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

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

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