Ciclo de vida

Você sabe o que é ALM?

Atender as necessidades de negócio através do desenvolvimento de software é um desafio para qualquer desenvolvedor. Hoje em dia, devemos sempre pensar em como tornar o processo de desenvolvimento mais rápido, porém, sem perda da qualidade do software e sem com que a aderência do projeto de software ao negócio seja prejudicada. Podemos ainda somar a este cenário caótico o ciclo de desenvolvimento de um software por si só, já que escrever sistemas computacionais é uma tarefa já bastante complicada. No fim, temos a dúvida: como podemos escrever aplicações rapidamente, aderentes ao mercado e aos requisitos de negócio e ainda garantir a qualidade e a maturidade da solução?

Hoje, abordagens modernas no desenvolvimento de software (como o feedback contínuo e a entrega contínua) são importantes para que tenhamos também um bom processo de gestão do software e consigamos atingir alguns dos objetivos citados anteriormente. Dentro dessa gestão moderna,, temos algumas tendências como as práticas ágeis e o DevOps. Porém, um dos principais pontos no processo de desenvolvimento de um software com qualidade é dar a todos a visibilidade do que está sendo feito… Para auxiliar o gerenciamento do ciclo de vida de um software e no auxílio da integração de todas as operações, dando justamente esta visibilidade mais global, surgiu um conjunto de ferramentas dentro de uma prática comumente referenciada como ALM.

Gerenciamento de projetos - Fundamentos
Curso de Gerenciamento de projetos - Fundamentos
CONHEÇA O CURSO

O que vem a ser o ALM?

ALM é uma sigla para Application Lifecycle Management (Gerenciamento do Ciclo de Vida de Aplicações). O ALM refere-se ao processo de governança envolvendo a gestão, desenvolvimento e entrega de software, combinando a gerência de negócio com a engenharia de software.

O ALM é fundamentado em 3 pilares, pilares estes considerados essenciais para o desenvolvimento de qualquer software: pessoas, processos e tecnologia. É importante garantir que estes pilares estejam alinhados e devidamente integrados para que tudo ocorra de forma eficiente durante o processo de desenvolvimento, mauntenção e maturação de um software. Se esses pilares não estiverem alinhados e bem definidos, provavelmente o desenvolvimento do software não irá transcorrer com a sua máxima eficiência, seja no que diz respeito à velocidade de desenvolvimento ou à garantia de qualidade. Certamente, pessoas com um grau de comprometimento baixo com o projeto do software, a falta de processos bem definidos ou a utilização de tecnologias inadequadas, por exemplo, provocarão a criação de um software deficiente, ou até mesmo o fracasso do projeto como um todo.

Etapas de desenvolvimento de software dentro do ALM

Tradicionalmente, o ciclo de desenvolvimento de um software é dividido nas seguintes fases quando estamos tratando sobre ALM:

  • Planejamento. Nesta fase, aspectos como a viabilidade do projeto, os riscos envolvidos e os recursos que serão necessários são previamente levantados;
  • Definição. Nesta fase, estamos falando na maioria das vezes da tradicional análise de requisitos. As funcionalidades que o software deverá desempenhar são previamente levantadas e definidas de acordo com as necessidades constatadas e os recursos disponíveis (recursos estes obtidos na etapa anterior);
  • Design ou modelagem. Neste ponto, a arquitetura técnica do projeto começa a tomar forma. Diagramas UML como diagramas de classe, de componentes e de sequência são tradicionalmente utilizados nesta fase para a documentação da estrutura técnica do projeto;
  • Desenvolvimento. Esta etapa consiste basicamente na produção do código de maneira alinhada com os levantamentos da etapa anterior. O processo de acompanhamento com metodologias ágeis ou os testes a nível de unidades de software (como os testes unitários) podem ser enquadrados também nesta fase;
  • Testes. Esta fase envolve o teste do software de uma maneira mais ampla. Aqui, é verificado se o software realmente está aderente aos requisitos levantados nas fases anteriores ou se o software realiza as integrações necessárias com outros componentes adjancentes ao projeto;
  • Implantação. Neste ponto, o software é colocado “em produção” e disponibilizado para todos os usuários-alvo da solução.

É muito importante que as etapas do ciclo de vida de um software também devem estar integradas e devem “conversar” entre si, garantindo unidade e coesão ao projeto.

