DevOps para aplicativos móveis desafios e melhores práticas

Nos últimos cinco anos, muitos segmentos de mercado lutaram para adaptarem-se à grande mudança de comportamento de usuários de aplicativos de negócio com a adoção, por milhões de pessoas no mundo todo, de dispositivos móveis como o principal meio de acessar a Internet. Essa mudança crucial no comportamento do usuário é uma forte motivação para as empresas desenvolverem canais móveis para aplicativos de negócio existentes e para planejar novos tipos de aplicativos que possam usar as características exclusivas dos dispositivos móveis. Como ocorre com todas as grandes revoluções no segmento de mercado de TI, os primeiros anos dessa mudança viram uma atividade frenética para atender à demanda e criar presença de mercado sem considerar questões mais estratégicas, como custos de desenvolvimento, capacidade de manutenção, qualidade e segurança do aplicativo. Conforme o mercado de aplicativos móveis amadurece, e a corrida inicial ao mercado se estabiliza, agora é possível enfatizar essas questões de desenvolvimento de software mais abrangentes.

Neste artigo, discutimos os desafios de integrar aplicativos móveis na empresa e apresentamos 10 melhores práticas para DevOps móvel. Começamos com uma visão geral de DevOps e explicamos alguns dos desafios específicos — e a necessidade — de integrar aplicativos corporativos móveis em uma oficina de DevOps. A seguir, apresentamos 10 melhores práticas para implementar DevOps em um fluxo de trabalho que una integração contínua, teste e monitoramento de aplicativo e entrega de aplicativo móvel.

O que é DevOps?

DevOps não é uma técnica nem um processo, mas uma abordagem para habilitar a entrega contínua de aplicativo da concepção à produção. Antes do surgimento do DevOps, o padrão para organizações corporativas era manter equipes separadas de desenvolvimento e operações. A falta de comunicação e colaboração entre as equipes era, de muitas formas, um desafio ao crescimento e à inovação na empresa. A separação do desenvolvimento e das operações era problemática para empresas que adotavam desenvolvimento agile, uma vez que usar metodologias agile aumentava muitas vezes o número de novas construções de aplicativo para desenvolver, testar e implementar. Em vez de entregar uma nova criação à equipe de operações em uma frequência regular, os desenvolvedores podiam produzir criações em algumas horas e entregar candidatos a release a frequências muito maiores.

O movimento DevOps iniciou com as equipes de desenvolvimento e operações que se uniram para abordar com mais eficiência os desafios da entrega contínua de aplicativo. Um objetivo inicial era “mudar para a esquerda” as responsabilidades das operações, envolvendo as operações muito mais cedo no ciclo de vida de entrega de software. A seguir, os desenvolvedores foram incentivados a codificar aplicativos com preocupações operacionais em mente desde o início. De fato, DevOps coordena os conjuntos de interesses e conhecimento de desenvolvedores e gerentes de operações usando os princípios de desenvolvimento enxuto para que o processo de integração e entrega contínuas seja mais eficiente.

A IBM assume uma visão holística de DevOps, definindo-o como a capacidade corporativa de entrega contínua de software, que permite que os clientes aproveitem as oportunidades de mercado e reduz o tempo para obter o feedback do cliente.

O principal termo nessa definição é entrega contínua. Entrega contínua significa implementar software e o ambiente no qual ele executa, automaticamente e on demand, em qualquer estágio do ciclo de vida de entrega de software. Em entrega contínua, é possível implementar qualquer coisa: — de simples alterações de configuração até alterações de código incrementais e alterações ao esquema do banco de dados, ao ambiente ou a toda a pilha.

DevOps para aplicativos móveis

DevOps emprega os mesmos princípios básicos, esteja você codificando aplicativos da web corporativos ou aplicativos móveis. Inclua a equipe de desenvolvimento móvel ao adotar DevOps para a empresa, mesmo que a equipe móvel seja uma pequena parte da sua empresa ou siga um processo de desenvolvimento de software diferente. Isso é especialmente verdadeiro ao desenvolver aplicativos móveis como um frontend a aplicativos e serviços corporativos existentes. Também é verdadeiro tanto para aplicativos voltados ao consumidor ou feitos para uso interno.

Aplicativos móveis que interagem diretamente com aplicativos e serviços corporativos precisam ser cidadãos de primeira classe no ciclo de vida do DevOps. Conforme novos recursos são adicionados ao aplicativo ou serviço corporativo, as equipes podem integrá-los continuamente ao aplicativo móvel.

