Como um gerente não-TI deve garantir a manutenção e o desenvolvimento a longo prazo de software legado essencial?

13

Somos uma empresa de administração de benefícios pequena, muito especializada, com uma coleção de software extremamente útil e robusta, alguns escritos em COBOL, mas a maioria em BASIC. Dois consultores em período integral mantiveram e aprimoraram habilmente esse sistema ao longo de mais de 30 anos. Escusado será dizer que eles vão se aposentar em breve. (Uma delas está desesperada para se aposentar há vários anos, mas é leal a uma falha e, por isso, continua firme, apesar da insistência do marido em que o golfe deva ter prioridade.)

Iniciamos o processo de conversão para um sistema desenvolvido por uma das três únicas empresas do país que oferecem o tipo de software que usamos. Agora, acreditamos que, embora essa empresa seja teoricamente capaz de concluir o processo de conversão, ela não tem recursos para fazê-lo em tempo hábil e acreditamos que ela não poderá oferecer o tipo de serviço que precisamos executar nossos negócios. (Não há nada como ser capaz de definir suas próprias prioridades e ter autoridade para alocar seus recursos como achar melhor.)

O hardware não é um problema - somos capazes de emular com muita eficiência em servidores modernos. Se COBOL e BASIC fossem idiomas modernos, estaríamos dispostos a correr o risco de encontrar substitutos para nossos consultores atuais daqui para frente.

Parece que deveria haver um modelo de negócios para uma empresa de suporte de TI que se concentre em plataformas herdadas como essa e forneça o talento de programação e desenvolvimento de software para suportar um sistema como o nosso, removendo de nossas costas os riscos de encontrar o talento certo em programação e o trabalho de convencer os programadores mais jovens de que eles podem ter uma carreira produtiva e gratificante, em parte em uma linguagem antiga e não sexy como o BASIC.

Em resumo, como gerentes que não são de TI, como podemos gerenciar melhor essa transição?

user105977
fonte
6
ai! BASIC e COBOL?!? Eu tentaria uma casa de repouso. Você já pensou em "modernizar" seu software?
25253
2
Apenas para acrescentar: carreira produtiva e gratificante, em parte em uma linguagem antiga e não sexy como o BASIC. - BASIC e produtivo, gratificante carreira não ir junto em uma frase
BЈовић
3
Existem muitos contratados e consultorias que migram software de sistemas legados. No entanto, cobol e básico não são legados, são pré-históricos. Embora estranhamente seja provavelmente muito fácil contratar alguém, eles provavelmente são legais de um jeito hacker moderno.
NimChimpsky 25/10
3
Eu vou concordar com @ BЈовић neste. Você deve modernizar seu software em vez de tentar encontrar suporte de vida para algo tão antigo quanto BASIC e COBOL, pelo menos para fins de prova futura. Por enquanto, você pode encontrar alguns veteranos ou garotos hipster que podem codificar para você, mas, à medida que os anos passam e os paradigmas mudam, esses talentos se tornam espécies ameaçadas de extinção que, por sua vez, causam o desaparecimento lento e constante do seu sistema. O mero fato de que você mal consegue encontrar programadores agora deve ser uma bandeira vermelha que está na hora de mudar.
Maru
2
@ user105977 - Meu melhor conselho seria documentar o sistema atual (se ainda não estiver documentado) para que seus consultores se sintam confortáveis, se forem atingidos por um ônibus ou se aposentar, alguém poderá entrar atrás deles e gerenciar o projeto. Depois de ter a documentação do projeto (especificações, requisitos do projeto, ect), você não está em uma posição tão ruim. Eu meio que discordo da maioria dos comentários sobre esses idiomas, ainda há demanda por eles, e o conhecimento desses idiomas vale muito dinheiro. Um jovem desenvolvedor deve ser capaz de aprender esses idiomas rapidamente.
Ramhound 25/10

Respostas:

11

Pode parecer que "deve haver um modelo de negócios para uma empresa de suporte de TI que se concentre em plataformas herdadas como esta", mas pessoalmente acho que isso é apenas um desejo de sua parte, pois "resolveria" os desafios que você enfrenta em um caiu rapidamente.

Ficar preso em ambientes antigos não é o caminho a seguir. E eu, pelo menos, não apostaria a vida de nenhuma empresa tentando ficar presa ao encontrar uma empresa que, por enquanto, estaria disposta a fazer o que você aparentemente não pode.

Portanto, não é uma resposta para a pergunta real que você pediu, mas conselhos sinceros sobre como você pode avançar enquanto mantém os riscos de uma migração no mínimo.

Leia "Como sobreviver a uma reescrita básica, sem perder a sanidade"

Não cometa o erro de um projeto de migração longo sem resultados reais por muito tempo. Leia "Como sobreviver a uma reescrita básica, sem perder a sanidade"

Não posso enfatizar o suficiente como os conselhos desse artigo me ajudaram a resolver / abordar problemas semelhantes depois de me queimar fazendo esses tipos de projetos da maneira "antiga".

