Существует два подхода, которые я использовал для инструментов ARM/Linux. Самое легкое должно загрузить предварительно созданный набор инструментальных средств непосредственно.
Pro: Это просто работает, и можно продолжить интересную часть проекта
Con : Вы застреваете с тем, какой бы ни версия gcc/binutils/libc, который они выбрали
, Если более поздние вопросы Вам, проверьте crosstool-ng. Этот проект является инструментом конфигурирования, подобным приложению конфигурирования ядра Linux. Набор, какие версии gcc, binutils, libc (GNU или uCLibc), поточная обработка и ядро Linux для создания и crosstool-ng делают остальных (т.е. загружает шары tar, настраивает инструменты и создает их).
Pro: Вы получаете точно, что Вы выбрали во время конфигурации
Con: Вы получаете точно, что Вы выбрали во время конфигурации
значение, что Вы берете полную ответственность за выбор compiler/binutil/libc и их связанных функций/недостатков/ошибок. Кроме того, как упомянуто в комментариях, существует некоторая "боль", вовлеченная в выбор версий binutils, библиотека C и т.д. как не, все комбинации обязательно сотрудничают или даже создают.
Один гибридный подход мог бы быть должен запуститься с предварительно созданных инструментов и заменить их позже настраиваемым решением через crosstool-ng при необходимости.
Обновление : ответ первоначально использовал инструменты CodeSourcery как пример предварительно созданного набора инструментальных средств. Инструменты CodeSourcery для ARM были бесплатными к загрузка с Mentor Graphics , но их теперь называют Sourcery CodeBench и нужно купить у Mentor Graphics. Другие опции теперь включают Linaro, а также распределение определенные инструменты от Android, Ubuntu и других.
Я бы выбрал один тест и изменил его, чтобы требовать новую функцию. Если очевидных кандидатов нет, т.е. он действительно новый, я бы его создал. Затем я напишу код, чтобы пройти этот тест. В этот момент я запускал другие тесты и замечал, что некоторые из них не работают. На этом этапе я бы пересмотрел каждый тест по очереди, либо исправляя тест, чтобы отразить новую функцию (чтобы он прошел без других изменений кода), либо обновлял тест с учетом новой функции (что может потребовать некоторых дополнительных изменений в код тестируемого).
Я бы создал новые тесты для новой функции и обновил существующие тесты, чтобы они соответствовали вашей функции. Если вы нарушили уже работающий тест, вы должны это исправить.
Я думаю, здесь следует учесть две вещи. И я не знаю, думаете ли вы только об одном или обоих.
Первая часть состоит в том, что вы изменили функцию после изменения спецификации (или ожидаемого поведения). В этом случае я считаю правильным удалить все тесты, описывающие поведение, которое больше не действует. Поскольку я ленив, я бы просто прокомментировал их или пока пропустил. Затем я начну писать новые тесты (или раскомментировать / изменить старые), чтобы начать описывать новое поведение, пока не закончу.
Вторая часть должна быть выполнена, если ваша новая функция изменяет интерфейс, который используется другими компонентами и их тестами начинает терпеть неудачу только потому, что вы изменили функцию. В этом случае я бы просто исправил тесты позже, когда функция была завершена.
Реализация функции включает в себя запись / обновление модульных тестов; это фундаментально для разработки через тестирование. Итак, ваши вторые два варианта также являются TDD, а не только вашим первым. На практике я подозреваю, что вам понадобится третий вариант с некоторыми модами:
Избавьтесь от старых тестов и напишите новые. Возможно, вы сможете заимствовать код из старых тестов в нескольких местах, но вам лучше использовать тесты, философски соответствующие тому, что вы пытаетесь сделать, чем пытаться изменить природу старого теста.
чтобы поддерживать то, чего вы пытаетесь достичь, и не должны работать против вас.
Я думаю, что все подходы разумны. Вы получите тот же результат.
Некоторым людям нравятся более мелкие шаги и больше работать в исходном замысле TDD: написать строку теста, написать строку кода, чтобы исправить это, повторить. Если это вы, то сначала постепенно поработайте над своими старыми тестами, развивая или удаляя их в новую систему.
Если вы не против откусить больший кусок, попробуйте исправить что-нибудь новое. Я считаю, что это более естественно, особенно при парном программировании, когда вы можете быть немного смелее.
Может действительно зависеть от вашего уровня комфорта и уверенности.
Я бы поддержал идею о том, что в идеале одно изменение должно нарушать только один тест, поэтому вы можете захотеть реорганизовать тестовый код, чтобы добиться именно такого поведения. Решением может быть какой-то общий метод настройки.