O desafio do DevOps móvel

Embora os princípios básicos do DevOps sejam os mesmos para aplicativos corporativos e móveis, os aplicativos móveis apresentam desafios específicos ao DevOps. Esses desafios incluem:

  1. Suporte a várias plataformas

Aplicativos móveis não têm um único objetivo ambiente. A maioria dos aplicativos móveis é voltada para vários dispositivos, o que significa lidar com diversos aspectos técnicos, versões de sistema operacional e formatos. O Android é conhecido pela sua fragmentação, uma vez que cada fornecedor de dispositivo bifurcou o sistema operacional para seus próprios dispositivos (exemplos incluem Android para Nexus, Android para Kindle Fire e Android para Nook). Concorrentes mais novos, como BlackBerry 10, Windows® Phone 8, Ubuntu e Firefox agora estão fragmentando ainda mais o mercado de Android. Da mesma forma, o iOS, que antes era muito padronizado, hoje possui diversas variantes. Um aplicativo para iOS precisa ter suporte para diferentes versões do sistema: o formato para iPhone 4S e inferiores, o formato para iPhone 5 e os formatos para iPad e iPad mini.

  1. Aplicativos móveis como um frontend corporativo

Aplicativos móveis, especialmente business-to-consumer (B2C) corporativos ou business-to-employee (B2E), geralmente têm pouca lógica de negócios no dispositivo móvel em si. Em vez disso, um aplicativo móvel business-to-consumer ou business-to-employee atua como um frontend para um ou mais aplicativos corporativos já em uso pela empresa, como sistemas de processamento de transações, sistemas de recursos humanos de funcionários ou sistemas de aquisição do cliente. A Figura 1 destaca um aplicativo desse tipo com lógica de negócios limitada no aplicativo em si.

Arquitetura de um aplicativo móvel do LinkedIn

Um diagrama da arquitetura de um aplicativo mobile do LinkedIn

Fonte: Blog LinkedIn Engineering

O aplicativo móvel do LinkedIn é, na verdade, um frontend à Plataforma LinkedIn de backend, que contém os aplicativos ou serviços de Profile, Connections e Groups do LinkedIn. O aplicativo móvel, que é entregue a várias plataformas como um aplicativo nativo ou híbrido, precisa ser desenvolvimento e entregue junto com os serviços da Plataforma LinkedIn de backend. Para DevOps, o desafio é vincular de maneira holística todos os aplicativos na empresa e coordenar seus processos e ciclos de criação e release.

  1. Integração contínua e entrega contínua

Devido à forte motivação de negócios para entregar aplicativos móveis ao mercado rapidamente, os projetos de desenvolvimento móvel geralmente assumem prazos muito agressivos. É comum que um período que inclua da concepção à entrega dure alguns meses, ou mesmo semanas. A pressão para entregar aplicativos móveis rapidamente resulta na adoção de métodos de desenvolvimento agile para projetos móveis mais bem-sucedidos.

Integração e entrega contínuas são elementos importantes de praticamente todos os projetos agile. Alterações ao aplicativo entregues por desenvolvedores precisam ser processadas imediatamente para todos os sistemas operacionais móveis almejados. Se o aplicativo móvel for uma implementação híbrida ou nativa, várias construções diferentes do aplicativo precisam ser acionadas sempre que um conjunto de alterações para o aplicativo for entregue por um desenvolvedor. A instalação e a configuração do desenvolvimento para cada ambiente móvel com suporte são diferentes umas das outras. Provavelmente será necessário fornecer e disponibilizar um farm pequeno de servidores de desenvolvimento para manipular essas várias construções de sistema operacional.

  1. A loja de aplicativos

Na maioria dos casos, um aplicativo móvel não pode ser implementado diretamente em um dispositivo. Ele precisa passar por uma loja de aplicativos. A Apple começou a usar esse modelo de distribuição de aplicativos e bloqueou seus dispositivos para evitar a instalação direta de aplicativos por fornecedores ou desenvolvedores. Fabricantes de dispositivos, como a RIM, fizeram o mesmo.

A loja de aplicativos adiciona uma etapa assíncrona adicional ao processo de implementação, pois os desenvolvedores não podem implementar atualizações de aplicativo on demand. Mesmo para correções de erro cruciais, novas versões de aplicativo passam por um processo de envio e análise da loja de aplicativos. A entrega contínua se torna “enviar e esperar”.

  1. Implementação por “pull”, não “push”

