Тестирование модулей Устаревшие приложения Web-форм ASP.NET

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

7 ответов

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

Однако для существующего кода это одна из тех ситуаций, когда вам нужно посмотреть, сколько рисков вы хотите или можете ввести в продукт. Проблема в том, что когда вы начинаете с unit test существующей базы кода, вы скоро поймете много возможностей для рефакторинга и оптимизации дизайна.

Возьмите его у меня, если вы приверженец хорошего дизайна, но у вас не было возможности делать резкие рефакторинги, вы только закончите со сломанным сердцем, когда будете пытаться писать тесты на унаследованные части - и да, если у него нет существующего набора тестов, то он будет нуждаться в рефакторинге NEED. Если вам не разрешено вносить существенные изменения в производственное приложение, вы в конечном итоге реализуете то, что нам нравится называть "шаблоном адаптера мусора". Удачи!


Я бы предложил получить копию Эффективно работать с устаревшим кодом.

Мы просмотрели эту книгу в исследовательской группе. это было болезненно, но полезно.

Темы включают:

  • Понимание механики изменения программного обеспечения: добавление функций, исправление ошибок, улучшение дизайна, оптимизация производительности.
  • Получение устаревшего кода в тестовую проводку
  • Написание тестов, которые защитят вас от введения новых проблем.
  • Методы, которые могут использоваться с любым языком или платформой - с примерами в Java, С++, C и С#
  • Точная идентификация, где необходимо изменить код.
  • Работа с устаревшими системами, которые не являются объектно-ориентированными
  • Обработка приложений, которые, как представляется, не имеют структуры

Вы можете увидеть это на http://www.objectmentor.com/resources/articles/WorkingEffectivelyWithLegacyCode.pdf


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


является устаревшим приложением?

если это так, сначала добавьте тесты модулей на внутренний/бизнес-уровень

если нет, добавьте модульные тесты в новый код в будущем и когда обнаружены ошибки (для тестирования регрессии)

если у вас есть время/амбиции на unit test все это (в конечном счете), запустите список функций (критические сначала) и добавьте единичные тесты для них, несколько за раз


Я бы не писал никаких тестов только ради тестов. Я бы написал тесты только при обнаружении ошибки или добавлении новых функций. Затем напишите тесты, чтобы ввести код, который вам нужно изменить/реализовать, чтобы определить, что он сейчас делает. В случае ошибки напишите тест, чтобы доказать, что ошибка исправлена. В случае нового кода, что он должен делать. Теперь идите и реализуйте функцию fix/new. Если вы обнаружите, что у вас возникает соблазн коснуться кода вне вашего тестового "окна" - напишите еще несколько тестов, чтобы заполнить эту область (или пересмотреть изменения, которые вы хотите сделать). По мере необходимости вводите новые тесты, чтобы максимизировать инвестиции, которые вы делаете в тестах. Написание тестов для доказательства того, что работа рабочего кода кажется бессмысленной, пока она не будет показана.


Если веб-приложение не тестируется на модуле, оно, вероятно, также нелегко тестируется на единицу. Включение его в модульные тесты может быть рискованным, поскольку у вас нет тестов [Unit], да, курицы и яиц. Более того, это требует времени и не приносит большого значения приложению.

Я хотел бы написать сквозной автоматический тест с Selenium, Watir, HtmlUnit или HttpUnit, YMMV для старой части вашего приложения. Эти тесты (тесты характеристик) свяжут ваше текущее поведение приложения, например, с модульными тестами, но извне, что позволяет вносить изменения с помощью способность обнаруживать нежелательные побочные эффекты.

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


Напишите тесты в известных "болевых точках" приложения. Кодекс, который часто ломается или, как правило, имеет более высокий риск, - это хорошее место для начала, так как он помогает создать линию обороны в этой области и предоставляет команду в объем модульных тестов в этом приложении.

Каждый раз, когда дефект открывается приложению, идите вперед, попробуйте написать unit test, чтобы выставить это поведение. Это даст вам знать, когда оно будет исправлено и, надеюсь, не позволит ему снова появляться в будущем.

Кроме того, ищите код, который необходимо реорганизовать. Любые усилия по рефакторингу должны быть предварены созданием модульных тестов. Это помогает гарантировать, что он работает как до, так и после внесения изменений. Рефакторинг может быть жестким в начале, из-за риска "эффекта пульсации", когда один поломка может нанести ущерб всему приложению в неожиданной моде.

licensed under cc by-sa 3.0 with attribution.