Шаги, которые необходимо предпринять для постепенной интеграции модульного тестирования в проект

StackOverflow https://stackoverflow.com/questions/1017917

Вопрос

В настоящее время я нахожусь на совместном семестре, работая над проектом, близящимся к завершению, с еще одним студентом кооператива.Поскольку этот проект передавался от кооператива к кооперативу, на этом пути были применены плохие практики, и тестирование было отложено до конца.Я решил, что хотел бы написать модульные тесты, чтобы узнать что-то новое во время тестирования.

Тем не менее, я работаю над 3-уровневым тесно связанным приложением, которое кажется невозможным для модульного тестирования в его текущем виде.Я не хочу сбивать с толку другого студента кооператива, не знающего ни одной из этих концепций, рефакторингом кода до неузнаваемости за одну ночь.Итак, какие шаги я должен предпринять, чтобы постепенно подтянуть код к модульной тестируемости?Должен ли я сначала внедрить фабричный шаблон и позволить другому ученику ознакомиться с ним, прежде чем двигаться дальше?

Приношу свои извинения, если мои знания ошибочны и никаких проблем быть не должно.Я новичок в этом :)

Это было полезно?

Решение

Эффективная работа с устаревшим кодом Майкла Фезерса

Трудно понять, пойдет ли на пользу реализация фабричного шаблона, зависит от того, что делает код:)

Другие советы

Эффективная работа с устаревшим кодом by Michael Feathers (также доступен в Safari, если у вас есть подписка) - отличный ресурс для вашей задачи.Автор определяет устаревший код как код без модульных тестов и дает практические пошаговые руководства по Лоты о консервативных методах — необходимых, поскольку вы работаете без системы безопасности, — для тестирования кода.Содержание:

  • Часть:I Механика перемен
    • Глава 1.Изменение программного обеспечения
      • Четыре причины сменить программное обеспечение
      • Рискованное Изменение
    • Глава 2.Работа с обратной связью
      • Что такое модульное тестирование?
      • Тестирование более высокого уровня
      • Испытательные покрытия
      • Алгоритм Изменения Устаревшего кода
    • Глава 3.Распознавание и разделение
      • Фальшивые Коллаборационисты
    • Глава 4.Модель Шва
      • Огромный лист текста
      • Швы
      • Типы швов
    • Глава 5.Инструменты
      • Автоматизированные инструменты рефакторинга
      • Макетные объекты
      • Жгуты для модульного тестирования
      • Общие Тестовые жгуты
  • Часть:II Изменение программного обеспечения
    • Глава 6.У меня не так много времени, и я должен это изменить
      • Способ Проращивания
      • Класс Проростков
      • Способ Обертывания
      • Класс переноса
      • Краткие сведения
    • Глава 7.На то, чтобы что-то изменить, уходит Целая Вечность
      • Понимание
      • Время задержки
      • Разрушение Зависимостей
      • Краткие сведения
    • Глава 8.Как мне добавить функцию?
      • Разработка, основанная на тестировании (TDD)
      • Программирование по различиям
      • Краткие сведения
    • Глава 9.Я не могу включить Этот класс в тестовую программу
      • Случай раздражающего параметра
      • Случай скрытой зависимости
      • Случай со строительным Блобом
      • Случай раздражающей глобальной зависимости
      • Случай с Ужасными Зависимостями Включает в себя
      • Случай с параметром Onion
      • Регистр псевдонимного параметра
    • Глава 10.Я не могу запустить Этот Метод в Тестовом режиме
      • Случай Скрытого метода
      • Пример "Полезной" языковой функции
      • Случай Необнаруживаемого побочного эффекта
    • Глава 11.Мне нужно кое-что изменить.Какие Методы я должен протестировать?
      • Рассуждения О Последствиях
      • Рассуждения на будущее
      • Распространение эффекта
      • Инструменты для обоснования эффекта
      • Извлекая уроки из анализа эффектов
      • Эскизы упрощающих эффектов
    • Глава 12.Мне нужно внести много изменений в Одну Область.Должен ли я разрывать зависимости для всех задействованных классов?
      • Точки перехвата
      • Оценивающий дизайн с Заостренными Точками
      • Ловушки с защемляющими Точками
    • Глава 13.Мне нужно внести изменения, но я не знаю, какие тесты написать Тесты характеристики
      • Характеризующие Классы
      • Целенаправленное тестирование
      • Эвристика для написания тестов на определение характеристик
    • Глава 14.Зависимости от Библиотек Убивают меня
    • Глава 15.Все мое приложение - это вызовы API
    • Глава 16.Я недостаточно хорошо понимаю Код, чтобы изменить его
      • Заметки/Наброски
      • Разметка листинга
      • Рефакторинг с нуля
      • Удалить Неиспользуемый код
    • Глава 17.Мое приложение Не имеет Структуры
      • Рассказываю историю Системы
      • Голый CRC
      • Пристальное внимание к Разговору
    • Глава 18.Мой тестовый код мешает
      • Соглашения об именовании классов
      • Место проведения теста
    • Глава 19.Мой проект не является объектно-ориентированным.Как мне внести безопасные изменения?
      • Простой Случай
      • Тяжелый Случай
      • Добавление нового поведения
      • Использование преимуществ объектной ориентации
      • Все это объектно-ориентировано
    • Глава 20.Этот класс слишком Большой, и я не хочу, чтобы он становился еще больше
      • Видение Ответственности
      • Другие Методы
      • Движение Вперед
      • После Извлечения Класса
    • Глава 21.Я меняю один и тот же код Повсюду
      • Первые шаги
    • Глава 22.Мне нужно изменить метод Monster, и я не могу писать тесты для него
      • Разновидности монстров
      • Борьба с монстрами с помощью автоматической поддержки рефакторинга
      • Задача Ручного рефакторинга
      • СТРАТЕГИИ
    • Глава 23.Откуда мне знать, что я ничего не Нарушаю?
      • Редактирование Гиперпредприятий
      • Редактирование с одной Целью
      • Сохранение подписей
      • Положитесь на компилятор
    • Глава 24.Мы чувствуем себя подавленными.Лучше от этого уже не станет
  • Часть:III Методы устранения зависимостей
    • Глава 25.Методы разрушения зависимостей
      • Адаптировать Параметр
      • Метод Выделения Объекта
      • Завершение определения
      • Инкапсулировать Глобальные ссылки
      • Разоблачить Статический метод
      • Извлечение и переопределение вызова
      • Извлечение и переопределение Заводского метода
      • Извлечение и переопределение геттера
      • Исполнитель извлечения
      • Интерфейс извлечения
      • Ввести Делегатор экземпляра
      • Ввести Статический установщик
      • Замена ссылок
      • Конструктор Параметризации
      • Способ Параметризации
      • Параметр Примитивизации
      • Функция Подтягивания
      • Подавить Зависимость
      • Замените функцию Указателем на функцию
      • Замените глобальную ссылку на Getter
      • Метод подкласса и переопределения
      • Заменить Переменную экземпляра
      • Переопределение шаблона
      • Переопределение текста
  • Приложение:Рефакторинг
    • Способ извлечения

