Necessidade de evolução e de manutenção de um software
Os processos evolutivos e de manutenção acompanham o ciclo de vida do sistema, e, há diferentes intenções para evoluir um sistema que não apenas correção de falhas, bugs, erros e inconformidades, como adaptá-los a novos requisitos e a inserção de novas funcionalidades.

Fonte: Shutterstock.
Deseja ouvir este material?
Áudio disponível no material digital.
Praticar para aprender
Caro aluno, as atividades de evolução e manutenção de software possuem uma grande aplicação prática no cotidiano do profissional que atua na área de desenvolvimento de software. Com isso, a compreensão de suas características e peculiaridades é mais do que necessária, é um conhecimento obrigatório nessa área da tecnologia da informação.
Com base no exposto, num primeiro momento, serão apresentadas discussões acerca da necessidade de evolução e de manutenção dos softwares, o que lhe permitirá entender o processo de envelhecimento deles e as motivações para promover adequações aos novos requisitos.
Na sequência serão abordados a classificação e os tipos de atividades de manutenção de software, conhecimento de vital importância para que as manutenções que acompanham o ciclo de vida do software sejam feitas de forma mais assertiva.
O terceiro tópico em discussão promoverá o entendimento dos processos e das ferramentas de manutenção de software, os quais devem ser utilizados em prol da evolução do software a fim de garantir que implementações, adequações e ajustes agreguem a qualidade esperada, segundo o requisito do sistema.
Finalmente, para encerrar a seção de aprendizagem, será explanado como a engenharia reversa e a reengenharia são utilizadas nos processos de manutenção e evolução dos sistemas. Elas são ferramentas importantes e muito utilizadas por desenvolvedores cotidianamente.
Em suma, esta seção tem como objetivo proporcionar a base para um bom crescimento profissional, uma vez que os assuntos tratados aqui são altamente aplicáveis no dia a dia. Portanto, a compreensão desses tópicos será um diferencial técnico dentro da Engenharia de Software.
Caro aluno, você conduziu um processo de auditoria como profissional terceirizado para auxiliar determinada empresa em um desenvolvimento web. O seu trabalho foi tão bem executado que a companhia entrou em contato novamente com você para mais uma consultoria. Como você já conhece as características do sistema de controle de usuários que foi desenvolvido, os gestores acreditam que a sua contratação trará bons resultados ao projeto.
Os gerentes de projetos entendem que é o momento de o software evoluir, ganhar novas funcionalidades, interface e demais benefícios que possam, de alguma forma, promover a evolução do sistema. Essas sugestões devem estar alinhadas às novas necessidades e tendências de mercado para que de fato ocorra essa evolução.
As suas sugestões, alinhadas com os aspectos da manutenção evolutiva, devem, por meio de um relatório, propor a evolução do software. A consultoria está limitada a duas páginas, conforme podem ser observadas nas figuras a seguir:


A partir do apresentado, desenvolva um relatório para consultoria com base nos conceitos e aplicações da manutenção evolutiva de software, tanto para o front end quanto para as funcionalidades. A empresa está muito empolgada para o evoluir a aplicação, porém o sucesso do projeto dependerá de suas habilidades e conhecimentos.
Com assuntos tão pertinentes, em termos profissionais, para o dia a dia do desenvolvedor de sistemas, acredito que você deva estar curioso para mais discussões no âmbito da Engenharia de Software. Vamos adquirir mais habilidades e conhecimentos?
conceito-chave
Após certo tempo de uso, os sistemas operacionais deixam de receber suporte das empresas e isso significa que não serão mais disponibilizadas correções e atualizações para eles. Já os sistemas operacionais livres e de código aberto não são descontinuados, pois anualmente a comunidade evolui o sistema, efetua correções e insere novas funcionalidades.
Percebeu como existem tratativas diferentes para o envelhecimento do software? Os processos evolutivos e de manutenção acompanham o ciclo de vida do sistema, e, em alguns casos, ao atingir o seu limite, ele é descontinuado. Com base no exposto, nesta seção de aprendizagem, você conhecerá a necessidade de evolução e de manutenção de um software, a classificação e os tipos de atividades de manutenção normalmente executadas. Ainda será possível entender como são utilizadas as ferramentas dentro dos processos de manutenção, e ao final como a engenharia reversa e a reengenharia podem contribuir com a manutenção e os processos evolutivos dos softwares.
Antes de iniciarmos tais discussões, compreendamos qual a motivação para estudar esses tópicos. Imagine que seja desenvolvido um aplicativo para rastreamento de PETs com chip de localização. No seu lançamento, existiam poucos clientes, somente método de pagamento via cartão (crédito e débito). Com o passar do tempo, o número de clientes aumentou consideravelmente, surgiram novos métodos de pagamento, como o PIX, e novas tecnologias de rastreamentos.
Percebeu como a evolução de outras tecnologias impactou diretamente na aplicação? Para compreender melhor os processos de evolução e de manutenção, entendamos, inicialmente, como ocorre o processo de envelhecimento de um software.
Segundo Vetorazzo (2018), os softwares são sequências lógicas de algoritmos cujo intuito é atender aos objetivos estabelecidos, os quais estão suscetíveis a mudanças de requisitos e ao ambiente que está sendo operacionalizado. Esse processo de envelhecimento é inevitável e exige uma análise de causas, de forma a fazer sua evolução e/ou manutenção, garantindo, assim, sua continuidade.
Vetorazzo (2018) define ainda que existem dois tipos de envelhecimento de software, conforme pode ser observado a seguir:
- Falha de adequação: ocorre quando a equipe responsável pela evolução do software comete erros e falhas na adequação ou na implementação dos requisitos, ocasionando muitas vezes a perda da integridade e da confiabilidade da aplicação.
Um exemplo prático: um software para conversão de formatos de vídeo, que funcionava em uma versão do sistema operacional, não tem compatibilidade com a versão mais recente desse mesmo sistema operacional.
Caso o software seja utilizado por um usuário comum, certamente ele procurará outra solução. Mas, se uma empresa utiliza esse software em suas operações e em determinado momento os computadores são trocados e vêm com um sistema operacional não compatível com o software de conversão de vídeo, isso será um grande problema. - Falha na mudança: é quando existe alguma atualização, manutenção ou implementação que impacta negativamente outras funcionalidades que já estavam em pleno funcionamento.
Um exemplo prático: um e-commerce possui apenas um gerador de boleto em funcionamento, mas, devido a solicitações dos usuários, precisará apresentar outras formas de pagamento. Para isso, foi implementado (de forma incorreta) uma API de módulo de pagamentos. O impacto desse erro foi o sistema gerador de boletos e o módulo de pagamentos diversos não funcionarem. Isso ocorreu devido ao desconhecimento da estrutura do gerador de boletos.
Caro aluno, percebeu a necessidade de evolução e manutenção dos softwares? São muitas variáveis a serem observadas: evolução dos sistemas operacionais, modos de consumo, novos meios e métodos de pagamento, segurança e diversos outros pontos. Mas, como prever a expectativa de envelhecimento do software? Isso só ocorreria se tivéssemos informações de todas as empresas de tecnologia da informação, as quais poderiam, por meio de uma alteração, impactar no funcionamento do sistema de alguma forma, o que é impossível.
Porém, a compreensão da classificação e dos tipos de atividades de manutenção de softwares trará uma vantagem de recuperabilidade nas atividades de ajustes, manutenções, evoluções e adequações do sistema em casos de inconformidades.
Com isso, Pressman e Maxim (2016) defendem que há diferentes intenções para evoluir um sistema que não apenas correção de falhas, bugs, erros e inconformidades. Para compreender como são classificadas as atividades de manutenção, observe o Quadro 4.6.
CLASSIFICAÇÃO | CONCEITO | APLICAÇÃO |
---|---|---|
Adaptativa | São modificações necessárias para estar de acordo com novos requisitos, os quais podem ser provenientes de leis, regras, ameaças, meios ou métodos novos. | Recentemente (no ano de 2020) o Banco Central autorizou as instituições financeiras a utilizarem o PIX como método de pagamento. Isso exigiu uma adaptação do sistema de internet banking para que essa nova funcionalidade estivesse disponível aos clientes. |
Corretiva | Sua função é corrigir falhas ou qualquer outro aspecto que seja motivo de degradação dos serviços do software. Além disso, a manutenção corretiva pode ocorrer antes, nas fases de desenvolvimento, ou depois, com o software já em funcionamento. | Nas eleições municipais de 2020, para que as pessoas que não foram votar pudessem justificar o voto, o governo federal disponibilizou um aplicativo para mobile conhecido como e-título. No primeiro turno, ele apresentou problemas desde a sua instalação até o processo de realizar a justificativa. A única funcionalidade em conformidade era a consulta da situação do eleitor quanto à Justiça Eleitoral. No segundo turno, o aplicativo teve de passar por uma manutenção corretiva para que fossem efetuados os ajustes necessários. |
Evolutiva | A manutenção evolutiva tem o objetivo de inserir novas funcionalidades no sistema. | Os chats eram um recurso bastante presente no e-commerce para atendimento aos clientes. Uma evolução desse tipo de atendimento é, em vez de ter um colaborador de plantão para atendimento no chat, utilizar atendimento virtual. Para isso, foram desenvolvidos algoritmos que utilizam inteligência artificial, os quais, com a evolução tecnológica, conseguem responder grande parte das dúvidas dos clientes. |
O conhecimento da classificação dos tipos de manutenção, em termos profissionais, permite que tanto um desenvolvedor quanto um gestor se posicione quanto às reais necessidades dentro da estrutura do sistema, facilitando o direcionamento de recursos dentro do ciclo de vida de desenvolvimento de software. Para tal, é necessário conhecer os processos e as ferramentas utilizados na manutenção de software, os quais são recursos de extrema importância para que, de fato, os processos sejam otimizados.
Técnicas e ferramentas utilizadas na manutenção de softwares
Segundo Pressman e Maxim (2016), os processos e ferramentas utilizados na manutenção de softwares têm como objetivo obter métodos que sejam utilizados como boas práticas e garantir conformidade aos requisitos.
Para entender melhor esse tópico, observe algumas das técnicas e ferramentas mais utilizadas a seguir.
Codificação
É tida como uma parte muito importante na manutenção. A qualidade do código de programação deve possuir legibilidade, ou seja, deve ser fácil e legível. Ainda que as técnicas de indentação e os comentários de código devam estar presentes nas principais linhas da escrita do sistema e as suas funcionalidades. Observe na figura a seguir uma forma de utilizar a codificação com boas práticas.

O trecho de código foi escrito em JavaScript (não sendo necessário saber programar nessa linguagem). Mas repare em algumas boas práticas, que podem ser observadas:
- Nomes: os nomes de variáveis devem sempre remeter ao que será usado, exemplo: rua, bairro, cidade e estado (em amarelo nas linhas 197, 198, 199 e 200); outra boa prática é nomear as funções a serem realizadas. Por exemplo: na linha 195 existe uma função (function) para deixar os campos sem nenhum valor dentro, a qual é chamada de limpa_formulario_cep.
- Comentário: essa é uma técnica muito importante, mas deixada de lado por alguns desenvolvedores quando as práticas do desenvolvimento não impõem mais dificuldades, o que acaba complicando a execução da manutenção efetuada por outros desenvolvedores. Um exemplo pode ser observado na Figura 4.11, pois, na linha 196, é explicado o que a função irá executar naquele trecho de código.
- Indentação: são espaços utilizados para demonstrar o nível hierárquico das funcionalidades dentro do algoritmo. Ainda utilizando como base a Figura 4.11, repare que na linha 195 existe uma estrutura de função em que se abre uma chave, a qual é fechada na linha 201. Para a indentação, as linhas de 169 a 200 sofreram um recuo por meio de um TAB no teclado. Isso organiza o código-fonte e facilita o processo de manutenção.
Versionamento
São documentações que determinam as modificações e as atualizações dos softwares. Elas podem ser feitas por dois meios:
- Numeração: trata-se de um sistema que por meio de uma numeração demonstra a sua versão. O objetivo é especificar as suas características por meio desse sistema numérico. Para um exemplo vamos supor que um determinado software esteja na versão 10.2.4.3 e que cada um desses números tenha um significado, conforme o que se explica adiante:
- 10: indica que houve dez mudanças significativas no sistema. Essa numeração muda cada vez que o software faz uma evolução que promova mudanças de grande escala.
- 2: esse número indica que foram adicionadas novas funcionalidades no sistema. Por exemplo, um software possui, na nova versão, a funcionalidade de impressão.
- 4: esse número indica a quantidade de correções de bugs e falhas. Por exemplo, existia uma falha de envio de confirmação de inserção de produtos no carrinho de compras em um e-commerce na versão 10.2.3.3, que foi corrigido na versão 10.2.4.3.
- 3: são correções graves relacionadas a incidentes de segurança. Por exemplo, determinado aplicativo expunha os dados dos usuários na versão 10.2.4.2, e a falha foi corrigida na versão 10.4.2.3.
- Comentário: uma prática muito comum é adicionar, nas primeiras linhas do arquivo no qual foram feitas as manutenções, informações como: data, objetivo da manutenção, modificações efetuadas e demais comentários úteis para manutenções futuras.
Saiba mais
Os versionamentos em atividades de desenvolvimento de sistemas são essenciais para que se possa gerenciar as mudanças que ocorrem no ciclo de vida do desenvolvimento do software. Para isso, existem softwares que auxilia os profissionais de desenvolvimento. Entre eles, está o GitHub que faz uma tratativa para o versionamento de forma simples e muito eficiente.
Para isso, a página do Git disponibiliza um informativo de como deve ser tratada as versões do GitHub.
GITHUB. 1.1 Começando - Sobre Controle de Versão, [S.l.] c2021.
Estruturar o código para evolução
A atividade de planejamento requer uma reflexão dos limites do software. Dessa forma, permite projetar o código para permitir sua evolução, seja ela por meio de adaptações, mudanças, ou por qualquer outro meio, o importante é que sua estrutura permita a evolução.
Assimile
O processo de manutenção é muito delicado e requer muita atenção, pois, em alguns casos, existe uma alteração nos algoritmos que impacta toda a lógica pensada para o desenvolvimento. Um código-fonte com severas falhas de indentação pode atrapalhar, e muito, a manutenção do sistema.
Na linguagem de programação Python, a indentação é obrigatória para que os programas funcionem, pois, do contrário, ao serem compilados, será gerada uma mensagem de erro de indentação. Aprender Python faz com que o desenvolvedor leve para outras linguagens a boa prática de indentar os scripts corretamente.
Caro aluno, as discussões e os exemplos acerca dos processos e das ferramentas de manutenção de software em aplicações profissionais estão no cotidiano das práticas de desenvolvimento de sistemas e são essenciais para que se possam fazer manutenções corretamente e para que seja realizado um trabalho a ser continuado por outros profissionais com habilidades técnicas.
Além disso, em termos profissionais, as discussões acerca da classificação e dos tipos de atividades de manutenção podem levá-lo a compreender os momentos nos quais as manutenções adaptativas (ajustar a novos requisitos), corretivas (correções de bugs e falhas) e evolutivas (adicionar novas funcionalidades) são operacionalizadas, em ambiente de desenvolvimento de sistemas, bem como as suas finalidades.
Reengenharia de software
Segundo Pádua (2019), o processo de reengenharia de software é uma forma de reorganizar e/ou modificar o sistema a fim de fazê-lo apresentar um desempenho aceitável. Alguns fatores como falta de evolução de software ou excesso de contínuas mudanças (pior ainda quando promovidas por equipes diferentes) acabam degradando os serviços do sistema.
Nesse momento, tentar encontrar novas soluções em um sistema comprometido pode não gerar o resultado desejado e ainda comprometer muitos recursos. Dessa forma, fazer uma reconstrução com a correção de erros e falhas, além de adequar as evoluções necessárias é uma ótima saída em busca de soluções.
Ainda de acordo com Pádua (2019), a reengenharia de software tem o objetivo de reimplementar sistemas legados, em que se busca:
- Melhorar a manutenção: ao se reestruturar o sistema, as futuras manutenções serão mais fáceis para efetuar a manutenção, visto que os antigos erros devem ser corrigidos na nova versão.
- Redocumentar o software: quando o software é reestruturado, a documentação é refeita, permitindo, assim, que novas informações sejam colocadas nos scripts.
- Reestruturar o sistema: as estruturas que funcionavam à base de reparos e correções podem ser repensadas, o que permitirá a construção de um sistema com otimizações e atendimento aos requisitos.
Quando o software é produzido, existem funcionalidades e módulos que requerem grandes esforços para serem desenvolvidos, e, embora o sistema passe por testes, ao longo do tempo ele pode apresentar falhas. Porém, no processo de reengenharia de software, se o entendermos como uma releitura dos algoritmos, podemos dizer que a chance de erro será menor. Com base nisso, Pádua (2019) defende que os processos de reengenharia possuem riscos reduzidos, pois alguns problemas já haviam sido tratados.
Esses processos são apoiados em metodologias de operacionalização. Para tal, Pressman e Maxim (2016) defende o modelo apresentado na Figura 4.12.

Observe que, ao longo dessa discussão, esses processos foram explorados e exemplificados. Porém, um novo termo muito importante quanto à manutenção e à evolução dos softwares foi citado no modelo representado na Figura 4.12: engenharia reversa.
Exemplificando
A área de desenvolvimento de software é muito colaborativa, permitindo, às vezes, encontrar funcionalidades inteiras já em funcionamento. No entanto, para ser utilizada em um sistema em funcionamento, sempre são necessárias algumas adequações.
Para isso, é preciso fazer uma engenharia reversa, de modo que, após a compreensão de sua estrutura, seja possível promover as adequações necessárias.
Conforme defende Pádua (2019), a engenharia reversa é o processo de reconstrução do software que parte do princípio de recuperação do código para tornar compreensíveis suas funcionalidades. Assim, elas podem ser reescritas com vistas a serem otimizadas e corrigidas.
Claramente, quando a engenharia reversa é utilizada em hardware, a técnica fica visualmente mais fácil de ser compreendida, pois imaginamos os componentes sendo desmontados, o que nos permite compreender a ordem de montagem e, ainda, analisar cada componente em separado a fim de entender o seu objetivo e funcionamento.
Mas como a engenharia reversa é tratada a nível de software? Antes de responder esse questionamento, observe a Figura 4.13.

Observe que gradativamente os métodos de engenharia reversa tratam de reestruturar o código, permitindo, assim, a compreensão das funcionalidades (entradas e saídas, interface e funcionalidades).
Segundo Pádua (2019), ao se utilizar os processos e técnicas de engenharia reversa, é possível visualizar o software de diferentes maneiras, tais como:
- Nível de implementação: permite a compreensão das características e especifidades da linguagem de programação utilizada no processo de implementação.
- Nível estrutural: permite a compreensão dos diferentes módulos e funcionalidades e das suas respectivas dependências funcionais. Essa abstração se dá por meio da análise da estrutura da linguagem de programação utilizada.
- Nível funcional: permite que as partes que compõem os sistemas sejam compreendidas; com ênfase na lógica utilizada no desenvolvimento.
- Nível de domínio: permite compreender onde o software é utilizado.
Com isso, em termos profissionais, tanto a reengenharia quanto a engenharia reversa possuem técnicas relativamente simples, mas que não são tão fáceis de operacionalizar. As técnicas são comumente utilizadas em práticas cotidianas para gerar diminuição no tempo de desenvolvimento. Dessa maneira, os resultados tendem a ser melhores visto que boa parte das funcionalidades já foram desenvolvidas.
Reflita
A reengenharia permite, além de reescrever o sistema, compreender os erros e falhas e promover os devidos ajustes na nova construção do software. Na engenharia reversa também é possível encontrar erros, falhas, bugs e demais inconformidades?
Caro aluno, ao longo das discussões, exemplos e conceituações desta seção, o objetivo foi mostrar a você, a partir de um olhar profissional, as formas encontradas na engenharia de software para promover os processos de manutenção e evolução do software. Os assuntos discutidos aqui são largamente utilizados nas atividades diárias de desenvolvimento de software, por isso esse conhecimento é tão importante para a sua carreira profissional.
Pesquise mais
Na unidade 6 do livro intitulado Engenharia de Software (PERINI; HISATOMI; BERTO, 2009), disponível na Biblioteca Virtual, são tratados os assuntos relacionados à manutenção de software. Este é um referencial bibliográfico muito interessante para a compreensão dos processos de manutenção e evolução de software, por isso aproveite a leitura!
PERINI L. C.; HISATOMI I. H.; BERTO, W. L. Engenharia de software. Pearson Prentice Hall, São Paulo, 2009.
Faça valer a pena
Questão 1
O versionamento de software é uma técnica que agrega informações importantíssimas, as quais auxiliam na identificação das alterações promovidas pelos desenvolvedores de software. Porém, para que isso ocorra, é necessário conhecer as partes que compõem essa numeração.
Se um sistema teve a sua versão alterada de 2.3.4.5 para 2.4.4.5, ocorreu uma alteração na:
Tente novamente...
Esta alternativa está incorreta, leia novamente a questão e reflita sobre o conteúdo para tentar novamente.
Correto!
Os números do versionamento de software representam:
Primeiro número: indica mudanças significativas no sistema.
Segundo número: indica que foram adicionadas novas funcionalidades no sistema.
Terceiro número: indica a correções de bugs e falhas.
Quarto número: indica que houve correções relacionadas à segurança de software.
No exercício, o software mudou de 2.3.4.5 para 2.4.4.5 e isso significa que o segundo número sofreu alteração, indicando que novas funcionalidades foram adicionadas à nova versão.
Tente novamente...
Esta alternativa está incorreta, leia novamente a questão e reflita sobre o conteúdo para tentar novamente.
Tente novamente...
Esta alternativa está incorreta, leia novamente a questão e reflita sobre o conteúdo para tentar novamente.
Tente novamente...
Esta alternativa está incorreta, leia novamente a questão e reflita sobre o conteúdo para tentar novamente.
Questão 2
As atividades de manutenção de software estão presentes no ciclo de vida do desenvolvimento de software com o intuito de, no início, evitar que o sistema chegue aos usuários com falhas, e, se o produto de software já estiver em uso, fazer as devidas manutenções a fim de promover sua evolução. Quanto à classificação e tipos de manutenção, observe as afirmativas a seguir:
- Manutenção adaptativa significa que determinada funcionalidade migrará para outro sistema, de forma a se adaptar em um módulo, por exemplo.
- Manutenção corretiva diz respeito às atividades que visam resolver falhas, erros e demais motivos que possam estar degradando o software.
- Manutenção evolutiva é utilizada para melhorias de funcionalidades já implementadas.
Assinale a alternativa CORRETA:
Tente novamente...
Esta alternativa está incorreta, leia novamente a questão e reflita sobre o conteúdo para tentar novamente.
Correto!
As atividades de manutenção são classificadas quanto aos seus tipos em:
- Manutenção adaptativa: são modificações necessárias para estar em acordo com novos requisitos funcionais. Esses requisitos podem ser provenientes de leis, regras, ameaças, meios ou métodos novos.
- Manutenção corretiva: sua função é corrigir falhas ou qualquer outro motivo de degradação dos serviços do software. Essa manutenção corretiva pode tanto ocorrer antes, nas fases de desenvolvimento, quanto depois, com o software já em funcionamento.
- Manutenção evolutiva: tem o objetivo de inserir novas funcionalidades no sistema.
Assim, a única alternativa correta é a II.
Tente novamente...
Esta alternativa está incorreta, leia novamente a questão e reflita sobre o conteúdo para tentar novamente.
Tente novamente...
Esta alternativa está incorreta, leia novamente a questão e reflita sobre o conteúdo para tentar novamente.
Tente novamente...
Esta alternativa está incorreta, leia novamente a questão e reflita sobre o conteúdo para tentar novamente.
Questão 3
Os processos de manutenção e de evolução de software podem ser feitos por diversos métodos ou meios, entre eles a reengenharia e a engenharia reversa.
Quanto às características de ambas na evolução de software, analise as asserções a seguir e a relação proposta entre elas.
- A reengenharia de software pode utilizar a engenharia reversa em seus processos.
POIS
- É necessário, muitas vezes, fazer o processo reverso de desenvolvimento a fim de reconstruir o sistema.
A seguir, assinale a alternativa correta:
Correto!
As asserções I e II estão corretas, pois a reengenharia de software analisa a documentação, reconstrói os scripts, corrige falhas e, em dado momento, para compreender a estrutura de algumas funcionalidades, é necessário utilizar a engenharia reversa dentro do processo de reengenharia. Por esse motivo, a segunda asserção é uma justificativa da primeira.
Tente novamente...
Esta alternativa está incorreta, leia novamente a questão e reflita sobre o conteúdo para tentar novamente.
Tente novamente...
Esta alternativa está incorreta, leia novamente a questão e reflita sobre o conteúdo para tentar novamente.
Tente novamente...
Esta alternativa está incorreta, leia novamente a questão e reflita sobre o conteúdo para tentar novamente.
Tente novamente...
Esta alternativa está incorreta, leia novamente a questão e reflita sobre o conteúdo para tentar novamente.
Referências
GITHUB. 1.1 Começando - Sobre Controle de Versão, [S.l.] c2021. Disponível em: https://cutt.ly/ujOsgiq. Acesso em: 07 jan. 2021.
PÁDUA, Wilson. Engenharia de Software. 1ª Ed. Rio de Janeiro: LTC, 2019.
PRESSMAN, R.; MAXIM, B. Engenharia de Software: uma abordagem profissional. 8. ed. Porto Alegre: AMGH, 2016.
PERINI L. C.; HISATOMI I. H.; BERTO, W. L. Engenharia de software. São Paulo: Pearson Prentice Hall, 2009. Disponível em: https://cutt.ly/pjOssev. Acesso em: 12 de jan. 2021.
VETORAZZO, A. de S. Engenharia de software. Porto Alegre: SAGAH, 2018.