Я собираюсь взять на себя задачу переопределения уже определенного интерфейса (набора заголовочных файлов C ++) в относительно большой и старой базе кода. Прежде чем сделать это, я хотел бы иметь как можно более полное тестовое покрытие, чтобы я мог выявлять ошибки повторной реализации как можно раньше и легко. Проблема заключается в том, что уже существующая кодовая база не была разработана для легкого тестирования, с (очень) большими классами и функциями, высокой степенью связи, функциями с (многими) побочными эффектами и т. Д.
Было бы неплохо услышать о любом предыдущем опыте работы с подобными задачами и о некоторых хороших и конкретных советах о том, как вы перестраивали автоматизированные тесты (модули, интеграции, регрессию и т. Д.) В свой прежний код.
Ответы:
Прежде всего, получите и прочитайте « Эффективная работа с унаследованным кодом » Майкла Фезерса - это незаменимый помощник для таких задач.
Затем несколько заметок:
источник
Лучший метод - это метод Микадо. http://mikadomethod.wordpress.com/2010/08/04/the-mikado-method-book/ Это всего лишь обобщение простой техники, но это единственный известный мне способ начать улучшать качество кода в большой базе кода. без принятия ненужных рисков.
WEWLC - также очень хорошая книга об этом, но написанный на C ++ не всегда полезен с кодом Java или Ruby.
источник
Модернизация тестов на старой базе кода может быть довольно сложной, если она монолитная по дизайну.
Если возможно (есть ли у вас время / деньги), одним из способов продвижения вперед будет рефакторинг кода в более тестируемые модули.
источник
Я хотел бы добавить одну ссылку . Есть несколько примеров не так легко тестируемых реализаций, которые были преобразованы в более дружественный к xUnit код. Что касается общего подхода, попробуйте попробовать уже упомянутые ссылки (пост Джоэла, Работа с устаревшим кодом
источник