2008-09-24 9 views
8

Sí, la temida palabra 'M'.Mejores herramientas para ingeniería de mantenimiento de software

Tiene una estación de trabajo, control de fuente y medio millón de líneas de código fuente que no ha escrito. La documentación estaba desactualizada en el momento en que fue aprobada y publicada. Los desarrolladores originales son LTAO, en el siguiente proyecto/startup/loony bin y no responde el correo electrónico.

¿Qué vas a hacer?

{editor favorito} y Grep te ayudarán a comenzar tu especulación a través de las agallas de la base de códigos, pero ¿qué otras herramientas deberían estar en la caja de herramientas de los ingenieros de mantenimiento?

Para comenzar a rodar la pelota; No creo que pueda vivir sin source-insight para C/C++ spelunking. (EXENCIÓN DE RESPONSABILIDAD: yo no trabajo para ellos).

+0

Vodka, Tequila o Scotch funcionan bien – Danimal

+0

¡Oh, hombre! No puedo estar más de acuerdo. –

+0

Mh, esa es una situación realmente típica con algunos proyectos OpenSource: escribir documentos no es la tarea favorita de un programador. Normalmente tomo mi editor y comienzo a leer el código al revés hasta que sé lo que hace en caso de que no haga lo que esperaba. Por lo general, espero que funcione por completo. ;) – unexist

Respuesta

3

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 proyectos/soluciones indocumentadas.

  • Código Refactoring
  • Navegación por el código
  • análisis de código

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

0

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

Ahora solo hago clic derecho y pulso 'Buscar todas las referencias' en Visual Studio, lo que parece ser una trampa para ser honesto. Los chicos de PHP son extremadamente celosos, ya que se ven obligados a usar vi para editar. ;)

1

Suelo comenzar 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 muy útil: generará documentos que pueden ser útiles incluso si las fuentes no tienen comentarios sobre la documentación.

1

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

0

La herramienta crítica sería algo que le permite navegar (y editar) la base de códigos para ayudar a su comprensión.

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

Menciona la información de origen. Un proyecto de código abierto de larga ejecución es source navigator. Parece que el desarrollo ha comenzado de nuevo después de estar estancado por un tiempo.

4

como comer el elefante - un bocado a la vez :)

A veces el cuadro grande puede ser un verdadero demotivator, y hay que escoger un mancharlo y abordarlo pieza por pieza.

Por supuesto, todavía es necesario elegir el bit para comenzar ... Normalmente, esto es impulsado principalmente por los usuarios/empresas con la prioridad máxima requiere cambios específicos (ayer ...) pero si tiene un poco de flexibilidad o familiarización tiempo, las métricas a menudo son útiles. Aquí las herramientas varían con la tecnología y el lenguaje, pero herramientas como NDepend y JDepend, cualquiera incorporado en Code Metrics (como en Visual Studio Team System o los diversos plugins de Eclipse disponibles) o una herramienta como Simian para tener una idea del tamaño de el problema de copiar y pegar.

Esperemos que el número de pruebas unitarias y cobertura sea mayor que cero, por lo que un buen primer paso es obtener cualquier prueba que pueda ejecutarse en un entorno de integración continua, como base para agregar más pruebas a medida que aprende.

Y como otros han dicho - Opciones suponiendo que están disponibles para el idioma - un buen IDE con la navegación de código y refactorización automatizado es una necesidad (Eclipse, Visual Studio (con o sin ReSharper)

Un par de ánimo. libros -boosting:

Buena suerte :)

1

El uso de un proceso signature survey es una buena forma de obtener una comprensión muy cabal del código. Con un buen lenguaje de scripting y un poco de mojo para usarlo, crear una encuesta de firmas altamente personalizada para su propia base de código, en cualquier idioma que usted elija, no es una tarea difícil en absoluto.

El software de seguimiento de errores, especialmente si se vincula a su software de control de origen será de gran valor, ya que podría darle una idea de por qué se tomaron algunas malas decisiones. Esto es incluso más importante si el programador de mantenimiento también planea hacer alguna refacturación.

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

0

Creo que el reflector de Lutz es útil para esto, especialmente cuando tienes una combinación de código y binarios. Obtiene gráficos de llamadas y dependencias (depende de, usado, expuesto, instanciado por, etc.), gráficos de ensamblaje y algunos complementos geniales.

2

Los motores de búsqueda de códigos pueden ayudarlo a encontrar una forma de encontrar una gran base de fuentes.

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

(soy el arquitecto de herramientas).

0

NDepend es una herramienta dedicada a re-engineer legacy code, especialmente las grandes bases de código legado enredados responsabilidad: Soy un desarrollador de herramientas

Para citar Scott Hanselman that wrote once on his blog: "NDepend me está dando una idea de mis aplicaciones que no he Había 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 dulces. "

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

Cuestiones relacionadas