Удаление недоступного кода
В принципиально статически типизированном языке вы всегда должны знать, доступен ли код на самом деле или нет: удалите его, скомпилируйте, если нет ошибки, он не был доступен.
К сожалению, не все языки статически типизированы, и не все статически типизированные языки являются принципиальными. Вещи, которые могут пойти не так, как следует (1) отражение и (2) беспринципная перегрузка.
Если вы используете динамический язык или язык с достаточно сильным отражением, что потенциально возможный доступ к фрагменту кода может быть получен во время выполнения посредством отражения, то вы не можете полагаться на компилятор. К таким языкам относятся Python, Ruby или Java.
Если вы используете язык с беспринципной перегрузкой, то простое удаление перегрузки может просто переключить разрешение перегрузки на другую перегрузку без вывода сообщений . Некоторые такие языки позволяют программировать предупреждение / ошибку во время компиляции, связанную с использованием кода, в противном случае вы не можете полагаться на компилятор. К таким языкам относятся Java (использование @Deprecated
) или C ++ (использование [[deprecated]]
или = delete
).
Так что, если вам не очень повезло работать со строгими языками (Rust приходит на ум), вы, возможно, действительно стреляете себе в ногу, доверяя компилятору. И, к сожалению, тестовые наборы, как правило, неполные, поэтому они не слишком помогают.
Подсказка в следующем разделе ...
Удаление потенциально неиспользуемого кода
Скорее всего, на код действительно ссылаются, однако вы подозреваете, что на практике ветки кода, которые ссылаются на него, никогда не используются.
В этом случае, независимо от языка, код может быть наглядно доступен, и могут использоваться только инструменты времени выполнения.
В прошлом я успешно использовал трехэтапный подход к удалению такого кода:
- На каждой ветке, которая, как подозревается, НЕ должна быть взята, регистрируйте предупреждение.
- После одного цикла выведите исключение / верните ошибку при вводе определенного фрагмента кода.
- После другого цикла удалите код.
Что такое цикл? Это цикл использования кода. Например, для финансового приложения я бы ожидал короткий месячный цикл (с выплатой зарплаты в конце месяца) и длинный годовой цикл. В этом случае вам придется подождать не менее года, чтобы убедиться, что для инвентаризации на конец года не было получено ни одного предупреждения, поскольку в нем могут использоваться пути кода, которые в противном случае никогда не используются.
Надеемся, что большинство приложений имеют более короткие циклы.
Я советую размещать комментарий TODO с указанием даты и указывать, когда следует перейти к следующему шагу. И напоминание в вашем календаре.