A maioria das implementações tradicionais opera em um modelo “push”, através do qual as operações podem enviar por push uma nova versão de um aplicativo on demand, seja um aplicativo da web ou outro aplicativo baseado em servidor. O processo para atualizar aplicativos móveis é um processo “pull”, porém, na maioria dos casos, os usuários devem eles mesmos escolher atualizar os aplicativos. Os desenvolvedores de aplicativos móveis têm pouco controle sobre a versão do aplicativo que um usuário estabelecido mantém em seu dispositivo. De uma perspectiva do DevOps, isso significa que os serviços de backend implementados com que um aplicativo interage devem fornecer suporte contínuo para releases anteriores do aplicativo móvel.

  1. Para aplicativos do consumidor, falhar não é uma opção

Nada é mais prejudicial a uma marca que um aplicativo com uma classificação de uma estrela, especialmente quando essa classificação é transmitida por meio de uma loja de aplicativos. Usuários de aplicativos móveis consumidores insatisfeitos podem se tornar públicos e visíveis rapidamente, não importa se o aplicativo é comprado ou gratuito. Embora as reclamações sobre problemas com um website sejam comunicadas à central de suporte técnico, as reclamações sobre aplicativos móveis são transmitidas via loja de aplicativos para todos verem. Aplicativos móveis devem passar por amplos testes funcionais, de usabilidade e desempenho para garantir sua qualidade.

As 10 melhores práticas para DevOps móvel

Com base nos desafios específicos de aplicativos móveis, recomendamos 10 melhores práticas de DevOps para aplicativos móveis. Essas práticas se enquadram em três categorias amplas de capacidades, ou seja:

  1. Integração contínua e entrega contínua
  2. Teste e monitoramento
  3. Entrega de aplicativo móvel

O objetivo é usar as 10 melhores práticas para criar um pipeline de entrega que habilite essas três capacidades, ao mesmo tempo que abordam os desafios específicos dos aplicativos móveis.

Integração contínua e entrega contínua

  1. Garantir rastreabilidade de ponta a ponta em todos os ativos

O valor da rastreabilidade em todos os ativos de desenvolvimento e QA não é mais assunto de debate. Uma equipe de desenvolvimento de aplicativo móvel deve garantir a rastreabilidade de ponta a ponta de todos os ativos de desenvolvimento, — como código, configurações, scripts, infraestrutura como código, scripts de teste, documentos de design. Também é fundamental que a rastreabilidade não esteja limitada a ativos de desenvolvimento móvel. Ela deve se estender para aplicativos e serviços corporativos com que os aplicativos móveis se integrem, aos quais se conectem ou que acessem.

  1. Integração contínua prática

Práticas de desenvolvimento agile defendem a integração contínua, o que significa executar construções frequentes e integrar continuamente novo código ao que já desenvolvido por outras equipes — tanto móveis quanto corporativas. A integração contínua garante que o código entregue por uma equipe de desenvolvimento funcione com código e módulos entregues por outras equipes de desenvolvimento. A integração geralmente é realizada continuamente para aplicativos móveis. Também deve ser realizada periodicamente com os componentes do lado do servidor não móveis que compreendem o backend acessado pelo aplicativo móvel em desenvolvimento.

Para aplicativos móveis, as equipes de desenvolvimento compartilham servidores de criação e integração centrais para o código do aplicativo móvel que atende todas as plataformas móveis almejadas. Automatizar o processo de criação e desenvolvimento garante desenvolvimentos de integração contínua rápidos e confiáveis, realizados em servidores de criação, ou server farms, para todas as plataformas com suporte.

  1. Mantenha áreas de desenvolvimento e integração separadas para cada versão do SDK do sistema operacional móvel com suporte.

A fragmentação no espaço do dispositivo móvel vai além de apenas os quatro sistemas operacionais móveis principais de iOS, Android, Blackberry e Windows Phone. Cada um desses sistemas operacionais também é fragmentado internamente. A Apple bifurcou seu próprio iOS para dar suporte ao iPad. O Android possui variantes para quase cada dispositivo. O BlackBerry 10 da RIM é um novo sistema operacional com relação limitada com o sistema operacional legado do BlackBerry. O Windows Phone 8 é uma grande reformulação de versões anteriores do Windows Phone. Diversas plataformas móveis novas estão surgindo também, incluindo de Ubuntu e Firefox. Como resultado, os desenvolvedores de aplicativos móveis devem escrever diversas variantes de aplicativos para dar suporte a cada plataforma almejada e suas variantes, mesmo que sejam voltados apenas para uma plataforma. Todo aplicativo móvel requer diversas versões do SDK.

