Python: обнаружение кода, который никогда не выполняется в производстве - PullRequest
0 голосов
/ 07 мая 2018

Мне нужно провести рефакторинг в большой устаревшей базе кода Python.

Часто я думаю, что "эти строки больше не выполняются в производстве".

Но я не уверен.

Есть несколько тестов, которые касаются этих строк. Но я не могу точно сказать, действительно ли в производстве не используется.

Что я могу сделать в этой ситуации?

Этот вопрос касается охвата производственной системы. Этот вопрос не касается покрытия во время тестирования / CI.

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

Ответы [ 3 ]

0 голосов
/ 19 мая 2018

Является ли производственная система детерминированной? Это интерактивное? Зависит ли поток управления от входных данных? У вас есть доступ ко всем возможным входам? Существуют ли тесты по какой-то причине или только потому, что?

Я бы осторожно удалял код, основываясь на том, что необходимо, на основе ведения журнала, если только я не знал, что не бывает исключительных ситуаций, которые случаются редко.

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

0 голосов
/ 26 февраля 2019

Мы используем простой шаблон для обработки этого: looks_like_dead_code(my_string)

Это метод, который регистрирует строку "my_string".

Пример использования:

    if ext == '.jpe':
        looks_like_dead_code('2018-11-30 tguettler: looks fixed in mime_type_to_extension')

Использование даты и логина разработчика не обязательно, это просто лучшая практика.

Если строка будет выполнена, тот, кто отвечает за проверку журналов, поговорит с разработчиком.

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

Мне нравится это решение, так как в большинстве случаев оно выглядит так:

  1. Вы хотите исправить ошибку или реализовать новую функцию
  2. вы смотрите на код и видите несколько строк, которые выглядят как мертвый код. Я имею в виду код, который бесполезен, так как он больше не будет выполняться.
  3. У вас нет часов для расследования. Вы можете погрузиться в свое смутное предположение, что это мертвый код. Вы хотите выполнить свою реальную работу (исправить ошибку или внедрить новую функцию. См. Шаг 1)
  4. Метод look_like_dead_code () дает вам возможность реально что-то делать и оставлять заметки для других разработчиков. Улучшение текущей ситуации стоит всего несколько секунд.
  5. Если у вас есть файловая система Tickler , вы можете напомнить себе проверить этот код в течение шести месяцев. По крайней мере, в моем контексте я могу быть очень уверен, что это мертвый код, если эта строка не выполнялась в течение нескольких месяцев.
0 голосов
/ 14 мая 2018

Обычной практикой является использование логирования внутри этих строк кода. например у вас есть блок кода, который, по вашему мнению, не используется. Вы добавляете блок try catch в начале этого блока кода. Внутри trycatch вы добавляете строку к определенному json, названному так же, как ваш подозрительный блок кода.

try:
    with open("block1.dat", "rb") as file:
        activity = pickle.load(file)

    curtime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    currentact = "dt = {}; code done that: var1 = {}, 
        var2 = {}".format(curdate, var1, var2)

    activity.append(currentact)

    file = open("block1.dat", "ab")
    pickle.dump(activity, file)
    file.close()
except Exception: pass

Вы можете использовать telegram api для входа в систему. Через некоторое время вы получите информацию о том, как часто работает ваш код и что он делает. Затем вы наблюдаете некоторое время, и если в течение месяца ничего не происходит, вы можете прокомментировать блок.

...