2010-07-08 4 views
12

Ситуация: миллионы строк кода, более сотни разработчиков и частые дефекты. Мы хотим избежать , повторяя дефектов, и мы хотим улучшить дизайн кода (кто нет?).Как вы можете реализовать тестовую разработку с устаревшим кодом?

Тест-драйв (первый модульный тест, затем код) идеально подходит: напишите тестовый пример для каждой функции.

Но, с таким количеством написанного кода, как TDD может быть реализован? С чего начать - с функциями низкого уровня?

Или мы слишком поздно, чтобы начать TDD?

ответ

21

Начинается с Working Effectively with Legacy Code.

Это не TDD, если вы начинаете с устаревшего кода, но вся ваша кодировка может быть TDD. Когда вы решаете новую проблему, напишите для нее тест. Если вы не можете, потому что устаревшие классы слишком сложно тестировать, тогда начинайте писать тесты для них, отбирая биты и покрывая биты тестами.

Refactor the Low-Hanging Fruit.

Во избежание повторения дефектов: при наличии дефекта примера напишите тест, который его демонстрирует. Это может быть относительно широкий тест, который просто имитирует активность пользователя; еще не единичный тест. Убедитесь, что тест завершился неудачно. Сделайте свое исследование; выяснить, почему тест терпит неудачу. Теперь - это важно - прежде чем исправлять ошибку, напишите единичный тест, демонстрирующий ошибку. Исправьте ошибку, и теперь у вас есть два теста, по крайней мере один из них быстро, которые защищают вас от регрессий.

+2

+1: Ключевым моментом здесь является * не * попытка и всесторонне модифицировать модульные тесты. – Richard

+1

@ Карл - хорошее резюме. Мне особенно нравится, как у вас есть единичный тест и системный текст из-за дефекта. – Wikis

+0

@ Рихард - Я озадачен - разве это не противоположность тому, что говорит Карл? – Wikis

2

С тех пор, как Карл предложил одну книгу, я предлагаю другую: Art of Unit Testing Роя Ошерове имеет целую главу «Работа с устаревшим кодом». Я еще не читал эту главу, но первые 5 глав превосходны, и я с нетерпением жду этого.

+0

FYI Мне понравилось сравнение Osherove определений для устаревшего кода: «Исходный код, относящийся к технологии без поддержки» «любое более старое приложение под обслуживание» «код, который работает» «код, который не имеет тестов» (из книги Перей) – orbfish

+0

@ Карл спасибо за ссылку C2, это весело. – orbfish

+0

@Orbfish - Спасибо за подсказку. Возможно, когда вы прочтете это, вы вернетесь и поделитесь некоторыми соображениями? – Wikis

Смежные вопросы