Logo Passei Direto
Buscar

ENGENHARIA DE SOFTWARE

Ferramentas de estudo

Mês do Cliente Passei Direto

Quer receber 70% de desconto para assinar o PasseIA?

Material

Prévia do material em texto

Fabio Rossi Versolatto de software SenacDados Internacionais de Catalogação na Publicação (CIP) (Claudia Santos Costa CRB Versolatto, Fabio Rossi Engenharia de software/Fabio Rossi Versolatto. São Paulo: Editora Senac São Paulo, 2026. (Série Universitária) Bibliografia e-ISBN 978-85-396-5879-4 (ePub/2026) e-ISBN 978-85-396-5880-0 (PDF/2026) Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. 1. Software - Desenvolvimento. 2. Engenharia de software. I. Título. II. Série. 25-2611c CDD 005.1 BISAC COM051230 Índice para catálogo sistemático: 1. Desenvolvimento de software: Engenharia de software 005.1Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. ENGENHARIA DE SOFTWARE Fabio Rossi VersolattoSenac Administração Regional do Senac no Estado de São Paulo Presidente do Conselho Regional Abram Szajman Diretor do Departamento Regional Luiz Francisco de Salgado Superintendente Universitário e de Desenvolvimento Luiz Carlos Dourado Editora Senac São Paulo Conselho Editorial Luiz Francisco de Salgado Luiz Carlos Dourado Darcio Sayad Maia Lucila Mara Sbrana Sciotti Luís Américo Tousi Botelho Gerente/Publisher Luís Américo Tousi Botelho Coordenação Editorial Verônica Pirani de Oliveira Prospecção Andreza Fernandes dos Passos de Paula Dolores Crisci Manzano Paloma Marques Santos Administrativo Marina P. Alves Comercial Aldair Novais Pereira Comunicação Tania Mayumi Doyama Natal Coordenação de Arte Antonio Carlos De Angelis Coordenação de Revisão de Texto Marcelo Nardeli Acompanhamento Pedagógico Otacília da Paz Pereira Designer Educacional Lauro Tozetto Neto Revisão Técnica Gustavo Calixto Preparação e Revisão de Texto Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. Rebeca Fleury Kuhlmann Silvana Gouvea Proibida a reprodução sem autorização expressa. Projeto Gráfico Todos os direitos desta edição reservados à Alexandre Lemes da Silva Emília Corrêa Abreu Editora Senac São Paulo Av. Engenheiro Eusébio Stevaux, 823 Prédio Editora Antonio Carlos De Angelis Jurubatuba CEP 04696-000 São Paulo SP Tel. (11) 2187 4450 Editoração Eletrônica e Ilustrações editora@sp.senac.br Leonardo Miyahara Imagens Adobe Stock Photos © Editora Senac São Paulo, 2026Sumário Capítulo 1 Capítulo 4 Introdução à engenharia Engenharia de requisitos, 71 de software, 7 1 que é um requisito?, 72 Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. 1 0 que é software?, 9 2 A importância da 2 que é engenharia de software?, 14 engenharia de requisitos, 73 3 0 papel da engenharia de software 3 Tipos de requisitos, 75 nas organizações digitais, 19 4 Elicitação de requisitos, 78 4 papel do engenheiro 5 Os desafios na gerência de software, 22 de requisitos, 83 Considerações finais, 25 6 O design thinking como Referências, 27 uma ferramenta de apoio à engenharia de requisitos, 84 Capítulo 2 Considerações finais, 87 Ciclo de vida de desenvolvimento Referências, 88 de software, 29 1 que é ciclo de Capítulo 5 vida de software?, 30 Projeto de sistemas, 91 2 Processos de desenvolvimento: 1 A importância do design, 92 que são e por que 2 Arquitetura de soluções, 94 são importantes, 33 3 Arquitetura de software, 96 3 Modelos de processos: do clássico ao ágil, 36 4 Orientação a objetos, 98 Considerações finais, 45 5 Componentização, 102 Referências, 47 6 Da arquitetura orientada a serviços aos microsserviços, 106 Capítulo 3 7 Introdução ao conceito de DDD, 109 Métodos ágeis, 49 Considerações finais, 111 1 Manifesto Ágil, 50 Referências, 112 2 Scrum, 54 Capítulo 6 3 Kanban, 58 Desenvolvimento 4 XP, 61 de software, 113 5 Modelos enxutos Lean, 64 1 O que é um algoritmo?, 114 Considerações finais, 67 2 Linguagens de programação, 117 Referências, 68 3 Bibliotecas e frameworks, 119 4 Controle de versão, 121 5 Introdução à cultura DevOps, 123 Considerações finais, 129 Referências, 130Capítulo 7 Capítulo 8 Validação, verificação e Engenharia de software: implantação de software, 133 presente e futuro, 151 1 Qualidade de software, 135 1 A evolução da engenharia 2 Tipos de testes, 136 de software: processo de maturidade, 153 3 Desenvolvimento orientado a testes, 139 e a gestão de configuração, 155 4 Os desafios do teste de software, 141 3 Engenharia de software na IA e no aprendizado de máquina, 157 5 Implantando e mantendo um sistema de software, 143 4 A engenharia de software e a ciência de dados, 159 6 Observabilidade, 144 Considerações finais, 162 7 Gestão de defeitos e de mudanças, 146 Referências, 163 Considerações finais, 148 Sobre autor, 167 Referências, 149 Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. 6 Engenharia de softwareCapítulo 1 Introdução à engenharia Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. de software Este capítulo tem como objetivo ser O nosso condutor nos primeiros passos de um tema que é a base para O desenvolvimento de sistemas de informação: a engenharia de software. Mas, antes de começarmos a falar sobre ela, é importante enten- dermos O que é um sistema de software e, para isso, apresentaremos fundamentos teóricos que sustentam O conceito de software e suas características fundamentais, como a imaterialidade, a complexidade, a suscetibilidade a mudanças e a importância que este elemento intangí- vel tem na sociedade e nas organizações digitais contemporâneas. 7Na sequência, mostraremos a engenharia de software como uma disciplina técnica básica e, principalmente, científica que tem como obje- tivo nos municiar de princípios, métodos e ferramentas para O desenvol- vimento de sistemas de software que atendam às necessidades cada vez mais crescentes por alta qualidade, cumprimento de prazos e cus- tos otimizados. Continuaremos explorando papel estratégico que ela desempenha nas organizações digitais e como se torna um braço de inovação funda- mental, além de uma aliada na automação de processos e criação de soluções alinhadas aos objetivos de negócio. Ampliaremos a perspectiva sobre como um sistema de software, quando bem projetado e gerido, é um elemento capaz de gerar valor e competitividade às organizações, e como a possibilidade de sucesso neste caminho aumenta quando encontramos algo que nos apoie e sirva de guia para boas práticas de projeto e de gerenciamento. E é aqui que entra a engenharia de software. Por fim, esta conversa introdutória apresenta também papel da pes- soa engenheira de software, abordando não apenas suas competências técnicas, mas também a relevância da atuação consciente e comprome- tida com as boas práticas, padrões de qualidade e princípios éticos aspectos cruciais em um contexto marcado por constantes transformações tecnológicas que produzem, cada vez mais, grande impacto social. Esperamos que, ao final desta introdução, você compreenda que é um sistema de software e a importância da engenharia de software como uma disciplina estratégica no mercado e na sociedade digital. Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. Este é O capítulo que te ajudará a construir a base, alicerce, para os capítulos que virão pela frente! 8 Engenharia de software10 que é software? Antes de nos aprofundarmos no tema engenharia de software, é essen- cial entendermos bem aspectos fundamentais que envolvem objeto- -fim dessa engenharia: O software. À primeira vista, pode parecer que não há muito a ser definido sobre algo que já integra cotidiano há tanto tempo e cujo propósito parece amplamente conhecido. No entanto, a Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. proposta aqui vai além. Busca-se observar um sistema de software não sob a ótica do usuário, mas sob ponto de vista do profissional respon- sável pelo desenvolvimento de um produto. Façamos uma analogia. Todos sabemos O que é um carro e qual é O seu papel dentro da nossa rotina já há algum tempo. Sabemos também suas funcionalidades básicas: O acelerador acelera, O freio freia e O volante ajuda a dar direção. Mesmo sendo usuários frequentes desse sistema automobilístico e tenhamos algum conhecimento mais avançado aqui ou ali sobre as partes que O compõe, seria incorreto pensar que consi- gamos vê-lo sob O ponto de vista de um produto. Isso porque não temos, em grande maioria, conhecimento sobre os princípios mecânicos e físi- COS que norteiam O desenvolvimento de seus componentes. Tampouco sabemos todas as inúmeras legislações e padrões de qualidade e segu- rança que obrigatoriamente precisam ser atingidos. Tudo isso ainda sem falar de estratégias competitivas e posiciona- mento estratégico desse produto voltado a um público específico de mer- cado, a análise da concorrência e tudo que envolve a precificação deste veículo. Enfim, ficaríamos páginas e páginas, horas e horas falando sobre O objeto carro, mas na perspectiva de um produto. Assim como O engenheiro mecânico ou automobilístico precisa enten- der que é um veículo sob ponto de vista técnico e científico, O mesmo acontece com O profissional do desenvolvimento de sistemas de infor- mação. Saber conceituar um sistema de software sob todas as suas bases é fundamental para O sucesso na jornada. É momento de Introdução à engenharia de software 9começar a olhar um software sob ponto de vista de um profissional da área e não mais como um usuário. A começar pela própria definição do que é um sistema de software. Alguns podem associar O software ao elemento mais intangível de um sistema computacional, uma vez que hardware a outra parte que compõem é perceptível aos sentidos, podendo ser visto, tocado e manuseado. Muitos, ao serem questionados sobre que é um software, tendem a relacioná-lo ao termo "programas de computador". Dessa forma, entende-se que um sistema de software corresponde aos programas executados em um sistema computacional. Como observa Sommerville (2018, p. 18), definir sistemas de software como programas de computador é uma simplificação que restringe muito a nossa visão sobre O tema: "software não é apenas programa, mas também todos dados de documentação e configuração associados, necessários para que programa opere Pressman e Maxim (2021, p. 56) têm ideia semelhante e definem que um software consiste em: (1) instruções (programas de computador) que, quando executa- das, fornecem características, funções e desempenho desejados; (2) estruturas de dados que possibilitam aos programas manipu- larem informações adequadamente; e (3) informação descritiva, tanto na forma impressa quanto na virtual, descrevendo a opera- ção e uso dos programas. IMPORTANTE Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. Pressman, Maxim e Sommerville estão entre as principais referências quando assunto é engenharia de software. Suas obras serviram (e ser- vem) como base teórica e prática dessa área do conhecimento. Ao longo deste livro, diversas menções aos seus trabalhos serão apresentadas. 10 Engenharia de softwareEm resumo, um sistema de software pode ser definido como a com- posição de um ou mais programas, arquivos com informações de con- figuração que dão sustentação ao seu funcionamento e, principalmente, sua documentação. A documentação de um sistema tem a função de orientar O usuário quanto ao seu uso, mas também desempenha O papel de explicar à equipe técnica como ele foi construído, quais são seus com- ponentes e tecnologias, bem como quais problemas e fatores levaram a Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. decisão de desenvolvê-lo da forma como foi implementado. Portanto, temos diversos documentos fazendo parte do que é um software, cada qual com seu objetivo e O seu público-alvo. Documentar um sistema de software não se trata de um ato de burocratização, mas sim reduzir um aspecto que é da sua natureza: a sua imaterialidade. Ima- terialidade refere-se à natureza não física do software. Diferentemente de produtos tangíveis, como sistemas de hardware, software é com- posto por instruções, algoritmos e dados organizados logicamente. Assim, não possui forma física e não pode ser tocado, apenas representado e executado por meio de dispositivos eletrônicos (Sommerville, 2018). A partir dessa característica, torna-se possível identificar outro aspecto associado aos conceitos básicos de software: a complexidade. Essa complexidade já se evidencia na dificuldade de estabelecer O seu valor. Como atribuir a algo que é imaterial e intangível? Diferentemente dos componentes físicos, valor do software está no seu projeto, na lógica, na funcionalidade e na forma como resolve um determinado problema, ou seja, O seu valor é intelectual (Pressman; Maxim, 2021). Mesmo sistemas desenvolvidos para resolver problemas de negócios idênticos por exemplo, dois aplicativos de comércio ele- trônico pertencentes a lojas distintas podem não ter O mesmo valor. Por não serem totalmente iguais, estão sujeitos a diferentes formas de valoração, especialmente quando se consideram parâmetros relaciona- dos ao valor intelectual. Introdução à engenharia de software 11mesmo racional serve outras métricas como tamanho e complexi- dade. Façamos mais uma analogia. Como se mede O tamanho de um cômodo de uma casa? Faz-se isso calculando sua área: um lado multi- plicado pelo outro. caso fosse necessário estimar quanto seria gasto para colocar piso nesse cômodo? Utilizaríamos como base essa medida, compraríamos a quantidade de material adequado e solicitaríamos ser- viço de alguém especializado em sua instalação, que, por sua vez, tam- bém teria como parâmetro O tamanho do cômodo. Pois bem, diante da imaterialidade de um sistema de software, como calcular O seu tamanho? Como estimar a sua complexidade? Á primeira vista, poderia parecer razoável considerar que, por ser composto por pro- gramas formados por linhas de código, um sistema maior ou mais com- plexo seria aquele que possui a maior quantidade dessas linhas. Mas, afinal, qual seria uma quantidade de linhas de código suficiente para afirmar que "um software com menos linhas que isso é simples e com mais linhas é complexo". Infelizmente essa informação não está disponível. Tampouco se pode afirmar que um algoritmo é mais ou menos complexo do que outro desde que ambos solucionem problema a que se propõe apenas comparando a diferença na quantidade de linhas de seus códigos. Assim, seria razoável comparar sistemas de software com simila- ridade de funções. Por exemplo, seria possível cotejar aplicativos ban- cários entre si, sites de comércio eletrônico com seus equivalentes ou até mesmo diferentes sistemas operacionais. Partindo disso, poderiam surgir conclusões como: aplicativo do banco X é maior e mais com- plexo que do banco Y". No entanto, também aqui surgiria uma limita- Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. ção. Se ambos resolvem, com eficiência e eficácia, problemas para os quais foram concebidos, seria imprudente estabelecer um modelo de medição de tamanho e complexidade baseado apenas em comparações relativas. 12 Engenharia de softwarePARA SABER MAIS Existem muitas abordagens voltadas para a medição de tamanho e com- plexidade de sistemas de software, muitas das quais utilizadas principal- mente para estimar esforço, custo e prazo para desenvolvimento. É uma área que ainda carece de maior assertividade e sucinta muitas discus- sões e desafios, principalmente pela natureza imaterial do software. Alguns dos métodos (que possuem seus pontos positivos e suas deficiências) mais utilizados para este trabalho são: pontos de função (function points Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © C Editora Senac São Paulo. FP), análise de pontos de caso de uso (use case points UCP), comple- xidade ciclomática de McCabe, medição por tamanho de arquivos ou com- ponentes, e contagem de linhas de código (lines of code - LOC). Outro aspecto que confere ao software um grau importante de com- plexidade é a suscetibilidade a mudanças. Mas O que isso quer dizer? Significa que, diferentemente dos carros que são projetados, construí- dos e alterados com pouca frequência (geralmente quando há algum problema), os sistemas de software estão em constante alteração. Con- siderando que um software tem como objetivo resolver um determinado problema, pode-se citar como exemplo um aplicativo de comércio ele- trônico, cuja razão de existir é estabelecer a conexão entre alguém que deseja vender um produto e outra pessoa interessada em adquiri-lo. Seguindo nesse exemplo, para obter O valor de venda de um produto, faz-se necessário um cálculo que considere O valor de compra dele, acres- cido dos impostos e tarifas. Pois muito bem! Sabemos que valores de impostos mudam constantemente, novos tributos são criados e substi- tuem velhas políticas tarifárias. Ou seja, O software, ou parte dele, é sus- cetível a alterações sempre que houver uma mudança desta natureza. Novas funcionalidades precisam ser desenvolvidas ou melhoradas para atender demandas estratégicas da empresa frente ao mercado. Ademais, erros (que sempre surgem) precisam ser corrigidos, que popu- larmente chamamos de bugs. Com essas ideias, damos aqui O nosso Introdução à engenharia de software 13primeiro passo no sentido de olhar software sob ponto de vista pro- fissional, entendê-lo com a perspectiva de um produto que possui rele- vância estratégica nas companhias e promove impactos no dia a dia da sociedade em um cenário cada vez mais digital. Para desenvolver esse produto, considerando esses e outros tantos aspectos, precisamos do apoio de um conjunto de boas práticas, métodos, processos e ferramen- tas que aumentem nossas chances de sucesso. 20 que é engenharia de software? Segundo O Washizaki (2024, p. 38), engenharia de software é "a apli- cação de uma abordagem sistemática, disciplinada e quantificável ao desenvolvimento, operação e manutenção do software". Vamos enten- der essa definição por partes. Quando falamos de uma "abordagem queremos dizer que utilizaremos processos e métodos bem definidos. É como fazer um bolo. A sequência das atividades descritas no modo de preparo influen- cia diretamente na possibilidade de sucesso no produto. A engenharia de software trata a produção do software como um pro- cesso organizado e, sobretudo, fundamentado em princípios científicos. Isso implica a utilização de processos e métodos bem definidos, em opo- sição à execução de atividades aleatórias, sem definição e sem qualquer lógica, tudo isso tem como objetivo fomentar a qualidade e O sucesso do produto. A expressão "abordagem disciplinada" está conectada à ideia da aplicação de boas práticas e normas reconhecidas. Nesse contexto, não se busca "reinventar a roda", mas adotar modelos que comprovada- Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. mente já deram (e ainda dão) certo. Retomemos a analogia do bolo. Imagine a necessidade de preparar um bolo de cenoura com cobertura de chocolate, mas sem ter uma receita em mãos. Nesse cenário, seria preciso tentar diferentes combinações 14 Engenharia de softwarede ingredientes e sequências de passos, acumulando fracassos nas ten- tativas iniciais. Até que, após muitas tentativas, encontra-se a combina- ção certa da quantidade de insumos, da sequência de misturas e dos tempos de cocção. Agora, imagine que outra pessoa tenha de produzir mesmo bolo e, assim como no caso anterior, não disponha de uma receita. Porém, suas possibilidades são masi favoráveis, uma vez que já existe um conheci- Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. mento prévio: além da forma correta de preparo, também foram identi- ficadas diversas maneiras que não conduzem ao resultado desejado. Logo, não faria sentido que essa pessoa repetisse tentativas que com- provadamente fracassaram, em vez de usar a que obteve sucesso. Da mesma forma, as boas práticas e normas reconhecidas funcio- nam como guias de como fazer algo que comprovadamente deram certo, que minimizam as chances de fracasso e permitem que desenvolvedo- res de software concentrem energia no que de fato é fundamental: desen- volver produto. Nesse ponto, podemos notar como O desenvolvimento de software é tratado de maneira científica, como uma atividade típica de engenharia. O mesmo acontece com outras engenharias, como a civil e a mecânica, por exemplo. Construir um prédio, uma casa ou uma ponte de qualquer maneira não é garantia de qualidade, muito menos de sucesso. Na verdade, são grandes as chances de fracasso. O mesmo acontece no desenvolvimento de um carro. Se em uma linha de produção, cada veículo fosse cons- truído de uma forma diferente, não haveria uniformidade, tampouco garan- tia de qualidade: algumas unidades poderiam sair boas, outras nem tanto. Pressman e Maxim (2021) têm ideia semelhante, e afirmam que a engenharia de software é uma tecnologia em camadas, composta por processos, métodos e ferramentas que tem como objetivo, e deve estar fundamentada, na ênfase e no atingimento da qualidade, como mostra a figura 1. Introdução à engenharia de software 15Figura 1 Camadas da engenharia de software Ferramentas Métodos Processos Ênfase na qualidade Fonte: Pressman e Maxim (2021). Por fim, adjetivo "quantificável" está relacionado à possibilidade de medir e avaliar O produto software bem como próprio processo. Isso quer dizer que trabalhar desenvolvimento de software sob as bases da engenharia nos traz a possibilidade de extrair indicadores numéricos úteis para sabermos se as coisas estão indo bem ou não, sem "achis- mos", e procurarmos alternativas de correção de rota e de melhorias. A ideia central da engenharia de software está em tratar desenvolvimento como uma atividade de engenharia, com planejamento, qualidade, metri- ficação e gerenciamento, tendo como ênfase a qualidade do produto. PARA SABER MAIS Guide to the software engineering body of knowledge Swebok Guide (Washizaki, 2024) define e descreve conjunto de conhecimentos fun- damentais da engenharia de software. Seu objetivo é padronizar enten- dimento da área, identificando as principais práticas, conceitos, técnicas e ferramentas utilizadas no desenvolvimento de software de qualidade, estabelecendo assim uma base comum de conhecimento para os pro- fissionais da área. Trata-se de uma ferramenta de referência essencial Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. quando se aborda esse tema. Em resumo, a engenharia de software é a disciplina ampla e fundamen- talmente científica que nos serve como modelo para O desenvolvimento 16 Engenharia de softwaredo produto software, não de forma artesanal, mas de maneira profissio- nal. Entretanto, os desafios ainda são muitos. Muito se deve ao fato dessa ser uma disciplina relativamente nova e, por isso, a área como um todo ainda carece de aprender com os erros e corrigir rotas para que eles não aconteçam mais, no que chamamos de ciclo de melhoria contínua. Diferentemente de outras engenharias, como a mecânica e a elétrica, cujas institucionalizações datam de 1847 e 1884, respectivamente, a Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. engenharia de software tem seu início na década de 1960 (Sommerville, 2018). E O que isso tem a ver? Os dispositivos elétricos utilizados no coti- diano nem sempre foram acessíveis e usáveis, assim como veículos, em suas primeiras versões, não eram confiáveis ou seguros. Um produto e a engenharia utilizada na sua produção -só alcança qualidade ao longo do tempo, à medida que problemas são identificados, tratados, corrigidos e prevenidos. Trata-se de um processo contínuo de incorpo- ração de aprendizado e aprimoramento. A cada ciclo, produtos e engenharia tornam-se mais robustos, mais maduros. Quanto mais ciclos são executados, maior é O avanço no nível de maturidade da engenharia; e, quanto mais tempo de existência, maior tende a ser a quantidade de ciclos já realizados. Tomemos outro exemplo: a engenharia mais antiga da humanidade, a engenharia civil. Desde que os primeiros seres humanos passaram a construir moradas, pontes rudimentares e incipientes sistemas de irriga- ção, atividades que hoje classificadas como engenharia civil já eram colo- cadas em prática. Sabe-se que nem sempre as pontes e as casas foram construídas na forma como são atualmente. As primeiras obras eram rudimentares, produzidas de maneira artesanal e com materiais muito suscetíveis às intempéries climáticas. Com O passar do tempo, O estudo de novas matérias-primas possibi- litou O desenvolvimento de novas tecnologias que foram incorporadas Introdução à engenharia de software 17ao conhecimento da engenharia civil, assim como novas técnicas cons- trutivas que fomentavam produtos mais seguros, construídos em menos tempo e com custos reduzidos. Cada ciclo, melhoria e lição aprendida promoveu O aumento da maturidade da área como um todo. Isso quer dizer que não existam falhas nos produtos resultantes da engenharia civil? É de conhecimento de todos que não. No entanto, em uma enge- nharia madura, qualquer incidente ou problema, serve como insumo para melhoria, de tal forma que esses eventos não voltem a ocorrer. Este mesmo raciocínio aplica-se a diversas outras engenharias como a mecânica, a elétrica, a química, a naval e a aeronáutica. Todas elas são mais antigas e, portanto, tiveram mais oportunidades de acumular apren- dizados e lições do que a engenharia de software. O tempo de existência da disciplina de engenharia de software cons- titui uma barreira natural para O alcance de um nível pleno de maturidade, mas não é a única. Destacam-se também a natureza imaterial do pro- duto software -, que se diferencia de construções físicas, como pré- dios e veículos, e uma certa resistência de desenvolvedores e engenheiros em produzir software de maneira científica e racional. Essa resistência tem fundamento, pois, como observa Pfleeger (2004), a engenharia de software envolve tanto arte quanto ciência. A dimensão científica abrange a aplicação de uma abordagem sistemática, disciplinada e quantificável ao desenvolvimento e aos seus benefícios, ao mesmo tempo que a dimen- são artística diz respeito ao processo criativo e original, qual está rela- cionado à imaterialidade inerente ao software. É importante ressaltar que a aplicação da ciência não restringe nem elimina a criatividade dos desenvolvedores; ao contrário, oferece uma Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. base segura que promove a inovação e O pensamento criativo organi- zado. Essa relação positiva de equilibro também pode ser observada em outras engenharias: em prédios que otimizam O uso do espaço físico, em soluções inovadoras voltadas ao consumo de recursos naturais, em veículos com linhas aerodinâmicas afinadas a cada novo lançamento e 18 Engenharia de softwareem carros e aeronaves movidos por combustíveis de menor emissão de poluentes. software desempenha um papel fundamental no cotidiano moderno e nas estratégias competitivas das organizações. A engenharia de soft- ware é responsável por fornecer a base necessária para que a incorpo- ração dessa tecnologia ocorra de maneira sustentável e estruturada. Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. 30 papel da engenharia de software nas organizações digitais O avanço da transformação digital impôs (e impõe) novos e crescen- tes desafios às organizações, que passam a depender cada vez mais dos sistemas de software. Essa dependência não se restringe apenas à operação e à automação de processos. PARA SABER MAIS Transformação digital é integração da tecnologia em todas as áreas de uma organização, resultando em mudanças profundas na forma como ela opera, entrega valor aos clientes e se posiciona no mercado. É mais do que apenas adotar ferramentas tecnológicas. É uma mudança cultu- ral, organizacional e estratégica (Westerman; Bonnet; McAfee, 2014). Os sistemas de software passaram a ser uma peça fundamental na competitividade, cada vez mais acirrada, e a ocupar uma fatia cada vez maior no processo de inovação das companhias. A engenharia de soft- ware, como uma disciplina de engenharia voltada para todos os aspec- tos do desenvolvimento de software, desde a concepção até a manutenção, permite que as organizações digitais lidem com a complexidade cada vez maior dos sistemas de tal forma que estes não estejam apenas mais Introdução à engenharia de software 19aderentes aos requisitos de negócio, mas que sejam confiáveis e sus- tentáveis a longo prazo (Sommerville, 2018). NA PRÁTICA Quando falamos de sistemas de software sustentáveis, não estamos querendo associar essa ideia a qualquer prática ambiental. Na realidade, um software sustentável a longo prazo é aquele que, mesmo suscetível a constante mudanças, permanece estável, competitivo e com custo de manutenção razoável. Na prática, quando um sistema de software se torna instável, difícil e caro de manter, ele entra no fim do seu ciclo de vida. Nesse ponto, é considerada a sua substituição que, via de regra, não é algo simples e barato para as organizações. Atualmente, as organizações digitais operam em ambientes cada vez mais dinâmicos, competitivos e com alto grau de incertezas. A combina- ção desses fatores pressiona processos de desenvolvimento de soft- ware a serem mais adaptáveis e orientados às necessidades dos clientes. Significa dizer que, em um cenário de alta competitividade e com poucas certezas e definições, os sistemas de software estão não apenas susce- tíveis a mudanças, mas também que as alterações serão parte da rotina. A resposta rápida neste cenário define O quão este produto impactará positivamente (ou não) na competitividade da companhia. Pressman e Maxim (2021) ressaltam que as boas práticas e os pro- cessos definidos na engenharia de software favorecem a entrega contí- nua de valor, permitindo que sistemas de software sejam ajutados às mudanças de mercado e às expectativas dos usuários em um intervalo Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. de tempo que garanta sua permanência competitiva. Nesse cenário, tor- na-se correto afirmar que a disciplina oferece ferramentas prontas para uso, deixando aos desenvolvedores e engenheiros a responsabilidade de pensar e criar as soluções que atendam às expectativas dos usuários. 20 Engenharia de softwareA qualidade dos sistemas de software é um fator crítico para sucesso das organizações digitais. Embora seja um tema amplo que será tratado com profundidade mais adiante, entende-se qualidade de software como a medida de aderência do sistema à sua razão de existir: O quão bem ele resolve os problemas para os quais foi concebido e O grau de atendi- mento às exigências e expectativas dos usuários quanto aos seus serviços. Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. Na engenharia de software, temas como verificação, validação, ges- tão de riscos e qualidade são centrais. A aplicação sistemática dessas práticas reduz a incidência de erros, falhas e problemas, O que, por sua vez, melhora a experiencia do usuário e torna sistemas de software mais sustentáveis. Sistemas de software estão sujeitos a erros e falhas, O que, além de comum, é até certo ponto aceitável. Entretanto, dois fato- res críticos de sucesso se destacam nesse cenário: primeiramente, esforço máximo possível para detectar problemas antes que cheguem ao usuário final; e, em seguida, a forma como sistema e a equipe rea- gem na correção de um erro ou falha. IMPORTANTE Sistemas de software estão diretamente conectados ao cenário e ao pro- blema que pretendem resolver. Nesse contexto, considera-se sistema de missão crítica aquele cuja falha pode gerar consequências graves, como prejuízos financeiros, danos à propriedade, riscos à segurança pública ou até perda de vidas humanas. Tais sistemas são essenciais para fun- cionamento contínuo e seguro de operações vitais em setores como hos- pitais, aviação, defesa cibernética, sistemas financeiros (como bolsas de valores), transportes (como trens e metros) e sistemas industriais que oferecem risco à integridade física de seus operadores. Esses sistemas devem funcionar corretamente por longos períodos, com mínima margem de erro e são submetidos a processos rigorosos de tes- tes para garantir seu funcionamento seguro. Introdução à engenharia de software 21A engenharia de software tornou-se um elemento central nas organi- zações digitais, pois fornece os métodos, as práticas e os conhecimen- tos necessários para O desenvolvimento de sistemas que ocupam fatia central de suas estratégias. Seu papel vai além do desenvolvimento e da programação, alinhando a tecnologia aos objetivos estratégicos das empresas. A compreensão e a aplicação dos seus princípios constituem, portanto, pontos-chave para a sustentabilidade e inovação em um cená- rio cada vez mais competitivo e digital. 40 papel do engenheiro de software Qualquer processo inerente à engenharia, independentemente de qual seja, envolve a participação das interações e atividades humanas. Até mesmo a engenharia automobilística e suas linhas de produção com altíssimo grau de automação e robotização necessitam de pessoas na sua programação. Além disso, os produtos resultantes das diferentes engenharias têm, direta ou indiretamente, as pessoas como consumido- ras finais: habitações, pontes e barragens; carros, motos e aeronaves; sistemas químicos que tratam da qualidade da água que chega às resi- dências. Tudo que é produzido pela engenharia tem como destino uso cotidiano das pessoas. Na engenharia de software ocorre O mesmo. Embora ofereça um con- junto completo de métodos, processos e ferramentas destinados a melho- rar a qualidade do produto, um sistema de software não é apenas O resultado da aplicação de técnicas adequadas combinadas a habilida- des técnicas apropriadas (Pressman; Maxim, 2021). Os sistemas de soft- ware são projetados por pessoas, utilizados por pessoas e dão suporte Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. à interação entre pessoas assim como ocorre com carros, produtos das engenharias mecânica ou automobilística (Pressman; Maxim, 2021). 22 Engenharia de softwareMesmo sistemas que utilizam inteligência artificial (IA) e aprendizado de máquina têm seus algoritmos desenvolvidos por pessoas, utilizam dados e informações produzidos por pessoas e são igualmente utiliza- dos por pessoas na ponta. Conforme Pressman e Maxim (2021, p. 192) resumem, "características, comportamento e cooperação humanos são fundamentais no desenvolvimento prático de software". Dessa informa- ção pode-se extrair que os conhecimentos técnicos da engenharia de Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. software presentes na obra de Pressman e Maxim (2021), no livro de Sommerville (2018) e no Swebok Guide (Washizaki, 2024) são funda- mentais (para não dizer obrigatórios) para O profissional da área. Entre- tanto, eles não são suficientes. Aspectos humanos são igualmente essenciais para a formação desse profissional. Sommerville (2018) apresenta uma ideia semelhante, mas a amplia ao afirmar que O trabalho da pessoa engenheira de software vai além da aplicação de habilidades técnicas: parâmetros comportamen- tais éticos como responsabilidade moral, honestidade e integridade formam a base de um profissional respeitável. Isso porque, em diversas situações práticas, ocorre O contato com informações e dados de clien- tes e usuários, que devem ser tratados não apenas com cuidado, mas, sobretudo, com confidencialidade. Também é comum que profisionais da área se deparem com um tema que, para muitos técnicos, pode soar estranho: os direitos de propriedade intelectual. É necessário ter conhecimento sobre legislações de prote- ção à propriedade intelectual, patentes e direitos autorais? Sim. É indis- pensável zelar pela propriedade intelectual de clientes e empregadores, prevenindo uso indevido de informações que possam ser utilizadas por empresas concorrentes ou pessoas mal-intencionadas. Da mesma forma, é fundamental evitar apropriar-se de ideias ou inteligência de outros sem a devida anuência (Sommerville, 2018). Introdução à engenharia de software 23PARA SABER MAIS IEEE desenvolveu código de ética para os profissionais de engenha- ria de software, que orienta os princípios éticos e as condutas esperadas das pessoas engenheiras de software (IEEE Computer Society, [s. d.]). Seus princípios e diretrizes destacam a integridade e comportamento responsável; respeito e a justiça; impacto com bem-estar público; compromisso com a qualidade de software; a transparência e a ho- nestidade; e a proteção, a confidencialidade e a privacidade das informações. Pressman e Maxim (2021) apresentam uma série de características fundamentais para O que denominam de pessoa engenheira de software competente. Entre elas, destacam-se: senso de responsabilidade individual; consciência aguçada; honestidade extrema; resiliência sob pressão; elevado senso de lealdade; atenção aos detalhes; pragmatismo. Mas e O trabalho em equipe? poderíamos nos perguntar. Afinal, foram expostos aspectos e diretrizes no campo das individualidades e, Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. como se sabe, é trabalho em equipe que permeia cotidiano profisi- sonal. Muitos autores propõem soluções infalíveis para a criação de equi- pes altamente eficazes, eficientes, produtivas, sem conflitos e repletas de demais adjetivos superlativos que se possa imaginar. No entanto, con- forme observam Pressman e Maxim (2021), não existe receita mágica ou método infalível que garanta a formação de uma equipe consistente. 24 Engenharia de softwareAs diretrizes éticas e morais, bem como todos os elementos menciona- dos anteriormente, governam O comportamento individual dos profissio- nais e segui-los já constitui um excelente primeiro passo. Além desses aspectos, O senso de colaboração e a comunicação eficiente são ferra- mentas essenciais para O trabalho em equipe. Por fim, é preciso destacar que, para profissionais voltados às ciên- cias exatas e com fortes tendência às tecnologias, aspectos humanos Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. e sociais podem representar desafios que, muitas vezes, parecem intransponíveis. No entanto, é igualmente importante desenvolver a consciência sobre a relevância da pessoa engenheira de software no contexto corporativo e social, bem como compreender que a aplicação cotidiana de ações orientadas nestes guias pode fomentar a criação de hábitos que, além de benéficos, reduzem substancialmente as chances de fracassos em projetos de software. Considerações finais Iniciamos este capítulo propondo uma desconstrução da visão coti- diana sobre O software. Em vez de tratá-lo como um mero programa de computador, nos propusemos a pensá-lo como um produto técnico, dotado de complexidades e de importância estratégica na atualidade. Falamos sobre as bases conceituais que sustentam O entendimento do que é um sistema de software, destacando sua natureza imaterial, sua complexidade e a suscetibilidade a mudanças. Fizemos comparações com outras engenharias, como a mecânica e a civil, com objetivo de evidenciar que compreender software exige mais do que saber utilizá-lo: requer visão técnica, estratégica e, principal- mente, documental. Refletimos sobre a dificuldade de mensurar atribu- tos de software, como tamanho e complexidade, em razão de sua natureza Introdução à engenharia de software 25não física. A analogia com cálculo da área de um cômodo ilustra ade- quadamente a diferença entre produtos tangíveis e intangíveis. Chamamos a atenção para a constante evolução dos sistemas de soft- ware, que demandam atualizações frequentes por fatores externos (como legislação) e internos (como novos requisitos de negócio), reforçando a necessidade de uma abordagem robusta e estruturada associada ao seu desenvolvimento. Considerando a complexidade desse cenário, posicio- namos a engenharia de software como um campo essencialmente téc- nico e científico, que fornece métodos, processos e ferramentas para garantir qualidade, previsibilidade e sucesso no desenvolvimento de sis- temas. uso de boas práticas e padrões consolidados, comparado à receita de um bolo, exemplificou a importância de evitar improvisações, reforçando que desenvolver software não deve ser uma atividade artesa- nal, mas uma prática fundamentada na ciência e na melhoria contínua. Destacamos ainda papel central que a engenharia de software desempenha nas organizações digitais. Em um ambiente de transforma- ção digital acelerada e alta competitividade, software deixa de ser um mero suporte operacional para tornar-se parte essencial das estratégias de inovação e diferenciação competitiva. Nesse contexto, a engenharia de software permite não apenas a cons- trução de soluções tecnológicas eficazes, mas também a resposta ágil e contínua às demandas do mercado e dos usuários. Embora ferramen- tas e métodos sejam fundamentais, exploramos O papel das pessoas no desenvolvimento de software. O profissional da área, além de competên- cias técnicas, deve possuir valores éticos sólidos, consciência social e senso de responsabilidade. A convivência em equipe, embora desafia- Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. dora, é um elemento-chave para O sucesso, pois a comunicação e a cola- boração são ferramentas indispensáveis. Por fim, propomos uma reflexão a respeito da maturidade da enge- nharia de software. Ressalta-se que, em comparação com outras enge- nharias, trata-se de uma disciplina recente, ainda em processo de 26 Engenharia de softwareconsolidação. Isso, contudo, de forma alguma invalida sua importância; ao contrário, demanda maior esforço consciente de evolução e adoção de boas práticas. A estrutura científica e O pensamento organizado não limitam a criatividade, mas a potencializa. Propõem-se, assim, a adoção de uma postura crítica, responsável e colaborativa, reconhecendo a enge- nharia de software como elemento estratégico e transformador da socie- dade contemporânea. Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. Referências IEEE COMPUTER SOCIETY. Code of ethics. IEEE Computer Society, [s. d.]. Disponível em: Acesso em: 5 jul. 2025. IEEE COMPUTER SOCIETY. Swebok v3.0: guide to the software engineering body of knowledge. Versão 4.0. 2014. Disponível em: https://ieeecs-media.computer. Acesso em: 19 set. 2025. PFLEEGER, S. L. Engenharia de software: teoria e prática. 2. ed. São Paulo: Pearson Prentice Hall, 2004. PRESSMAN, R. S.; MAXIM, R. Engenharia de software: uma abordagem profissional. 9. ed. Porto Alegre: AMGH, 2021. SOMMERVILLE, Engenharia de software. 10. ed. São Paulo: Pearson Education do Brasil, 2018. WESTERMAN, G.; BONNET, D.; McAFEE, Leading digital: turning technology into business transformation. Boston: Harvard Business Review Press, 2014. WASHIZAKI, H. (ed.). Guide to the software engineering body of knowledge (Swebok Guide), Version 4.0. IEEE Computer Society, 2024. Disponível em: https:// em: 5 jul. 2025. Introdução à engenharia de software 27Capítulo 2 Ciclo de vida de desenvolvimento Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. de software Desenvolver um sistema de software é uma atividade complexa que exige organização e planejamento para garantir que O produto atenda às necessidades dos usuários, cada vez mais crescentes, dentro dos pra- e dos parâmetros de custos combinados. Compreender todas as fases pelas quais um sistema passa, desde O momento em que começamos a entender sua razão de existir e os pro- blemas que pretende resolver até sua retirada de operação, passando pela sua construção, é fundamental para O profissional da área de desen- volvimento de software. 29A organização das atividades em cada uma dessas fases é uma fer- ramenta importante para aumento da qualidade do produto e na pro- dutividade dos desenvolvedores, principalmente quando trabalhamos em equipe. Neste capítulo, falaremos sobre que é ciclo de vida de um sistema de software, que são processos de desenvolvimento e os motivos pelos quais eles são aliados importantes no nosso dia a dia. Ao longo da história da engenharia de software, diversos modelos de processo foram propostos para representar a forma como desenvol- vimento pode ser conduzido. Cada um traz uma abordagem distinta para lidar com as atividades do ciclo de vida, refletindo diferentes filosofias e contextos organizacionais. Apresentaremos essa linha evolutiva dos modelos de processo, desde O modelo em cascata, considerado O ponto de partida da organização sistemática do desenvolvimento, até as abordagens ágeis, mais adapta- tivas e iterativas. O objetivo não é chegarmos a conclusões sobre qual modelo é melhor ou pior. A proposta não é essa. A ideia é analisar, de forma crítica, racio- nal e comparativa, os principais modelos, detalhando suas característi- cas, aplicações e limitações. 10 que é ciclo de vida de software? Vamos considerar um produto da engenharia que é muito comum em nosso cotidiano: um carro. Um veículo passa por diversas fases no decor- Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. rer da sua vida útil. Mas que exatamente seriam essas fases? Todo projeto de automóvel nasce a partir de uma ideia. Projetistas reúnem-se para entender quais são problemas enfrentados pelos potenciais consumidores e identificar quais características um produto deve apresentar para solucioná-los. 30 Engenharia de softwarePor exemplo, em zonas urbanas altamente povoadas, vagas de esta- cionamento são raras e com espaço cada vez mais reduzido, logo, um veículo compacto seria uma boa solução. Em zonas rurais, transporte pesado e as condições rudimentares de algumas estradas pedem car- ros mais altos e com maior potência de motor. Uma vez idealizado projeto, é hora de materializá-lo. Nesse momento, produto entra em linha de produção, a qual as atividades são executa- Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. das de forma sincronizada, cada uma com O seu objetivo específico, para que, ao final do processo, veículo construído esteja de acordo com que fora pensado na fase de projeto. O carro, então, chega ao seu consumidor final, seu usuário. No entanto, esse não é fim do processo. Sabemos que todo veículo necessita, em algum momento, de reparos, por uma quebra, recall ou alguma melho- ria. Mesmo no caso de veículos que ainda não tenha passado por nenhuma dessas situações, sempre haverá a necessidade de manutenções pre- ventivas, como a troca de fluídos ou de filtros de ar. Em resumo, mesmo após entrae em uso, O produto continuará a demandar cuidados. Haverá um momento em que, mesmo com todas as manutenções e alterações disponíveis, não será mais possível impedir que esse carro se torne inadequado. Os custos das peças podem se tornar um grande entrave, assim como a falta de profissionais especializados naquele tipo de veículo ou, ainda, fato de os problemas que tais veículos se dispunham a resolver terem mudado ou simplesmente deixado de existir. Por exemplo, veículos projetados e desenvolvidos nos anos 1970 e 1980 eram voltados ao transporte de uma quantidade maior de passa- geiros, com famílias mais numerosas, cujos integrantes demandavam maior espaço para as pernas. Com famílias menores e espaço urbano cada vez mais reduzido, esses carros se tornaram ineficientes. Ciclo de vida de desenvolvimento de software 31Podemos estabelecer a mesma lógica sobre carros dotados de moto- res a combustão de alta cilindrada. A relação consumo e preço dos com- bustíveis, somada às justas preocupações ambientais, pede veículos compatíveis com uma matriz energética mais sustentável. Seja por fatores ligados à manutenção ineficiente, seja por uma sim- ples mudança do mercado ou nos próprios problemas a serem resolvi- dos, O carro chega ao fim de sua utilidade. É fim do seu ciclo de vida. A partir desse ponto, novos projetos surgem para resolver novos proble- mas, e O ciclo recomeça. O mesmo acontece com um sistema de software. Ele nasce a partir de uma necessidade, isto é, um problema a ser resolvido. É projetado e desenvolvido para atender a determinados requisitos e, posteriormente, é entregue ao usuário final. É comum que, mesmo após essa entrega, O produto passe por alterações, melhorias e correções e que, em determi- nado momento, a escolha entre mantê-lo ou substituí-lo prevaleça mais para lado da reposição. Damos O nome de "ciclo de vida" a uma sequência de fases e ativida- des que, de forma consistente, têm como objetivo a elaboração de um produto. Logo, como define Pfleeger (2004, 37), O "ciclo de vida do soft- ware descreve a vida do produto de software desde a concepção até a implementação, entrega, utilização e manutenção". termo ciclo de vida ou ciclo de vida de desenvolvimento de software são sinônimos de processo de desenvolvimento de software ou, simples- mente, processo de software (Sommerville, 2018). Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. 32 Engenharia de software2 Processos de desenvolvimento: que são e por que são importantes E que é, exatamente, um processo de desenvolvimento? Pensemos em mais uma analogia. Imagine que você tenha um terreno e deseja construir uma casa nele. O que você faria? Uma alternativa seria contratar uma equipe de construtores, apresen- Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. tar-lhes terreno, comprar alguns materiais de construção e simples- mente dizer: "Aí está! É só construir!". Outra possibilidade seria procurar um arquiteto ou engenheiro, agendar uma reunião e, em poucos minu- tos, declarar: "Quero uma casa, e terreno é este!", e voltar depois de algum tempo para ver resultado. Essas duas situações estapafúrdias seguramente resultariam em pro- blemas. No primeiro cenário, a equipe de construção até conseguiria construir uma casa, porém, sem um projeto definido, seriam grandes as chances de surgirem deformidades estruturais. Já na segunda hipótese, sem informações detalhadas sobre expectativas e necessidades, O arqui- teto não disporia de insumos suficientes para elaborar O projeto, logo, ao final do processo, sua casa construída seria muito diferente daquela ini- cialmente imaginada. O que podemos aprender com esse exemplo? Para que um projeto baseado em engenharia dê certo, é necessário seguir etapas bem defi- nidas, organizadas em uma sequência lógica. Primeiro levamos uma lista de desejos de casa para a pessoa responsável pela arquitetura, como a quantidade de dormitórios, banheiros, janelas, a disposição do jardim, entre outros aspectos. Com base nessas informações, um projeto é ela- borado e validado pelo cliente, passando então a servir como referência para a etapa de construção. Havendo qualquer tipo de discordância entre as expectativas e O projeto proposto, não se deve avançar para a fase seguinte da obra. Ciclo de vida de desenvolvimento de software 33É importante lembrar que, em cada uma dessas etapas, atividades são executadas, as quais também seguem uma determinada sequência. A pessoa responsável pela arquitetura terá a sua dinâmica de trabalho, desde O momento em que define escopo da obra até a entrega do pro- jeto. mesmo ocorre com a equipe de construção, que recebe dese- nho como guia e executa uma sequência de atividades, como O preparo do terreno, a construção das fundações, O levantamento das paredes e a instalação dos sistemas hidráulico e elétrico, para somente depois ini- ciar a pintura. O processo de desenvolvimento de software assemelha-se muito ao processo de construção de uma casa. Ele define que deve ser feito, quando e por quem, além de especificar quais produtos de trabalho devem ser gerados em cada etapa (Sommerville, 2018). Sommerville (2018) define O processo de desenvolvimento de soft- ware como um conjunto estruturado de atividades necessárias para espe- cificar, projetar, implementar e testar um sistema de software. Cabe destacar O termo "estruturado". Isso significa que as atividades seguem uma sequência lógica. Por exemplo, antes de iniciar um desen- volvimento de um sistema de software, é prudente levantarmos e vali- darmos as necessidades dos clientes e usuários. Da msma forma, antes de disponibilizar esse software ao usuário final, é recomendável testar ao máximo suas funcionalidades, a fim de garantir a menor taxa de erros possível. Pressman e Maxim (2021) apresentam uma concepção semelhante ao definirem um processo como um conjunto de atividades, ações e tare- Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. fas inter-relacionadas. Contudo, eles indicam que um processo deve ser orientado à qualidade do produto. Seu objetivo é produzir um ou mais sistemas de software de alta qualidade, com confiabilidade e dentro dos prazos e custos previamente combinados. Mas O que seriam, afinal, atividades, ações e tarefas? 34 Engenharia de softwareNo processo de construção de uma casa, identificam-se etapas como a elaboração do projeto e a execução da obra. Nesse contexto, as ativi- dades correspondem a essas etapas e possuem um caráter mais amplo. As ações e as tarefas, por sua vez, são executadas dentro de cada ativi- dade ou etapa. Por exemplo, a ação de construir um cômodo pressupõe um conjunto de tarefas, como levantar paredes e instalar O sistema elé- trico. Logo, ações constituem conjuntos de tarefas a serem realizadas Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. em cada etapa, e as tarefas são os passos mais específicos desse con- junto (Pressman; Maxim, 2021). Com esse compilado de ideias, podemos concluir que termos um pro- cesso bem definido, que obedeça a uma sequência lógica e apresente papéis, entradas e saídas nitidamente estabelecidos, é fundamental, pois fornece um direcionamento, isto é, uma forma de se fazer algo. Seguir um processo significa executar atividades e tarefas que fazem sentido de forma disciplinada e sistêmica, de tal forma que, ao final, aumentam-se as chances de termos um sistema de software que atenda às necessidades do negócio, com qualidade, menor incidência de erros e retrabalho, além de maior previsibilidade e eficiência. Os processos de desenvolvimento de uma casa e de um prédio, embora sejam da mesma àrea da engenharia civil e tenham como objetivo cons- truir algo a partir de uma lista de requisitos, são muito diferentes entre si. O tipo de produto, O projeto e até mesmo perfil da equipe envolvida são distintos, logo, os processos também são. mesmo acontece na engenharia de software. As variações nos con- textos dos projetos, nas necessidades dos clientes e no perfil da equipe fazem que não exista apenas uma maneira de desenvolver software. Dessa forma, não existe somente um processo ideal que se aplique a todas as situações. Ciclo de vida de desenvolvimento de software 353 Modelos de processos: do clássico ao ágil Um modelo é uma representação, isto é, uma especificação de algo, e um modelo de processo de software consiste na descrição das etapas a serem executadas, de sua sequência, das atividades que a compõem e de seus principais entregáveis (Pressman; Maxim, 2021). Segundo os autores, um modelo de processo é uma abstração estru- turada. Mas O que exatamente isso quer dizer? Significa que modelo descreve O que precisa ser feito em cada etapa e a ordem de execução, ou seja, qual etapa precede outra e quais produ- tos são esperados ao final de cada uma delas, mas não define explicita- mente a maneira pela qual cada tarefa deve ser realizada. Em resumo, os modelos indicam que deve ser feito, mas não como fazê-lo. No decorrer do tempo, houve a criação e adoção de modelos de pro- cesso, quais foram desenvolvidos e adaptados para acomodar novos contextos de projeto e O surgimento de novas demandas do mercado. No entanto, todos apresentam um ponto em comum: devem ter qua- tro atividades fundamentais especificação, desenvolvimento, valida- ção e evolução. Na fase de especificação, O objetivo é detalhar as funcionalidades e as restrições do escopo funcional do software; a fase de desenvolvimento é responsável pela construção propriamente dita; na validação, a meta é garantir minimamente que O sistema desenvol- vido esteja aderente ao que foi especificado; por fim, a etapa de evolu- ção engloba atividades relacionadas à manutenção do produto ao longo do tempo (Sommerville, 2018). Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. primeiro modelo de processo amplamente adotado na engenharia de software foi criado por Winston Royce, em 1970. Embora seja um modelo considerado polêmico, ele é útil para a visualização da divisão das etapas do desenvolvimento, bem como para a compreensão dos modelos que sucederam. 36 Engenharia de softwareTrata-se do modelo em cascata, ou waterfall, que recebe essa deno- minação justamente em razão da disposição em fluxo linear e sequen- cial de suas etapas. Cada etapa "desce" para a seguinte como uma queda d'agua, sem possibilidade de retorno simples à etapa anterior, conforme mostra a figura 1. Figura 1 Modelo em cascata Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. Definição dos requisitos Projeto do sistema e do software Implementação e testes de unidade Integração e teste de sistema Operação e manutenção Fonte: Sommerville (2018, p. 33). Vamos entender cada uma das etapas do modelo em cascata, fazendo uma analogia com um projeto de um veículo: Definição dos requisitos: como O próprio nome já diz, tentaremos levantar máximo de informações sobre O problema que quere- mos resolver. No projeto de um carro, buscaremos todos os pro- blemas de mercado e aquilo que os consumidores anseiam em ter no produto. Projeto do sistema e do software: a ideia é converter as necessi- dades em soluções de software e eventualmente de hardware. Buscar as peças que solucionam os problemas levantados na fase anterior, mas ainda em nível de projeto em um desenho que cha- mamos de arquitetura. É O que poderíamos chamar de design do carro, ou de uma planta de uma casa. Essa fase é interessante e Ciclo de vida de desenvolvimento de software 37ao mesmo tempo muito importante. Corrigir um erro de projeto no nível de desenho é mais simples e mais barato do que corrigir mesmo problema após a construção. Corrigir um problema de design de um veículo é mais barato que um recall. Implementação e teste de unidade: trata-se da fase de desenvol- vimento propriamente dita. Nessa fase, faz-se uso de tecnologias, programação e atividades de construção do software. É equiva- lente à linha de produção de um veículo e à fabricação de suas par- tes, ou, em termos de software, à escrita do código do sistema. Observe que ainda se utiliza termo "teste de unidade". Esse con- ceito será abordado com mais detalhes em capítulos posteriores, mas pode-se imaginar que, assim como na montagem de um veí- culo, testam-se individualmente suas partes como câmbio, motor e pneus de forma isolada, fora do "conjunto carro", com obje- tivo de validar se as partes estão em conformidade com com- portamento esperado. Integração e teste de sistema: nesta etapa, todas as partes que compõem um sistema são integradas, e verificamos se todo, agora atuando em conjunto, está fazendo aquilo que deveria fazer. A analogia é O de um carro completamente montado, testado e pronto para ser disponibilizado ao consumidor final. Operação e manutenção: com produto em uso, inicia-se a fase de operação e manutenção. Nessa etapa, são comuns as manu- tenções corretivas e evolutivas. A etapa de operação e manuten- ção costumam ser as mais longas do ciclo de vida do produto. Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. Ainda na figura 1, podemos notar que cada etapa é conectada à pró- xima por meio de setas direcionais. Isso representa outra característica marcante e importante do modelo em cascata: cada fase só começa após a conclusão da fase anterior. 38 Engenharia de softwareÉ possível observar que O modelo é relativamente simples e fácil de entender, que constitui uma de suas vantagens. Entretanto, ele tam- bém apresenta características de rigidez e inflexibilidade, que, por sua vez, não podem ser consideradas vantagens propriamente ditas. Mas que isso significa? Conforme discutido anteriormente, uma fase do modelo em cascata só se inicia após a conclusão completa da fase anterior. Isso quer dizer Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. que só podemos começar a desenvolver um sistema de software após todos os requisitos e necessidades terem sido cuidadosamente mapea- dos e validados pelo usuário. E qual O problema dessa abordagem? À medida que temos sistemas grandes, complexos e com um elevado número de requisitos, a fase de levantamento e especificaçãopode se estender por muito tempo. Esse prolongamento pode gerar, no cliente, a percepção de que nada de muito valor está sendo feito a não ser a pro- dução de uma grande quantidade de documentação. E se alguns requisitos sofrerem alterações após a finalização da fase de construção? Como comentamos anteriormente, mudanças de requi- sitos são praticamente inevitáveis. Nesse caso, a possibilidade da corre- ção só será possível após a conclusão do desenvolvimento do sistema. Nesse cenário, voltaremos, portanto, a fase de definição dos requisitos, projeto e assim por diante. O tempo despendido nesse processo de retro- cesso poderá impactar diretamente a competitividade do produto e da própria organização. Por fim, outra situação que pode incomodar é O fato de que O cliente ou usuário só passa a ter algo de material para ver e testar somente no final de todo ciclo de desenvolvimento. Nesse momento, é comum sur- gir a frase: "Isso não era exatamente O que eu imaginava", O que tende a gerar uma enorme frustração entre todas as partes envolvidas. Ciclo de vida de desenvolvimento de software 39Diante disso, em quais situações modelo em casacata pode ser utilizado? Em cenários cujos requisitos são bem delimitados e estáveis, ou seja, sem possibilidade de grandes mudanças. Por exemplo, projetos de sis- temas destinados à esfera pública, cujo escopo é definido de forma rígida e imutável a partir do momento em que são colocados em processo de concorrência. Nesses casos, todos os requisitos são descritos no estrito rigor, incluindo não apenas O que deve ser feito, mas também O que expli- citamente não faz parte do escopo do projeto. Diante disso, por que deveríamos estudar um modelo de processo antigo, rígido e utilizado em tão específicas situações? Tal questionamento faz todo sentido. Conforme mencionamos ante- riormente, modelos de processo foram criados e modificados no decorrer do tempo justamene para se adaptarem a novos contextos e atenderem a novos problemas. waterfall é O modelo base. Todos os modelos que vieram depois foram criados e desenvolvidos a partir dele. Por isso, torna-se essencial compreendê-lo de forma aprofundada. No final da década de 1970 e início da de 1980, surgiram dois mode- los cujo propósito era fornecer uma alternativa ao modelo em cascata no que diz respeito à flexibilidade e ao tratamento da mutabilidade dos requisitos: os modelos incremental e iterativo. A ideia central do modelo incremental é O software desenvolvido em partes menores, chamadas de incrementos, e cada incremento vai agre- gando funcionalidades ao produto. Isso quer dizer que as etapas do modelo em cascata como análise de requisitos, projeto, implementa- Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. ção e testes deixam de existir? Não. Essas etapas continuam presentes, inclusive seguindo a mesma sequência lógica. A diferença é que, em vez de mapearmos todos os requisitos do sistema antes do início do desenvolvimento, como propõe O modelo em cascata, levantamos partes desses requisitos e iniciamos 40 Engenharia de softwareas atividades de construção, testes e implantação com base neles. Esse ciclo é repetido até que todas as necessidades do usuário estejam incor- poradas ao produto, como mostra a figura 2. Figura 2 Modelo incremental Incremento 1 Incremento 2 Definição dos Definição dos Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. requisitos requisitos Projeto do sistema Projeto do sistema e do software e do software Implementação e Implementação e testes de unidade testes de unidade Integração e teste Integração e teste de sistema de sistema Operação e Operação e manutenção manutenção Essa forma de trabalho apresenta vantagens importantes, como a possibilidade de entregas parciais e utilizáveis, além de facilitar a identi- ficação de erros em etapas menores. Em contrapartida, traz desafios em relação à complexidade na integração dos incrementos ao produto final, O que requer um cuidado maior no planejamento. O modelo iterativo possui uma concepção muito parecida com a do modelo incremental. Ele também contempla todas as etapas do modelo em cascata e tem como objetivo oferecer uma abordagem mais flexível e adaptável quanto a volatilidade dos requisitos. Contudo, os dois mode- los diferem em alguns pontos: O modelo incremental enfatiza a entrega do sistema em partes; O iterativo entrega versões melhoradas do produto. no modelo incremental, os requisitos são definidos na fase inicial do ciclo de desenvolvimento; no iterativo, esses requisitos podem ser descobertos e ajustados ao longo do ciclo. Ciclo de vida de desenvolvimento de software 41No modelo iterativo, O sistema de software é desenvolvido em ciclos repetidos, chamados de iterações. Cada iteração tem como objetivo pro- duzir uma versão aprimorada do sistema. Essa versão pode incorporar novas funcionalidades, correção de erros e melhorias de desempenho, por exemplo. Esse modelo é ideal para cenários em que os requisitos mudam com frequência ou ainda não estão totalmente definidos. Ele apresenta van- tagens e desafios, descritos a seguir: Vantagens: possibilita entregas menores e utilizáveis, promovendo a geração de valor com maior cadência e aumentando bem-es- tar aos usuários; permite ajustes no decorrer do ciclo de desenvol- vimento, diminuindo tempo de reação a mudanças e a eventuais problemas; redução dos riscos do projeto, como implementar um sistema inteiro baseado em requisitos incorretos. Desafios: há uma possibilidade real de retrabalho, uma vez que processo de construir e reconstruir é frequente em função da vola- tilidade dos requisitos; exige maior envolvimento dos usuários, pois seus feedbacks constituem insumos de entrada para O ciclo de desenvolvimento. NA PRÁTICA É muito comum a utilização de abordagens híbridas de modelos de pro- cesso, que pode inclusive resultar no surgimento de novos modelos. É caso do modelo espiral, proposto por Barry Boehm em 1986, que com- bina características dos modelos sequenciais, como em cascata, com Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. a flexibilidade e a repetição presentes nos modelos iterativos. modelo recebe esse nome porque processo é representado por uma espiral em expansão, na qual cada volta corresponde a uma nova versão ou fase do sistema (Pressman; Maxim, 2021). 42 Engenharia de softwareOutro exemplo é modelo rational unified process (RUP), considerado iterativo e incremental. Criado em 1996 pela empresa Rational Software que empresta seu nome ao modelo e foi adquirida pela IBM no início dos anos 2000 -, RUP tem como princípio a adaptabilidade a diferen- tes tipos de projeto e oferece diretrizes, práticas, modelos e templates amplamente utilizados no desenvolvimento de software (Péraire et al., 2007). Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. É possível que, a essa altura, surja a percepção de que se está nova- mente estudando modelos antigos, e que não valeria a pena dedicar tan- tas páginas a conceitos que não seriam mais úteis atualmente. No entanto, os princípios do modelo iterativo combinados aos do modelo incremental tais como flexibilidade, colaboração entre equipe e cliente e ênfase na entrega de pequenas partes do produto, possibi- litando a entrega contínua de valor fomentaram a criação dos mode- los de desenvolvimento classificados como ágeis", Esses modelos apresentam grande aceitação e utilização no contexto atual da engenha- ria de software. termo "ágil" pode, à primeira vista, nos remeter à ideia de rapidez e nos fazer pensar que ao utilizá-lo vamos desenvolver um sistema de soft- ware com maior velocidade quando comparado a qualquer outro modelo. Entretanto, a agilidade está relacionada à capacidade de responder a mudanças com flexibilidade e rapidez. Isso ocorre porque os métodos ágeis assumem a imprevisibilidade natural de um sistema de software, seja em decorrência de fatores externos, seja pelo simples fato de pró- prio cliente estar em constante aprendizado sobre O que ele quer e pre- cisa para O produto (Gomes, 2014). É natural que, a esta altura, surja um momento de confusão. Afinal, tudo O que propõe modelos ágeis já estavam presentes nos modelos iterativo e incremental, não é verdade? Ciclo de vida de desenvolvimento de software 43Correto. E estavam mesmo! Acontece que a ideia de criar modelos que aproveitassem as características principais dos modelos iterativo e incremental somou-se às diretrizes formalizadas em 2001 no Manifesto Ágil (Beck et al., 2001). Dessa convergência, surgiram os modelos de desenvolvimento ágeis. PARA SABER MAIS Manifesto Ágil é um documento redigido em 2001 por profissionais de destaque da engenharia de software, como Kent Beck, Martin Fowler, Robert Martin e Jeff Sutherland. Seu objetivo foi propor uma alterna- tiva mais leve, flexível e colaborativa aos modelos tradicionais (como modelo em cascata), considerados pouco flexíveis diante das constan- tes mudanças nas necessidades dos clientes. Nesse documento, são enumerados uma série de princípios e valores para uma nova maneira de se desenvolver sistemas de software (Gomes, 2014). Scrum e O eXtreme Programming (XP) são exemplos de modelos baseados nos princípios ágeis. Scrum enfatiza aspectos de gestão, planejamento e melhoria contínua, e O XP concentra-se em práticas téc- nicas, voltadas à arquitetura e ao desenvolvimento do produto (Gomes, 2014). PARA SABER MAIS Scrum é um modelo ágil iterativo e incremental, proposto por Ken Sch- waber e Jeff Sutherland em 1995, com foco nos aspectos organizacio- Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. nais e gerenciais do trabalho. Embora não explicite exatamente como trabalho deve ser feito, Scrum fornece papéis, eventos e artefatos que auxiliam as equipes na organização e na evolução contínua. 44 Engenharia de softwareEsse modelo propõe a organização do trabalho em ciclos curtos, chama- dos sprints, apoiando-se em pilares como colaboração, adaptação e entrega contínua de valor, além de princípios como definição nítida de papéis, reuniões estruturadas e transparência nos entregáveis (Cruz, 2018). Esse é momento oportuno para destacar duas reflexões importan- Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. tes. Primeiramente, a importância em estudar não apenas a história dos modelos de processo, mas, sobretudo, suas bases, pois é a partir delas que surgiram novas abordagens para solucionar novos problemas. Por fim, não existem modelos intrinsecamente melhores ou piores. Cada um atende a propósitos específicos e mostra-se mais adequado a determinados contextos. Por exemplo, modelos iterativos e incremen- tais, assim como abordagens ágeis, tendem a ser eficazes em um cená- rio de equipes menos maduras ou de requisitos pouco voláteis. Já O modelo em cascata revela-se inadequado em cenários marcados por requisitos pouco claros ou com mudanças constantes. Considerações finais Começamos este capítulo com uma visão geral sobre O ciclo de vida de software, destacando a complexidade do desenvolvimento de siste- mas e a importância de organização e planejamento. Para ilustrar, fize- mos um paralelo com a vida útil de um carro, a fim de exemplificar as diferentes fases pelas quais um software passa, desde O momento da sua idealização até a sua descontinuidade. Ressaltou-se, nesse contexto, que compreender essas fases é essencial para garantir a qualidade do produto e a produtividade das equipes. Na sequência, abordamos os processos de desenvolvimento, recor- rendo a outra analogia a construção de uma casa para destacar a importância do pensamento sistêmico, da organização e do respeito Ciclo de vida de desenvolvimento de software 45à sequência lógica das etapas. A ideia central apresentada foi a de que, assim como em projetos da engenharia civil, O desenvolvimento de software requer a adoção de um processo estruturado, com fases bem definidas, responsabilidades nítidas e entregáveis previamente estabelecidos. Em seguida, passamos a tratar dos modelos de processo de software como representações estruturadas dessas etapas, destacando que tais modelos descrevem O que deve ser feito e em que ordem, mas não neces- sariamente como realizar cada tarefa. Destacamos que quatro ativida- des principais estão presentes em todos os modelos: especificação, desenvolvimento, validação e evolução. Abordamos também a linha evo- lutiva desses modelos, iniciando pelo modelo em cascata, passando pelos modelos incremental e iterativo, até chegar às abordagens ágeis. modelo em cascata, primeiro a ser amplamente utilizado na enge- nharia de software, caracteriza-se por etapas rígidas e sequenciais. Ape- sar de sua simplicidade e nitidez, vimos suas limitações em contextos nos quais requisitos apresentam elevada volatilidade. Em contrapar- tida, modelos incremental e iterativo foram apresentados como alter- nativas mais flexíveis, por permitirem entregas parciais e ciclos sucessivos com melhorias constantes. Por fim, introduzimos conceito de modelos ágeis, destacando Manifesto Ágil como marco na consolidação de uma nova filosofia de desenvolvimento de software, pautada na colaboração, na adaptabili- dade e na entrega contínua de valor. Nesse contexto, métodos como Scrum e XP foram apresentados como principais exemplos. Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. Encerramos O capítulo com reflexões acerca da importância de com- preender os fundamentos dos modelos e a ideia de que a escolha do modelo deve ser contextualizada. Não existem modelos melhores ou pio- res, mas sim mais ou menos adequados a cada realidade. 46 Engenharia de softwareReferências CRUZ, F. Scrum e Agile em projetos: guia completo. 2. ed. Rio de Janeiro: Brasport, 2018. E-book. GOMES, A. F. Agile: desenvolvimento de software com entregas frequentes e foco no valor de negócio. São Paulo: Casa do Código, 2014. E-book. PÉRAIRE, et al. The IBM rational unified process for system Z. New York: IBM Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. Corporation, 2007. PFLEEGER, S. L. Engenharia de software: teoria e prática. 2. ed. São Paulo: Pearson Prentice Hall, 2004. PRESSMAN, R. S.; MAXIM, R. Engenharia de software: uma abordagem profissional. 9. ed. Porto Alegre: AMGH, 2021. SOMMERVILLE, Engenharia de software. 10. ed. São Paulo: Pearson Education do Brasil, 2018. Ciclo de vida de desenvolvimento de software 47Capítulo 3 Métodos ágeis Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. Nos últimos anos, desenvolvimento de software passou por trans- formações importantes motivadas principalmente pelas mudanças nas demandas do mercado, na complexidade dos sistemas e na necessidade de entregas mais rápidas e adaptáveis. Os modelos de processo ditos "tradicionais" - como em cascata e RUP, essenciais na solidificação da engenharia de software como disci- plina foram desafiados por sua falta de flexibilidade quanto às mudan- ças que ocorrem durante ciclo de vida de um software. 49Considerando contexto de uso, os modelos ágeis surgem como uma resposta à necessidade de uma abordagem menos rígida, mais colaborativa e mais direcionada à entrega de valor, com maior cadência, ao usuário final. Neste capítulo, abordaremos os modelos ágeis como um contraponto aos processos tradicionais, destacando suas principais características, princípios, possibilidades de uso, pontos positivos e desafios. Explorare- mos três métodos amplamente adotados no contexto ágil: O Scrum, com sua estrutura baseada em papéis, cerimônias e iterações bem definidas; Kanban, com uma abordagem mais visual do fluxo contínuo de traba- e eXtreme Programming (XP), que enfatiza aspectos mais técni- COS, como as boas práticas de programação e integração constante. Por fim, apresentaremos O modelo Lean, frequentemente associado à manufatura enxuta, mas que vem sendo adaptado ao contexto do desenvolvimento de software como contraponto aos próprios modelos ágeis, oferecendo novas perspectivas sobre a organização e condução de projetos de software em ambientes modernos. 10 Manifesto Ágil As condições contemporâneas de mercado, nas quais a engenharia de software está inserida, impõem desafios diferentes daqueles à época da sua concepção, nas décadas de 1960 e 1970. As necessidades do mercado e os desejos dos usuários mudam sem aviso prévio, tornando muito difícil (ou quase impossível) definir todos os requisitos de um projeto antes de começá-lo de fato. Além disso, Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. mesmo após mapeados de forma completa, são grandes as chances de que esses requisitos sofram alterações no decorrer do ciclo de vida do desenvolvimento (Pressman; Maxim, 2021). 50 Engenharia de softwareOs modelos de processo lineares, ou clássicos, como em cascata e RUP, propõe mapeamento total dos requisitos e das necessidades, que servem de insumo para O projeto de todo O sistema, qual, por sua vez é base para desenvolvimento do sistema, que será testado somente após sua finalização por inteiro. Esses modelos não são eficientes para um contexto dinâmico e volátil, pois à medida que os requisitos mudam ou novos são descobertos, torna-se inevitável O retrabalho no projeto e Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. na realização de novos testes durante a implementação (Sommerville, 2018). Segundo Sommerville (2018), é importante frisar que as abordagens lineares continuam sendo indicadas em cenários cujos requisitos são imu- táveis ou para determinados tipos de sistemas de software, como sis- temas de missão crítica, nos quais a análise completa é fundamental. Nesse contexto, termo agilidade surge na engenharia de software como uma ferramenta capaz de ajudar no processo de assimilar, tratar e responder a uma mudança de forma rápida e eficiente (Pressman; Maxim, 2021). Cabe destacar que em nenhum momento estamos falando em desen- volver sistemas em maior velocidade quando comparados à adoção de outros modelos de processo. O problema a ser resolvido é: como adap- tar O ciclo de vida de desenvolvimento a bases que mudam com frequência? Os modelos iterativo e incremental já nasceram com objetivo de acomodar essas novas necessidades, com entregas menores, em inter- valos de tempo reduzido e maior feedback do usuário final. Ainda assim, tais modelos não se mostraram suficientemente eficientes, embora fos- sem eficazes. Uma das razões apontadas por Pressman e Maxim (2021) é fato de que O processo de desenvolvimento é composto por pessoas, não robôs. Trata-se, portanto, de um processo sujeito a falhas e caracterizado por Métodos ágeis 51uma grande heterogeneidade de estilos de trabalho, habilidades, níveis de criatividade e organização. Dessa forma, além de um processo bem definido, faz-se necessária uma mudança de cultura, baseada em uma nova filosofia de trabalho. É nesse cenário que surge Manifesto Ágil (Beck et al., 2001). O ano era 2001, quando um grupo composto por profissionais de des- taque da engenharia de software, como Kent Beck, Martin Fowler, Robert Martin e Jeff Sutherland, reuniu-se com objetivo de propor uma nova forma de pensar O desenvolvimento de software: mais colaborativa, mais leve e que privilegiasse a equipe. Buscava-se algo que pudesse somar aos modelos iterativos e incrementais já existentes (Gomes, 2014). Essa reunião resultou em um documento, denominado manifesto, no qual são enumerados valores e princípios com intuito de facilitar a comunicação entre todos os membros da equipe (não apenas desenvol- vedores), incorporar cliente ou usuário como parte integrante do time de desenvolvimento e eliminar entregáveis que não agreguem valor direto ao produto (Pressman; Maxim, 2021). O Manifesto Ágil (Beck et al., 2001) começa com a seguinte afirma- ção: "estamos descobrindo maneiras melhores de desenvolver software, fazendo-o nós mesmos e ajudando outros a fazê-lo. Por meio desse tra- balho, passamos a valorizar", seguida da descrição dos quatro valores: Indivíduos e interações mais que processos e ferramentas. Software funcionando mais que documentação abrangente. Colaboração com cliente mais que negociação de contratos. Material para uso exclusivo de aluno matriculado em curso de Educação a Distância da Rede Senac EAD, da disciplina correspondente. Proibida a reprodução e 0 compartilhamento digital, sob as penas da Lei. © Editora Senac São Paulo. Responder a mudanças mais que seguir um plano. O documento é encerrado com a seguinte declaração: "ou seja, mesmo havendo valor nos itens à direita, valorizamos mais os itens à esquerda." 52 Engenharia de software

Mais conteúdos dessa disciplina