Я думаю, что хорошее место для начала (если вы не видите ничего очевидного) - это «отладка». Если вы не видите возможные проблемы сразу, хорошим началом будет создание небольшого списка тестовых значений. Хорошие значения - это «счастливый путь» (нормальное) значение, «нулевое» или «пустое» значение, нули, очень маленькое значение (строка из 1 символа, целое число 1 и т. Д.), Очень большое или очень длинное значение. value и «странные» значения, специфичные для типа (например, символы Unicode для строк, отрицательные числа для целых и т. д.). Здесь не мешало бы упомянуть, что обычно вы пишете модульные тесты, используя эти значения для проверки кода, и просто запускаете их для проверки функции.
Начните с того, что пройдете со своими значениями счастливого пути. Для функции сложения вы могли бы начать с 3 или 4. Изучите каждую строку на предмет опечаток и логических ошибок, отслеживая значения локальных переменных по мере продвижения. Надеюсь, вы найдете несколько ошибок. Когда вы закончите со счастливым путем, вы будете лучше чувствовать код и, надеюсь, почувствуете себя немного менее подавленным - скажем что-то вроде: «Теперь, когда я лучше понимаю, что делает этот код, я собираюсь сделать шаг назад и взглянуть на это ", а затем просто сделать это - искать вещи, которые выделяются для вас как вещи, которые вы бы сделали по-другому (плохие проектные решения, плохо названные переменные, исследовать возможные ошибки и т. д.).
Если это вас ни к чему не приведет или если вы чувствуете, что у вас не хватает слов, вернитесь к списку тестовых значений и повторите его снова с новым, который, по вашему мнению, может вызвать проблемы.
Это, по крайней мере, поможет вам.