Desenvolva software confiável com DevOps

Conheça as melhores práticas para criar sistemas de software confiáveis e evitar os incidentes infames que afetaram tantas outras empresas recentemente.

Bob Aiello, Consultant and Technical editor, CM Best Practices Consulting (Division of Yellow Spider, Inc)

Bob Aiello é consultor, editor técnico de CM Crossroads e autor de Configuration Management Best Practices: Practical Methods that Work in the Real World, Addison-Wesley Professional. Aiello possui mais de 25 anos de experiência como gerente técnico em várias importantes empresas de serviços financeiros de Nova York, onde deteve responsabilidade por toda a empresa CM, muitas vezes prestando suporte técnico prático para ferramentas corporativas de gerenciamento de código-fonte, conformidade SOX/Coit, engenharia de desenvolvimento, integração contínua e implementação automatizada de aplicativo. Bob trabalhou como vice-líder do grupo de trabalho de Normas IEEE 828 (Planejamento de CM) e é membro do comitê gerencial Software and Systems Engineering Standards Committee (S2ESC). Aiello é mestre em psicologia industrial pela NYU e bacharel em ciência da computação e matemática pela Universidade de Hofstra. Você pode enviar um email para Aiello ou adicioná-lo.



Leslie Sachs, COO, Yellow Spider, Inc.

photo of Leslie SachsLeslie Sachs é psicóloga escolar certificada pelo estado de Nova York e COO da Yellow Spider, Inc. Leslie é coautora de Configuration Management Best Practices: Practical Methods that Work in the Real World, Addison-Wesley Professional. Sachs tem mais de 20 anos de experiência na área de psicologia e trabalhou em vários ambientes clínicos e de negócios, nos quais realizou várias intervenções para melhorar o funcionamento social e educacional de indivíduos e de grupos. Sachs é mestre em psicologia escolar pela Universidade de Pace e fez residência no Bellevue's Psychiatric Center em Nova York. Ela, que acredita firmemente que cada indivíduo é único, realizou recentemente treinamento avançado no "All Kinds of Minds" Institute de Mel Levine. Você pode se comunicar com ela via email e LinkedIn.



28/Fev/2014

Introdução

Os sistemas de software afetam quase todos os aspectos de nossas vidas. Dos portais da web que usamos para fazer compras online aos sistemas corporativos de larga escala que operam nossos negócios, nós esperamos que os sistemas de computadores forneçam várias funções, ajustem sua escala de acordo com as demandas do uso de pico e conheçam nossas preferências para poderem antecipar nossas necessidades. Quando trabalhamos com um sistema de software bem escrito, ficamos acostumados com sua eficiência e flexibilidade e ficamos surpresos quando outros sistemas não correspondem à mesma expectativa.


Erros de computador com resultados desastrosos

Como os computadores participam de várias de nossas tarefas diárias, somos especialmente afetados quando os sistemas nos quais dependemos não são 100% confiáveis. Neste artigo, discutimos as melhores práticas para criar sistemas de software confiáveis e evitar os incidentes de alta visibilidade que afetaram tantas outras empresas recentemente.

Um exemplo do Knight Capital Group

Em agosto de 2012, a Knight Capital Group, Inc. sofreou um desastroso erro de computador que se mostrou fatal para a própria existência da empresa como organização independente. Os relatos publicados indicam que, devido a uma falha ao atualizar software relacionado ao Euronext da New York Stock Exchange (NYSE), a empresa comprou acidentalmente, segundo os relatos, sete bilhões de ações indesejadas.

A Knight precisava liquidar as ações imediatamente, uma ação que resultou na perda de mais de 440 milhões de dólares. A perda cresceu, pois alguns clientes pararam de fazer negócios com a empresa, segundo especialistas do segmento de mercado, devido à falta de confiança na sua capacidade. A Knight Capital foi adquirida por outra empresa. A empresa foi à falência principalmente porque não tinha procedimentos adequados para gerenciar uma atualização de software. Esse incidente bem conhecido e dramático é apenas mais um dos recentes erros de software que afetaram sistemas financeiros, empresas de comércio, bolsas de valores e sistemas governamentais críticos, como o sistema de emergência 911 da Cidade de Nova York.

Exemplos semelhantes do mercado de ações

Alguns outros erros recentes de software tiveram consequências significativas semelhantes. Em maio de 2013, o sistema de comércio da Chicago Board Options Exchange (CBOE) foi desativado devido a um erro de software que, segundo relatos, estava relacionado a mudanças na configuração dos sistemas necessários para estender o horário de comércio. Esse incidente abriu a questão sobre se a CBOE deve ou não ser a única fonte de opções com base do índice S&P 500 e a medição VIX de volatilidade de patrimônio. Esse incidente ocorreu quando outras empresas estavam desafiando o direito exclusivo da CBOE de gerenciar esses índices de comércio e serviu para demonstrar que as bolsas de valores podem não estar aptas a continuar sendo a única fonte para essas opções.

