Я особисто схильний вважати, що можна отримати багато переваг TDD (без фактичного дотримання TDD) шляхом:
- Написання як абонента, так і коду абонента приблизно в один і той же час (безумовно, не більше 24 годин).
- І використовуйте це, щоб впливати на дизайн інтерфейсу (об'єкти, виклики методів та параметри).
- Для компонента, що потребує складного алгоритму / коду, спочатку розглядайте можливість реалізації в більш простому, але правильному алгоритмі, навіть якщо він менш ефективний (або дурний, або працює лише у вужчій ситуації).
- Дуже простим методом тестування було б запуск обох алгоритмів та порівняння їх результатів.
- Після виявлення помилки (будь-якими способами) в одній частині коду, ця частина коду заслуговує на тест набагато агресивніше. Це означає робити більш складні тести, ніж вимагає TDD. (виходячи з міркувань про те, що помилки трапляються в кластерах )
Здається, TDD вимагає від вас досить чіткого розуміння того, яку функцію ви плануєте реалізувати або які вимоги ви плануєте задовольнити, застосовуючи код. У деяких ситуаціях просто недостатньо розуміння проблеми. Це вимагало б рішення Спайка . У рамках цього рішення Spike можна застосувати TDD, оскільки проблема була звужена до керованого рівня. Після закінчення декількох шипів, кожен з яких охоплює деякі аспекти оригінальної проблеми, можна починати працювати над повним рішенням, і застосування TDD в цій точці може бути здійснене через покращене розуміння.
Відредаговано:
Прочитавши сторінку уважніше,
Хоча має бути можливість протестувати більшість функцій ядра в "testbed" тестовому драйвері, справді "соковиті" речі, такі як обробка переривань, диспетчеризація процесів або управління пам'яттю, ймовірно, не перевіряють одиниці. --- з http://wiki.osdev.org/Unit_Testing
Вони чітко говорять про те, що більшість деталей є тестовими, а деякі частини вимагають іншого виду тестування: тест на стрес .