Pregunta

Sí, la temida palabra 'M'.

Tienes una estación de trabajo, control de código fuente y medio millón de líneas de código fuente que no escribiste. La documentación estaba desactualizada en el momento de su aprobación y publicación. Los desarrolladores originales son LTAO, en el siguiente proyecto / startup / loony bin y no responden al correo electrónico.

¿Qué vas a hacer?

{editor favorito} y Grep lo ayudará a comenzar su spelunking a través de las agallas de la base del código, pero ¿qué otras herramientas deberían estar en la caja de herramientas de los ingenieros de mantenimiento?

Para empezar a rodar la pelota; No creo que pueda vivir sin source-insight para la detección de C / C ++. (DESCARGO DE RESPONSABILIDAD: No trabajo para ellos).

¿Fue útil?

Solución

Una de las mejores herramientas en el espacio .Net es ReSharper . Esta herramienta me ha ahorrado tiempo en todos los aspectos del ciclo de vida del desarrollo. También me han ayudado a sobrevivir al unirme a soluciones / proyectos indocumentados.

  • Refactorización de código
  • Navegación de código
  • Análisis de código

estas son algunas de las muchas características que ayudan a realizar tareas que consumen mucho tiempo.

Otros consejos

Al igual que comer el elefante - un bocado a la vez :)

A veces, el panorama general puede ser un desmotivador real, y debes elegir un lugar y abordarlo pieza por pieza.

Por supuesto, aún debe elegir el bit para comenzar ... Por lo general, esto se debe principalmente a los usuarios / empresas con los cambios específicos de prioridad más alta requeridos (ayer ...) pero si tiene un poco de flexibilidad o tiempo de familiarización , las métricas suelen ser útiles. Las herramientas aquí varían según la tecnología y el idioma, pero herramientas como NDepend y JDepend , cualquier métrica de código integrada (como en Visual Studio Team System, o los diversos complementos disponibles de Eclipse) o una herramienta como Simian para tener una idea del tamaño del problema de copiar y pegar.

Es de esperar que la cantidad de pruebas y cobertura unitarias sea mayor que cero, por lo que un buen primer paso es obtener todas las pruebas que pueda ejecutar en un entorno de integración continua, como base para agregar más pruebas a medida que aprende.

Y como han dicho otros, asumiendo que las opciones están disponibles para el idioma, un buen IDE con código de navegación y refactorización automática es una necesidad (Eclipse, Visual Studio (con o sin ReSharper).

Un par de libros que aumentan la moral:

Buena suerte :)

Los motores de búsqueda de códigos pueden ayudarlo a encontrar una base de recursos enorme.

Se puede encontrar un motor de búsqueda de código fuente sensible al lenguaje. en Motor de búsqueda de código fuente SD . Puede manejar muchos idiomas al mismo tiempo. Se pueden realizar búsquedas de patrones en un idioma específico, o patrones en todos los idiomas (como " buscar identificadores que impliquen IMPUESTOS "). Al ser sensibles a los tokens de lenguaje, el número de falsos positivos se reduce, Ahorro de tiempo para el usuario. Comprende C, C ++, C #, COBOL, Java, ECMAScript, Java, XML, Verilog, VHDL y otros muchos idiomas.

(Soy el arquitecto de herramientas).

Normalmente comienzo con Emacs + CScope en Linux. Visual Studio tiene algunas herramientas de inspección que le brindan una capacidad similar para Windows. Doxygen también puede ser bastante útil: generará documentos que pueden ser útiles incluso si las fuentes no tienen comentarios de documentación.

Ejecutaré alguna herramienta UML (tal vez un simple cuaderno con un bolígrafo =)) y / o herramientas para construir clases, llamadas, jerarquías de métodos (integradas en IDE). Luego veré la dinámica con el depurador o con pruebas unitarias simples. Con estas cosas intentaré realizar algún tipo de ingeniería inversa para descubrir el diseño.

En tales situaciones, usaría Understand for C ++

El uso de un encuesta de la firma es una buena manera de obtener una visión muy clara de la código. Con un buen lenguaje de scripting y algo de mojo para usarlo, crear una encuesta de firma altamente personalizada para su propio código base, sea cual sea su idioma, no es una tarea difícil.

El software de seguimiento de errores, especialmente si se enlaza con el software de control de origen, será invaluable, ya que podría darle una idea de por qué se tomaron algunas decisiones erróneas. Esto es aún más importante si el programador de mantenimiento también planea hacer un poco de refactorización.

Un registro escrito también es útil, para que pueda documentar el sistema a medida que avanza.

Sí, golpea el clavo en la cabeza. Un shell de Unix y el práctico Notepad ++ es lo que solía usar cuando realizaba trabajos de mantenimiento en ColdFusion, PHP, Perl, etc. Es agradable no cambiar de editor y rastrear todas las referencias a un nombre / parámetro / variable.

Ahora simplemente hago clic con el botón derecho y presiono "Buscar todas las referencias" en Visual Studio, lo que parece ser trampa para ser honesto. Los chicos de PHP son extremadamente celosos, ya que están obligados a usar vi para editar. ;)

La herramienta crítica sería algo que le permita navegar (y editar) la base del código para ayudarlo en su comprensión.

Es muy útil tener algo que pueda mostrar la relación de clase (si se usa el lenguaje OO). La capacidad de mostrar árboles de llamadas (estáticas) también es muy útil cuando se quiere medir el impacto de un cambio que se va a realizar.

Usted menciona fuente-insight. Un proyecto de código abierto de larga ejecución es navegador de origen . Parece que el desarrollo ha comenzado de nuevo después de estar estancado por un tiempo.

Considero que el Reflector de Lutz es útil para esto, especialmente cuando tienes una mezcla de códigos y binarios. Obtendrá gráficos de llamadas y dependencias (depende de, utilizados por, expuestos por, ejemplificados por, etc.), gráficos de ensamblaje y algunos excelentes complementos.

NDepend es una herramienta dedicada a reinventa el código heredado , especialmente las grandes bases de códigos heredados enredados Descargo de responsabilidad: soy uno de los desarrolladores de herramientas

Para citar Scott Hanselman que escribió una vez en su blog : y quot ; NDepend me da una idea de mis aplicaciones que no he tenido antes (...) Una vez que me di cuenta de la profundidad y amplitud de la información que estaba viendo, era como un niño en una tienda de golosinas. "

Algunas características de NDepend útiles para la reingeniería son:

Debes poder navegar a través del código base. Si su IDE favorito lo permite, puede usar un indexador como Understand for C ++ (ya citado), lxr , o OpenGrok .

En un apuro, puede confiar en grep (1s) o - mejor - Ack .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top