Это загруженный вопрос: -)
Во-первых, как мы измеряем «сложность»? Без какой-либо метрики, решаемой априори, может быть трудно оправдать какой-либо «редукционный» проект.
Во-вторых, выбор полностью за вами? Если мы можем взять пример, предположим, что в некоторой кодовой базе молоток «наследования» используется для решения любой другой проблемы. Хотя использование наследования является совершенно правильным для некоторых случаев, оно может быть не правильным для всех случаев. Что ты в таких случаях?
В-третьих, можно ли доказать, что поведение / функциональность программы не изменились из-за рефакторинга? (Это становится более сложным, когда код является частью продукта доставки.)
В-четвертых, вы можете начать с более простых вещей, таких как: (а) избегать глобальных переменных, (б) избегать макросов, (в) максимально использовать константные указатели и константные ссылки, (г) везде использовать квалифицированные константные методы это логично. Я знаю, что это не методы рефакторинга, но я думаю, что они могут помочь вам достичь вашей цели.
Наконец, по моему скромному мнению, я думаю, что любой такой проект по рефакторингу - это скорее проблема людей, чем технологий. Все программисты хотят писать хороший код, но восприятие хорошего и плохого очень субъективно и варьируется у разных членов одной команды. Я бы предложил создать для проекта «соглашение о разработке» (что-то вроде C ++ Coding Standards ). Если вы можете достичь этого, вы в основном сделали. Оставшаяся часть изменяет части кода, которые не соответствуют соглашению о разработке . (Я знаю, это очень легко сказать, но очень трудно сделать. С наилучшими пожеланиями.)