Alguns especialistas do segmento de mercado questionaram se sistemas de computador de grande escala tornaram-se tão complexos que é impossível para uma empresa ou organização garantir que esses sistemas sejam confiáveis e não apresentem tempo de indisponibilidade. Respondemos a essa pergunta neste artigo. Sabemos exatamente como desenvolver grandes sistemas de missão crítica completamente confiáveis. De fato, muitas normas e estruturas do segmento de mercado que estabelecem melhores práticas, alinhadas com DevOps, podem ajudar a garantir um alto grau de confiabilidade em sistemas de computação.


Normas e estruturas do segmento de mercado

A IEEE, ISO e várias outras respeitadas organizações de normatização fornecem diretrizes detalhadas sobre como desenvolver sistemas confiáveis e seguros. Ao usar essas melhores práticas, é possível demonstrar que você possui controles de TI eficazes para garantir que os sistemas sejam confiáveis e estejam de acordo com a maioria dos regulamentos federais. Nesta série, iremos discutir a implementação prática das melhores práticas DevOps no contexto de normas e estruturas relevantes do segmento de mercado e explicar como implementar os procedimentos automatizados necessários em uma maneira prática e realista, que se alinha naturalmente com as práticas e princípios associados a DevOps.

Por exemplo, a Information Technology Infrastructure Library (ITIL) é um conjunto de práticas que oferecem apoio a gerenciamento de serviço de TI (ITSM) ao voltar-se para o alinhamento de serviços de TI com as necessidades dos negócios. ITIL V3, uma das estruturas mais populares, oferece orientação para garantir que seja possível manter e atualizar serviços de TI sem o risco de interrupção do serviço. ITIL descreve o sistema de gerenciamento da configuração (CMS) que é usado para rastrear mudanças em todos os itens de configuração (CIs). Também descreve o banco de dados do gerenciamento da configuração (CMDB), que fornece informações atualizadas e precisas sobre o status de CIs em sistemas de tempo de execução, em apoio ao CMS.


Suporte de requisitos do banco de dados do gerenciamento da configuração

O CMDB é um componente essencial do CMS, que oferece informações atualizadas e precisas através de procedimentos de descoberta automatizados. DevOps ajuda a manter o CMDB atualizado ao permitir procedimentos maduros de desenvolvimento. Na prática, somente é possível descobrir e identificar corretamente código de aplicativo se o código tiver sido criado usando IDs integrados de versão imutável. Portanto, esforços de engenharia de desenvolvimento precisam incluir um procedimento para integrar o ID de versão no item de configuração e para integrar o ID de versão no manifesto do contêiner, como um arquivo jar, war ou ear no qual é empacotado.

DevOps cumpre esse requisito, pois fornece a automação de desenvolvimento, liberação e implementação que permite ao CMDB fornecer informações precisas sobre o código de aplicativo ao CMS.

Teria sido possível evitar o incidente na Knight Capital Group se um CMDB pudesse descobrir as versões do código nos servidores e verificar em relação à versão esperada do CMS. Essas técnicas são possíveis apenas se as organizações de desenvolvimento e operações trabalharem juntas para desenvolver e automatizá-las no início do ciclo de vida de desenvolvimento de software.


DevOps integra qualidade à engenharia de liberação

A engenharia de liberação é a abordagem mais eficiente para desenvolver e empacotar código que pode ser verificado nos servidores de destino. Essa abordagem evita os erros que se tornaram tão comuns hoje no segmento financeiro. A implementação depende da colaboração eficaz das equipes de desenvolvimento e operações para:

  • Integrar identificação de versão
  • Criar ferramentas e processos de descoberta, executados por operações, que:
    • Verificam se o código correto foi implementado
    • Verificam se ocorreram mudanças não autorizadas devido à intenção maliciosa ou a erro humano.

Cada equipe tem um propósito particular:

  • Foco da equipe de operações: Manter serviço confiável.
  • Foco da equipe de desenvolvimento: Desenvolver novas funções.
  • Foco de DevOps: Garantir a colaboração entre a equipe de operações e a equipe de desenvolvimento para implantar esses procedimentos automatizados, para evitar erros de software devido à implementação da versão incorreta de um código no servidor de produção.

