Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
895
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4351
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Рефакторинг для тестируемости в существующей системе
Я присоединился к команде, которая работает над продуктом. Этот продукт был вокруг в течение ~5 лет или около того, и использует ASP.NET WebForms. Его оригинальная архитектура со временем исчезла, и вещи стали относительно неорганизованными на протяжении всего решения. Это ни в коем случае не ужасно, но определенно может использовать некоторую работу; вы все знаете, что я имею в виду.
Я выполнял некоторые рефакторинги с момента прихода в команду проекта около 6 месяцев назад. Некоторые из этих рефакторингов просты, метод извлечения, метод вытягивания и т. д. Некоторые из рефакторингов являются более структурными. Последние изменения заставляют меня нервничать, поскольку нет полного набора модульных тестов для сопровождения каждого компонента.
Вся команда готова внести структурные изменения через рефакторинг, но наш руководитель проекта выразил некоторые опасения, что у нас нет адекватных тестов для рефакторинга с уверенностью, что мы не вводим ошибки регрессии в систему. Он хотел бы, чтобы мы сначала написали больше тестов (против существующей архитектуры), а затем выполнили рефакторинг. Мой аргумент заключается в том, что структура классов системы слишком тесно связана, чтобы писать адекватные тесты, и что использование более тестового подхода при выполнении наших рефакторингов может быть лучше. Я имею в виду не написание тестов для существующих компонентов, а написание тестов для конкретных функциональных требований, а затем рефакторинг существующего кода для удовлетворения этих требований. Это позволит нам писать тесты, которые, вероятно, будут иметь больше долговечности в системе, а не писать кучу тестов 'throw away'.
Есть ли у кого-нибудь опыт относительно того, каков наилучший курс действий? У меня есть свои собственные мысли, но я хотел бы услышать некоторый вклад от сообщества.
Проблемы вашего PM действительны-убедитесь, что вы тестируете свою систему, прежде чем делать какие-либо крупные рефакторинги.
Я бы настоятельно рекомендовал получить копию книги Майкла пера, эффективно работающую с устаревшим кодом (под "Legacy Code" перьями подразумевается любая система, которая недостаточно охвачена модульными тестами). Это битком набито хорошими идеями о том, как разбить эти связи и зависимости, о которых вы говорите, безопасным способом, который не рискует вводить ошибки регрессии.
Удачи вам с рефакторинговой программой; по моему опыту, это приятный и катарсический процесс, из которого вы можете многому научиться.
Я также хотел бы добавить предложение посетить веб-сайт рефакторинга Мартина Фаулера. Он буквально написал книгу на эту тему.
Что касается введения модульных тестов в уравнение, то лучший метод, который я нашел, - это найти компонент верхнего уровня и определить все внешние зависимости, которые он имеет от конкретных объектов, и заменить их интерфейсами. После того, как вы это сделаете, будет намного проще писать модульные тесты против вашей базы кода, и вы можете делать это по одному компоненту за раз. Еще лучше, вам не придется выбрасывать какие-либо модульные тесты.
Модульное тестирование ASP.Net может быть сложным, но есть много фреймворков, которые облегчают его выполнение. ASP.Net MVC, и WCSF , чтобы назвать несколько.
Полностью согласен с ответом Яна Нельсона . Кроме того, я бы начал получать некоторые тесты "high level" (функциональные или компонентные тесты), чтобы сохранить поведение с точки зрения пользователя. Этот момент может быть наиболее важной проблемой для вашего PM.