На следующей неделе я собираюсь поговорить с моим отделом о модульном тестировании и разработке через тестирование. В рамках этого я собираюсь показать некоторые реальные примеры из кода, который я недавно написал, но я также хотел бы показать несколько очень простых примеров, которые я напишу в докладе.
Я искал в Интернете хорошие примеры, но я изо всех сил пытался найти те, которые особенно применимы к нашей области разработки. Почти все программное обеспечение, которое мы пишем, представляет собой глубоко встроенные системы управления, работающие на небольших микроконтроллерах. Существует много кода на C, который легко применим к модульному тестированию (я буду говорить о модульном тестировании на ПК, а не на самой цели), если вы остаетесь в стороне от «нижнего» уровня: материала, который говорит непосредственно к периферии микроконтроллера. Тем не менее, большинство примеров, которые я обнаружил, как правило, основаны на обработке строк (например, превосходный пример римских цифр Dive Into Python), и поскольку мы почти никогда не используем строки, это не очень подходит (из-за единственных библиотечных функций, которые обычно использует наш код являются memcpy
, memcmp
и memset
,strcat
или регулярные выражения не совсем правильно).
Итак, к вопросу: пожалуйста, кто-нибудь может предложить несколько хороших примеров функций, которые я могу использовать для демонстрации модульного тестирования в режиме реального времени? Хороший ответ по моему (может быть изменен) мнению, вероятно, будет:
- Функция, которая достаточно проста, чтобы ее мог понять каждый (даже тот, кто только иногда пишет код);
- Функция, которая не выглядит бессмысленной (т. Е. Вычисление четности или CRC, вероятно, лучше, чем функция, которая умножает два числа вместе и добавляет случайную константу);
- Функция достаточно короткая, чтобы писать перед комнатой людей (я могу воспользоваться множеством буферов обмена Vim, чтобы уменьшить количество ошибок ...);
- Функция, которая принимает числа, массивы, указатели или структуры в качестве параметров и возвращает нечто подобное, а не обрабатывает строки;
- Функция, которая имеет простую ошибку (например,
>
а не>=
), которую легко внедрить, будет по-прежнему работать в большинстве случаев, но не справится с некоторым конкретным крайним случаем: легко идентифицировать и исправить с помощью модульного теста.
Есть предположения?
Хотя это, вероятно, не имеет значения, сами тесты, вероятно, будут написаны на C ++ с использованием Google Test Framework: все наши заголовки уже содержат #ifdef __cplusplus extern "C" {
оболочку; это хорошо сработало с тестами, которые я провел до сих пор.