Para garantir a separação de código e das capacidades específicas para cada plataforma almejada, os desenvolvedores devem manter “fluxos” de desenvolvimento separados para cada versão específica da plataforma de um aplicativo móvel. Essa divisão requer manter áreas de integração e criação separadas para cada plataforma almejada. Se fosse um aplicativo para Android, os desenvolvedores precisariam ter fluxos separados para Kindle Fire, Nook HD, Nexus e outros sistemas operacionais.

  1. Usar scripts de desenvolvimento e implementação automatizados

Desenvolvedores móveis estão acostumados a usar um IDE para executar criações manualmente. Eles costumam executar desenvolvimentos manualmente e, em alguns casos, para diferentes plataformas almejadas. Conforme a complexidade e o número de construções aumentam, os desenvolvedores podem configurar construções automatizadas usando scripts para executar as construções conforme o necessário em servidores de criação separados. Eles gerenciam scripts de criação e atribuem versões do mesmo modo que código, garantindo que cada criação possa ser reproduzida a qualquer hora e por qualquer membro da equipe.

Teste e monitoramento

  1. Teste cada criação por completo com o máximo de automação possível em dispositivos físicos ou simulados

Automação de teste é uma área em que o desenvolvimento de aplicativo móvel ficou para trás em comparação a aplicativos corporativos. A maioria dos desenvolvedores móveis testa amplamente em um simulador, mas não em dispositivos físicos. Até mesmo testar em um simulador é principalmente um processo manual. Por causa da velocidade do desenvolvimento e da natureza agile inerente do desenvolvimento móvel, o teste de regressão funcional automatizado é a única maneira real de garantir a qualidade. Dada a variedade de plataformas e formatos com suporte, não é possível realizar testes manuais suficientes. Além disso, para aplicativos corporativos, sejam para o cliente ou para funcionários, baixa qualidade não é aceitável.

Teste todos os aplicativos com ferramentas de teste automatizadas, em simuladores fornecidos pelos SDKs, e todos os dispositivos físicos reais com suporte.

  1. Virtualize e simule serviços de backend que não estejam disponíveis durante o teste de aplicativo móvel

Aplicativos móveis seguem um rápido processo de desenvolvimento, o que pode resultar em muito mais liberações em comparação a aplicativos e serviços corporativos de backend. Esse rápido desenvolvimento pode manter os aplicativos móveis tecnicamente à frente da curva de aplicativos corporativos, o que significa que eles possuem recursos mais novos que ainda não têm suporte em aplicativos e serviços corporativos de backend. Mesmo quando serviços de backend estão disponíveis, eles podem custar dinheiro ou recursos para serem testados. Por exemplo, serviços SaaS normalmente têm um custo de pagamento por uso, mesmo para teste. De modo similar, serviços hospedados em System z (mainframe) custam MIPS. As equipes de desenvolvimento podem solucionar esse problema virtualizando (simulando) serviços de backend. Todo o ecossistema de aplicativos, serviços e origens de dados com que o aplicativo móvel precisa interagir pode ser disponibilizado como instância virtual, simulando o comportamento dos recursos reais com que o aplicativo móvel precisa interagir. Essa organização permite rápido teste do aplicativo móvel e suas interações. Isso também economiza recursos de hardware que seriam necessários para executar instâncias reais desses serviços e aplicativos.

  1. Monitorar o desempenho dos serviços de backend e dos aplicativos móveis implementados

O maior desafio para desenvolvedores de aplicativos móveis é um aplicativo que tenha um bom desempenho tanto no ambiente de teste, mas falha no mundo real. Condições de rede não confiáveis, baixa memória e potência e perda de dados são algumas das causas subjacentes de mau desempenho do aplicativo móvel. Nem todas essas condições podem ser previstas e testadas no laboratório, de modo que é imperativo que os desenvolvedores habilitem monitoramento de desempenho de contínuo conforme os aplicativos são usados. Esse monitoramento deve ser feito na extremidade do aplicativo ou do servidor da pilha do aplicativo com que o aplicativo interage.

