¿Cómo haría para convertir una base de código C razonablemente grande (> 300 K) y bastante madura en C++? El tipo de IC que tenemos en mente se divide en archivos que corresponden aproximadamente a módulos (es decir, menos granulares que una descomposición típica basada datos. Las variables globales se utilizan ampliamente para la comunicación entre los módulos. Existe un paquete de prueba de integración muy extenso disponible, pero no hay pruebas de nivel de unidad (es decir, un módulo).Conversión de fuente C a C++
que tienen en mente una estrategia general:
- compilar todo en el subgrupo C++ C 's y conseguir que el trabajo.
- Convierta los módulos en grandes clases, de modo que todas las referencias cruzadas estén delimitadas por un nombre de clase, pero dejando todas las funciones y datos como miembros estáticos, y funcione.
- Convierta clases enormes en instancias con constructores apropiados y referencias cruzadas inicializadas; reemplazar los accesos a miembros estáticos con accesos indirectos según corresponda; y haz que funcione
- Ahora, acérquese al proyecto como una aplicación OO mal factorizada, y escriba pruebas unitarias donde las dependencias son tratables, y descompóngase en clases separadas donde no lo están; el objetivo aquí sería pasar de un programa de trabajo a otro en cada transformación.
Obviamente, esto sería un poco de trabajo. ¿Hay estudios de caso/historias de guerra en este tipo de traducción? Estrategias alternativas? ¿Otro consejo útil?
Nota 1: el programa es un compilador, y probablemente millones de otros programas confíen en que su comportamiento no cambia, por lo que la reescritura al por mayor no es una opción.
Nota 2: la fuente tiene casi 20 años y quizás tenga un 30% de abandono del código (líneas modificadas + líneas totales añadidas/anteriores) por año. En otras palabras, es muy mantenido y extendido. Por lo tanto, uno de los objetivos sería aumentar la capacidad de mantenimiento.
[Por el bien de la cuestión, se supone que la traducción a C++ es obligatoria, y que dejándolo en C es no una opción. El punto de agregar esta condición es eliminar las respuestas "déjalo en C".]
¿Cuál es el marco de tiempo para la migración obligatoria? – paxos1977
¿Qué tan bien conoce la base de código C? ¿De adentro hacia afuera? – paxos1977
La traducción no es obligatoria, solo por el bien de la pregunta (eliminar las respuestas "no traducir"). El tiempo puede ser de 1 a 10 años (es un programa de larga duración). –