DevOps e o Ciclo de vida de desenvolvimento de Software
O desenvolvimento de software é uma disciplina em constante evolução, que transformou a forma como interagimos com a tecnologia no nosso quotidiano. Desde aplicações móveis a sistemas empresariais complexos, o processo de desenvolvimento de software desempenha um papel fundamental na criação e melhoria das soluções tecnológicas que nos rodeiam.
Neste artigo, vamos mergulhar no mundo do ciclo de vida do desenvolvimento de software, um processo estruturado e cuidadosamente planeado que abrange desde a conceção de uma ideia até à entrega do produto final e à posterior substituição/eliminação do sistema anfitrião. Descobriremos como aborda cada etapa crucial, desde a identificação de requisitos até à implementação e manutenção, garantindo que os projetos são desenvolvidos de forma eficiente e com a máxima qualidade.
Além disso, iremos detalhar o papel fundamental que a metodologia DevOps desempenha no processo, promovendo uma cultura de colaboração e comunicação estreita entre as equipas de desenvolvimento e operações, automatizando processos e adotando uma mentalidade de melhoria contínua.
Por último, será dada especial atenção à possibilidade de englobar várias etapas diferentes do ciclo de vida do código numa única solução. Trata-se de um objetivo ambicioso, mas altamente benéfico, que está a crescer entre as empresas do sector, devido à capacidade de atingir um nicho de mercado mais vasto e de proporcionar uma centralização que traz inúmeros benefícios para o utilizador final.
O que é o ciclo de vida e o porquê da sua importância
Também conhecido como SDLC, que significa Software Development Life Cycle. O ciclo de vida do desenvolvimento de software é uma representação do processo completo que um projeto de software segue desde a sua conceção até à sua conclusão e posterior manutenção.
Embora existam diferentes ciclos de desenvolvimento de software, a norma ISO/IEC/IEEE 12207:2017 estabelece que:
“Um quadro comum para os processos do ciclo de vida dos programas informáticos, com uma terminologia bem definida, ao qual o sector do software se pode referir. Contém processos, atividades e tarefas aplicáveis durante a aquisição, fornecimento, desenvolvimento, funcionamento, manutenção ou eliminação de sistemas, produtos e serviços informáticos. Estes processos de ciclo de vida são levados a cabo através do envolvimento das partes interessadas, com o objetivo final de alcançar a satisfação do cliente“.
A sua importância é motivada pelo auge que o sector está a viver, impulsionado pela digitalização do mundo em que vivemos, provocando o aumento da procura de profissionais e a necessidade de definir processos ótimos e normalizados.
Quais são as etapas?
Depois de termos estabelecido o que é o ciclo de vida e porque é importante no que diz respeito ao desenvolvimento de software, vamos detalhar em que etapas está dividido e qual é o objetivo de cada uma delas.
Planeamento
Esta etapa inicial centra-se em identificar o alcance do projeto e dos seus requisitos para a sua análise posterior. O objetivo desta etapa é compreender a finalidade do projeto e as necessidades do cliente e conhecer os seus resultados desejados. Serão determinados objetivos SMART: Específicos (Specific), Mensuráveis (Measurable), Atingíveis (Achievable), Realistas (Realistic) e Temporais (Time-bound).
Conceção
Uma vez analisada a informação descrita na etapa anterior, serão determinados os passos a dar para atingir esse objetivo – o “como” da realização de um projeto. Será elaborado um modelo abstrato do sistema a construir com base nos requisitos definidos na fase anterior. Este modelo fornece detalhes do software a desenvolver, incluindo as arquiteturas do sistema, as estruturas de dados, a conceção da interface do utilizador e outros aspetos técnicos necessários para implementar o sistema. Será estabelecida uma repartição dos custos, dos prazos e dos marcos, bem como dos materiais e da documentação necessários. Esta etapa implica também o cálculo e a previsão dos riscos, a implementação de processos de mudança e a definição de protocolos.
Implementação
Nesta fase do ciclo de vida, efetua-se o arranque do produto de software, ou seja, é gerado o código fonte na linguagem de programação escolhida e adequada ao nosso projeto.
Testes
Uma vez terminado o processo de desenvolvimento e implementação, inicia-se a fase de testes, que consiste em testar o projeto implementado. Nesta etapa são testados os erros que possam ter surgido nas etapas anteriores. É uma fase de correção, eliminação e aperfeiçoamento de possíveis falhas, não previstas nas etapas anteriores. Para o efeito, é comum a realização dos seguintes processos: testes unitários, testes de integração, testes de sistema e testes de aceitação.
Implantação
Uma vez que o software tenha passado satisfatoriamente nos testes, procedemos à sua implementação no ambiente pretendido, quer se trate de um ambiente de pré-produção ou de produção. Isto dependerá da casuística do cliente e terá um fluxo de trabalho associado.
Manutenção
Neste período, o software já está a funcionar. Com o tempo, algumas funções podem tornar-se obsoletas, podem ser detetadas algumas limitações ou podem surgir propostas que melhorem a estabilidade do projeto, pelo que é necessária uma fase de manutenção. Isto implica realizar correções de erros, atualizações periódicas do software ou a implementação e aplicação de melhorias.
Qual é a importância da metodologia DevOps?
A metodologia DevOps é uma abordagem de desenvolvimento de software que procura integrar a colaboração e a comunicação entre as equipas de desenvolvimento (Dev) e de operações (Ops), para conseguir uma entrega de software mais rápida, eficiente e fiável.
Observando as etapas do ciclo DevOps na imagem acima, elas são muito semelhantes às etapas que compõem o ciclo de vida do software. Por
outras palavras, a metodologia DevOps engloba o ciclo de vida do software, acrescentando uma mudança de mentalidade que melhora consideravelmente a eficiência e a comunicação entre a equipa de desenvolvimento e as operações. Tal como é definido coloquialmente, o DevOps é o óleo que faz com que as engrenagens girem de forma ótima.
As melhorias e a forma como são alcançadas são descritas a seguir:
- Colaboração: promove-se a todo o momento a cooperação entre as diferentes áreas da organização, envolvendo toda a equipa em cada uma das etapas.
- Automatização: o objetivo é eliminar a ação humana de todos os processos repetitivos, conseguindo assim um aumento exponencial da fiabilidade em processos críticos, como a implementação de software num ambiente produtivo, e reduzindo os momentos de tensão entre as diferentes áreas. Este ponto é vital para a melhoria das relações interpessoais.
- Integração contínua (CI): tem como objetivo automatizar e facilitar a integração frequente das alterações ao código-fonte de um projeto num repositório partilhado. No fundo, procura garantir que o código novo ou modificado seja incorporado ao código existente de forma regular, para que os erros, tanto na qualidade do código como na segurança, e os potenciais conflitos possam ser rapidamente detetados e resolvidos.
- Entrega Contínua (CD): alarga o conceito de integração contínua, automatizando a implementação das aplicações no ambiente pretendido após testes bem sucedidos. No caso de estes testes não terem sido positivos, o processo de entrega contínua será bloqueado até que estes resultados cumpram os requisitos definidos. Este aspeto é fundamental para conseguir um controlo exaustivo do código-fonte que é implementado em ambientes produtivos, uma vez que esta tarefa se torna mais complicada à medida que evoluímos para equipamentos/infraestruturas mais complexos.
- Escalabilidade e flexibilidade: A metodologia DevOps adapta-se bem a ambientes de desenvolvimento ágeis e sistemas distribuídos, permitindo a adaptabilidade conforme necessário e a implementação automatizada de aplicações em ambientes complexos.
- Monitorização: O DevOps promove a observabilidade e a revisão constante do desempenho das aplicações e dos servidores onde estas estão alojadas. O objetivo deste processo é recolher o máximo de informação possível sobre o sistema, de forma a poder antecipar o aparecimento de futuros problemas reais. Se não for possível antecipar o erro, o objetivo é resolvê-lo no mais curto espaço de tempo possível, através de processos automatizados que reduzem consideravelmente o tempo de implementação da solução.
Um novo desafio surge no horizonte
O ciclo de vida do desenvolvimento de Software é um “grande bolo”, o qual se encontrava claramente dividido pelas suas etapas e em cada uma delas havia um grupo de empresas encarregadas de resolver os problemas existentes.
Como vimos acima, cada etapa está relacionada entre si, mas é suficientemente diferente das demais para que uma dessas grandes empresas não consiga englobar mais de uma, devido à complexidade envolvida.
No entanto, atualmente, surgiram empresas que procuram atingir esse objetivo. Dois exemplos claros são o GitHub e o GitLab, entre outros, que nasceram como ferramentas de controlo de versões baseadas no git. Na sequência do que foi dito, estes exemplos pertenceriam inicialmente à etapa de implementação, mas, longe de serem classificados, optaram por abrir mercado e abranger etapas posteriores. No caso do GitLab, optaram por dar um passo em frente e incluir também a etapa de planeamento, uma etapa que é bastante dominada por ferramentas de ticketing como o Jira, ou Confluence para documentação.
Com esta mudança de mentalidade, para além de aumentar as receitas ao conseguir chegar a um público-alvo mais vasto, há uma série de vantagens a considerar:
- Homogeneização: a diversidade de aplicações dentro da arquitetura é eliminada, proporcionando ao utilizador final uma melhor experiência e tornando o seu dia a dia muito mais cómodo ao ter apenas uma solução com um único domínio. Elimina-se assim a necessidade de procurar soluções baseadas num protocolo LDAP, que permitam a gestão dos utilizadores a várias aplicações diferentes de uma forma centralizada.
- Eliminação dos processos de integração: ao englobar um grande número de processos numa mesma aplicação, elimina-se o esforço associado à configuração e posterior manutenção das integrações entre as diferentes aplicações.
- Redução do custo associado à manutenção das diferentes aplicações: ao dispor de uma única solução, deixa de ser necessário manter um conjunto de aplicações, cada uma com as suas particularidades e correspondente manutenção.
- Redução dos pontos de falha e melhoria do desempenho: ao serem englobados na mesma solução, reduzem-se os pontos fracos onde podem surgir erros, bem como se eliminam os atrasos gerados pela comunicação entre aplicações, melhorando assim o desempenho do processo.
- Melhoria exponencial da rastreabilidade: ao centralizar vários processos numa mesma solução, é possível acompanhar todo o processo de uma forma mais intuitiva e simples. Existe a possibilidade de traçar uma linha completamente clara entre a geração do ticket durante uma sessão Scrum e a implementação do código no ambiente de produção.
- Big data: aumenta a capacidade de extrair informações relacionadas com os processos, o que permitirá criar gráficos de ‘value stream’ e métricas DORA, a partir dos quais os utilizadores poderão encontrar pontos de melhoria e alcançar um processo muito mais eficiente.
- Reduzir a dívida técnica: A dívida técnica tem sido normalmente associada à área de desenvolvimento de código, mas é muito importante relacioná-lo com a arquitetura utilizada e as suas possíveis falhas. Tendo em conta o exposto, uma solução única evita funções redundantes, custos duplicados e sobrecarga operacional. Facilita também a gestão da aplicação, o que tem um impacto positivo na experiência dos programadores.
Como resultado desta evolução, surge o conceito de Plataforma DevOps, que é definido como um conjunto de ferramentas, práticas e serviços que permitem às equipas de desenvolvimento e operações colaborar eficazmente e automatizar o ciclo de vida do desenvolvimento, proporcionando um ambiente unificado onde as equipas podem trabalhar em conjunto de forma mais eficaz, automatizar processos-chave e melhorar a eficiência no desenvolvimento e operação de software.
Em alternativa, uma cadeia de ferramentas DevOps fragmentada requer a integração entre as diferentes ferramentas para funcionar de forma orquestrada, uma manutenção (incluindo a aplicação de patches e a atualização para a versão mais recente) e ajustes constantes ao nível da configuração.
Estas tarefas morosas retiram tempo ao trabalho quotidiano efetivo, minimizando o valor entregue ao cliente final. Os fornecedores de Plataformas DevOps têm como objetivo acelerar a entrega de valor ao cliente, oferecendo um conjunto de capacidades geridas e totalmente integradas com suporte nativo para a orquestração.
O custo real do DevOps
Vamos efetuar um exercício de estimativa que nos permite comparar o custo de uma cadeia de ferramentas DevOps com o custo de uma Plataforma DevOps.
Esta hipótese será efetuada pensando numa empresa com 100 programadores e um orçamento anual para desenvolvimentos de $140.000. A empresa tem um modelo DevOps eficiente, que lhes permite efetuar entre 5 e 15 entregas diárias. Este modelo DevOps suporta diferentes tecnologias e linguagens de programação.
O custo aproximado de uma plataforma DevOps
Fazendo um cálculo genérico das diferentes opções de Plataformas DevOps existentes no mercado atual, o valor médio de uma subscrição ascende 25$/utilizador/mês, o que significa um custo anual de 30.000$ para uma equipa de 100 pessoas.
A manutenção de uma plataforma DevOps em modo SaaS é paga pelo fabricante, pelo que o utilizador não tem de suportar este custo. Note-se que isto mudará se a empresa que consome o produto optar por uma solução autogerida, caso em que a empresa será responsável pela manutenção e os custos aumentarão.
O custo aproximado de uma cadeia de ferramentas
Uma vez que cada empresa pode utilizar uma combinação diferente de ferramentas opensource/empresariais para cobrir todo o ciclo de vida do desenvolvimento do código, escolhemos, de entre as opções possíveis, a mais comum, composta por:
- Ferramenta de ticketing, na qual dispomos de um inventário de tarefas, que descrevem claramente as diferentes ações a realizar e o estado em que se encontram.
- O controlo de versões de código, uma ferramenta essencial no desenvolvimento de software e na gestão de projetos colaborativos. A sua principal função é rastrear e gerir as diferentes versões dos ficheiros e do código-fonte ao longo do tempo.
- Controlo da qualidade do código, concebido para analisar e avaliar o código-fonte de um programa de software, a fim de identificar problemas, aplicar boas práticas de programação e melhorar a qualidade geral do código.
- Controlo da segurança, soluções concebidas para proteger sistemas informáticos, redes, aplicações e dados contra ameaças e vulnerabilidades. Estas ferramentas abordam uma vasta gama de riscos cibernéticos, desde ataques de malware e hackers até problemas de conformidade regulamentar.
- Motor de CI/CD, uma ferramenta ou plataforma que automatiza e facilita o processo de integração, testes e entrega de código no desenvolvimento de software.
- Armazenamento de artefactos, repositório centralizado onde são armazenados e geridos os componentes de software gerados durante o processo de desenvolvimento, compilação e construção de um projeto.
Existe um custo associado à manutenção de cada um dos componentes da cadeia que nem sempre é contemplado (opensource, ou empresarial para o qual não está incluído o custo de licenciamento), pois é normalmente diluído noutras atividades e que resulta num valor de aproximadamente $37.000.
Se o compararmos com o valor obtido de uma plataforma DevOps, não é tão diferente como se poderia pensar, e pode até ser menor. Mas o custo está lá, e por isso é aconselhável fazer cálculos que permitam tomar uma decisão correta sobre o que é mais benéfico.
Para onde se dirige o mercado?
Nesta altura, colocam-se várias questões no horizonte: qual será a opção preferida pelos consumidores? Haverá uma mudança de mentalidade em relação à utilização de plataformas DevOps?
Prevê-se que a utilização de plataformas DevOps aumente exponencialmente nos próximos anos. Impulsionadas pelo crescimento do sector, as organizações precisam de modernizar as suas aplicações, o que exige uma mudança fundamental nas ferramentas subjacentes. As plataformas DevOps serão cada vez mais procuradas à medida que as organizações adotarem práticas ágeis e DevOps com o fim de poderem fornecer diversas aplicações, incluindo aplicações nativas na cloud, aplicações móveis, web Edge e IoT.
De acordo com uma estimativa da Gartner, até 2027, 75% das organizações terão mudado de várias soluções para plataformas DevOps, a fim de agilizar a entrega de aplicações, contra os 25% atualmente (2023).
A Gartner também utiliza o seu quadrante mágico para estimar quais são os principais players e avalia-os com base nos seus pontos fortes e fracos, definindo quais as soluções que são referência no sector e quais poderão vir a sê-lo no futuro.
Autor: Hugo Mendiguchia Gutierrez