2009-03-04 3 views
2

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

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

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

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

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

Мои вопросы вокруг этой конструкции являются:.

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

Обновления

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

Термин, с которым я столкнулся для таких «тестов», - это предполетный код. – Morendil

+0

@Morendil не может найти что-либо в Интернете для предполетного кода ... но мне все равно нравится этот термин;) –

ответ

2

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

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

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

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

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

+0

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

1

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

+0

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

+0

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

+0

Мы используем ее только для HTTP, но я считаю, что ее можно расширить. Я еще не пошел по этому маршруту. – leppie

0

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

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

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

+0

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

Смежные вопросы