Я збираюся поговорити зі своїм відділом наступного тижня про тестування одиниць та тестову розробку. В рамках цього я збираюсь показати деякі приклади реального світу з деякого коду, про який я писав недавно, але я також хотів би показати кілька дуже простих прикладів, які я напишу в розмові.
Я шукав в Інтернеті хороші приклади, але намагаюся знайти будь-які, що особливо стосуються нашої сфери розвитку. Майже все програмне забезпечення, яке ми пишемо, - це глибоко вбудовані системи управління, що працюють на невеликих мікроконтролерах. Існує дуже багато коду С, який легко застосувати для тестування одиниць (я буду говорити про тестування одиниць на ПК, а не про саму ціль), доки ви не будете осторонь "нижнього" шару: речі, які говорять безпосередньо до периферійних пристроїв мікроконтролера. Однак більшість прикладів, які я знайшов, базуються на обробці рядків (наприклад, чудовий приклад занурення в ритмові цифри Python), і оскільки ми навряд чи використовуємо рядки, це не дуже підходить (про єдині функції бібліотеки, які зазвичай використовує наш код є memcpy
, memcmp
і memset
,strcat
або регулярні вирази не зовсім правильні).
Отже, на питання: будь ласка, будь-хто може запропонувати кілька хороших прикладів функцій, які я можу використати для демонстрації тестування блоку в прямому сеансі? Гарною відповіддю на мою думку (що може змінитись), мабуть, буде:
- Функція досить проста, щоб зрозуміти будь-хто (навіть ті, хто пише код лише зрідка);
- Функція, яка не здається безглуздою (тобто відпрацювання паритету чи CRC, ймовірно, краще, ніж функція, що множує два числа разом і додає випадкову константу);
- Функція, яка досить коротка, щоб писати перед кімнатою людей (я можу скористатися багатьма буферами Vim, щоб зменшити помилки ...);
- Функція, яка приймає числа, масиви, покажчики або структури як параметри і повертає щось подібне, а не обробку рядків;
- Функція, яка має просту помилку (наприклад,
>
а не>=
), яку легко ввести, яка все-таки працюватиме в більшості випадків, але порушиться з певним крайовим випадком: легко визначити та виправити за допомогою тесту одиниці.
Будь-які думки?
Хоча це, мабуть, не актуально, самі тести, ймовірно, будуть написані на C ++ за допомогою тестової системи Google: усі наші заголовки вже мають #ifdef __cplusplus extern "C" {
обгортку навколо них; це добре працювало з тестами, які я робив до цих пір.