У меня часто есть код, основанный на определенном четко определенном алгоритме. Это хорошо прокомментировано и кажется правильным. Для большинства наборов данных алгоритм отлично работает.
Но затем добавляются граничные случаи, особые случаи, эвристика для решения конкретных задач с определенными наборами данных. По мере роста числа особых случаев комментарии становятся все более туманными. Я боюсь вернуться и посмотреть на этот код через год или около того и попытаться вспомнить, почему был добавлен каждый особый случай или эвристика.
Иногда мне хотелось бы, чтобы был способ встраивать или связывать графику в исходном коде, чтобы я мог эффективно сказать: «На графике этого набора данных именно эта особенность здесь вызывала неправильное срабатывание подпрограммы, поэтому этот кусок кода был добавлен ".
Каковы некоторые передовые практики для решения подобных ситуаций?
Особые случаи, кажется, всегда требуются для обработки этих необычных / крайних случаев. Как им можно управлять, чтобы код был относительно читабельным и понятным?
Рассмотрим пример, касающийся распознавания функций по фотографиям (не совсем то, над чем я работаю, но аналогия кажется подходящей). Когда я нахожу конкретную картинку, для которой общий алгоритм не работает и требуется особый случай, я записываю эту информацию как можно лучше в комментарии (или, как кто-то предложил ниже, описательное имя функции). Но часто не хватает постоянной ссылки на конкретный файл данных, который демонстрирует рассматриваемое поведение. В то время как мой комментарий должен описывать проблему и, вероятно, сказал бы «посмотрите файл foo.jp для примера такого поведения», этот файл никогда не находится в дереве исходного кода и может легко потеряться.
В таких случаях люди добавляют файлы данных в исходное дерево для справки?