2009-08-31 1 views
2

я решил дать попробовать на TDD и BDD на мой уже начали проект, поощряемые ответы на вопросы, как это: Should I start using TDD on a project that doesn't use it alreadyМогу ли я нацелиться на TDD или BDD в моем начатом проекте?

Я изо всех сил, чтобы действительно начать с ним. Мой проект (с открытым исходным кодом, размещенный в http://gitorious.org/rubots) является игровым и использует Ruby для переноса и подключения к серверу управления и физической среде моделирования. Выполняется сценарий, затем появляется GUI, и когда пользователь нажимает кнопку «Пуск», запускаются 2 внешние программы на C++, один из которых является физическим симулятором, они управляются библиотекой с привязками Ruby. Невозможно отозвать симуляцию и программу управления, их следует снова запустить. Запустите их и заведите их в рабочее состояние, как 5 секунд. В этом контексте любые тестовые задачи всей начальной фазы перед чем-либо перемещаются, а имитация зависит от внешних файлов конфигурации, которые также должны быть предоставлены.

Это действительно стоит начать писать тестовые примеры? Как? Каждый тест с: перед или аналогичным, который запускает игру, запускает приложения и т. Д.? Тогда каждый тест будет занимать, по меньшей мере, 5 секунд (и значительно больше, если я должен выполнить команду и ждать, пока объекты моделирования не ответят).

У меня нет чего-то. Должен ли я пропускать не только BDD и TDD, но и тестовые блоки для такого типа приложений?

ответ

6

В RubyConf 2007, Уильям Береза ​​из Atomic Object выступил с докладом о Enhancing Embedded Development with Ruby, в котором он описывает, как они применили principles that Atomic Object stands for (Agile, BDD, автоматизированные тесты, ...) для встроенного проекта с участием автономных роботизированных транспортных средств. Пару месяцев назад он дал тот же самый разговор в O'Reilly OSCON 2007.

Там есть множество ресурсов, на атомных объектах сайт:

Существует также большая история о Ward Cunningham и TDDing встроенную систему, что Роберт С.Мартин («Дядя Боб») рассказал во время his keynote at RailsConf 2009 (история идет примерно с 15:50 до 17:20). История выглядит примерно так:

Боб приходит к Уорду, который спустил его в подвал, где он смотрит на маленькие круги на экране, как на самую крутую вещь во вселенной, и он возбужден как маленький ребенок разворачивает свой первый велосипед на Рождество. Что он сделал, пытался выяснить, как полностью TDD встроенное устройство (в данном случае видеоконвертер) , не касаясь устройства вообще. То, что он сделал, было следующим: он начал писать модульный тест в Юнит, используя макет. Затем пропустили этот тест и т. Д., Как обычно. Затем он заменил все методы теми, которые создали соответствующий код сборки для устройства. Поскольку вся логика была написана (и проверена) на Java, сами методы «листа» были чрезвычайно простыми способами, которые делали исключительно простые вещи, такие как «записывать int в регистр» или «читать bool из регистра флагов», для чего код сборки был настолько прост, что был «явно правильным».

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

Итак, это два подхода: в случае с Atomic Object они написали программное обеспечение на C и тесты в Ruby и сгенерировали тесты из кода Ruby. В случае Уорда он написал тесты и код на Java и сгенерировал код из кода Java.

+0

Я нашел источник истории Уорда Каннингема. Это был лейтмотив дяди Боба Мартина из RailsConf 2009, а не Кент Бек из лейбла RailsConf 2008. –

+0

Удивительная информация. большое спасибо – Jordi

2

Для этого нужны заглушки. В основном вы создаете Test Double, который стоит для объектов, которые получают доступ к дорогостоящим услугам (например, в вашем случае) или делают другие вещи. Это позволяет изолировать объект во время тестирования и проводить более быстрые тесты.

Это не только ускорение событий. Скажем, вы пишете код промежуточного кода для совершения транзакций через Paypal. Вероятно, вы не хотите использовать службу Paypal во время выполнения тестов, что может быть дорого (буквально).

Mocha подходит для такого рода вещей. Или просто создайте объект, который действует как ваш объект веб-службы (например, это Ruby, если он ходит как утка ...).