Как сделать TDD для приложений реального времени - PullRequest
0 голосов
/ 17 января 2020

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

Так что, насколько я понимаю, «сущность» TDD - это на самом деле написать тесты для каждого требования приложения. Обычно это требование определяет поведение с входами и выходами.

Итак, теперь. Переход к приложениям в реальном времени. Допустим, ваше приложение работает бесконечно l oop. Типичным примером является графическое приложение или аудио приложение, где каждая итерация l oop означает вывод на экран / динамики.

Имея такую ​​систему, допустим, что-то вроде: «При нажатии кнопки« Ввод »на экране должен отображаться кружок с текстом Hello World внутри кружка»

Итак, как бы вы протестировали этот тип требования?

Другой пример, просто для иллюстрации мой вопрос лучше. Допустим, я эмулирую процессор. На каждой итерации я извлекаю код операции из файла, переводю его и выполняю. В основном нет фактического выхода. То, что происходит, - это ввод, который изменяет некоторое состояние, связанное с эмуляцией процессора. Так что нет интерфейса publi c для внутренних компонентов ЦП.

Мое требование скажет что-то вроде «Реализация операции mov на эмуляторе ЦП», что может быть частью более крупного требования «Реализация эмуляции кодов операций»

Итак. Что было бы хорошим подходом для решения этого поведения / требований, используя TDD?

1 Ответ

0 голосов
/ 17 января 2020

Что было бы хорошим подходом для решения этого поведения / требований с использованием TDD?

Я обычно вижу, что дизайн разбивается на две части

  • Кусок, который сложен, но действительно "прост" для тестирования
  • Кусок, который сложно тестировать, но действительно "прост"

По сути, вы организация того, что «риск» лежит преимущественно в коде, который легко тестировать.

Одно из свойств кода, которое действительно просто: он также имеет тенденцию быть очень стабильным. Сочетание низкого риска, стабильности и сложности в тестировании означает, что инвестиции в автоматизацию тестирования здесь менее привлекательны.

Фактически нет фактического результата.

Запись нет операции; нет никакой пользы в выполнении какой-либо работы, которая не имеет какого-либо заметного побочного эффекта.

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

Так что нет интерфейса publi c для внутренних компонентов ЦП.

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

Интерфейс publi c слишком широк для тестирования этого единственного поведение.

Да, это обычное дело. Обычный ответ состоит в том, чтобы реорганизовать ваш широкий тестируемый модуль в несколько, возможно даже множество, узких тестируемых модулей. Обзор Parnas 1971 .

Может также помочь подумать о различии между методами publi c (доступными вне модуля) и опубликованными методами (доступными кодом что вы не контролируете).

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