He estado involucrado en un proyecto donde todo el sistema fue escrito en Oracle Forms, pero sin ninguna documentación. La tecnología podría haber sido fácilmente Perl. Aquí está el plan de ataque para migrar el sistema a Oracle ADF (pero también podría ser fácilmente cualquier otra plataforma):
- Cree un conjunto de categorías de código para requisitos empresariales (funcional, errores, validación, interfaz de usuario, etc.).
- Cree un conjunto de categorías para las pantallas (agrúpelas por una funcionalidad similar).
- Cree una lista de todas las pantallas para toda la aplicación y enumérelas en una hoja de cálculo.
- Asigne a cada pantalla una categoría de código y un tipo de código (p. Ej., Regla comercial, requisito del sistema, técnico).
- Realice ingeniería inversa del código para extraer los requisitos comerciales, elaborando una descripción de una oración de cada requisito.
En este punto, habrá documentado las reglas de negocio para la aplicación. Esto solo será oro para cualquiera que tenga que mantener el sistema. Además, le dará la oportunidad de ver qué partes del sistema se han duplicado. (En mi caso, descubrimos que más del 60% de la base del código estaba duplicada).
Desde aquí, puede ordenar los requisitos comerciales con la administración. Esto podría implicar la elaboración de historias de usuarios, por ejemplo. Esto también revelará una funcionalidad duplicada de alto nivel y presentará oportunidades para simplificar y mejorar el sistema durante la migración. He incluido una captura de pantalla de la hoja de cálculo para mostrar una forma de seguir y documentar los requisitos.
Es posible que tengas que repasar tu Perl. ;-)

Una vez que haya realizado la ingeniería inversa del proyecto, puede emplear un conjunto de herramientas para ayudarlo con el ciclo de vida del desarrollo de software. (Estamos utilizando JIRA , pero hay muchas otras suites de software que funcionarían). Es posible que tenga que luchar, pero una vez que haya reducido los requisitos, querrá pasar a los siguientes entornos:
- Cree un entorno de documentación (por ejemplo, un wiki).
- Crear un entorno de desarrollo (DEV). Servidores web, servidores de bases de datos, repositorio de origen, etc.
- Cree un entorno de prueba (TEST) que refleje el desarrollo.
- Cree un entorno de preproducción (PREPROD) que refleje exactamente la producción y pueda actuar como una conmutación por error para el sistema de producción.
- Crear un entorno de producción (PROD).
Piense en usar un servicio orientado a la comunidad para abordar el requisito de la documentación del usuario final. Un excelente paquete de software similar a la suite StackExchange es OSQA . Deje que los usuarios creen el sistema de ayuda (es una estrategia bastante inteligente).
El SDLC se convierte en:
- Los desarrolladores realizan y prueban cambios en la aplicación en DEV (usando un repositorio ).
- Las herramientas del sistema implementan automáticamente compilaciones regulares en TEST.
- Una vez que los evaluadores están satisfechos con la aplicación, la aplicación se implementa en PREPROD. Esto permite que también se pruebe el proceso de implementación. Se realizan más pruebas en PREPROD.
- Una vez que los evaluadores están satisfechos con PREPROD, la aplicación finalmente se incluye en PROD.
Considero que este es un enfoque altamente organizado que funciona bien con diferentes metodologías de desarrollo. La primera pasada, que he descrito aquí, debe considerarse como una "pincelada amplia": en este punto, no debe ser demasiado detallado (empantanado) con minucias técnicas. (Los requisitos de la interfaz de usuario, por ejemplo, son capturados por cada pantalla. Mientras tenga las pantallas enumeradas, no necesita iterar cada campo de entrada individual, solo enlace a una captura de pantalla o URL de trabajo).
Por último, para revisar el código fuente, generamos automáticamente una serie de páginas web (una página web por "pantalla" funcional). Esto funcionó bien porque el código PL / SQL podría dividirse en archivos separados y convertirse automáticamente a HTML con resaltado de sintaxis. Con Perl, esto podría no funcionar tan bien para usted. La idea, sin embargo, es que puede crear enlaces de anclaje dentro de la hoja de cálculo que apunten a la sección de código que impone el requisito comercial. (Por otro lado, esto también permitiría que varios desarrolladores realicen ingeniería inversa de los requisitos del sistema en paralelo porque cada desarrollador puede abordar diferentes pantallas simultáneamente).
Un fragmento de código fuente de ejemplo (el + es un enlace de anclaje):

Podría recomendar contratar a un par de gurús de Perl para ayudar con la tarea de análisis.
No creo que sea muy productivo señalar que otras personas están haciendo un "trabajo horrible"; más bien, debería buscar mejorar el producto y dar a las personas la oportunidad de ayudar con este objetivo (y tal vez aprender cómo mejorar sus habilidades en el proceso). Es decir, no sabes lo que saben los otros desarrolladores, ni estabas allí cuando desarrollaron el sistema. Este enfoque hace que todo el proceso sea abierto y altamente visible a través del cual todos puedan contribuir.
Honestamente, los gerentes verán por sí mismos quién es realmente útil y quién quiere mejorar.