Вероятно, следует учитывать две вещи, помимо того, как вы хотите начать, на том, что вы хотите сфокусировать , и где вы хотите остановиться .
Вы заявляете, что существует большой отток кода, это может быть ключом к концентрации ваших усилий. Я предлагаю вам выбрать части вашего кода, где требуется много обслуживания, зрелые / стабильные части, по-видимому, работают достаточно хорошо, поэтому лучше оставить их такими, какие они есть, за исключением, вероятно, некоторого оформления витрин с фасадами и т. Д.
Где вы хотите остановиться, зависит от причины, по которой вы хотите конвертировать в C ++. Это вряд ли может быть самоцелью. Если это связано с какой-либо сторонней зависимостью, сфокусируйте свои усилия на интерфейсе с этим компонентом.
Программное обеспечение, над которым я работаю, является огромной, старой базой кода, которая была «преобразована» из C в C ++ много лет назад. Я думаю, что это потому, что графический интерфейс был преобразован в Qt. Даже сейчас это все еще в основном похоже на C-программу с классами. Разбиение зависимостей, вызванных открытыми членами данных, и рефакторинг огромных классов с помощью процедурных методов-монстров на более мелкие методы и классы никогда по-настоящему не снимались, я думаю по следующим причинам:
- Нет необходимости изменять работающий код, который не нуждается в улучшении. Это приводит к появлению новых ошибок без добавления функциональности, и конечные пользователи не ценят это;
- Очень, очень трудно надежно провести рефакторинг. Многие фрагменты кода настолько велики, а также настолько важны, что люди едва ли осмеливаются прикасаться к нему. У нас довольно обширный набор функциональных тестов, но получить достаточную информацию о покрытии кода сложно. В результате трудно установить, имеется ли уже достаточно тестов для выявления проблем во время рефакторинга;
- ROI установить сложно. Конечный пользователь не получит выгоду от рефакторинга, поэтому он должен быть в сниженных затратах на обслуживание, которые первоначально будут увеличиваться, потому что при рефакторинге вы вводите новые ошибки в зрелый, то есть довольно безошибочный код. И сам рефакторинг тоже будет дорогостоящим ...
NB. Я полагаю, вы знаете книгу "Эффективная работа с устаревшим кодом"?