menu

Melhorando a qualidade de projetos através do poder das nuvens

Seus processos de qualidade e ferramentas mudam para construir uma aplicação na nuvem? A resposta óbvia é - “depende”. Mesmo tendo a mais clara definição entre as buzzwords recentes, existem vários tipos de nuvem e muitas formas de integrá-la com sua aplicação ou processo de desenvolvimento. Se você tem um time experiente, capaz de escolhas bem informadas, então essas opções são uma grande recurso em favor da qualidade. O time pode usar a nuvem com uma ferramenta para assegurar qualidade, ao invés de torná-la apenas mais um aspecto que precisa ser testado.

O que é a nuvem?

Existem algumas poucas definições de nuvem que eu acredito serem úteis.

A primeira, do Gartner Group, descreve um caso singular de utilização que é uma ótima forma de promover qualidade da nuvem:
 

Ambiente de laboratório virtual. Esses consumidores geralmente tentam prover infra-estrutura auto-gerida para um grupo de usuários técnicos, como desenvolvedores, cientistas ou engenheiros, para o propósito de teste e desenvolvimento, computação científica ou outro tipo de computação em lote. ("Quadrante Mágico para Infraestrutura Pública de Nuvem como Serviço" - Gartner)

A natureza auto-gerida é muito importante. Se você precisa um ambiente por apenas 30 minutos para um experimento, então é um desperdício gastar mais de 30 minutos orçando ou agendando a criação de tal ambiente. Um dos meus colegas enfatiza: “Eu posso iniciar máquinas virtuais em minutos, destruí-las, e repetir esse processo quão frequentemente eu precisar. Todo o resto é infra-estrutura do passado. Se eu tenho que mandar e-mail para alguém, abrir um chamado, submeter um pedido para conseguir uma máquina virtual, etc. então é infra-estrutura do passado.”

A outra definição importante é a definição oficial de computação em nuvem do Instituto Nacional de Padrões e Tecnologia (NIST). A definição (de acordo com o sumário feito por Martin Fowler) contém:

  • Cinco características essenciais: serviço por demanda auto-gerida, ampla conectividade, resource polling, elasticidade rápida e mensurável.
  • Três modelos de serviço: software, plataforma e infraestructura (tudo como serviço).
  • Quatro modelos de instalação: privada, comunitária, pública e híbrida.

Vantagens da Nuvem em favor da Qualidade

Vejamos como podemos tirar vantagem dessas características da nuvem em favor das 8 dimensões da verificação de qualidade. Na parte I iremos examinar como a nuvem ajuda com Performance, Funcionalidades, Confiabilidade e Conformidade. Na parte II iremos descrever os efeitos positivos da nuvem em termos de Durabilidade, Serviciabilidade, Estética e Qualidade Percebida.

#1 Performance

Performance refere-se às caracteristicas primárias de operação de um produto e envolve atributos mensuráveis. Eu acredito que performance é a funcionalidade de negócio #1. Têm havido muitos estudos mostrando que mesmo a menor redução de performance pode ter um grande impacto no negócio. A nuvem ajuda você a manter sua performance de várias formas.

a. Resource pooling e elasticidade rápida lhe dá uma extra força quando você precisa, e sem gastar mais do que o necessário.

Já que elasticidade rápida é uma característica essencial de computação em nuvem, você tem a opção de adicionar mais recursos computacionais para atender picos de utilização ou acompanhar tendências recorrentes na demanda.

Por exemplo, você pode ter mais servidores rodando durante finais de semana do que nos finais de semana. É possível fazer esses ajustes finos sem sair do orçamento, porque outra característica essencial - ser mensurável - permite que você seja cobrado por hora (ou mesmo em intervalos menores de tempo) pelos recursos.

b. Ampla conectividade e Redes de Distribuição de Conteúdo (CDN) permite você estar mais póximo de seus clientes e parceiros de negócio.

A característica de estar amplamente disponível globalmente torna fácil tirar vantagem de redes de alta velocidade, rápidos serviços de resolução de nomes (DNS), e CDNs como Akamai para acelerar sua aplicação. Isso é especialmente importante para aplicações móveis, onde redes são mais lentas, onde cada byte ou milisegundo de latência entra na conta.

Um CDN pode ajudar você a cachear conteúdo próximo de seus usuários, comprimir seu conteúdo, e garante que o mesmo suporta requisições condicionais. Todas essas medidas podem tornar seu site significantemente mais rápido.

