Тестирование кода для встраиваемого приложения

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

аргумент безопасности является побочным. Это просто перемещает проблему безопасности от приложения до базы данных. Код является кодом. Я видел хранимые процедуры, которые берут в SQL из приложений и используют его запросы сборки, которые подверглись атакам с использованием кода на SQL.

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

пользующиеся богатые библиотеки поколения SQL как LINQ, направляющие ActiveRecord или Hibernate/NHibernate делает разработку быстрее. Вставка хранимых процедур в соединении замедляет его.

15
задан SRoe 15 October 2009 в 14:05
поделиться

5 ответов

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

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

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

«Тестовая оснастка» будет представлять собой весь ваш высокоуровневый HW-независимый код с «фальшивым» нижним уровнем специально для тестирования. Это может имитировать аппаратные устройства для правильной и неправильной работы и, таким образом, позволяет запускать автоматические тесты на ПК.

12
ответ дан 1 December 2019 в 04:17
поделиться

Vectorcast - это коммерческий инструмент для запуска модульных тестов оборудования с охватом кода.

1
ответ дан 1 December 2019 в 04:17
поделиться

У вас есть разъем JTAG? Вы можете использовать JTAG для имитации условий ошибки на чипе.

0
ответ дан 1 December 2019 в 04:17
поделиться

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

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

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

3
ответ дан 1 December 2019 в 04:17
поделиться

Мне нравится разделять задачи. Например, когда я сделал кольцевой буфер для своего Atmel AVR, я написал все это в Code :: Blocks и скомпилировал его с помощью обычного компилятора GCC вместо компилятора AVR GCC, затем я создал для него модульный тест. Я использовал специальный файл заголовка, чтобы предоставить правильные типы данных, с которыми я хотел работать (например, uint8_t). Я обнаружил ошибки в модульных тестах, исправил их, затем перенес исправленный код в AVR Studio и интегрировал его. После этого я использовал написанные вспомогательные функции и ISR, чтобы вместить буфер в полезный код (например, извлечь один байт из буфера, вставить его в регистр вывода данных UART, добавить строковую константу в буфер для функции printf и т. Д.). Затем я использовал симулятор AVR, чтобы убедиться, что вызываются мои ISR и функции и что правильные данные отображаются в регистрах. После этого я запрограммировал его на чип, и он отлично заработал.

Я очень предпочитаю возможности отладки Code :: Blocks по сравнению с AVR Studio, поэтому я использую вышеупомянутый подход всякий раз, когда могу. Когда не могу, обычно имею дело только с железом. Например, у меня есть таймер, который автоматически производит прямоугольную волну. Лучшее, что я мог сделать, это увидеть, что булавка вращается в симуляторе. После этого мне просто нужно было подключить осциллограф и убедиться.

Мне нравится использовать многоуровневый подход при отладке проблем. Например, с часами первый слой: «Поместите пробник на штырь часов и посмотрите, есть ли там сигнал». В противном случае проверьте контакт на микроконтроллере и найдите сигнал. Затем я закодировал интерфейс отладки в одном из своих UART, где я могу посмотреть на конкретные значения регистров и убедиться, что они такие, какие они ' должно быть. Так что, если это не сработает, следующим шагом будет «вызвать значение регистра и убедиться, что оно правильное».

Старайтесь думать на четыре шага наперед, когда планируете отладку. Здесь должно быть +5 В, а если нет? Напишите в интерфейсе отладки способ переключения вывода и посмотрите, изменится ли это. Что, если это не сработает? Сделайте что-нибудь еще и т.д. но, надеюсь, вы заранее выясните причину.

т? Напишите в интерфейсе отладки способ переключения вывода и посмотрите, изменится ли это. Что, если это не сработает? Сделайте что-нибудь еще и т.д. но, надеюсь, вы заранее выясните причину.

т? Напишите в интерфейсе отладки способ переключения вывода и посмотрите, изменится ли это. Что, если это не сработает? Сделайте что-нибудь еще и т.д. но, надеюсь, вы заранее выясните причину.

0
ответ дан 1 December 2019 в 04:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: