Nesta lição, compreenderemos o ciclo de vida do software, desde a solicitação até a sua manutenção. É importante que você perceba que o ciclo de vida do software se encerra apenas quando ele deixa de ser utilizado. Compreendamos, então, o que deve acontecer durante esse longo período.
Lembra quando falamos que um processo da Engenharia de Software é constituído por uma série de ações que explicitam a sequência do que deve acontecer? Essas ações — ou passos — permitem que o desenvolvimento de software possa ser realizado por uma equipe de desenvolvimento, garantindo a qualidade do produto entregue.
Lembra, também, que todo processo tem os seus métodos e ferramentas? Os métodos fornecem informações técnicas sobre como deve ser realizado o ciclo de vida do software. Já as ferramentas — tecnológicas ou não — fornecem suporte para a realização dos métodos.
As necessidades dos clientes são bastante diferenciadas, não é mesmo? Portanto, como deve ocorrer o processo de desenvolvimento de software? Será que esse processo deve ser escolhido em função de quê? A solução deve ser construída conforme a expertise dos profissionais e, também, conforme os recursos tecnológicos necessários no ambiente do cliente. Contudo, para qualquer um desses processos, o ciclo de vida do software sempre ocorre e, por isso, é importante que compreenda as atividades clássicas que devem ocorrer em um ciclo de software.
A Alice se formou como Técnica de Desenvolvimento de Sistemas e é Analista Júnior de Sistemas em um empresa de informática. Ela iniciou nessa atividade há pouco tempo. Apesar de pouco tempo de experiência, Alice já sabe que construir um software é um processo sistemático, questões práticas de custo, prazo e confiança devem ser analisadas. Ela sabe que deve, também, considerar as necessidades dos clientes e produtores do software. A forma como isso ocorre varia muito, depende da empresa de informática que desenvolverá o software, do tipo de software e das pessoas envolvidas no processo de desenvolvimento desse software.
Além disso, a Alice sabe que não existem técnicas e métodos universais e adequados para todos os sistemas e todas as empresas clientes, pois existem muitos tipos diferentes de aplicações, mas já conseguiu perceber algumas características e organizou essas informações, como se observa no Quadro 1. Esse quadro lhe tem auxiliado na construção de seus projetos de software, pois ela procura refletir sobre os tipos e exemplos de sistemas que ela já conhece.
Compreendamos um pouco melhor como essas informações auxiliam a Alice. Penso que você percebeu que as fronteiras entre os tipos de sistema não são muito claras. Se você desenvolve um jogo para um telefone celular, também deve levar em conta as mesmas restrições — energia, interação com hardware — que os desenvolvedores do software do telefone. Sistemas de processamento de lotes são frequentemente usados em conjunto com sistemas Web, pois as solicitações de reembolso de viagens, por exemplo, podem ser submetidas em uma aplicação Web, porém são processadas através de uma aplicação de processamento de lotes para pagamento mensal.
Portanto, diferentes técnicas e recursos tecnológicos são necessários para cada tipo de sistema. Cada software tem características diversas, como, por exemplo, um sistema Web, ele deve seguir um processo em que o desenvolvimento e as entregas devem ser interativas, bem como será interessante realizar a reutilização de componentes. Mais ainda, destaco que, para qualquer uma das aplicações, o ciclo de software deve ocorrer para garantir que a aplicação seja construída da melhor forma possível.
Você se lembra que existem dois livros que são a base para a profissionais na área de desenvolvimento de software? Um deles é do autor Pressman e o outro é de Sommerville. Esses dois autores apresentam o ciclo de desenvolvimento de software com uma sequência de atividades um pouco diferente, mas, no final de tudo, o resultado é o mesmo. Por que é importante conhecer as duas propostas? Porque, assim, você conhece os termos que são utilizados nas equipes de desenvolvimento.
Nós nos aprofundaremos nessas propostas e tentaremos compreender melhor as diferenças de conceitos dessas duas propostas.
Conforme Pressman (2011), o desenvolvimento de pequenos e médios programas exige uma sequência de cinco atividades:
Comunicação: nesta atividade, o profissional deve compreender quais são as necessidades do cliente e, principalmente, detectar qual é a "dor do cliente". Nesta fase, são realizadas entrevistas, visita ao ambiente do cliente, entre outras técnicas para compreender essa "dor".
Planejamento: esta atividade é mais técnica, pois é quando se define o plano do projeto de software. O que é esse plano? É o momento para descrever as tarefas técnicas que devem ser realizadas e, também, para pensar quais são:
Os riscos prováveis que podem acontecer — por exemplo, problemas de internet, picos de luz, usuários com pouco conhecimento sobre informática.
Os recursos de hardware e software que serão necessários.
Quais são os produtos resultantes — por exemplo, se será um site web ou app.
Finalmente, é quando definimos o cronograma de trabalho que deve indicar quando e quem realizará a sequência de tarefas que deve ser realizada durante as atividades de modelagem e construção.
Modelagem: esta atividade é mais técnica ainda, pois são definidos modelos para o produto de software. Modelos? O que é isso? Façamos uma comparação: uma maquete de um prédio é um modelo necessário para que os arquitetos possam pensar nos detalhes do prédio, como também para a aprovação pelo cliente antes que o prédio seja construído. O modelo de software funciona da mesma forma. Esta atividade permite que os profissionais envolvidos possam pensar melhor nas soluções para resolver as necessidades do produto de software e, depois, quais são os recursos tecnológicos que devem ser utilizados — isto é, o projeto.
Construção: é quando ocorre a geração de código executável propriamente dito, ou seja, é só a partir desta atividade que o profissional consegue executar o produto de software para testá-lo e ver se está funcionando de forma adequada. Contudo, o software está apenas no ambiente de desenvolvimento.
Emprego: é quando o software é entregue ao cliente, isso significa que o software estará disponível no ambiente do cliente e disponível para os seus usuários. Esta fase é quando o software passa a ser avaliado pelos usuários que fornecem feedback, acusam falhas e pedem alterações, porque a realidade do cliente mudou. Esta é a fase mais longa, só finaliza quando o software deixa de ser utilizado.
Já Sommerville (2011) indica que existem quatro atividades fundamentais para o desenvolvimento de software:
Especificação: é quando ocorre a definição do que o sistema deve fazer, quando a equipe de desenvolvimento compreende qual é a "dor do cliente" — ou seja, a atividade de comunicação proposta por Pressman.
Projeto e implementação: esta fase compreende a parte técnica, foca-se na construção do projeto do software — ou seja, as atividades de planejamento e modelagem propostas por Pressman — e a implementação — isto é, a atividade de construção proposta por Pressman.
Validação: esta atividade prevê que seja feita a checagem, de forma a verificar se o sistema faz o que o cliente deseja. Esta fase não é explicitamente prevista por Pressman, corresponde a uma ação na atividade denominada emprego pelo outro autor.
Evolução: esta atividade prevê que sejam realizadas as mudanças conforme as novas necessidades do cliente. Esta atividade é similar à atividade de emprego proposta por Pressman.
Você consegue perceber que a sequência das ações previstas nas atividades são as mesmas? Reforço que apresentamos para você essas duas propostas pois o nome delas ainda é muito utilizado nas equipes de desenvolvimento, portanto é bom que você conheça o significado de cada uma delas. Atualmente, o nome das sequência dessas atividades clássicas são: Elicitação de Requisitos; Análise dos Requisitos e Projeto; Implementação; Testes; Implantação; e Manutenção. Não fique assustado(a), são nomes mais complexos, mas detalharemos adiante cada uma dessas etapas.
O Quadro 2 apresenta tanto as atividades propostas por Pressman e Sommerville como, também, salienta a sequência das atividades clássicas anteriormente citadas, assim você pode perceber melhor a similaridade da sequência das ações que devem ser realizadas durante o ciclo do software.
Compreendamos melhor quais são as ações previstas para as atividades clássicas. A Figura 1 salienta a sequência das atividades e, também, onde essas atividades devem acontecer. Na sequência, essas atividades serão explicadas.
Elicitação e Análise de Requisitos: esta atividade corresponde à etapa de compreensão do problema aplicada ao desenvolvimento de software. O objetivo principal é que o cliente/os usuários e a equipe de desenvolvimento devem ter a mesma visão do problema a ser resolvido. A equipe de desenvolvimento procura:
Entender o domínio do negócio que deve ser automatizado pelo sistema de software.
Fazer um estudo exploratório das necessidades do usuário e da situação do sistema atual — claro, se este existir.
Na atividade de análise, a equipe de desenvolvimento deve:
Construir uma estratégia de solução sem se preocupar com a maneira como essa estratégia será realizada.
Definir a melhor solução para o problema sem se preocupar com os detalhes da tecnologia utilizada.
Particionar o problema de forma a simplificar a construção da solução, ou seja, você procura dividir o problema em pequenos problemas para construir uma solução para esses pequenos problemas. A solução final será a soma das pequenas soluções.
Definir os modelos para os dados e as funções que devem ser implementadas.
Projeto: durante esta atividade, a equipe de desenvolvimento enfatiza a proposta de uma solução técnica que atenda aos requisitos determinados durante a análise.
Veja só, se a análise deve descobrir o que o cliente quer, a atividade do projeto deve construir uma solução baseada no conhecimento adquirido durante a análise.
Implementação: nesta atividade, é quando ocorre a tradução do projeto em código executável. Atenção: a linguagem de programação já foi definida durante o projeto, assim como os métodos e as ferramentas a serem utilizados nesta atividade.
Testes: nesta fase, a equipe de desenvolvimento procura confirmar se os requisitos particulares para um determinado uso foram cumpridos, ou seja, responder à pergunta "o software faz o que o usuário requisitou?". Além disso, procura, também, confirmar se os requisitos especificados foram cumpridos, ou seja, responder à pergunta "o software está de acordo com sua especificação?".
Implantação: nesta atividade, é quando o produto de software é preparado e instalado no ambiente do cliente. Nesta fase, temos diversas ações, tais como: preparar todos os arquivos necessários para o sistema ser executado; caso seja necessário, distribuir o pacote gerado para os seus usuários; instalar no ambiente do usuário; caso necessário, elaborar manuais on-line e treinar os usuários para utilizar o sistema; criar e carregar os arquivos de dados para serem utilizados pelo sistema.
Você percebe que esta fase deve ser muito bem planejada e, principalmente, executada? Uma coisa é o software funcionar bem no ambiente de desenvolvimento, e outra coisa é funcionar no ambiente do cliente — ou ambiente de produção.
Manutenção: nesta atividade, é quando as falhas podem ser detectadas quando o usuário final estiver usando o software e, também, as alterações são realizadas quando as necessidades dos usuários finais se modificam. A boa execução das correções e alterações é que garantirá que o ciclo do software seja longo.
Para finalizar, ressalto que essas atividades são clássicas e que, conforme já dito, existem diferentes propostas para o processo de desenvolvimento de software, em que essas atividades são executadas de forma diferenciada. Nas próximas lições, aprofundaremos esse conhecimento. Animado(a)?
Cada vez mais, você está compreendendo a complexidade do processo de desenvolvimento de software, correto? Pensemos em uma situação em que você pode aplicar o conhecimento adquirido nesta lição. Na lição anterior, você já detectou problemas e soluções tecnológicas que usa no seu dia a dia. Nesta lição, eu desafio você a pensar em um problema — ou seja, a sua "dor de cliente" — que você reconheceu e para o qual não tenha detectado uma solução tecnológica para resolvê-lo.
Após identificar esse problema, você deverá pensar como essa solução pode ser construída. Pense quais são as necessidades mais importantes e urgentes para serem resolvidas e, também, as necessidades que podem esperar um pouco.
Não sabe como começar? Darei um exemplo: assumo que eu não tenho muita paciência para ir ao supermercado, mais ainda quando eu não faço uma lista com os produtos que preciso comprar para reposição. Já procurei por aplicativos que me ajudem a fazer essa gestão, mas, normalmente, estão vinculados a um site de compras de supermercado. A minha necessidade principal é gerenciar uma lista com os produtos que faltam, isso significa poder criar, consultar, alterar e deletar produtos. Já as minhas necessidades secundárias são: poder criar mais de uma lista, tais como "compras semanais" e "compras mensais" e, também, poder criar uma lista permanente com produtos que normalmente uso para, na medida em que faltam, eu poder inserir rapidamente na lista semanal ou mensal.
O que isso tem a ver com o ciclo do software? Corresponde à primeira etapa, denominada elicitação de requisitos, ou seja, um levantamento das minhas necessidades primárias e secundárias. Já as outras atividades, você compreenderá melhor conforme avançar seus estudos neste curso.
Clique aqui, teste seus conhecimentos sobre esta lição e confirme sua participação nesta disciplina!
PRESSMAN, R. S. Engenharia de Software: uma abordagem profissional. 7. ed. Porto Alegre: AMGH, 2011.
SOMMERVILLE, I. Engenharia de Software. 9. ed. São Paulo: Pearson Prentice Hall, 2011.