A relação entre automação, agilidade e o ALM

Em um primeiro momento, o ALM pode soar como algo muito engessado, chegando a ser similar a metodologias como RUP ou waterfall. Porém, a situação é completamente oposta.
O ALM tem como premissa a automação do desenvolvimento, automação esta que deve ocorrer desde os requisitos até a entrega do software. No ALM, tudo que pode ser automatizado deve ser automatizado. Essa automação permite uma visualização de todas as fases de maneira mais minunciosa, permitindo identificar quais são os gargalos presentes e se há algo que está prejudicando o desenvolvimento praticamente em tempo real. Além disso, a automatização de processos tende a dar mais qualidade para estes processos envolvidos, removendo as possíveis interações humanas que podem deturpar os processos estabelecidos.

Dentro do ALM, também temos como metodologia a integração contínua, onde os membros do time devem integrar seu trabalho frequentemente, garantindo a entrega contínua de valor ao cliente, além de permitir a este acompanhar in loco o processo de evolução do projeto. Como precisamos dessa integração de maneira constante e rápida, é importante ter processos e controles bem definidos a respeito desta integração, evitando-se possíveis erros entre diferentes versões do software, por exemplo. Assim, você poderá ter uma melhor coordenação das atividades, desde os requisitos, modelagem, desenvolvimento, teste, manutenção e tudo mais que precisar. E, logicamente, este nível de maturidade só pode ser alcançado com o auxílio da automatização de algumas destas tarefas.

Gerenciamento de Projetos - Avançado
Curso de Gerenciamento de Projetos - Avançado
CONHEÇA O CURSO

Algumas ferramentas ALM

Algumas ferramentas ALM bem interessantes e utilizadas no mercado atualmente estão descritas abaixo.

As ferramentas da Atlassian, tradicionalmente o quarteto Jira + Confluence + Stash + Bamboo são famosas por sua aderência aos processos ALM. A Atlassian é uma empresa fornecedora de várias soluções de software, como o BitBucket por exemplo. Porém, o conjunto de ferramentas oferecidos pela Atlassian para auxiliar no processo de ALM, como o quarteto citado é que dão a fama à empresa. O Jira é uma ferramenta de gestão que permite acompanhamento de tarefas e monitoramento de performance da equipe em um único lugar centralizado. O Confluence é uma espécie de wiki, funcionando como uma base de conhecimento para os diferentes projetos. O Stash oferece a possibilidade de gerenciamento de repositórios de código in company de maneira integrada ao Jira e ao Confluence. Por fim, o Bamboo é uma ferramenta de gerenciamento e execução de integração contínua e implantação contínua que funciona também de maneira integrada às ferramentas previamente citadas.

O VSTS (agora chamado de Azure DevOps Services) é uma ferramenta da Microsoft que permite o gerenciamento de todas as etapas do ciclo de vida de um software em um único local. Ele oferece suporte às diferentes etapas do ciclo de desenvolvimento de um software através de várias ferramentas visuais e não-visuais que funcionam de maneira completamente integrada. Por exemplo: temos o Azure Pipelines para controlar e realizar o processo de integração contínua e implantação contínua de maneira automatizada. Temos também o Azure Repos, que funciona como local de armazenamento e gerenciamento de código. Também temos o Azure Boards, que permite acompanhar o processo de execução das diferentes fases do ciclo de vida de um software, além de permitir monitorar aspectos como a performance da equipe em tempo real;

Ciclo de vida do software: por que é importante saber?

Quando pensamos no desenvolvimento de um software queremos ir logo para a parte do desenvolvimento em si. Porém, certas etapas são importantes de serem realizadas antes de colocar a mão na massa. O ciclo de vida do software é um deles pois engloba desde o planejamento inicial até a sua entrega. Veja nesse artigo um pouco sobre ele e a sua importância.

O que vem a ser o ciclo de vida?

O ciclo de vida de um software é uma estrutura que indica processos e atividades envolvidas no desenvolvimento, operação e manutenção de um software, abrangendo de fato toda a vida do sistema. Neste ciclo, existem modelos que definem como o software será desenvolvido, lançado, aprimorado e finalizado. A escolha desse modelo, que definirá a sequência de etapas das atividades, é feita entre o cliente e a equipe de desenvolvimento e várias coisas podem impactá-la, como negócio, tempo disponível, custo, equipe etc. A ordem das fases é que vai definir o ciclo de vida do seu software.