A falha de desempenho definitiva é quando o aplicativo para de executar nas mãos do usuário em campo. Adicionar lógica ao aplicativo que capture informações de contexto “must gather” no caso de falha, como dados de local e características do dispositivo, fornece ao desenvolvedor dados suficientes para descobrir a causa raiz da falha e corrigi-la. Lógica de análise e captura de travamento integradas são componentes essenciais dos aplicativos móveis.

Entrega de aplicativo móvel

  1. Empregue governança centralizada para perfis, certificados e chaves de API de fornecimento móvel

Se para enviar um aplicativo a uma loja de aplicativos ou usar uma API fornecida por um aplicativo interno ou externo, um desenvolvedor ou corporação identifica a autenticidade e a propriedade de um aplicativo por meio de uma chave de perfil ou fornecimento emitida pelo fornecedor. Essas chaves atuam como a aprovação de autorização para a loja ou API. Geralmente, desenvolvedores individuais recebem as próprias chaves que usam para fins de desenvolvimento. Mas para a liberação do aplicativo final, remova todas as chaves pessoais e substitua-as pelas chaves corporativas oficiais. Proteja as chaves e os perfis corporativos. Eles devem ser usados apenas para liberações de aplicativo oficiais. Processos de governança de móveis devem ser bem definidos e controlados. Acima de tudo, acesso restrito a chaves corporativas. A autorização é uma questão tanto de segurança quanto de privacidade que requer governança estrita.

  1. Use uma loja de aplicativo virtual para testar a implementação do dispositivo

Um aplicativo móvel somente pode ser fornecido a um dispositivo móvel por meio de uma loja de aplicativos do fornecedor. Geralmente, o aplicativo passa por um processo de aprovação manual antes de entrar na loja de aplicativos. Uma vez que estiver na loja, o usuário precisa “comprar” o aplicativo, que então é enviado por push ao seu dispositivo. Para testar todo esse processo, as equipes de desenvolvimento podem usar uma “loja de aplicativo de desenvolvimento privada”. Essas lojas de aplicativos virtuais (veja os Recursos) simulam o comportamento de uma loja de aplicativo real, permitindo aos desenvolvedores efetivamente testar o processo de enviar um aplicativo e fornecê-lo a um dispositivo.

  1. Converter feedback do usuário em solicitações de aprimoramento e histórias do usuário

Aplicativos móveis têm um mecanismo de feedback exclusivo via lojas de aplicativos que permite aos usuários classificar e fornecer feedback por escrito sobre eles. Um aplicativo bem aceito provavelmente receberá uma classificação de quatro ou cinco estrelas. Um aplicativo menos popular costuma receber uma classificação de uma ou duas estrelas, possivelmente acompanhada por um feedback negativo. O ciclo de feedback para aplicativos móveis não está disponível como um mecanismo centralizado formal para nenhuma outra plataforma. Os desenvolvedores costumam descobrir problemas com aplicativos de desktop apenas se um usuário telefonar para o suporte técnico ou deixar um comentário em um fórum monitorado pelos desenvolvedores. As equipes de desenvolvimento móvel devem monitorar de perto os feedbacks e classificações na loja de aplicativos e incorporar feedback em histórias de usuário, aprimoramentos e melhorias de s software futuros. É fundamental obter o máximo desse feedback de valor para melhorar continuamente os aplicativos móveis.

Conclusão

Não existe DevOps separado para aplicativos móveis. DevOps é uma abordagem que funciona para todos os aplicativos e componentes — de aplicativos móveis de frontend a middleware, componentes do servidor de backend e armazenamentos de dados. Aplique as práticas e os princípios de DevOps em todas as equipes de desenvolvimento e operações na empresa para habilitar a entrega contínua de todos esses componentes.

Aplicativos móveis têm necessidades e desafios específicos que devem ser abordados. Nossas 10 melhores práticas de DevOps para aplicativos móveis abordam essas necessidades específicas de aplicativos móveis. O objetivo dessas melhores práticas é alinhar o desenvolvimento, a garantia de qualidade e as práticas operacionais de aplicativo móvel com aplicativos corporativos padrão. Essas melhores práticas permitem que as empresas adotem o DevOps em todas as equipes de desenvolvimento móvel, entreguem aplicativos móveis de maior qualidade e habilitem melhoria contínua e inovação.

Aviso

O conteúdo aqui presente foi traduzido da página IBM Developer US. Caso haja qualquer divergência de texto e/ou versões, consulte o conteúdo original.