agility made possible John Michelsen - PDF
Download "agility made possible John Michelsen"
Ruth Gameiro Marreiro
1 DOCUMENTAÇÃO TÉCNICA Principais capacidades de uma solução de virtualização de serviços Janeiro de 2013 elimine as limitações de desenvolvimento e teste de software com a virtualização de serviços John Michelsen CTO/CA Technologies agility made possible
2 sumário Resumo executivo 3 Seção 1: 4 Criando um ambiente "próximo do real" Seção 2: 5 Permitindo o desenvolvimento e testes em paralelo Seção 3: 6 Manipulando dados de teste para dependências fora do escopo Seção 4: 8 Oferecendo suporte a tecnologias e plataformas heterogêneas Seção 5: 10 Conclusão Seção 6: 10 Sobre o autor 2
3 resumo executivo Desafio Todas as grandes empresas que dependem da TI devem lidar com as limitações de sistemas, como mainframes, componentes em desenvolvimento e fontes de dados confidenciais que atrasam projetos. Inevitavelmente, as equipes tentam copiar um ambiente completo em um laboratório de teste ou "fazer o mcoking" de sistemas responsivos codificando suas próprias versões para fins de teste. Isso tornou-se um esforço dispendioso e demorado. Oportunidade Em essência, a virtualização de serviços é a produtização da prática de "mocking e stubbing" de ambientes de desenvolvimento e teste com realismo e contexto suficientes para acelerar o desenvolvimento e, ao mesmo tempo, de antecipar os testes dentro do ciclo de vida para que os processos de integração e liberação possam acontecer mais rapidamente, com mais qualidade e menor risco. Benefícios A seguir é apresentada uma série de capacidades que sua organização deve procurar em uma solução de virtualização de serviços, permitindo que suas equipes estendidas levem aplicativos de alta qualidade ao mercado mais rapidamente, com menor custo e risco. Elas incluem: Proporcionar o desenvolvimento de um ambiente mais próximo do real Desenvolvimento de maior qualidade e testes de regressão/sistema mais eficazes Permitir o desenvolvimento e testes em paralelo Reduzir os tempos de ciclo, detecção antecipada de defeitos, uso eficiente dos recursos Virtualizar dados de teste para sistemas fora do escopo Montagem/desmontagem mais rápida, mais estabilidade para a automação de testes Habilitar ambientes de alto desempenho Melhor realismo e maior quantidade de testes de desempenho a um custo significativamente menor Como nenhum ambiente de desenvolvimento e teste de aplicativos é uma ilha em torno de si mesmo, também é fundamental que as soluções de virtualização de serviços forneçam um substrato "de fornecedor neutro" para as ferramentas escolhidas que as equipes já podem estar usando. A virtualização de serviços deve fornecer ambientesalvo que funcionem paralelamente às soluções do ciclo de vida de aplicativos existentes, como gerenciamento de testes, gerenciamento de defeitos/controle de problemas e produtos de hardware e virtualização de laboratório de testes líderes de mercado que existem no ambiente. 3
4 Seção 1: Criando um ambiente "próximo do real" Simulando sistemas dependentes em ambientes de desenvolvimento e teste Como o desenvolvimento de aplicativos tem uma tendência para abordagens mais compostas de arquitetura orientada a serviços, uma variedade muito maior de sistemas de upstream e downstream deve ser simulada por equipes em seus ambientes de desenvolvimento e teste. A virtualização de serviços deve ser aplicada em ou entre camadas onde existam dependências, para proporcionar um ambiente mais realista ou "próximo do real" possível. Na abordagem convencional, as equipes tentam avançar com seu próprio desenvolvimento de componentes apenas pelo "stubbing" do próximo sistema de downstream. Por exemplo, se estou desenvolvendo uma interface da web, crio um stub para duas respostas esperadas da próxima camada abaixo (ou seja, o serviço web). Em seguida, os desenvolvedores de serviços web podem criar stubs de suas camadas ESB subjacentes ou tentar fazer o mocking de algumas solicitações do usuário da interface da web. Infelizmente, esse é um processo manual insuficiente para encapsular os diversos tipos de conexões e dados que existem dentro das arquiteturas de software das empresas, e pode ser completamente indisponível se ainda não houver uma interface codificada, como pode ser visto abaixo. Figura A. Ambiente de virtualização de serviços similar a um de produção: antes e depois Perda de 30 a 60% da produtividade Sistema em desenvolvimento Sistema em desenvolvimento Stub 1 Stub 2 Especificações erradas Apenas 1 cenário de dados de 100 Totalmente indisponível Só resta esperar Serviços virtuais Automação Especificações Dados de Uma reunião Comportamento exemplo real capturado Vários cenários de dados reais Alternativamente, quando as equipes estão trabalhando com cenários de dados reais e os comportamentos reais são capturados como serviços virtuais, o nível de produtividade é maior, já que o ambiente resultante é muito mais realista e atual do que conjuntos de stubs que devem ser codificados e mantidos manualmente. Portanto, a técnica fundamental que viabiliza ambientes "próximos do real" é a automação da criação de serviços virtuais e da manutenção de dados. Isso permite que as equipes de desenvolvimento sejam muito mais produtivas devido aos ambientes de laboratório virtuais realistas, mesmo que a interface de usuário seja incompleta, gastando menos tempo de trabalho para criar ou modificar stubs desatualizados. 4
5 Benefícios esperados: Capacidade de iniciar o desenvolvimento apesar da indisponibilidade do sistema de interface Tempo de ciclo reduzido para a execução de testes Capacidade de melhorar a cobertura dos testes devido à redução da dependência de dados de outros aplicativos e do tempo de teste disponível Melhora nos testes de unidade com menor esforço Melhora da qualidade do código devido ao aumento da cobertura de teste e aos testes de regressão Capacidade de construir um simulador rapidamente com baixo esforço de manutenção Seção 2: Permitindo o desenvolvimento e testes em paralelo Equipes de desenvolvimento e testes trabalhando simultaneamente A segunda capacidade crítica de uma solução de virtualização de serviços é permitir desenvolvimento e testes em paralelo. Quando as equipes de desenvolvimento e testes trabalham simultaneamente, o ciclo de vida do software em geral atinge um novo nível de eficácia e eficiência. Novas soluções podem ser fornecidas com grande valor para a organização. Com desenvolvimento e testes em paralelo, os serviços virtuais atuam como uma "camada intermediária" de ativos entre o sistema em desenvolvimento e o sistema em teste de forma simbiótica. No exemplo abaixo, uma equipe está desenvolvendo um serviço de gerenciamento de pedidos, enquanto a equipe acima está desenvolvendo e testando um aplicativo de "loja virtual". Figura B. Processo de desenvolvimento paralelo Armazenamento eletrônico Capturar e atualizar Atualizar modelo pela observação conforme especificações da nova compilação Atualizar modelo pela observação da nova compilação Feedback Feedback Feedback Usar serviços ao vivo ou virtuais conforme necessário Serviço de gerenciamento de pedidos 5
6 Um serviço virtual é capturado pelo sistema de gerenciamento de pedidos existente como back-end inicial para a atividade de teste da loja virtual. Depois, conforme o teste avança, a equipe da loja virtual pode comunicar os requisitos de resposta novos ou inesperados como solicitações de serviços virtuais de "feedback" que essencialmente se tornam o próximo conjunto de requisitos para o desenvolvimento. Cada ciclo de desenvolvimento e testes em paralelo continua a acelerar à medida que cada iteração de atualizações do modelo de serviço virtual acontece em cada nova compilação, e o feedback é cada vez mais rápido. A solução perfeita de desenvolvimento paralelo permite que as equipes trabalhem com base em serviços reais funcionalmente robustos, quando disponíveis, e com dados sincronizados. E nos casos em que as equipes ainda não tenham serviços com o devido suporte para o componente, elas podem voltar imediatamente para os serviços virtuais. Essa capacidade de virar uma chave e ficar entre um sistema de downstream puramente virtual por meio de serviços virtuais, ou para o sistema real, sabendo que você sempre pode voltar se uma nova compilação falhar ou se um novo cenário de dados for necessário, é um trunfo poderoso para a criação da capacidade robusta de desenvolvimento paralelo. Sua prática de gerar e atualizar ambientes de laboratório de software está mantendo contato com a realidade? Em essência, o paralelismo da virtualização de serviços proporciona a agilidade que esperávamos do Agile para ambientes de software complexos alinhando mais os ciclos de desenvolvimento e testes com os objetivos de liberação dos negócios em lançamentos iterativos de prazo apertado. Benefícios esperados: Velocidade cada vez maior dos ciclos de teste e desenvolvimento Proporciona a real capacidade de resposta às iterações do Agile, com integração contínua e compilações alinhadas com os resultados dos testes e os requisitos de negócios Carga de controle de versão reduzida, funciona com ALM e ferramentas de gerenciamento de desenvolvimento existentes para torná-las mais eficazes Maior taxa de aceitação e resolução de problemas antes da produção Fornece pontos de função até 60% mais rápido, com maior qualidade e precisão em relação à especificação Seção 3: Manipulando dados de teste para dependências fora do escopo A falta de dados de downstream não é mais um problema Cada equipe que precisa provisionar um laboratório para suas atividades tem alguns sistemas e dados associados que são considerados dentro do escopo e outros, fora do escopo. Um sistema dentro do escopo é aquele em que se realiza uma alteração de desenvolvimento ou um teste diretamente no sistema. Um sistema fora do escopo é aquele que é necessário para dar suporte a um sistema dentro do escopo, mas na verdade não é o foco da atividade de desenvolvimento ou teste. É considerado uma dependência. É necessário, mas não é o foco da atividade de desenvolvimento ou teste. Nesse cenário, a equipe de desenvolvimento e teste de um mecanismo de reservas está tentando agregar os cenários de dados de downstream e de entrada do usuário necessários, mas ela não tem as chaves de todo o reino. A solução mais óbvia é a prática habitual de TDM, a importação de dados diretamente dos sistemas dentro do escopo e o "stubbing" ou mocking dos sistemas fora do escopo na tentativa de escrever o código e importar algumas linhas de dados para representar as respostas esperadas dessas dependências fora do escopo. Esses stubs são inerentemente frágeis, e os desenvolvedores seguem o caminho mais conveniente na simulação da funcionalidade básica ou dos cenários de resposta que eles esperam. No entanto, conforme a complexidade do software distribuído de hoje aumenta, o esforço de codificar e manter manualmente os stubs úteis tornou-se muito caro. 6
7 Figura C. Dados fora do escopo não cobertos pelo TDM Ferramenta TDM SQL Operações SaaS CRS GDS Dados de entrada Mecanismo de reserva Oracle FF GDS SAP Os dados são reais ou virtuais? O que precisamos é de uma maneira de simular o comportamento desses sistemas fora do escopo com inteligência suficiente para que o sistema dentro do escopo acredite que esteja falando com o sistema real, sem estar de fato. Com a virtualização de serviços, a abordagem de criar todos esses dados que faltam atrás do sistema dentro do escopo não é mais um problema com a automação da captura de cenários de downstream relevantes que estão fora do escopo. Figura D. Virtualizar dados de teste fora do escopo SQL Operações SaaS CRS GDS Dados de entrada Mecanismo de reserva Oracle FF GDS SAP 7
8 O exemplo de estado final do vtdm mostrado aqui parece muito simples, mas essa é realmente a forma como seu processo de teste deve interagir com as dependências externas ou fora do escopo. Os modelos virtuais permitem que todas as suas equipes tenham sempre acesso por demanda aos conjuntos de dados relevantes para os sistemas em teste, e esses dados cobrirão cenários de dados válidos quase infinitos para dar suporte às necessidades de testes de desempenho e regressão de alto volume. Os recursos de virtualização de serviços devem incluir mecanismos para levar todos os sistemas necessários para o ambiente de desenvolvimento e laboratório de teste, incluindo o provisionamento dos dados de sistemas fora do escopo e a manutenção de dados de transações com estado monitorado que passam entre os sistemas em um fluxo de trabalho ao longo do tempo. Por exemplo, simular a mudança de valores, como datas ou valores cumulativos, em uma transação de longa duração de maneira que esses tipos de fluxos de trabalho complexos possam ser validados no nível de detalhe necessário. Benefícios esperados: Elimina atrasos devido à falta de acesso ou dados atuais de sistemas fora do escopo Disponibilidade de cenários de teste válidos 24/7 para várias equipes de teste e desenvolvimento Não há conflitos de dados de teste nem invalidação das atividades das outras equipes com a substituição ou alteração de dados em sistemas Pouco ou nenhum impacto sobre os sistemas reais essenciais Suporte para transações com estado monitorado para auxliar processos complexos que cruzam várias camadas de tecnologia e precisam manter os valores específicos, como datas, IDs de clientes, etc. Redução do tempo gasto com configurações e restaurações de dados em até 90%, reduzindo o tempo total do ciclo de vida de teste em 40-60% Seção 4: Oferecendo suporte a tecnologias e plataformas heterogêneas Criando um ambiente verdadeiramente completo Recentemente, visitei a equipe de arquitetura de um dos maiores bancos do mundo, quando ouvi uma estatística impressionante. Um senhor disse que seu sistema de gerenciamento de ativos de hardware declara que existem mais servidores implantados no banco do que há funcionários no banco. Cada equipe de projeto justificaria a despesa de seus próprios encargos de desenvolvimento, testes, pré-produção e hardware de produção. Quase todos os aplicativos atualmente em uso no banco têm, pelo menos, quatro ambientes por trás deles, mesmo que a manutenção ou as alterações desses aplicativos, em muitos casos, durem meses ou anos entre as releases. Ironicamente, o maior desafio da maioria dos ambientes de pré-produção existentes é que eles nunca são o sistema completo. A equipe de projeto pode comprar qualquer quantidade de servidores e usá-los para replicar hardware ou alguns componentes em VMs aos quais tem acesso. Mas, mesmo que as equipes consumam o próprio orçamento de hardware, elas ainda passam incontáveis meses de seu ciclo de desenvolvimento à espera de acesso e acessando de forma ineficiente os recursos compartilhados do sistema. Sistemas heterogêneos são a norma em ambientes de TI corporativos. Portanto, a virtualização de serviços deve ser aplicada para virtualizar toda e qualquer dependência que possa afetar o sistema em teste (SUT). Isso inclui o tráfego da web (HTTP), serviços web (SOAP/XML), camadas de integração e ESB (JMS, etc.), bem como a simulação de transações e conexões com mainframes subjacentes (CICS, CORBA, etc.), bancos de dados (JDBC, etc.) e serviços de terceiros. 8
9 Figura E. SUT SUT ESB MAINFRAME DADOS HERDADO EXTERNO Como cada ponto de conexão de sua arquitetura de software representa um ponto de mudança em potencial, e apresenta um possível risco de falha, torna-se fundamental que o serviço de virtualização forneça uma maneira melhor de as equipes "virtualizarem tudo" e, assim, isolarem-se das dependências desses componentes heterogêneos. Usando a virtualização de serviços, centenas de laboratórios de pré-produção estão se tornando uma infraestrutura muito mais simples de gerenciar, com provisionamento de software por demanda para qualquer um dos ambientes necessários. Os projetos que não estão atualmente em mudança não irão mais consumir energia, gerar calor nem ocupar espaço físico. As dependências são capturadas e eliminadas. Em vez de precisar acessar o sistema real para a partição de mainframe, a equipe provisionará um serviço virtual do sistema de gerenciamento de informações de clientes por demanda. Benefícios esperados: Fornecimento mais rápido por meio do acesso 24/7 a ambientes de laboratório isolados para todas as equipes de desenvolvimento e teste Redução do custo da infraestrutura de pré-produção convencional economizando possivelmente mais de 20 milhões de dólares por ano para grandes empresas Elimina os custos do serviço e taxas de acesso a sistemas remotos Permite que as equipes "antecipem os testes" e gerem qualidade no nível de desenvolvimento de componentes e integração de sistemas muito antes das atividades convencionais de testes de aceitação do usuário. Redução do tempo gasto com configurações e restaurações de dados em até 90%, diminuindo o tempo total do ciclo de vida de teste em 40-60%. Observe também que a heterogeneidade se aplica às ferramentas de nível de processo que as equipes usam para colaborar, e não apenas aos ativos virtualizados. É fundamental que as soluções de virtualização de serviços forneçam um substrato de "fornecedor neutro" para as ferramentas escolhidas que as equipes já podem estar usando. A virtualização de serviços deve fornecer ambientes-alvo que funcionem paralelamente às soluções do ciclo de vida de aplicativos existentes, como gerenciamento de testes, gerenciamento de defeitos/controle de problemas (TDM) e produtos de hardware e virtualização de laboratório de testes líderes de mercado que existem no ambiente. 9
10 Seção 5: Conclusão Dando os primeiros passos certos Quantas vezes você já não fez a seguinte pergunta ao seu gerente de desenvolvimento ou testes: "Por que você não entregou na data que disse que entregaria?" Só para ouvir que todos os motivos do atraso eram por causa de outras equipes e suas promessas ou desafios não cumpridos. Alguns exemplos que foram relatados para nós e que eu mesmo vivenciei são: "Sim, mas nós deveríamos ter recebido a compilação do novo sistema de gerenciamento de pedidos no mês passado, mas só o recebi na semana passada." Ou então: "Sim, mas todas as compilações novas do sistema de gerenciamento de pedidos introduziam algumas novidades que precisávamos, mas corrompiam outras coisas que já estavam funcionando." Ou: "Sim, mas o stub que a outra equipe me deu para o gerenciamento de pedidos só tem um perfil de cliente, então não posso criar nem testar os outros cenários de que realmente preciso para terminar isso." Em última análise, não podemos terminar o nosso trabalho até que as outras pessoas façam sua parte, da qual dependemos. Cada equipe associada a um aplicativo composto deve ser livre para construir seu próprio laboratório a partir da infraestrutura por demanda. Haverá inevitavelmente dependências entre as equipes. É por isso que recursos de virtualização de serviços são tão importantes. Cada equipe é livre para extrair as especificações de suas dependências de downstream e construir o estado esperado de suas dependências de downstream, antes mesmo que precise ver a primeira compilação dessas dependências. A virtualização de serviços fornece uma plataforma essencial para o desenvolvimento e os testes de softwares empresariais. Há muitos outros detalhes a considerar no planejamento de uma estratégia de capacitação de virtualização de serviços, especialmente na parte organizacional. Quem contribui para a solução e quem a consome? Quem detém e gerencia os serviços virtuais em sua organização estendida de equipes e parceiros? Uma abordagem bem arredondada de virtualização de serviços leva em conta não apenas os detalhes técnicos, mas também os operacionais que melhor podem garantir a adoção e o sucesso generalizado. Seção 6 Sobre o autor John Michelsen, CTO, CA Technologies Como diretor de tecnologia da CA Technologies, John é responsável pela liderança e inovação técnica, desenvolvendo ainda mais a comunidade técnica da empresa e alinhando sua estratégia, arquitetura e relações com parceiros de software para fornecer valor ao cliente. John detém várias patentes, inclusive de invenções líderes de mercado fornecidas em banco de dados, computação distribuída, gerenciamento virtual/na nuvem, portais de aplicativos web de vários canais e virtualização de serviços (LISA). Em 1999, John fundou a ITKO e criou a LISA do zero para otimizar os ambientes de aplicativos distribuídos heterogêneos de hoje. Sob sua liderança, a plataforma LISA de desenvolvimento ágil cresceu em tamanho 10
11 e profundidade. A empresa foi adquirida pela CA Technologies em O pacote CA LISA reformula os ciclos de vida de software dos clientes com resultados significativos. Hoje, ele oferece mais de 1000% em retorno sobre o investimento para os clientes e é uma oferta líder no mercado de virtualização de serviços. Antes da ITKO, John liderava as transformações de SaaS e comércio eletrônico para empresas globais na Trilogy e na Agency.com. Ele também fundou uma empresa boutique de software personalizado voltada para projetos de desenvolvimento de aplicativos distribuídos essenciais para clientes como American Airlines, Citibank e Xerox. John formou-se em administração e ciências da computação pela Trinity University e pela Columbus University. Ele é autor do livro de práticas recomendadas "Service Virtualization: Reality is Overrated" (disponível em servicevirtualization.com/book). Ele tem contribuído para dezenas de revistas técnicas e publicações importantes sobre temas que vão desde técnicas de bancos de dados hierárquicos e desenvolvimento ágil à virtualização. Agility Made Possible: a vantagem da CA Technologies A CA Technologies (NASDAQ: CA) fornece soluções de gerenciamento de TI que ajudam os clientes a gerenciar e proteger ambientes de TI complexos, a fim de oferecer suporte a serviços de negócios ágeis. As organizações utilizam o software e as soluções de SaaS da CA Technologies para acelerar a inovação, transformar a infraestrutura e proteger dados e identidades, do data center à nuvem. A CA Technologies tem o compromisso de garantir que os clientes alcancem os resultados desejados e o valor comercial esperado através do uso da nossa tecnologia. Para saber mais sobre nossos programas de sucesso dos clientes, visite ca.com/br/success-stories. Para obter mais informações sobre a CA Technologies, visite ca.com/br. Copyright 2013 CA. Todos os direitos reservados. Todas as marcas registradas, nomes de marcas, marcas de serviço e logotipos aqui mencionados pertencem às suas respectivas empresas. Este documento serve somente para fins informativos, e a CA não assume nenhuma responsabilidade pela precisão ou integridade das informações aqui contidas. Na medida do permitido pela lei aplicável, a CA fornece este documento "no estado em que se encontra", sem garantias de nenhum tipo, incluindo, sem limitações, garantias implícitas de comercialização, adequação a uma finalidade específica ou não violação. Em nenhuma circunstância a CA será responsável por perdas ou danos, diretos ou indiretos, decorrentes do uso deste documento, incluindo, sem limitações, perda de lucros, interrupção de negócios, fundo de comércio ou perda de dados, mesmo que a CA tenha sido expressamente informada sobre a possibilidade de tais danos com antecedência. CS3148_0113