O uso de uma abordagem DevOps para desenvolver, empacotar e implementar aplicativos permite que organizações integrem a qualidade desde o começo, como defendido pelo guru da qualidade W. Edwards Deming. Se sabemos como evitar o tipo de problema que ocorreu na Knight Capital, por que mais organizações não estão adotando essas melhores práticas do segmento de mercado?


DevOps economiza dinheiro

A desculpa mais comum para não estabelecer os controles de TI necessários é que isso custa caro demais e demanda tempo demais. Em muitas organizações, prazos desafiadores e a pressão de entregar novas funcionalidades resulta no corte de custos, uma decisão que frequentemente leva a defeitos de software que vão de requisitos ausentes à introdução de erros no código base. A qualidade tem um custo, mas o custo de entregar código com defeitos também é alto e pode incluir perdas monetárias e, mais importante, a perda da confiança na própria organização.

DevOps coloca o foco principal na integração de qualidade desde o começo. Esse foco é essencial para que a empresa entregue software que funciona e que apoia os negócios.


DevOps minimiza o impacto da complexidade sobre o desenvolvimento de software

Outra desculpa comum para baixa qualidade é que o software está ficando complexo demais.

Sistemas de software estão de fato oferecendo funções mais e mais complexas. A maioria dos grandes sistemas de software não pode ser inteiramente compreendida por um único profissional de tecnologia. Todos nós trabalhamos com estruturas de software que permitem escrever código mais rápido e entregar mais funcionalidade, mas essas vantagens vêm do custo de usar componentes (escritos por outras pessoas) que não entendemos completamente.

No entanto, é possível gerenciar cada parte da solução de software de forem desenvolvidos procedimentos automatizados para desenvolver, empacotar e implementar o aplicativo. É possível criar esses procedimentos para verificar as interfaces para dependências de tempo de execução e para garantir que o ambiente esteja configurado corretamente para apoiar todos os componentes necessários, incluindo o desenvolvimento e implementação dos próprios componentes. Ao desenvolver procedimentos automatizados de desenvolvimento, empacotamento e implementação para cada componente, é possível domar e gerenciar eficazmente a complexidade geral do sistema.


DevOps gerencia dependências de desenvolvimento, empacotamento e implementação

A implementação de processos automatizados de desenvolvimento, empacotamento e implementação é um foco essencial do DevOps. Muitos desenvolvedores de software concentram-se inteiramente em trabalhar com seus ambientes de desenvolvimento integrado (IDE), como Eclipse e Visual Studio.

O problema é que eles talvez não conheçam nem entendam todas as dependências de desenvolvimento. Quando esses desenvolvedores passam para o próximo projeto, ou quando um acidente faz com que um laptop trave, a organização pode descobrir que não possui o conhecimento necessário para desenvolver, empacotar e implementar o código. É muito comum que desenvolvedores entendam apenas parcialmente suas dependências de desenvolvimento e de tempo de execução. Essa é precisamente a situação em que um engenheiro de desenvolvimento, geralmente exigido por regulamentos do segmento de mercado para separação de tarefas, pode aumentar a confiabilidade ao capturar o conhecimento necessário e automatizar o pipeline de desenvolvimento e implementação.


DevOps melhora a confiabilidade e o pipeline de implementação

O ato de automatizar a desenvolvimento em scripts garante que o conhecimento essencial das dependências de compilação e tempo de execução sejam descobertas e documentadas. O desenvolvedor pode ter se esquecido há muito de todas as configurações de ambiente configuradas no IDE, mas, felizmente, os scripts de desenvolvimento criados no Ant, Maven ou Make proporcionam uma visão clara e precisa da configuração essencial necessária para desenvolver, empacotar e implementar o código.

Poder desenvolver, empacotar e implementar confiantemente, de maneira consistente, é essencial para garantir que o sistema possa ser apoiado e modificado sem consequências acidentais e graves. Além de poder integrar confiabilidade no código, também precisamos garantir que seja possível verificar se o código correto foi implementado e, mais importante, se mudanças não autorizados devido à intenção maliciosa e erro humano foram identificadas imediatamente.


A implementação correta depende do uso de criptografia e linha de base

Após compilar e empacotar o código de aplicativo, é importante que o engenheiro de implementação verifique se o código foi implementado corretamente. Problemas podem ser apresentados aqui por muitos motivos. Às vezes o código não chega à máquina de destino como intencionado, seja por questões de permissão ou por um simples erro humano.