Очень трудно начинать новые методы разработки в середине проекта. В прошлом, когда я работал над проектами, которые с самого начала не тестировались модульно, хорошим подходом было установить правило, что «новый код должен иметь модульные тесты», но не давить на модульные тесты. пишется для старого кода.

Конечно, даже это сложно, когда структура проекта не подходит для тестируемости.

Моя лучшая рекомендация - делать это небольшими шагами.

Начните с создания сборки модульного теста (или проекта или чего-либо еще) без тестов. Затем найдите небольшую область кода, которая достаточно хорошо определена и разделена, и напишите несколько тестов для этой области. Заставьте своего кодировщика взглянуть на это и начните использовать некоторые «лучшие практики», такие как запуск модульных тестов каждый раз, когда проверяется любой код (автоматически, если это возможно).

Как только у вас это получится, вы можете постепенно начать добавлять больше.

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

Как насчет написания серии тестов "черного ящика" вокруг основных функциональных элементов вашего кода?Поскольку вы упомянули, что это проект ASP.NET, вы можете использовать такой фреймворк, как Подожди или Селен для автоматизации работы веб-браузера.Это дает вам базовый набор функциональных возможностей, которые должны оставаться постоянными независимо от того, насколько сильно меняется код.

Как только у вас будет достаточное количество тестов, проверяющих высокоуровневую функциональность вашего проекта, я бы начал погружаться в код, и, как Саймон П.Стивенс упоминает, что работает медленно.Возьмите (бесплатную!) копию Рефакторинг!для Visual Basic, таким образом, вы сможете автоматически выполнять некоторые базовые операции рефакторинга, такие как метод Extract.Вы можете значительно повысить тестируемость без изменения какой-либо функциональности, просто разделив большие фрагменты кода на более мелкие, более тестируемые фрагменты.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top