Configurar testes automatizados

Se você ainda não o instalou (por que não?), Peça aos programadores atuais que criem um equipamento de teste automatizado para seus aplicativos.

O conjunto de testes automatizados deve cobrir todas as áreas funcionais dos seus aplicativos. Deverá documentar as especificações de trabalho atuais nas regras "quando_X_depois_Y" dos casos de teste individuais. Isso ajudará a impedir que as alterações em seu código atual quebrem a funcionalidade existente, além de oferecer suporte a qualquer migração para um novo ambiente.

Como você está lidando com o COBOL e o BASIC, o conjunto de testes provavelmente deve estar no nível dos testes de integração: trabalhando em um conjunto "fixo" de arquivos / bancos de dados de entrada e verificando os arquivos de saída / conteúdo alterado do banco de dados de programas específicos (COBOL) e / ou aplicações. Para as partes BASIC do seu software, isso pode significar adicionar parâmetros de linha de comando para fazê-los exercer certas funções sem a intervenção (G) da interface do usuário ou obter uma ferramenta de teste automatizada (G) da interface do usuário.

Isolar cálculos e outros algoritmos

Até o Cobol suporta a noção de subprogramas que podem ser chamados de um programa principal. Isole todos os cálculos de importação e outros algoritmos em programas ou módulos separados. O objetivo é criar uma biblioteca de programas / módulos / o que quer que o trabalho pesado resulte isolado de tudo o que reúne informações e cria resultados.

Adapte o equipamento de teste para testá-los tanto em seus aplicativos antigos quanto em isolamento. Isso garantirá que o trabalho que você está fazendo no código "antigo" para facilitar a migração para um ambiente mais novo introduza o menor número possível de erros.

Inicie um novo conjunto de aplicativos em um ambiente "atual"

Não converta seu código atual. Converter um idioma para outro significa impor as restrições do ambiente antigo ao novo. O resultado é muitas vezes inferior ao desejável (leia-se: o resultado será terrível e difícil de manter). Migrar. Reserve um tempo para configurar seus aplicativos no novo ambiente de uma maneira que seja considerada a melhor prática para esse ambiente.

Obtenha novos programadores, bem versados ​​no ambiente escolhido, para fazer isso. Torne uma prioridade desde o primeiro dia isolar todos os cálculos e algoritmos importantes em classes e / ou pacotes separados e ocultá-los atrás de interfaces. Use injeção de dependência (o tipo mais barato de injeção de dependência de bricolage fará) para informar ao seu novo aplicativo quais classes instanciar / usar para fazer os cálculos.

Essa é uma boa maneira de fazer as coisas de qualquer maneira e, no seu caso, permitirá que você migre essas partes importantes em uma base por caso. Ele também ocultará os meandros da chamada de programas básicos e / ou cobol das funções de chamada no novo ambiente.

Não vá além: configure os aplicativos e, talvez, configure a função de entrada / saída mais importante que usa um cálculo da sua "biblioteca" COBOL / BASIC.

Integre sua "biblioteca" COBOL / BASIC

Descubra como chamar sua "biblioteca" COBOL / BASIC a partir do seu novo ambiente. Isso pode envolver a configuração de arquivos de parâmetros ou tabelas de banco de dados, a execução de um programa COBOL / BASIC que envolve a biblioteca COBOL / BASIC que você configurou anteriormente. Se você tiver sorte, sua versão do BASIC poderá permitir a criação de DLLs que podem ser chamadas diretamente.

Implemente a classe em seu novo ambiente que chamará a "biblioteca" de COBOL / BASIC e testará o problema usando os mesmos testes que estão no chicote de teste do ambiente antigo, mas agora na forma de testes de unidade no novo ambiente .

Sim, isso significa "duplicar" os testes, mas é uma rede de segurança que você não quer prescindir. Apenas porque esses testes de unidade servirão posteriormente como testes para verificar a implementação de seus cálculos e algoritmos quando eles forem migrados para o seu novo ambiente.

Mais uma vez: não vá além de adicionar os testes de unidade para o (s) cálculo (s) usado (s) pelo mais importante da etapa anterior.

Conheça os novos aplicativos em iterações

Abra os novos aplicativos repetindo as duas etapas anteriores para todas as funções em seus aplicativos antigos. Continue adicionando os testes de unidade que verificam os cálculos no chicote de teste dos novos aplicativos. Use o conjunto de testes de integração para verificar se as funções migradas funcionam da mesma forma que seus aplicativos antigos.

Migrar a biblioteca principal em iterações

E, finalmente, migre os cálculos e algoritmos na sua "biblioteca" COBOL / BASIC, reimplementando-os em seu novo ambiente. Novamente, faça isso de forma iterativa, usando os testes (unitários) como uma maneira de manter sua sanidade.

