Legacy означает любой код, который вы бы предпочли заменить, чем работать Учитывая отношение большинства программистов к большинству существующего кода, это обычно включает в себя почти все, кроме того, что вы активно пишете в данный момент (и в большом проекте, где вам приходится кодировать замороженный дизайн, даже то, что вы пишете в момент может быть включен также).
- Акцент «скорее» предназначен для передачи этого унаследованного кода, а также означает, что вы застряли, работая с ним, даже если вы этого не хотите. Я не уверен, что акцент был достаточным, хотя. Причины этого могут быть разными. Некоторые действительно слишком большие и сложные для замены. Другие являются интерфейсами к другим системам. Третьи движимы политикой и личностями (например, код ужасен, но детка на стенде была потрясающей).
- Еще один момент, который я, возможно, недостаточно подчеркивал, заключается в том, что, хотя качество кода может быть фактором, оно редко (если вообще когда-либо) является единственным фактором - и зачастую даже не особенно важным.
- Я думаю, что люди, проводящие юнит-тесты в качестве единственного определяющего фактора, похожи на парня, ищущего под уличным фонарем серьгу, которую его жена выбросила за квартал. Свет может быть лучше, но вы все еще смотрите не в том месте. Подумайте, прежде чем пить Kool-Aid .
- (Следствие к 3.) Мне кажется, что некоторые люди больше говорят о том, как они хотят, чтобы вещи были, чем как они есть на самом деле. Если Джон Conways " Игра жизни для компании Apple IIc Plus не наследство, это потому , что это достаточно маленький и простой , что это легко повторно реализовать с нуля. Самое совершенное модульное тестирование, когда-либо написанное, не изменит ни одной йоты .
Последний пункт действительно приводит к двум другим пунктам, которые я считаю часто верными.
Во-первых, код часто сохраняется как устаревший, даже если это действительно не должно быть. Руководители высшего уровня обычно предполагают, что повторная реализация системы будет стоить столько же или больше, чем первоначальная реализация, что редко бывает так.
Во-вторых, юнит-тесты - это палка о двух концах. Благодаря им слишком легко думать, что локальные изменения в реализации - это то, что действительно имеет значение. Чтобы внести существенные улучшения в более крупную систему, вам часто (обычно?) Приходится менять достаточно общий дизайн, чтобы многие (если не большинство) модульных тестов стали неактуальными. К сожалению, наличие модульных тестов и отношение, которое они порождают, может слишком легко игнорировать изменения, которые действительно необходимы.
Возможно, пример этого поможет: предположим, что в программе есть библиотека пользовательского интерфейса с отличным модульным тестированием и несколько программ, использующих эту библиотеку. Кто-то в высшем руководстве становится убежденным, что «сеть включена» важна (и, просто ради аргумента, давайте предположим, что в этом случае он на самом деле прав). После тщательного анализа менеджеры среднего звена обнаруживают, что их текущего модульного тестирования достаточно, чтобы они могли перейти от пользовательского интерфейса, отображаемого с помощью оконных возможностей локальной операционной системы, к удаленному отображению через HTML / CSS / AJAX, сохраняя при этом всю исходную проверку ввода.
Это здорово, не правда ли? Это показывает, насколько полезным может быть юнит-тестирование. Мы поменяли всю реализацию всего пользовательского интерфейса, но убедились, что внешний вид, функциональность и функциональность остаются практически неизменными, а весь пользовательский ввод проверяется для обеспечения целостности данных. Модульное тестирование спасло день!
Или нет! Эта великолепная, очень гибкая, тщательно протестированная модульная библиотека пользовательского интерфейса помогла всем заинтересованным сторонам осознать тот факт, что для этой программы на ее рынке со своими пользователями веб-интерфейс совершенно не подходит для работы. Что действительно нужно, так это веб-сервис с интерфейсом RESTful и абсолютно никакого собственного пользовательского интерфейса.
Теперь, безусловно, верно, что модульное тестирование само по себе не лишает людей способности понимать свой рынок или осознавать, что это действительно необходимо. В то же время, старая линия о молотках и гвоздях практически приходит на ум. Это может быть еще хуже , если вы не только иметь молоток, но есть много опыта с этим молотком, и знаете , что это действительно высокое качество молоток , который работает очень хорошо во многих различных ситуациях. Сам факт того, что он так хорош во многих вещах в столь многих ситуациях, еще труднее распознать, когда он совершенно не подходит для работы.