Estive envolvido em um projeto em que todo o sistema foi gravado no Oracle Forms, mas sem nenhuma documentação. A tecnologia poderia facilmente ter sido Perl. Aqui está o plano de ataque para migrar o sistema para o Oracle ADF (mas também pode ser facilmente qualquer outra plataforma):
- Crie um conjunto de categorias de código para requisitos de negócios (funcional, bugs, validação, interface do usuário, etc.).
- Crie um conjunto de categorias para as telas (agrupe-as por funcionalidade semelhante).
- Crie uma lista de todas as telas para todo o aplicativo e enumere-as em uma planilha.
- Atribua a cada tela uma categoria de código e um tipo de código (por exemplo, regra comercial, requisito do sistema, técnico).
- Faça engenharia reversa do código para extrair os requisitos de negócios, criando uma descrição de uma frase de cada requisito.
Neste ponto, você terá documentado as regras de negócios do aplicativo. Isso por si só será ouro para quem, em seguida, precisar manter o sistema. Além disso, você terá a chance de ver quais partes do sistema foram duplicadas. (No meu caso, descobrimos que mais de 60% da base de código foi duplicada.)
A partir daqui, você pode classificar os requisitos de negócios com o gerenciamento. Isso pode envolver a criação de histórias de usuário, por exemplo. Isso também revelará funcionalidade duplicada de alto nível e apresentará oportunidades para simplificar e aprimorar o sistema durante a migração. Incluí uma captura de tela da planilha para mostrar uma maneira de rastrear e documentar os requisitos.
Você pode precisar atualizar o seu Perl. ;-)
Depois de fazer a engenharia reversa do projeto, você pode empregar um conjunto de ferramentas para ajudá-lo no ciclo de vida de desenvolvimento de software. (Estamos usando o JIRA , mas existem muitos outros pacotes de software que funcionariam.) Talvez você precise lutar um pouco, mas depois de ter cumprido os requisitos, será necessário migrar para os seguintes ambientes:
- Crie um ambiente de documentação (por exemplo, um wiki).
- Crie um ambiente de desenvolvimento (DEV). Servidores da Web, servidores de banco de dados, repositório de origem, etc.
- Crie um ambiente de teste (TEST) que reflete o desenvolvimento.
- Crie um ambiente de pré-produção (PREPROD) que espelha exatamente a produção e possa atuar como um failover para o sistema de produção.
- Crie um ambiente de produção (PROD).
Pense em usar um serviço orientado à comunidade para atender aos requisitos da documentação do usuário final. Um excelente pacote de software semelhante ao pacote StackExchange é o OSQA . Permita que os usuários construam o sistema de ajuda (é uma estratégia bastante inteligente).
O SDLC se torna:
- Os desenvolvedores fazem e testam alterações de aplicativos no DEV (usando um repositório ).
- As ferramentas do sistema implantam automaticamente compilações regulares no TEST.
- Depois que os testadores estiverem satisfeitos com o aplicativo, ele será implantado no PREPROD. Isso permite que o processo de implantação também seja testado. Mais testes acontecem no PREPROD.
- Quando os testadores estão satisfeitos com o PREPROD, o aplicativo é finalmente inserido no PROD.
Acho que essa é uma abordagem altamente organizada que funciona bem com diferentes metodologias de desenvolvimento. A primeira passagem, que descrevi aqui, deve ser considerada uma "pincelada ampla" - você não quer ficar muito detalhado (atolado) com minúcias técnicas neste momento. (Os requisitos da interface do usuário, por exemplo, são capturados por cada tela. Contanto que você tenha as telas enumeradas, não é necessário iterar cada campo de entrada - basta vincular a uma captura de tela ou URL de trabalho.)
Por fim, para revisar o código fonte, geramos automaticamente uma série de páginas da web (uma página por "tela" funcional). Isso funcionou bem porque o código PL / SQL pode ser dividido em arquivos separados e convertido automaticamente em HTML com destaque de sintaxe. Com o Perl, isso pode não funcionar tão bem para você. A idéia, porém, é que você pode criar links de âncora na planilha que apontam para a seção de código que impõe os requisitos de negócios. (Além disso, isso também permitiria a vários desenvolvedores fazer engenharia reversa dos requisitos do sistema em paralelo, porque cada desenvolvedor pode enfrentar telas diferentes simultaneamente.)
Um exemplo de trecho de código-fonte (o + é um link de âncora):
Você pode recomendar a contratação de alguns gurus do Perl para ajudar na tarefa de análise.
Não acho muito produtivo apontar que outras pessoas estão fazendo "trabalho de baixa qualidade"; em vez disso, você deve procurar melhorar o produto e dar às pessoas a oportunidade de ajudar com esse objetivo (e talvez aprender como melhorar suas habilidades no processo). Ou seja, você não sabe o que os outros desenvolvedores sabem, nem estava lá quando eles desenvolveram o sistema. Essa abordagem torna todo o processo aberto e altamente visível, pelo qual todos podem contribuir.
Honestamente, os gerentes verão por si mesmos quem é realmente útil e quem quer melhorar.