c. Empresas de “Testing as a Service” permitem que você possa rapidamente alocar mais recursos e rodar testes de perfomance.

Existem muitos serviços na nuvem que ajudam a testar ou aumentar a performance de seu site. É difícil e caro criar seu framework para testes de performance com o poder de rapidamente aumentar as requisições para simular um grande número de usuários. Geralmente frameworks caseiros passam por problemas porque eles enfrentam desafios relacionados a rede e performance antes mesmo da aplicação a ser testada, ou porque faltam funcionalidades para simular usuários de outras parte do mundo, ou por conexões lentas. Ao invés de criar, é possível usar um serviço como o Blitz.io. Blitz pode de forma econômica simular 1000 usuários na rede de sua escolha por 1 minuto ou mesmo escalar isso para 50000 usuários por 20 minutos.

Se você precisa testar um fluxo mais complexo, você pode usar algo como BlazeMeter, que permite rodar testes com JMeter ou Selenium a partir da nuvem.

#2 Funcionalidades

Funcionalidades são características adicionais para tornar um produto ou serviço mais atraente e entregar mais valor para o usuário. Todavia, essa é apenas uma hipótese até que você ponha a funcionalidade na frente de usuários reais e valide seu valor. Funcionalidade que é bem testada mas não útil não é uma funcionalidade, é uma "inutilidade de alta qualidade". A nuvem pode ajudá-lo a não tornar seu produto "bloated" e rapidamente testar quais funcionalidades estão implementadas corretamente.

a. Ferramentas na nuvem permitem você sempre ter poder de teste suficiente.

Para testar funcionalidades rapidamente, você pode tirar vantagem das características elásticas da nuvem. Você pode usar ferramentas como [jclouds-jenkins] para se certificar que seu pipeline de Entrega Contínua pode lidar com um pico em commits sem ficar sem máquinas. Você pode usar ferramentas como Vagrant (com sua escolha de providers como VMWare ou vagrant-rackspace, e provisionamento com Puppet, Chef ou Ansible) para rapidamente criar um ambiente de testes e destruí-lo assim que os testes terminarem. Você também pode usar serviços de teste Saas, como SauceLabs, Appium, Xamarin, Appium ou Soasta, para tornar a execução de testes mais rápida através de paralalização ou mais abrangente rodando contra vários browsers ou dispositivos móveis.

b. Os vários modelos *aaS lhe dá várias opções de contruir-vs-comprar. IaaS toma controle completo, PaaS lhe permite evitar algumas decisões arquiteturais, DBaas, Logging-as-a-Service, etc. deixa certo "aspecto" de sua aplicação a cargo de um fornecedor.

Uma estratégia para evitar desperdício é manter sua aplicação focada em resolver o problema específico de seu domínio, e confiar em parceiros SaaS para serviços relacionados. Um bom exemplo é o envio de e-mail. Não é tão fácil processar rapidamente um template de e-mail e enviá-lo para um grande número de interessados. Adicione a isso, a necessidade de processar pedidos de usuários que não querem mais receber e-mails, reclamações de spam, agendamento de campanhas via e-mail, analytics e muito mais. Provedores como Mailgun lhe permitem terceirizar esses problemas e focar em seu negócio. Existem provedores disponíveis para várias necessidades auxiliares, tais como, processamento de video através do Zencoder ou processamento de pagamento com o Paypal.

c. Deployments fáceis tornam testes A/B, MAB (Multi-Armed Bandit), e outras opções mais viáveis.

Aplicações como Mailgun suportam analytics e testes A/B, dois métodos que ajudam a garantir a qualidade das funcionalidades entregues. Analytics, A/B e testes multivariados tornam possível experimentos para verificar quais funcionalidades ou conteúdo proveem mais valor. Outros serviços na nuvem que ajudam a implementar esses experimentos incluemGoogle Analytics Content Experiments, Optimizely and Visual Website Optimizer. Você também pode integrá-los diretamente em sua aplicação, usando bibliotecas como a Ruby gem split.

Usando essas técnicas, você pode:

  • Otimizar a relação funcionalidade-desperdício utilizando A/B ou testes multivariados para provar que novas funcionalidades entregam valor antes de decidir por lançá-las para todos os usuários.
  • ​Minimiza a quantidade de código auxiliar e testes que você mantêm através da utilização de serviços como Mailgun e Zencoder.
  • Rapidamente testa as funcionalidades restante através de escalonamento elástico da infraestrutura de teste ou utilizando serviços na nuvem de provedores de testes.