Marjan Venema
fonte
1
Embora sua resposta seja boa quando vista por si mesma, infelizmente não se concentra realmente na questão. O solicitante é um gerente que não é de TI e provavelmente não tem idéia do que você quer dizer com a maior parte do que você escreveu. Ele precisa de conselhos para encontrar alguém que o faça.
25413 Philipp
1
@ Philipp: Bem visto, embora eu tenha dito que não estava respondendo à sua pergunta real. Estou certo de que o OP sabe como usar o Google e há termos de pesquisa suficientes na minha resposta para que o OP inicie alguma pesquisa - ou melhor ainda - que os programadores atuais o façam. Não hesite em adicionar sua própria resposta ao OP, pois você acha que precisa ser feito. Heck, pode até upvote se você fez ...
Marjan Venema
Ele precisará de um consultor de TI de negócios para o processo de transição, alguém que já ajudou nesses processos antes. O consultor não deve estar fazendo o trabalho, mas sim encontrar as pessoas que o fazem, supervisioná-las e garantir que o programa faça o necessário para os negócios. Sim, isso é caro. Ter seu próprio software sempre é.
MSalters
@MarjanVenema (não sei exatamente o que eu esperava quando postei essa pergunta, mas uma coisa que eu não esperava era que quase todos os comentários fossem atenciosos e úteis - muitos pensam para todos.) Eu li o que você recomendou " como sobreviver "de Milstein, e o de Spolsky ao qual ele estava respondendo, e nem Milstein gosta da idéia de reescrever código. Com base em nossa experiência até agora, os comentários de Spolsky sobre os perigos da migração de dados e o valor do código de trabalho são verdadeiros. Definitivamente, estou preocupado que estou sucumbindo ao desejo, mas realmente quero pensar que Ramhound está certo.
user105977
1
@ user105977: Eu entendo. Sim, uma reescrita é arriscada, mas nem sempre evitável e, às vezes, o melhor caminho a seguir, apesar do risco. Para mim, manter o (s) sistema (s) antigo (s), basear-se em um conjunto de habilidades que ainda não está exatamente disponível, é um risco comercial que pode ser maior que o risco de uma reescrita e que aumenta com o tempo à medida que o pool de desenvolvedores disponíveis mantém diminuindo. Mas não estou na sua posição e não posso julgar o risco relativo deles.
Marjan Venema
2

Parece que este aplicativo é "essencial" para os seus negócios. Nos casos em que um sistema ou processo é o que é da sua empresa, é necessário ter sua própria solução personalizada.

Você aludiu a isso. Infelizmente, dado o longo tempo que você passou desde a atualização de suas tecnologias, essa será uma tarefa extremamente difícil.

Eu recomendaria uma das duas rotas.

  1. Equipe um grupo de desenvolvedores / gerentes de projeto / QE / operações de TI e construa seu sistema de forma incremental, conforme observado na resposta bastante técnica acima. No entanto, isso será excepcionalmente caro.
  2. Em vez de um fornecedor pronto para uso, procure um consultor qualificado de desenvolvedor personalizado. Este grupo tratará de todos os recursos para criar seu novo sistema, e você poderá trazê-lo para casa com uma equipe pequena do que a opção 1 para continuar. Esta opção possui um conjunto diferente de riscos, no entanto, a seleção de um bom provedor pode ser muito difícil para os não técnicos. Eles também podem ser um risco muito alto com excedentes de custos, etc. Para mitigar essa rota, use sua equipe existente para criar um conjunto muito detalhado de requisitos (da perspectiva do usuário) para o seu lance. Em seguida, solicite lances de preço fixo também.

Boa sorte, você tem cerca de 20 anos de legado a superar. Não será barato, fácil ou limpo.

Bill Leeper
fonte
1
FYI: 20 anos no mundo do software são equivalentes a 2 ou 3 gerações humanas. É muito, muito tempo. De um ponto de vista tecnológico, BASIC e COBOL são velhos o suficiente para ser colocado em um museu ...
Radu Murzea
Estou programando há 20 anos, na verdade, e o COBOL é anterior à minha experiência um pouco.
Bill Leeper
-2

Em vez de procurar uma empresa para manter seu software legado ou reescrever seu software legado, procure uma empresa para fornecer um serviço contínuo de sistema de administração de benefícios. Terceirize os problemas de decidir se deve ou não reescrever o software, qual cronograma definir, que idioma ou ferramentas usar.

Sim, os custos óbvios dessa abordagem podem exceder os custos óbvios da contratação de novos programadores, mas, por sua própria admissão, você não é gerente de TI e é fácil prever cenários nos quais você toma decisões que acabam custando à sua empresa mais do que o custos óbvios de terceirização.

Marca de alto desempenho
fonte
1
O segundo parágrafo afirma que eles já fizeram o que você sugere: eles identificaram as três empresas que fornecem software de administração de benefícios. Nenhum deles qualificado.
MSalters
Não sugeri que encontrassem uma empresa para fornecer software, mas um serviço contínuo de administração de benefícios .
High Performance Mark