Laravel - Framework PHP (Parte 1/3)
Curso de Laravel - Framework PHP (Parte 1/3)
CONHEÇA O CURSO

Por que devo pensar nisso antes de desenvolver meu software?

Com um modelo de ciclo de vida você consegue ver a real necessidade do software e planejá-lo melhor. Imagina você entregar um software para um cliente, e posteriormente precisar lançar várias atualizações para corrigir falhas? A finalidade desse ciclo é encontrar erros o mais cedo possível, pois, além de garantir a qualidade do software, evita um custo maior caso um erro seja encontrado tardiamente. Com um melhor planejamento você pode, por exemplo, ter maior disponibilidade para melhorar o desempenho ou realizar alguma correção.

Quais são as etapas?

Existem 3 fases básicas de um ciclo de software: definição, desenvolvimento e operação.

1) Definição

Deve-se conhecer a situação atual e fazer a identificação do problema para buscar uma resolução do mesmo. É na definição que você fará a modelagem dos processos e a análise do sistema. O modelo de ciclo de vida é a primeira escolha a ser feita no processo de software.

2) Desenvolvimento

Esta etapa envolve atividades relacionadas a design, prototipagem, codificação, testes, entre outras atividades que forem necessárias, como por exemplo, a integração com um outro sistema. É importante ressaltar que essas atividades devem seguir o que foi descrito nas etapas anteriores, pois é aí que entra as regras de negócio.

3) Operação

Nesta etapa o software já estará em produção e você dará o devido suporte aos usuários e, claro, corrigir possíveis bugs que possam aparecer. Aí também entra a continuidade do software se for preciso, como atender novos requisitos, novas funcionalidades. Porém, tudo depende do modelo de ciclo de vida adotado pelo projeto.

Quais os modelos que podem ser utilizados?

Existem diversos modelos de ciclos de vida para o desenvolvimento de software como: cascata, incremental, espiral, evolutivo etc. Vamos abordar aqui alguns dos mais conhecidos e utilizados:

Modelo Cascata

O modelo cascata é um modelo tradicional que foi criado em 1966, porém, formalizado somente por volta de 1970. Este modelo define que as fases serão sequenciais, onde uma fase tem que estar completa antes de passar para a próxima.

Com isso, o processo é visto como um fluir constante para frente. Seu principal benefício é a facilidade de gestão do projeto. Já uma desvantagem desse modelo é a dificuldade de acomodar mudanças depois que o processo já está em andamento.

Modelo Evolutivo

Diferente do modelo em cascata, o modelo evolutivo tem a facilidade de mudanças e a possibilidade de oferecer novas funcionalidades naquele mesmo momento. É bastante indicado para sistemas de curto prazo ou sistemas pequenos e médios. É um modelo que possui grande interação com o usuário, porém, esse modelo tem a desvantagem de se ter dificuldade de estabelecer limites quanto ao escopo e tempo, o que demanda maior gerenciamento de projeto.

Modelo Incremental

Esse modelo foi criado como uma melhoria do modelo cascata e também é um modelo tradicional. Nesse modelo, o desenvolvimento é dividido em etapas, que produzirão o sistema até chegar a sua versão final.

Este é um modelo ideal caso os requisitos ainda não estejam tão claros. Por exemplo, se algum erro é cometido, apenas o último incremento será descartado. Além disso, como o foco é a entrega de cada incremento, a funcionalidade do sistema estará disponível mais cedo para o usuário.

Modelo Espiral

Nesse modelo o processo não é baseado em uma sequência de atividades com retorno. Nesse modelo, como o próprio nome diz, se baseia em uma espiral, onde cada volta nessa espiral representa uma fase no processo. Além disso, não existem fases fixas, essas voltas são escolhidas de acordo com o que é requerido. Uma desvantagem desse modelo é que ele é melhor aplicado somente em produtos internos da empresa.

Concluindo

Pudemos ver que utilizar um modelo de ciclo de vida é uma das melhores formas de garantir um bom alinhamento entre o desenvolvimento do software e a necessidade do usuário que irá utilizá-lo. Vimos também que não existe o modelo ideal, e sim o que é melhor aplicado para cada necessidade.

Python - Fundamentos de Kivy
Curso de Python - Fundamentos de Kivy
CONHEÇA O CURSO