A razão pela qual recomendamos tantas soluções SaaS é porque eles são altamente confiáveis. PayPal compartilhou que a infraestrutura de nuvem é o segredo para a confiabilidade de seu serviço.

#3 Confiabilidade

Confiabilidade é a probabilidade de um produto não falhar dentro de um período específico de tempo, algo que pode ser especialmente crítico para certos domínios. Confiabilidade pode ser a dimensão da qualidade onde a nuvem provê a maior vantagem. Mesmo que componentes individuais na nuvem possam falhar, a nuvem torna fácil "projetar para a falha". Dessa forma você terá aplicações resilientes que podem sobreviver mesmo aos problemas mais severos.

a. A nuvem permite você distribuir sua aplicação através de múltiplos data centers ou mesmo provedores, garantindo Recuperação de Desastres.

A maioria de provedores públicos de nuvem oferecem serviços de vários data centers ao redor do mundo. Você pode tirar vantagem disso para facilmente construir uma aplicação altamente redundante ou criar vários sites para recuperação de desastre. Se isso não for suficente, você pode usar RightScale, que lhe ajuda gerenciar múltiplos serviços de nuvem no mundo inteiro, como também seus serviços de nuvem privada. Se você quiser garantir que sua aplicação nunca cairá, você pode executá-la de vários lugares do mundo com Rackspace, Amazon e com sua própria instância de OpenStack.

b. A nuvem também lhe dá habilidades de back-up e armazenamento infinito, então retenção de backup é apenas uma decisão de custo.

A nuvem torna extremamente simples gerenciar backups. Serviços Object Storage como Amazon S3 e Rackspace Cloud Files oferecem redundância de dados e armazenamento virtualmente ilimitado. Você pode simplesmente clicar (ou agendar) sempre que quiser um backup.

c. Provedores de Nuvem e empresas de *aaS oferece monitoramento de todos os tipos. 

Existem ótimos sistemas de monitoramento baseados na nuvem, então você pode detectar a deterioração de um serviço antes que isso se torne um grande problema. Você pode definir alertas de monitoramento para a maioria das infraestruturas de nuvem atráves do próprio fornecedor, e pode também integrar sua aplicação com ótimos serviços de gestão de logs comoNewRelic, Loggly ou Splunk Storm.

#4 Conformidade

Confirmidade é a precisão com a qual o produto ou serviço atende padrões específicos. A nuvem pode lhe ajudar com necessidades de conformidade ou compliance, seja evitando a necessidade de conformidade com um padrão utilizando um provedor de serviço, seja provendo infraestrutura consistente para ajudar a garantir conformidade.

a. Use opções de SaaS para evitar a necessidade de confomidade.

Geralmente, você pode delegar uma funcionalidade auxiliar para um provedor SaaS em conformidade, então você não precisa lidar com tal requerimento diretamente. Você pode usar a expertise do Mailgun para lidar com o CAN-SPAM Act, para por exemplo, certificar-se que seus e-mails terão um link para remoção da lista e um endereço físico de correio. Você pode deixar que o PayPal ou Braintree Payment Gateway lide com a maior parte das suas preocupações relacionadas a compliance PCI-DSS.

Se você precisa de auditoria forte e garantias de segurança, existem serviços como Dome9, que oferecem soluções avançadas de segurança, compliance e auditoria para sua infraestrutura de nuvem.

b. Usar uma camada de caching oferecida pela Rede de Distribuição de Conteúdo (CDN) da nuvem evita problemas com clientes gerados por não conformidade.

Não esqueçamos daqueles testes que não intimidam tanto. Você está em conformidade com IEEE ou padrões W3C? Se você está configurando servidores de cache por conta própria é possíve que um pequeno erro de configuração cause erros ou deixe mais lenta sua aplicação para alguns usuários. Se você está usando a camada de caching oferecida pelo CDN da nuvem então é improvável que eles estejam configurados de forma a causar problemas.

Ferramentas como RedBot, que "acham erros comuns de protocolo", Google Page Speed ou YSlow podem ajudar ainda mais, com verificações no caching, negociação de conteúdo e compressão.

Fique ligado na parte 2 onde nós iremos descrever os efeitos positivos da nuvem nas outras 4 dimensões de qualidade - Durabilidade, Serviciabilidade, Estética e Qualidade Percebida.