Nós testamos o código de aplicativo escrito e verificamos que ele atende aos requisitos e design originais, mas muitos engenheiros de implementação esquecem de verificar se o código desenvolvido foi de fato copiado para a máquina de destino. A maneira correta de lidar com isso é usar técnicas como criptografia para verificar se o código exato que foi desenvolvido foi implementado de fato nas máquinas de destino. Criptografia também pode ser usada para identificar e detectar mudanças não autorizadas, que poderiam resultar em indisponibilidade do sistema.


Mova as funções de desenvolvimento, pacote e implementação para adiante no processo

Cada uma das técnicas descritas neste artigo exige esforço e conhecimento técnico. Muitas empresas tentam implementar esses controles após o código ser implementado na produção, em um momento do processo que é simplesmente tarde demais.

DevOps dá foco apropriado à implementação do pipeline de implementação automatizado no início do ciclo de vida de desenvolvimento de aplicativo. A decisão de escrever código que possa ser verificado integra qualidade ao processo desde o começo, um princípio fundamental de DevOps eficaz.

Organizações geralmente têm equipes de engenharia de desenvolvimento que são responsáveis por automatizar o desenvolvimento, empacotamento e implementação de aplicativos do começo do ciclo de vida de software. Código, como o código que integra IDs de versão imutável descrito anteriormente neste artigo, deve ser escrito para facilitar o esforço de automação. Infelizmente, algumas organizações erram ao deixar que os desenvolvedores tratem de desenvolvimentos de aplicativo no começo do ciclo de vida de desenvolvimento de software. Isso é um erro. Se a equipe de desenvolvimento automatizar o desenvolvimento, empacotamento e implementação do código no começo do ambiente de teste de desenvolvimento, os desenvolvedores poderão aproveitar essas práticas e escrever código mais rápido. O grupo de garantia de qualidade e teste também aproveita a automatização das tarefas de desenvolvimento, empacotamento e implementação de aplicativo, pois essas técnicas automatizadas garantem que o código que é testado é igual ao código implementado. Além disso, a automatização da implementação ajuda a garantir que o aplicativo funcione e não tenha defeitos que poderiam afetar a confiabilidade do sistema. DevOps considera essa tarefa de fornecimento como sendo uma tarefa para o código.

DevOps identifica corretamente a tarefa de fornecer a infraestrutura (e fornecimento dos servidores em um ambiente de nuvem) como um esforço de código e desenvolvimento. Além disso, a tarefa de configurar servidores de maneira segura e confiável é também um esforço de código.

Da mesma forma, a tarefa de gerenciar o pipeline de implementação é um esforço de desenvolvimento de software e sistemas, que deve incluir seu próprio ciclo de vida. DevOps dá o foco certo na automação de implementação como esforço de desenvolvimento essencial. Essa abordagem exige que os engenheiros de DevOps verifiquem o próprio processo de DevOps.


DevOps verifica o próprio processo de DevOps

Seja fornecendo um servidor ou implementando um aplicativo, o esforço de DevOps deve ser tratado como um ciclo de vida de desenvolvimento, com o objetivo de criar o pipeline de implementação automatizado. Muitos praticantes da abordagem DevOps abordam essa tarefa usando práticas agile, o que melhora o processo de implementação de forma iterativa.

De fato, muitos dos primeiros entusiastas de DevOps chamavam essas práticas de administração de sistemas agile, um termo que é ilustrativo e apropriado, embora muitos de nós também tenham usado essas metodologias para apoiar esforços de desenvolvimento de cascata. Independente de a organização usar a abordagem agile, de cascata ou híbrida entre elas, a metodologia de software é fundamental.


Metodologia de software na prática

Gerenciamento de ciclo de vida do aplicativo (ALM) define as tarefas e processos empregados por todas as partes interessadas envolvidas na implementação de qualquer esforço de desenvolvimento de sistema. Um ALM bem definido, automatizado pelo uso de uma ferramenta de fluxo de trabalho, ajuda a proporcionar a clareza essencial necessária para que cada parte interessada entenda as tarefas pelas quais é responsável e para proporcionar transferência, facilitando a comunicação.


Conclusão

Os desenvolvedores concentram-se em criar novas funções. Equipes de operação concentram-se em fornecer sistemas confiáveis. Engenheiros de DevOps fornecem os princípios, práticas e procedimentos práticos para desenvolver software com qualidade integrada desde o início do ciclo de vida de software, sistemas e entrega. Essas práticas estão bem alinhadas com melhores práticas respeitadas descritas em normas e estruturas do segmento de mercado. A criação de sistemas confiáveis exige práticas e princípios que estão emergindo como parte da revolução de DevOps.

Recursos

Aprender

Obter produtos e tecnologias

Discutir

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Rational
ArticleID=964413
ArticleTitle=Desenvolva software confiável com DevOps
publish-date=02282014