Prévia do material em texto
Disciplina Engenharia de Software Unidade 1 Introdução à engenharia de software Aula 1 Introdução à engenharia de software Introdução Olá, estudante! Vamos explorar os fundamentos dessa disciplina essencial no desenvolvimento de sistemas de software con�áveis e e�cientes. A Engenharia de Software nos capacita a criar soluções que desempenham um papel fundamental na indústria tecnológica e impactam diretamente a sociedade moderna. No decorrer dessa disciplina, entenderemos as principais práticas e etapas usadas no desenvolvimento de software, da idealização até a melhoria contínua. Vamos conhecer metodologias ágeis, modelos de processos e princípios que são base para as futuras atividades pro�ssionais. Espero que esta disciplina contribua signi�cativamente para o desenvolvimento de habilidades e conhecimentos para criar produtos de alta qualidade que atendam às necessidades dos clientes e usuários. Disciplina Engenharia de Software A Engenharia de Software é uma área dinâmica e desa�adora. É importante lembrar que cada linha de código traz impacto direto na vida das pessoas. Objetivos fundamentais da engenharia de software A história da engenharia de software é marcada por uma notável evolução, mas também por desa�os e crises que moldaram a maneira como desenvolvemos e mantemos software. Desde seus primórdios até os dias de hoje, essa disciplina passou por transformações signi�cativas, impulsionadas tanto pelo progresso tecnológico quanto pelas complexidades inerentes à criação de sistemas cada vez mais so�sticados. Nos anos 1950 e 1960, a engenharia de software estava em sua infância. Programadores individuais escreviam códigos sem muita padronização. À medida que a demanda por software cresceu, tornou-se claro que abordagens mais estruturadas eram necessárias para evitar a ine�ciência e a manutenção problemática. Surgiram as metodologias em cascata e em V, que enfatizavam o planejamento detalhado e a divisão do desenvolvimento em fases. De acordo com Fabris e Perini (2014) apesar da década de 1970 trazer consigo métodos de engenharia de software como como Análise Estruturada (DcMarco, 1978), infelizmente, trouxe também a primeira crise de software. Projetos maiores frequentemente ultrapassavam prazos e orçamentos, resultando em sistemas instáveis. A abordagem em cascata mostrou-se rígida para acomodar mudanças frequentes e evolução dos requisitos. Isso levou à busca por métodos mais �exíveis, culminando no Disciplina Engenharia de Software surgimento das metodologias ágeis nas décadas seguintes. O Manifesto Ágil de 2001, destacou a colaboração, a adaptação e a entrega contínua como princípios-chave. Na esteira da crescente complexidade dos sistemas, a engenharia de software enfrentou novos desa�os. A ascensão da internet e das aplicações distribuídas trouxe à tona questões de segurança e escalabilidade. As abordagens tradicionais muitas vezes não eram adequadas para lidar com esses cenários, o que levou ao desenvolvimento de arquiteturas orientadas a serviços (SOA) e microsserviços. A segunda metade dos anos 2000 testemunhou a proliferação de práticas DevOps. A separação tradicional entre desenvolvimento e operações mostrou-se ine�ciente para entregar software de alta qualidade de maneira rápida e con�ável. O DevOps uniu essas equipes, promovendo a automação, a integração contínua e a entrega contínua, acelerando o ciclo de desenvolvimento. No entanto, a evolução da engenharia de software também trouxe novos desa�os. A complexidade levou ao surgimento de problemas de segurança, com ataques cibernéticos explorando vulnerabilidades em sistemas e aplicativos. A crescente dependência de bibliotecas de terceiros também introduziu o risco de falhas devido a componentes obsoletos ou comprometidos. Além disso, o avanço da interconexão de dispositivos na era da Internet das Coisas (IoT) gerou desa�os de compatibilidade, interoperabilidade e privacidade. A explosão de dados e a necessidade de análise em tempo real impulsionaram o desenvolvimento de novas técnicas de engenharia de software, como aprendizado de máquina e inteligência arti�cial. Assim, a engenharia de software evoluiu de abordagens ad hoc para metodologias estruturadas e, posteriormente, para abordagens ágeis e DevOps. Essa evolução foi impulsionada por desa�os como a crise do software, que destacou a necessidade de métodos mais �exíveis e colaborativos. No entanto, novas complexidades surgiram à medida que a tecnologia avançou, demandando maior atenção à segurança, escalabilidade e compatibilidade. Conforme entramos em uma era cada vez mais conectada e tecnologicamente avançada, a engenharia de software continua a se adaptar e se reinventar para atender às demandas em constante evolução. Evolução e desa�os: a história da engenharia de software Disciplina Engenharia de Software Para garantir que o desenvolvimento de software seja e�ciente, con�ável e capaz de atender às necessidades dos usuários e das organizações, existem objetivos que são o alicerce sobre o qual as práticas de engenharia de software são construídas. A seguir, os principais tópicos sobre a natureza do software e da engenharia de software segundo Fabris e Perini (2014): 1. Qualidade e con�abilidade do software: um dos principais objetivos da engenharia de software é produzir software de alta qualidade e con�ável. Isso envolve a criação de sistemas que atendam aos requisitos especi�cados, sejam robustos o su�ciente para lidar com situações adversas e tenham um baixo número de defeitos. A busca por qualidade inclui testes rigorosos, revisões de código e processos de garantia de qualidade que visam identi�car e corrigir problemas antes que o software seja implantado. 2. Entrega pontual e e�ciente: a engenharia de software visa entregar projetos dentro dos prazos e orçamentos de�nidos. Isso envolve a utilização de metodologias de gerenciamento de projetos e�cazes, como a metodologia ágil, que promove ciclos de desenvolvimento curtos, iterações frequentes e colaboração entre as equipes de desenvolvimento e os stakeholders. A e�ciência também é alcançada por meio da automação de processos, integração contínua e práticas DevOps, que aceleram o desenvolvimento e a entrega de software. 3. Adaptação às mudanças: em um cenário tecnológico em constante evolução, a engenharia de software deve ser capaz de se adaptar às mudanças nos requisitos e nas condições do ambiente. Isso signi�ca projetar sistemas de maneira modular e �exível, de modo que as alterações possam ser incorporadas sem afetar todo o sistema. As metodologias ágeis, Disciplina Engenharia de Software por exemplo, incentivam a adaptação contínua, permitindo que os requisitos sejam ajustados ao longo do ciclo de desenvolvimento. 4. Satisfação do cliente: a engenharia de software visa atender às necessidades dos clientes e usuários �nais. Isso envolve entender profundamente os requisitos e expectativas dos stakeholders, garantindo que o software entregue atenda a essas necessidades de maneira e�caz. A comunicação constante e a colaboração com os clientes são essenciais para garantir a satisfação do cliente ao longo do desenvolvimento do projeto. 5. Documentação e manutenção adequadas: a criação de documentação clara e abrangente é um objetivo crucial da engenharia de software. Isso facilita a compreensão do sistema por parte dos desenvolvedores, facilitando a manutenção e a evolução contínua do software. A documentação também é valiosa para os usuários �nais, ajudando-os a utilizar o software de maneira e�ciente. Desse modo, os objetivos da engenharia de software visam garantir a qualidade, con�abilidade, e�ciência, adaptação e satisfação do cliente no desenvolvimento de software. Esses objetivos são alcançados por meio de práticas rigorosas, metodologias ágeis, colaboração e comunicação e�cazes, além de um foco contínuo na melhoria dos processos e na evolução das tecnologias. Moldando o caminho: modelos e evolução de processos de desenvolvimento de software Ao longo dasdécadas, várias abordagens foram desenvolvidas para guiar as equipes de desenvolvimento desde a concepção até a entrega e manutenção do software. Segue lista de modelos e evolução de processos de desenvolvimento de software: 1. Modelos de desenvolvimento de software Modelo em cascata: introduzido na década de 1970, o modelo em cascata é um dos primeiros e de acordo com Fabris e Perini (2014, p. 80) a�rmam que é “referenciado na maioria dos livros de engenharia de software ou manuais de padrões de software”. Ele divide o desenvolvimento em fases sequenciais, como requisitos, design, implementação, testes e manutenção. Cada fase depende da conclusão da anterior. Embora tenha Disciplina Engenharia de Software limitações na acomodação de mudanças de requisitos e na interação com os clientes, ainda é usado em cenários onde os requisitos são estáveis e bem compreendidos. Modelo em espiral: surgindo na década de 1980, o modelo em espiral incorpora a �exibilidade necessária para acomodar mudanças e incertezas. Ele divide o desenvolvimento em ciclos, cada um envolvendo planejamento, riscos, engenharia, avaliação e ação. Cada ciclo reavalia e aprimora o produto com base no feedback e nas lições aprendidas. Segundo Fabris e Perini (2016, p. 82) “sua principal inovação é guiar o processo de desenvolvimento gerado a partir desse modelo com base em análise de riscos e um planejamento que é realizado durante toda a evolução do desenvolvimento”. Modelo iterativo e incremental: a abordagem iterativa e incremental, popularizada nas metodologias ágeis, divide o projeto em pequenas iterações, cada uma resultando em um incremento funcional do software. Isso permite que as equipes entreguem valor ao cliente mais cedo, colham feedback e realizem ajustes conforme necessário. 2. Evolução dos ciclos de vida Ciclo de vida em cascata: o ciclo de vida em cascata, associado ao modelo em cascata, foi o precursor dos processos de desenvolvimento formais. Embora tenha sido útil em projetos bem de�nidos, sua rigidez levou à busca de abordagens mais �exíveis. Ciclo de vida incremental: O ciclo de vida incremental introduzido pela abordagem iterativa foi uma resposta à necessidade de adaptação a mudanças e à entrega contínua de valor. Ele permite a entrega de partes funcionais do sistema em cada iteração, bene�ciando-se do feedback e melhorando continuamente. Ciclo de vida ágil: ele representa uma mudança signi�cativa na forma como o desenvolvimento é realizado. Metodologias como Scrum e Kanban enfatizam iterações curtas, colaboração contínua com os clientes e adaptação constante. Essa abordagem coloca a satisfação do cliente e a entrega contínua no centro do processo. Ciclo de vida devops: o ciclo de vida DevOps incorpora a colaboração entre as equipes de desenvolvimento e operações, enfatizando a automação e a integração contínua. Ele visa acelerar a entrega de software, mantendo a qualidade e a con�abilidade. Ciclo de vida em espiral: Embora tenha sido menos adotado do que outras abordagens, o ciclo de vida em espiral continua a ser relevante para projetos que envolvem riscos signi�cativos e incertezas. Ele enfatiza a avaliação constante dos riscos e a adaptação em cada ciclo. Ao longo das décadas, observamos a evolução dos modelos e ciclos de vida de desenvolvimento de software, cada um projetado para abordar diferentes necessidades e desa�os. O modelo em cascata, pioneiro na década de 1970, trouxe estrutura, mas limitações na adaptação a mudanças. Com o surgimento do modelo em espiral na década de 1980, a �exibilidade tornou-se uma prioridade, permitindo acomodar incertezas e riscos. No entanto, foi com a abordagem iterativa e incremental, popularizada pelas metodologias ágeis, que se alcançou uma entrega mais rápida e feedback contínuo, colocando o cliente no centro do processo. Além disso, novos ciclos de vida, como o DevOps, trouxeram colaboração intensiva e automação para acelerar a entrega sem comprometer a qualidade. A variedade de abordagens disponíveis nos mostra que não existe uma solução única, mas sim a importância de escolher a que melhor Disciplina Engenharia de Software se adapta às necessidades especí�cas de cada projeto, mantendo sempre a busca pela satisfação do cliente e a melhoria contínua como princípios fundamentais do desenvolvimento de software.] Videoaula: Introdução à engenharia de software Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Olá, estudante! Adentrar o mundo da engenharia de software é embarcar em uma jornada de descobertas. Desde os primeiros dias da programação até os complexos sistemas atuais, a evolução tem sido constante. Neste vídeo resumo, exploraremos como a engenharia de software evoluiu ao longo do tempo, os objetivos que a guiam e os modelos de desenvolvimento que moldaram nossa abordagem. Vamos desvendar os mistérios por trás das metodologias ágeis, ciclos de vida e muito mais. Vamos começar! Saiba mais Disciplina Engenharia de Software O Manifesto Ágil é um pequeno documento de texto baseado em 4 valores e 12 princípios para o desenvolvimento ágil de software. Con�ra o artigo “O que é o Manifesto Ágil: direto ao ponto!”, para saber mais sobre o assunto. SILVA, E. O que é o Manifesto Ágil: direto ao ponto! Geekhunter. Carreira de programador. 2020. Referências FABRIS, P. P. G; PERINI, L. C. Processos de software. Londrina: Editora e Distribuidora Educacional S.A., 2014. BECK, K. S. K. S. J. E. A. Manifesto for Agile Software Development. Disponível em: http://agilemanifesto.org acesso em setembro de 2023. Aula 2 Requisitos Introdução https://blog.geekhunter.com.br/manifesto-agil/ http://agilemanifesto.org/ Disciplina Engenharia de Software Olá, estudante! Na engenharia de software, os requisitos desempenham um papel fundamental ao estabelecerem a base para o desenvolvimento de sistemas e�cazes e bem-sucedidos. São as especi�cações que de�nem as funcionalidades, características e restrições de um software, servindo como guia para os desenvolvedores durante todo o ciclo de vida do projeto. A correta identi�cação e documentação dos requisitos asseguram que todas as partes interessadas tenham uma compreensão clara e concisa do que o software irá realizar e como ele deve operar. Através de processos de elicitação, análise e validação, os requisitos são moldados para atender às necessidades dos usuários e ao contexto do sistema, evitando ambiguidades e garantindo a base para o planejamento, o projeto e a implementação bem-sucedidos do software. Fundamentos cruciais para o desenvolvimento de software Disciplina Engenharia de Software A engenharia de requisitos é o alicerce sobre o qual repousa o desenvolvimento de software e�ciente e bem-sucedido. Ela se refere ao processo de elicitação, análise, documentação e gerenciamento dos requisitos de um sistema. Para compreender sua importância, é importante explorar dois tipos de requisitos: os funcionais e os não funcionais. De acordo com Artero (2016) os requisitos funcionais são funções que o sistema deve ser capaz de executar. Eles descrevem o que o sistema deve fazer em termos de entradas, processamento e saídas, como em um sistema de gerenciamento de biblioteca, os requisitos funcionais podem incluir a capacidade de cadastrar novos livros, pesquisar e emprestar exemplares. A origem dos requisitos funcionais remonta às primeiras fases da história da engenharia de software. Durante os anos 1960 e 1970, quando os primeiros sistemas complexos começaram a ser desenvolvidos, os engenheiros perceberam a necessidade de uma abordagem estruturada para de�nir as capacidades dos sistemas. Esse foi um passo crucial para a evolução da engenharia de requisitos. Enquanto os requisitos funcionais se concentram no "o que" do sistema, os requisitos não funcionais abordam o "como". Eles especi�cam as características quenão são diretamente relacionadas às funcionalidades, mas que são cruciais para a qualidade e o desempenho do sistema. Isso pode incluir aspectos como desempenho, segurança, usabilidade e con�abilidade. Os requisitos não funcionais têm suas raízes na necessidade de estabelecer critérios claros para a aceitação e o desempenho dos sistemas. À medida que os sistemas se tornaram mais complexos e integrados em diversas esferas da sociedade, como na área da saúde e na indústria aeroespacial, a importância dos requisitos não funcionais cresceu exponencialmente. Disciplina Engenharia de Software A integração e�caz de requisitos funcionais e não funcionais é o cerne da engenharia de requisitos. Isso implica não apenas identi�car e documentar esses requisitos, mas também gerenciá-los ao longo do ciclo de vida do projeto. Isso garante que as necessidades dos stakeholders sejam atendidas de forma abrangente e que o sistema entregue esteja alinhado com as expectativas. Ao longo dos anos, diversas abordagens e metodologias foram desenvolvidas para aprimorar a prática da engenharia de requisitos. Desde os modelos de processos tradicionais, como o modelo em cascata, até abordagens ágeis e colaborativas, como o Scrum, a disciplina tem evoluído para se adaptar às demandas e complexidades crescentes dos projetos de desenvolvimento de software. Em última análise, a engenharia de requisitos é o alicerce que sustenta a construção de sistemas de software de alta qualidade. Ao compreender e aplicar de forma e�caz os requisitos funcionais e não funcionais, os engenheiros de software são capazes de criar soluções que atendem não apenas às expectativas dos stakeholders, mas também aos padrões de desempenho e qualidade exigidos pelo cenário tecnológico atual. É assim que a engenharia de requisitos continua a desempenhar um papel central na evolução e na inovação da indústria de software. Integrando funcionalidades e e�ciência Na criação de sistemas de software, a Engenharia de Requisitos desempenha um papel central. É ela que traça o caminho, desde a concepção das funcionalidades essenciais até a garantia de que o sistema atenda aos mais elevados padrões de e�ciência e desempenho. Para tanto, Disciplina Engenharia de Software segundo Sommerville e Kontoya (2011), são necessários dois tipos distintos de requisitos: os funcionais e os não funcionais. Os requisitos funcionais são a espinha dorsal do sistema pois moldam as operações que o sistema deve ser capaz de realizar, de�nindo claramente o que ele é capaz de fazer. Em um sistema de gerenciamento de vendas, por exemplo, os requisitos funcionais podem incluir a capacidade de cadastrar produtos, calcular preços, processar pagamentos e gerar relatórios. Esses requisitos são os que muitas vezes vêm à mente quando pensamos no desenvolvimento de software, pois estão diretamente ligados às funcionalidades visíveis e utilizáveis pelo usuário. Eles são a ponte entre a concepção da ideia e a implementação prática do sistema. Enquanto os requisitos funcionais são a melodia, os requisitos não funcionais são a harmonia que a complementa. Eles não descrevem o que o sistema faz, mas sim como ele o faz. Esses requisitos incluem características como desempenho, segurança, usabilidade e con�abilidade. Por exemplo, determinar que o sistema deve ser capaz de processar milhares de transações por segundo é um requisito não funcional crucial em sistemas de pagamento on-line. Embora possam não ser tão evidentes quanto os requisitos funcionais, os requisitos não funcionais são igualmente vitais. Eles de�nem a qualidade e a e�ciência do sistema, garantindo que ele seja capaz de desempenhar suas funções de maneira con�ável e e�caz, mesmo sob condições adversas. A Engenharia de Requisitos atua como o maestro desta sinfonia de funcionalidades e e�ciência. Ela coordena a elicitação, análise e documentação de todos os requisitos, sejam eles funcionais ou não funcionais. Além disso, garante que esses requisitos sejam gerenciados ao longo do ciclo de vida do projeto, assegurando que o sistema resultante esteja em total sintonia com as expectativas e necessidades dos stakeholders. Ao integrar de forma e�caz requisitos funcionais e não funcionais, a Engenharia de Requisitos permite que o sistema não apenas cumpra suas tarefas, mas o faça de maneira otimizada, segura e con�ável. Essa disciplina é o elo que transforma uma ideia em um sistema robusto e de alta qualidade, capaz de superar desa�os e se destacar em um cenário competitivo. Em suma, a Engenharia de Requisitos é a partitura que guia o desenvolvimento de software. Ao compreender e aplicar de forma e�caz os requisitos funcionais e não funcionais, os engenheiros de software são capazes de criar sistemas que não apenas atendem às expectativas dos usuários, mas também de�nem novos padrões de e�ciência e excelência na indústria de software. É assim que a Engenharia de Requisitos continua a ser a base sólida e melódica sobre a qual repousa o sucesso dos projetos de desenvolvimento de software. Requisitos funcionais, não funcionais e a arte da engenharia de requisitos Disciplina Engenharia de Software A Engenharia de Requisitos é o alicerce sobre o qual repousa o desenvolvimento de software e�caz. Ela guia o processo desde a concepção da ideia até a materialização do sistema desejado. Para compreender sua importância, é essencial explorar dois tipos de requisitos: os funcionais e os não funcionais, e observar como a Engenharia de Requisitos os une em uma abordagem prática. Os requisitos funcionais delineiam as operações que um sistema deve ser capaz de realizar. Eles representam o "o que" do sistema, descrevendo as funcionalidades que ele deve possuir. Por exemplo, em um sistema de e-commerce, os requisitos funcionais podem incluir a capacidade de adicionar produtos ao carrinho, calcular o total da compra e �nalizar a transação. Vamos imaginar o desenvolvimento de um aplicativo de agenda virtual. Os requisitos funcionais podem abranger a capacidade de criar, editar e excluir eventos, além de enviar noti�cações para lembretes. Esses requisitos funcionais de�nem as operações essenciais que o sistema oferecerá ao usuário, fornecendo um quadro claro do que é esperado do produto. Enquanto os requisitos funcionais focam no "o que", os requisitos não funcionais se concentram no "como". De acordo Artero (2016), são características qualitativas do sistema, dada uma funcionalidade e não estão diretamente ligadas às operações do sistema, mas que são cruciais para a sua qualidade e desempenho. Isso pode incluir aspectos como a segurança, a escalabilidade, a usabilidade e a con�abilidade do sistema. Voltando ao exemplo do aplicativo de agenda, os requisitos não funcionais podem abordar a necessidade de o sistema ser capaz de suportar milhares de usuários simultaneamente, garantindo uma experiência de uso �uida e sem interrupções. Além disso, podem especi�car a importância da segurança dos dados, exigindo criptogra�a para proteger informações sensíveis. A Engenharia de Requisitos atua como o arquiteto do projeto, unindo requisitos funcionais e não funcionais em uma abordagem coesa. Ela envolve a elicitação, análise e documentação de todos os requisitos, garantindo que sejam claros, completos e consistentes. Disciplina Engenharia de Software Também, a Engenharia de Requisitos se estende ao longo do ciclo de vida do projeto, assegurando que os requisitos sejam gerenciados de forma e�caz à medida que o sistema é desenvolvido e evolui. Suponha que uma equipe de desenvolvimento esteja criando um sistema de gestão de estoque para uma empresa. A Engenharia de Requisitos entraria em ação para de�nir os requisitos funcionais, como a capacidade de adicionar, remover e atualizar produtos no inventário. Ao mesmo tempo, garantiria que os requisitos não funcionais, como a necessidade de o sistema ser capaz de lidar com picos de demanda durante períodos de promoção, também fossem considerados. Em última análise, a Engenharia de Requisitosé a ligação vital entre concepção e realização. Ao compreender e aplicar de forma e�caz os requisitos funcionais e não funcionais, os engenheiros de software podem criar sistemas que não apenas atendem às expectativas dos usuários, mas também de�nem novos padrões de e�ciência e excelência na indústria de software. É assim que a Engenharia de Requisitos continua a ser o alicerce sólido sobre o qual repousa o sucesso dos projetos de desenvolvimento de software. Videoaula: Requisitos Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Olá, estudante! Este vídeo resumo desvendará os segredos por trás da engenharia de software. Exploraremos os componentes essenciais no desenvolvimento de aplicativos e sistemas de software: os requisitos funcionais, os requisitos não funcionais e a engenharia de requisitos. Juntos, vamos entender como esses elementos moldam cada aspecto do software que usamos diariamente. Vamos começar nossa jornada rumo ao conhecimento profundo da criação de software de qualidade. Saiba mais Disciplina Engenharia de Software Pode ser uma tarefa difícil de�nir o que são requisitos funcionais. Um requisito funcional pode ser um recurso óbvio, mas às vezes pode não ser tão óbvio assim. O artigo “O que são Requisitos Funcionais: Exemplos, De�nição, Guia Completo” é realmente um guia completo para leitura. VISURE. O que são Requisitos Funcionais: Exemplos, De�nição, Guia Completo. Visure Solutions. Referências https://visuresolutions.com/pt/blog/functional-requirements/ Disciplina Engenharia de Software ARTERO, M. A. Gestão de projetos de software. Londrina: Editora e Distribuidora Educacional S.A., 2016. SOMMERVILLE, I.; KOTONYA, G. Engenharia de software. 9. ed. São Paulo: Pearson, 2011. Aula 3 Métodos ágeis Introdução Disciplina Engenharia de Software Olá, estudante! Métodos ágeis representam uma abordagem inovadora para o gerenciamento e desenvolvimento de projetos, especialmente no cenário de tecnologia e software. Surgindo como resposta aos desa�os das metodologias tradicionais, os métodos ágeis enfatizam a �exibilidade, colaboração e adaptação contínua. O Manifesto Ágil, publicado em 2001, destaca valores fundamentais como a valorização de indivíduos e interações, entrega de software funcionando, colaboração com clientes e resposta à mudança. Scrum, Kanban, Extreme Programming (XP) são algumas das práticas ágeis amplamente adotadas. A iteração constante, o foco em pequenas entregas incrementais e a contínua retroalimentação são características centrais desses métodos, permitindo equipes a se adaptarem rapidamente a mudanças nas necessidades dos clientes e no ambiente de negócios. Explorando as características centrais dos métodos ágeis Disciplina Engenharia de Software Os Métodos Ágeis representam uma abordagem revolucionária na gestão de projetos, focando na �exibilidade, colaboração e adaptação constante. Surgiram como resposta à rigidez dos métodos tradicionais de gestão de projetos, como o modelo cascata, que muitas vezes resultavam em projetos atrasados e insatisfatórios para os clientes. Segundo Pressmann (2011), o movimento Ágil teve início no início dos anos 2000, quando 17 desenvolvedores de software se reuniram para discutir uma nova forma de abordar o desenvolvimento de software. O resultado foi o Manifesto Ágil, um documento que estabelece os valores e princípios fundamentais para a gestão de projetos ágeis. Entre os valores destacam-se o indivíduo e a interação sobre processos e ferramentas, e a resposta à mudança sobre a seguir um plano estrito. O Scrum é um dos métodos ágeis mais populares e amplamente utilizados. Ele se baseia na divisão do trabalho em ciclos curtos e iterativos chamados de "sprints". Cada sprint tem duração �xa, geralmente entre duas e quatro semanas, durante as quais uma equipe se compromete a entregar um conjunto de funcionalidades prontas para uso. O papel do Scrum Master é essencial nesse processo, sendo responsável por facilitar a equipe e remover obstáculos que possam impedir o progresso. O Product Owner, por sua vez, é responsável por de�nir as prioridades do projeto e garantir que a equipe esteja focada nas entregas mais valiosas para o cliente. Disciplina Engenharia de Software O XP é outro método ágil que enfatiza a colaboração e a qualidade do software. Ele promove práticas como programação em pares, testes automatizados e integração contínua, visando a redução de erros e a produção de um código mais limpo e e�ciente. Uma das práticas distintivas do XP é a programação em pares, em que dois programadores trabalham juntos em um mesmo código. Isso possibilita a revisão constante do código, a troca de conhecimento e a redução de erros. Os Métodos Ágeis trouxeram uma série de benefícios para a gestão de projetos. A �exibilidade proporcionada pela abordagem ágil permite uma maior capacidade de adaptação a mudanças nos requisitos do projeto, o que é especialmente importante em ambientes de rápida evolução tecnológica. Além disso, a colaboração intensiva entre os membros da equipe promove um ambiente mais motivador e engajador, resultando em produtos de maior qualidade e que atendem de forma mais e�caz às necessidades dos clientes. Desse modo, os Métodos Ágeis, com destaque para o Scrum e o XP, representam uma revolução na gestão de projetos. Suas práticas e valores transformaram a forma como equipes desenvolvem software, resultando em produtos mais alinhados com as expectativas do cliente e em processos mais e�cientes e adaptativos. Ao adotar essas abordagens ágeis, as organizações estão mais bem posicionadas para enfrentar os desa�os de um mundo em constante evolução tecnológica e atender às demandas dos clientes de maneira e�caz e inovadora. Transformando a engenharia de software: métodos ágeis em ação Disciplina Engenharia de Software Os Métodos Ágeis representam uma abordagem dinâmica e �exível na gestão de projetos, destacando-se por sua capacidade de adaptação a mudanças e ênfase na colaboração entre equipes. Dois dos métodos ágeis mais proeminentes são o Scrum e o Extreme Programming (XP), cada um com suas próprias características distintas. Princípios fundamentais dos Métodos Ágeis: guiados por uma série de princípios fundamentais que incluem a valorização da colaboração entre indivíduos e equipes, priorizando a entrega contínua de software funcional e adaptando-se a mudanças de requisitos ao invés de seguir um plano rígido. Além disso, enfatizam a comunicação clara e e�caz, bem como a busca constante pela excelência técnica. Scrum: é um método ágil amplamente utilizado, especialmente na gestão de projetos de desenvolvimento de software. Ele opera em ciclos chamados "sprints", geralmente com duração de duas a quatro semanas. Durante cada sprint, a equipe se compromete a Disciplina Engenharia de Software entregar um conjunto especí�co de funcionalidades prontas para uso. O Scrum Master desempenha um papel vital ao facilitar a colaboração e remover obstáculos que possam prejudicar o progresso da equipe. O Product Owner, por outro lado, é encarregado de de�nir as prioridades do projeto e garantir que a equipe se concentre nas entregas mais valiosas para o cliente. Extreme Programming (XP): O XP é outro método ágil notável, focando na excelência técnica e na produção de software de alta qualidade. Ele viabiliza práticas como a programação em pares, em que dois programadores trabalham juntos em um mesmo código, oferecendo revisões constantes e trocas de conhecimento. Além disso, o XP valoriza testes automatizados e integração contínua, o que reduz signi�cativamente a ocorrência de erros e ajuda na manutenção de um código limpo e e�ciente. Etapas comuns nos Métodos Ágeis Independentemente do método escolhido, os Métodos Ágeis compartilham algumas etapas comuns. Inicialmente, ocorre a concepção doprojeto, em que os objetivos e requisitos são de�nidos. Em seguida, a equipe planeja os sprints (no caso do Scrum) ou iterações (no caso do XP), dividindo o trabalho em tarefas especí�cas. Durante a execução, a equipe realiza reuniões diárias de acompanhamento do progresso e ajusta as estratégias conforme necessário. Ao �nal de cada interação, é feita uma revisão para avaliar o que foi alcançado e planejar o próximo ciclo. Assim, os Métodos Ágeis, incluindo o Scrum e o XP, representam uma abordagem inovadora na gestão de projetos. Seus princípios, características e etapas proporcionam às equipes as ferramentas necessárias para lidar com projetos de forma e�caz, adaptando-se às mudanças e entregando produtos de alta qualidade. O incremento do uso de ferramentas digitais em processos industriais também favoreceu nas últimas décadas a utilização dos métodos ágeis em ambientes fabris, contribuindo para o controle à distância de linhas de produção e manutenção de processos. Metodologias ágeis na prática Disciplina Engenharia de Software Os Métodos Ágeis, incluindo o Scrum e o Extreme Programming (XP), desempenham um papel crucial na engenharia de software, revolucionando a forma como os projetos são planejados, executados e entregues. Essas abordagens promovem uma mentalidade de �exibilidade, colaboração e foco na entrega de valor ao cliente. Primeiro, é importante destacar que os Métodos Ágeis são altamente adaptáveis e podem ser personalizados para atender às necessidades especí�cas de cada projeto de engenharia de software. Isso contrasta com os métodos tradicionais, que seguem planos rígidos e in�exíveis. Ainda que muitos gestores de projetos industriais ou projetos de manutenção industrial considerem que métodos ágeis não possam substituir totalmente, todos os tipos de projetos, as metodologias mais tradicionais e antigas de controle e gestão de projetos, eles podem ser utilizados em pacotes de trabalho isolados de tais projetos. O Scrum é amplamente utilizado na engenharia de software. Ele organiza o trabalho em iterações chamadas "sprints", geralmente com duração de duas a quatro semanas. Durante cada sprint, a equipe de desenvolvimento trabalha em um conjunto de funcionalidades especí�cas, priorizadas pelo Product Owner. A equipe se auto-organiza para planejar, projetar, codi�car e testar essas funcionalidades. O Scrum Master atua como facilitador, garantindo que a equipe tenha as condições ideais para o trabalho e removendo obstáculos que possam surgir. O foco está na colaboração contínua e na entrega de incrementos de software funcionais. Ao �nal de cada sprint, há uma revisão para demonstrar o trabalho concluído e uma retrospectiva para melhorar o processo. O XP, por sua vez, coloca uma ênfase ainda maior na qualidade do código e na colaboração. Os programadores frequentemente trabalham em pares, revisando e melhorando constantemente o Disciplina Engenharia de Software código. Testes automatizados são fundamentais, garantindo que as alterações não causem regressões. A integração contínua é uma prática central no XP, em que as alterações são integradas no repositório principal de forma frequente e automática, veri�cando a estabilidade do software. O cliente está envolvido de perto no processo, dando feedback constante e priorizando os recursos desejados. Ambos os métodos ágeis incentivam a comunicação aberta e transparente entre a equipe e os stakeholders, o que é essencial na engenharia de software para garantir que todos tenham uma compreensão clara dos objetivos e progresso do projeto. Portanto, os Métodos Ágeis, como o Scrum e o XP, são aplicados na engenharia de software de maneira a promover a �exibilidade, a colaboração e a entrega contínua de valor ao cliente. Eles se destacam pela adaptação constante às mudanças, pela ênfase na qualidade do código e pela participação ativa dos clientes no processo de desenvolvimento. Essas abordagens têm revolucionado a forma como os projetos de engenharia de software são conduzidos, resultando em produtos mais e�cientes e alinhados com as necessidades do mercado. Videoaula: Métodos ágeis Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Olá, estudante! Neste vídeo resumo exploraremos dois dos principais frameworks ágeis: Scrum e Extreme Programming (XP). Vamos mergulhar nas características que tornam essas abordagens tão e�cazes e entender como elas podem transformar a maneira como enfrentamos desa�os de desenvolvimento. Preparado? Vamos lá! Saiba mais Disciplina Engenharia de Software O artigo “Metodologias Ágeis: o que são, como implementar as 4 principais” vai te ajudar a entender o conceito por trás da metodologia ágil e os principais métodos para aplicar da melhor forma em uma empresa. VINAL, V. Metodologias Ágeis: o que são, como implementar as 4 principais. RockContent. 2018. Referências https://rockcontent.com/br/blog/metodologias-ageis/ Disciplina Engenharia de Software PRESSMANN, R. S. Engenharia de software: uma abordagem pro�ssional. 7. ed. Porto Alegre: AMGH, 2011. Aula 4 Controle de versões Introdução Disciplina Engenharia de Software Olá, estudante! O controle de versões de software é uma prática fundamental no desenvolvimento de programas, permitindo o rastreamento e gerenciamento das mudanças ao longo do tempo. Ele proporciona uma abordagem estruturada para acompanhar as edições, correções e aprimoramentos feitos em um código-fonte, garantindo a integridade e a colaboração e�ciente entre os membros da equipe. Com o uso de sistemas de controle de versões, como Git e Subversion, os desenvolvedores podem registrar alterações, criar ramos para experimentações e fusionar contribuições de forma organizada. Além disso, o controle de versões oferece a capacidade de reverter para estados anteriores, facilitando a resolução de problemas e o desenvolvimento iterativo. Dessa forma, essa prática é essencial para otimizar a colaboração, a estabilidade e a evolução contínua de projetos de software. Gerenciamento de versões e mudanças de software: fundamentos e benefícios Disciplina Engenharia de Software O versionamento de código fonte é uma prática essencial no desenvolvimento de software moderno, permitindo que equipes de programadores trabalhem de forma colaborativa e mantenham um registro organizado das alterações feitas ao longo do tempo. Esta disciplina envolve a utilização de sistemas de controle de versão, como Git, Subversion e Mercurial, para monitorar e documentar todas as modi�cações realizadas no código, na documentação e nos recursos do projeto. A história do versionamento de código remonta ao início da computação. Um dos primeiros sistemas de controle de versão foi o SCCS (Source Code Control System), criado pela Bell Labs na década de 1970. Desde então, a prática evoluiu signi�cativamente, dando origem a uma variedade de ferramentas e metodologias robustas para gerenciamento de versões. Uma parte crucial do versionamento de código é a de�nição de marcos conhecidos como "baseline" e "release". A "baseline" representa um estado estável e bem-sucedido do código em um determinado momento, servindo como uma referência sólida para futuras comparações e desenvolvimentos. Por sua vez, a "release" é uma versão especí�ca do software que é disponibilizada para os usuários �nais. Ela marca um ponto de entrega o�cial, indicando que o produto atingiu um nível de estabilidade e funcionalidade que a equipe considera adequado para uso externo. Além disso, o versionamento de código possibilita a criação de ramos (branches) de desenvolvimento, o que permite que diferentes partes da equipe trabalhem em funcionalidades ou correções separadas sem interferir diretamente no código principal. Isso impulsiona a experimentação com novas ideias sem comprometer a integridade do projeto principal. Disciplina Engenhariade Software Posteriormente, esses ramos podem ser unidos (merged) ao código principal de forma organizada e controlada. Outra vantagem signi�cativa é a capacidade de reverter ações. Se um problema ou erro for identi�cado, é possível retornar a uma versão anterior do código, desfazendo as modi�cações problemáticas. Isso é particularmente valioso em situações de crises, permitindo que as equipes restabeleçam rapidamente a funcionalidade estável anterior e resolvam problemas com maior agilidade. Assim, o versionamento de código é uma prática fundamental no desenvolvimento de software moderno. Ela promove a colaboração e�caz, a organização estruturada das modi�cações, a facilidade na solução de problemas e a garantia da integridade do código ao longo do tempo. Ao adotar sistemas de controle de versão, as equipes de desenvolvimento estão mais bem preparadas para enfrentar os desa�os do desenvolvimento de software e criar produtos de alta qualidade de maneira mais e�caz. A Importância das versões de itens de con�guração Disciplina Engenharia de Software No desenvolvimento de software, o conceito de versões não se limita apenas ao código-fonte, mas se estende a todos os elementos que compõem um sistema, incluindo documentos, recursos e con�gurações. Esses elementos, conhecidos como "itens de con�guração", são gerenciados através de um sistema de controle de con�guração que permite o controle preciso de suas versões ao longo do tempo. Esse processo, conhecido como "versões de itens de con�guração", desempenha um papel vital na garantia da estabilidade, rastreabilidade e colaboração no desenvolvimento de software. As versões de itens de con�guração são essenciais para rastrear mudanças em todos os aspectos de um projeto de software. Isso inclui não apenas o código-fonte, mas também documentos como especi�cações de requisitos, manuais do usuário e diagramas de arquitetura. Disciplina Engenharia de Software Ao atribuir uma versão única e identi�cável a cada alteração, os desenvolvedores podem acompanhar a evolução de todos os componentes do sistema de forma granular e organizada. Um dos principais benefícios das versões de itens de con�guração é a capacidade de recriar o estado do sistema em qualquer ponto do tempo. Isso é fundamental para garantir a reprodutibilidade e a consistência do desenvolvimento, bem como para atender a requisitos regulatórios e de conformidade. Se necessário, é possível retroceder para versões anteriores de itens de con�guração especí�cos, permitindo que equipes corrijam erros e problemas sem comprometer o desenvolvimento contínuo. Além disso, o gerenciamento de versões de itens de con�guração facilita a colaboração entre equipes. Com a capacidade de compartilhar e acessar versões especí�cas de documentos, recursos e con�gurações, as equipes podem trabalhar de forma coordenada e consistente, minimizando a possibilidade de con�itos e garantindo que todos os membros estejam alinhados com a versão mais recente. Outra vantagem é a rastreabilidade. Quando cada mudança é registrada com uma versão, é possível identi�car rapidamente qual versão introduziu um problema ou qual versão implementou um determinado recurso. Isso simpli�ca a resolução de problemas e ajuda a manter um registro claro das decisões tomadas ao longo do desenvolvimento. Ademais, o gerenciamento de versões de itens de con�guração promove a con�abilidade e a robustez do processo de desenvolvimento. Ao manter um histórico completo de todas as modi�cações, as equipes têm a capacidade de entender e corrigir possíveis erros de forma mais e�ciente, resultando em um software mais estável e con�ável. Em suma, as versões de itens de con�guração são um componente vital do gerenciamento de con�guração de software. Elas oferecem controle, rastreabilidade e colaboração aprimorados, permitindo que equipes de desenvolvimento controlem todas as facetas de um projeto de maneira organizada e controlada. Ao adotar uma abordagem estruturada para o gerenciamento de versões de itens de con�guração, as equipes estão mais bem equipadas para lidar com a complexidade do desenvolvimento de software e entregar produtos de alta qualidade de maneira consistente. O processo de versionamento proporciona não apenas um registro preciso das mudanças, mas também uma base sólida para aprimorar a e�ciência e a con�abilidade em todas as fases do desenvolvimento de software. Baseline e Release: marcos essenciais no gerenciamento de software Disciplina Engenharia de Software No contexto do gerenciamento de software, "baseline" e "release" são dois conceitos importantes que desempenham papéis vitais na organização e no progresso de um projeto. Ambos são marcos fundamentais que contribuem para a estabilidade, rastreabilidade e comunicação e�caz em todo o ciclo de vida do desenvolvimento de software. Uma baseline é uma referência estável e controlada de um conjunto especí�co de itens de con�guração em um determinado momento. Ela serve como ponto de partida seguro para o desenvolvimento subsequente, capturando o estado atual do software, documentação e outros componentes. A criação de uma baseline é frequentemente feita em marcos signi�cativos do projeto, como o término de uma fase de desenvolvimento ou a conclusão bem-sucedida de uma etapa importante. A partir dessa baseline, as alterações são registradas e gerenciadas, permitindo que as equipes controlem as mudanças em relação a um ponto de referência con�ável. Uma release, por outro lado, é a disponibilização de um conjunto especí�co de funcionalidades e melhorias para os usuários ou clientes. Ela marca o momento em que um conjunto de alterações aprovadas é considerado pronto para o uso. Cada release é uma versão do software que atende aos critérios de qualidade e funcionalidade estabelecidos, sendo frequentemente numeradas ou rotuladas com versões, permitindo que os usuários identi�quem claramente a iteração do software que estão utilizando. A relação entre baseline e release é fundamental para a gestão do desenvolvimento de software. A baseline serve como a base a partir da qual as releases são construídas. Cada release é uma progressão ordenada a partir da baseline correspondente, integrando alterações e melhorias desde a criação da baseline até o lançamento da release. A baseline fornece o contexto e a Disciplina Engenharia de Software estabilidade necessários para avaliar a prontidão de uma release, garantindo que ela seja consistente e con�ável para os usuários �nais. No que diz respeito às ferramentas utilizadas para gerenciar baselines e releases, existem várias opções disponíveis no mercado. Algumas das mais populares incluem o Git, que é um sistema de controle de versão distribuído amplamente utilizado, e o Subversion (SVN), um sistema de controle de versão centralizado. Além dessas, há também outras ferramentas especí�cas para gerenciamento de con�guração, como o Apache Maven e Jenkins, que facilitam a criação de builds e a automação de processos de release. A prática de criar baselines e lançar releases é essencial para o sucesso do desenvolvimento de software em várias frentes. Primeiro, ajuda a equipe a manter o foco e a visibilidade durante o processo de desenvolvimento, permitindo que os membros da equipe compreendam claramente as mudanças ocorridas desde a última baseline. Em segundo lugar, proporciona aos stakeholders uma visão concreta do progresso do projeto, uma vez que as releases re�etem os incrementos de funcionalidade e valor entregues. Por �m, a criação de baselines e a liberação de releases facilitam a resolução de problemas, uma vez que é possível isolar e analisar o estado especí�co do software em cada ponto do tempo. Assim, esses são conceitos essenciais no gerenciamento de software. A baseline fornece estabilidade e controle, enquanto a release disponibiliza melhorias concretas aos usuários �nais. Juntas, essas práticas contribuem para a organização e�ciente, a transparência e a qualidade do desenvolvimento de software.O uso de ferramentas como Git, Subversion, Apache Maven e Jenkins aprimora ainda mais a gestão de baselines e releases, proporcionando às equipes as capacidades necessárias para um desenvolvimento bem-sucedido e consistente. Videoaula: Controle de versões Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Olá, estudante! Exploraremos os conceitos essenciais de baseline e release no desenvolvimento de software. Descobriremos como as baselines estabelecem referências sólidas para o progresso, enquanto as releases entregam funcionalidades aos usuários. Aprenderemos como esses marcos vitais mantêm o desenvolvimento organizado, transparente e focado. Saiba mais Disciplina Engenharia de Software Saiba mais sobre o que é controle de versão e as suas vantagens, no artigo indicado a seguir: MICROSOT LEARN. O que é controle de versão?. 2023. Referências https://learn.microsoft.com/pt-br/devops/develop/git/what-is-version-control Disciplina Engenharia de Software ARTERO, M. A. Gestão de projetos de software. Londrina: Editora e Distribuidora Educacional S.A., 2016. Aula 5 Revisão da unidade Conceitos-chave para o sucesso no desenvolvimento de software No universo do desenvolvimento de software, é importante dominar conceitos fundamentais que formam a base para a criação de aplicações e�cazes e de alta qualidade. Vamos explorar quatro desses pilares essenciais. Compreender os fundamentos da engenharia de software é o ponto de partida para qualquer desenvolvedor. Isso abrange a compreensão da teoria por trás do desenvolvimento de software, bem como a evolução dessa disciplina ao longo dos anos. Desde os primeiros métodos ad hoc até os processos estruturados e orientados a objeto, é vital ter um entendimento sólido da história e das teorias que moldaram a engenharia de software. Além disso, conhecer os modelos de processos é essencial. Isso envolve a compreensão de abordagens como o modelo em cascata, que segue uma sequência linear, e os modelos ágeis, Disciplina Engenharia de Software que promovem uma abordagem mais �exível e adaptativa. Cada modelo tem seus pontos fortes e fracos, e saber quando e como aplicá-los é uma habilidade valiosa. Entender os requisitos de software é a chave para o sucesso de qualquer projeto. Isso signi�ca compreender as necessidades e expectativas dos clientes, transformando-as em uma documentação clara e precisa que servirá como guia para o desenvolvimento. A engenharia de requisitos se concentra em técnicas e processos para elicitar, analisar, documentar e validar esses requisitos. Uma parte crucial dessa etapa é a capacidade de comunicar e�cazmente com os stakeholders para garantir que todos tenham uma compreensão clara das metas do projeto. Isso também envolve habilidades de negociação e gerenciamento de expectativas. Os métodos ágeis revolucionaram a forma como os projetos de software são abordados. Entre esses métodos, o Scrum e o Extreme Programming (XP) se destacam. O Scrum organiza o trabalho em sprints, ciclos curtos e iterativos, enquanto o XP se concentra na qualidade do código, promovendo práticas como programação em pares e testes automatizados. Compreender esses métodos não apenas permite uma abordagem mais e�caz ao desenvolvimento, mas também promove a colaboração e a responsabilidade da equipe, fatores essenciais para o sucesso de qualquer projeto. O controle de versões é uma peça fundamental na gestão de projetos de desenvolvimento de software. Permite o acompanhamento das alterações no código-fonte, documentação e outros recursos do projeto. Isso garante que as equipes possam colaborar de maneira e�ciente, rastrear o progresso do desenvolvimento e, se necessário, reverter para versões anteriores. Ferramentas como Git e SVN desempenham um papel importante nesse processo, oferecendo funcionalidades robustas para rastreamento e gerenciamento de versões. Dominar esses conceitos fundamentais no desenvolvimento de software não apenas estabelece uma base sólida, mas também capacita os desenvolvedores a enfrentarem desa�os complexos de forma e�caz e a entregar produtos de alta qualidade. Portanto, dedicar tempo para compreender e aplicar esses princípios é um investimento valioso para qualquer pro�ssional de desenvolvimento de software. Videoaula: Revisão da unidade Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Olá, estudante! Neste vídeo resumo, abordaremos os fundamentos da engenharia de software, modelos de processos, requisitos de software, métodos ágeis como Scrum e XP, e o crucial controle de versões. Esses conhecimentos são essenciais para se tornar um desenvolvedor de software excepcional. Não perca essa oportunidade de aprimorar suas habilidades! Assista agora e fortaleça sua jornada na programação. Disciplina Engenharia de Software Estudo de caso Considere que você está trabalhando como pro�ssional desenvolvedor de software e enfrenta um desa�o crucial em sua empresa. Você foi escolhido para liderar um projeto de desenvolvimento de uma aplicação de gerenciamento de tarefas. A empresa está buscando uma solução e�ciente para otimizar a organização e acompanhamento das atividades da equipe. O projeto requer uma abordagem estruturada de Engenharia de Software para garantir que as necessidades do cliente sejam compreendidas e atendidas de forma precisa. Portanto, é essencial de�nir claramente os requisitos e o escopo do sistema, assegurando que a aplicação �nal satisfaça as expectativas e requisitos do cliente. Além disso, para lidar com a dinâmica do projeto e as possíveis alterações nas demandas do cliente ao longo do tempo, a equipe optou por adotar práticas ágeis. Essa escolha permitirá entregas incrementais e funcionais, mantendo a �exibilidade para adaptar-se a mudanças nos requisitos do projeto. Por �m, a equipe reconhece a necessidade de um e�caz sistema de Controle de Versões para gerenciar o código de forma organizada e e�ciente. A escolha desta ferramenta proporcionará a capacidade de rastrear e gerenciar alterações no código-fonte, facilitando o desenvolvimento colaborativo e a integração de novas funcionalidades. Você deve criar uma aplicação de gerenciamento de tarefas que atenda às necessidades especí�cas do cliente, proporcionando uma solução e�caz para a organização e acompanhamento de atividades da equipe. Para alcançar esse objetivo, é fundamental aplicar práticas de Engenharia de Requisitos e adotar uma abordagem ágil no processo de desenvolvimento. ______________ Re�ita Disciplina Engenharia de Software No contexto do projeto liderado por você, a criação de uma aplicação de gerenciamento de tarefas bem-sucedida depende de várias estratégias fundamentais. Aqui estão algumas recomendações-chave que podem ser aplicadas para enfrentar esse desa�o: Compreensão profunda das necessidades do cliente: antes de iniciar o desenvolvimento, é importante conduzir uma análise detalhada das necessidades do cliente. Isso envolve a realização de reuniões de levantamento de requisitos e a documentação cuidadosa de todas as expectativas e funcionalidades desejadas. Prototipagem e validação contínua: a criação de protótipos funcionais pode ser uma ferramenta valiosa para validar a compreensão dos requisitos do cliente. Ao fornecer protótipos iterativos, a equipe pode garantir que a aplicação esteja no caminho certo desde o início. Iterações ágeis e comunicação constante: a abordagem ágil é essencial para lidar com as mudanças de requisitos e manter a �exibilidade durante o desenvolvimento. Sprints regulares e reuniões de revisão permitem que a equipe ajuste o curso conforme necessário e promove a colaboração contínua. Testes rigorosos e garantia de qualidade: implementaruma estratégia de testes abrangente é importante para identi�car e corrigir problemas antes da entrega �nal. Testes unitários, de integração e de aceitação do usuário devem ser realizados de forma consistente. Controle de versões e gestão de código: a seleção da ferramenta de controle de versões é crucial para manter o código organizado e permitir a colaboração e�caz entre os membros da equipe. A capacidade de rastrear e gerenciar alterações no código é fundamental para um desenvolvimento bem-sucedido. Ao aplicar essas estratégias, você e sua equipe estarão bem-posicionados para enfrentar o desa�o de criar uma aplicação de gerenciamento de tarefas que atenda às expectativas do cliente e ofereça uma solução e�caz para a organização e acompanhamento de atividades da equipe. A combinação de práticas de Engenharia de Requisitos e abordagens ágeis proporcionará uma base sólida para o sucesso do projeto. Videoaula: Resolução do estudo de caso Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Disciplina Engenharia de Software Você enfrentou os desa�os apresentados no projeto de desenvolvimento da aplicação de gerenciamento de tarefas com uma abordagem meticulosa e estratégica. Diante da necessidade de uma solução e�ciente para otimizar a organização e acompanhamento das atividades da equipe, você optou por adotar o Scrum como metodologia ágil. O Scrum foi escolhido por suas vantagens de permitir entregas incrementais, manter a �exibilidade para responder a mudanças nos requisitos do projeto e promover a colaboração e�caz da equipe. A aplicação da Engenharia de requisitos foi essencial para compreender plenamente as necessidades do cliente. Você conduziu entrevistas detalhadas com analistas e stakeholders, garantindo que todos os requisitos fossem claramente de�nidos. Isso assegurou que a aplicação �nal atendesse às expectativas e exigências do cliente, proporcionando uma solução e�caz para a gestão de tarefas da equipe. Além disso, você reconheceu a importância do Git como a ferramenta de Controle de Versões escolhida. Essa escolha permitiu o rastreamento e a gestão e�caz das alterações no código- fonte. Commits regulares e a criação de branches especí�cos para funcionalidades facilitaram o desenvolvimento colaborativo e a integração de novas funcionalidades. Ao enfrentar o desa�o de integrar uma nova funcionalidade de noti�cações em tempo real, você e sua equipe adotaram a abordagem do XP. A programação em pares, uma prática comum do XP, permitiu uma revisão constante do código, garantindo a qualidade e a robustez do sistema. Testes automatizados foram implementados para veri�car continuamente a integridade do software, contribuindo para um desenvolvimento mais con�ável. Ao �nal de cada sprint, a equipe realizou revisões para analisar o progresso e planejar os próximos passos. Graças à abordagem ágil do Scrum, que permitiu entregas contínuas e adaptação às mudanças, juntamente com a e�ciência do Git no Controle de Versões e as práticas do XP, a aplicação de gerenciamento de tarefas evoluiu de forma consistente e alinhada às expectativas do cliente. Você demonstrou habilidades notáveis ao enfrentar os desa�os do projeto. Sua abordagem estratégica, combinando o Scrum como metodologia ágil, práticas e�cazes de Engenharia de requisitos e o uso do Git para o Controle de Versões, resultou em um progresso consistente e na criação de uma aplicação que promete atender de forma e�caz às necessidades da equipe e do cliente. Essa experiência destaca a importância de abordagens bem pensadas e integração de práticas e�cazes na Engenharia de Software. Resumo visual Disciplina Engenharia de Software Veja o resumo visual da unidade: Disciplina Engenharia de Software Referências Disciplina Engenharia de Software ARTERO, Marcio M. Aparecido. Gestão de projetos de software. Londrina: Editora e Distribuidora Educacional S.A., 2016. BECK, K. S. K. S. J. E. A..; Manifesto for Agile Software Development. Disponível em: http://agilemanifesto.org. Acesso em: 23 de setembro de 2023. FABRIS, Polyanna P. Pacheco P. G.omes; FABRIS, Luis L. Cláudio C. Perini. Processo de software. [S. l.]: Editora e Distribuidora Educacional S.A., 2014. PRESSMANN, R.oger S. Engenharia de software: uma abordagem pro�ssional. 7. ed. Porto Alegre: AMGH, 2011 SOMMERVILLE, I.an; KOTONYA, Gerald. Engenharia de software. 4. ed. São Paulo: Pearson Addison, 2011. , Unidade 2 Qualidade de software Aula 1 Introdução à qualidade de software Introdução http://agilemanifesto.org/ Disciplina Engenharia de Software Olá, estudante! Nesta aula abordaremos a qualidade de software. A qualidade de software envolve a avaliação da excelência e adequação de um sistema de software. Erros são desvios do comportamento esperado, enquanto falhas são manifestações visíveis desses erros em tempo de execução. Defeitos representam falhas não resolvidas, e bugs são erros especí�cos que causam defeitos. A garantia de qualidade de software é o conjunto de práticas para garantir que um produto atenda aos padrões estabelecidos. Isso inclui revisões de código, testes de software e conformidade com padrões de desenvolvimento. Métricas de qualidade permitem a medição objetiva da qualidade do software. Elas podem incluir taxas de defeitos por milhão de linhas de código, tempo médio entre falhas, cobertura de teste e conformidade com padrões de codi�cação. Esses conceitos são fundamentais para o desenvolvimento de software de alta qualidade, garantindo que ele atenda às expectativas do usuário e seja con�ável em seu desempenho. Qualidade de software Disciplina Engenharia de Software Qualidade de software é um conceito fundamental no desenvolvimento de aplicações, e compreender seus elementos-chave é essencial para produzir software con�ável e e�caz. Baseado nas contribuições de autores como Pressman e Weinberg (2021), pode-se explorar os principais conceitos associados à qualidade de software. Erros: são discrepâncias entre o que o software deve fazer e o que realmente faz. Eles são falhas humanas no processo de desenvolvimento e podem incluir equívocos na análise de requisitos, codi�cação incorreta ou má interpretação de especi�cações. Falhas: são o resultado visível dos erros. São ocorrências que prejudicam o funcionamento do software durante a execução. Quando um erro não detectado se manifesta em uso, chamamos isso de falha. Defeitos: são erros identi�cados durante a fase de teste ou após a entrega do software. São problemas que precisam ser corrigidos para que o software funcione conforme o esperado. A correção de defeitos é uma parte crucial do ciclo de desenvolvimento. Qualidade: a qualidade de software se refere aos atributos que determinam o quão bem o software atende às necessidades dos usuários. Isso inclui e�ciência, con�abilidade, usabilidade, segurança e outros aspectos que contribuem para a satisfação do cliente. Bugs: embora o termo "bug" seja frequentemente usado de forma intercambiável com "erro" ou "defeito", originalmente, referia-se a problemas causados por insetos físicos que interferiam em sistemas computacionais. Atualmente, é uma forma informal de se referir a erros ou defeitos no software. Garantir a qualidade de software envolve a identi�cação e correção atempada de erros e defeitos, bem como a busca constante pela melhoria dos atributos de qualidade. Pressman e outros especialistas enfatizam a importância de processos de desenvolvimento bem de�nidos, Disciplina Engenharia de Software testes rigorosos e a participação ativa dos stakeholders ao longo do ciclo de vida do software para alcançar a qualidade desejada. Em última análise, a qualidade de software não é apenas sobre a ausência de erros, mas também sobre a entrega de um produto que atenda às expectativas e necessidades dos usuários. Garantia de Qualidade deSoftware A Garantia de Qualidade de Software (GQS) é um componente essencial do processo de desenvolvimento de software, cujo objetivo principal é assegurar que um produto de software atenda aos mais altos padrões de qualidade e satisfaça as expectativas dos usuários. É um conjunto abrangente de práticas, processos e procedimentos que visam identi�car e corrigir problemas de qualidade ao longo do ciclo de vida do software, desde a concepção até a manutenção. A GQS abrange várias áreas-chave: Planejamento de qualidade: de�ne os objetivos de qualidade, os critérios de aceitação e os processos a serem seguidos durante o desenvolvimento. Garantia de processo: garante que os processos de desenvolvimento de software sejam seguidos de maneira consistente e e�ciente, identi�cando áreas de melhoria. Controle de qualidade: envolve a veri�cação de produtos de trabalho especí�cos para garantir que atendam aos requisitos de qualidade estabelecidos. Disciplina Engenharia de Software Testes de software: realiza testes rigorosos para identi�car defeitos e veri�car se o software está funcionando conforme o esperado. Revisões e inspeções: envolve revisões sistemáticas de código, design e documentação para identi�car problemas precocemente. Padrões e normas: adesão a padrões de qualidade e normas da indústria, como o CMMI ("Capability Maturity Model Integration") e o ISO 9001 – (International Organization for Standardization (Organização Internacional para Normalização, em português). Melhoria Contínua: promove a avaliação e melhoria contínua dos processos e práticas de desenvolvimento. A GQS desempenha um papel crítico na redução de riscos e custos associados a defeitos e falhas em software. Isso não apenas melhora a con�abilidade do software, mas também aumenta a satisfação do cliente e a competitividade no mercado. A automação desempenha um papel crescente na GQS, com ferramentas de teste automatizado e integração contínua e entrega contínua (CI/CD) facilitando a detecção precoce de problemas. Além disso, a GQS não é uma tarefa isolada, mas uma responsabilidade compartilhada por toda a equipe de desenvolvimento, que deve estar comprometida com a qualidade desde o início do projeto. Assim, a garantia de qualidade de software é um conjunto de práticas essenciais para garantir que o software seja desenvolvido com alto nível de qualidade, atendendo aos requisitos dos usuários e às expectativas do mercado, ao mesmo tempo em que minimiza riscos e custos associados a problemas de qualidade. Métricas de qualidade Disciplina Engenharia de Software Métricas de qualidade são ferramentas essenciais no mundo do desenvolvimento de software e em muitos outros domínios. Elas oferecem uma maneira objetiva de medir, avaliar e acompanhar a qualidade de produtos, processos ou serviços. Essas métricas desempenham um papel fundamental na tomada de decisões informadas, na identi�cação de áreas de melhoria e no acompanhamento do progresso em direção a objetivos de qualidade especí�cos. Existem diversas métricas de qualidade, cada uma com seu propósito e aplicação especí�cos. Alguns exemplos incluem: Taxa de defeitos: essa métrica mede o número de defeitos encontrados em um produto de software em relação a uma métrica de tamanho, como o número de linhas de código. Ela Disciplina Engenharia de Software ajuda a avaliar a estabilidade do software. Cobertura de testes: essa métrica indica a porcentagem de código ou funcionalidades que foram testadas em relação ao total. Uma cobertura de testes mais alta geralmente está associada a um menor risco de defeitos não detectados. Tempo Médio Entre Falhas (MTBF): é uma métrica comum em sistemas críticos, medindo o tempo médio que um sistema funciona sem falhas. Quanto maior o MTBF, mais con�ável é o sistema. Tempo de resolução de defeitos: mede o tempo necessário para identi�car, relatar e corrigir defeitos. Um tempo menor indica uma equipe de desenvolvimento mais e�ciente. Satisfação do cliente: essa métrica avalia a satisfação dos clientes com o produto ou serviço. Ela pode ser medida por meio de pesquisas de satisfação, feedback direto dos clientes ou taxas de retenção. Complexidade ciclomática: usada para medir a complexidade do código-fonte, ajudando a identi�car áreas que podem ser difíceis de manter e entender. Taxa de rejeição de requisitos: mede a proporção de requisitos inicialmente especi�cados que foram posteriormente alterados ou rejeitados. Isso pode indicar problemas na compreensão inicial dos requisitos. Índice de vulnerabilidades: em segurança de software, essa métrica rastreia o número e a gravidade das vulnerabilidades identi�cadas no código. E�ciência de processo: avalia a e�ciência dos processos de desenvolvimento, medindo o tempo, os recursos e os custos envolvidos na produção de um produto ou serviço. Taxa de entregas no prazo: mede quantos projetos ou entregas são concluídos dentro do prazo estabelecido, o que é crucial para o cumprimento de compromissos. É importante notar que a escolha das métricas deve ser alinhada aos objetivos e ao contexto do projeto ou organização. Além disso, métricas de qualidade não devem ser usadas isoladamente; elas devem ser consideradas em conjunto para uma visão holística da qualidade. Em resumo, métricas de qualidade desempenham um papel vital na avaliação e no aprimoramento da qualidade de produtos, processos e serviços. Elas fornecem uma base sólida para a tomada de decisões informadas, permitindo que as organizações alcancem níveis mais altos de qualidade, satisfação do cliente e e�ciência operacional. Videoaula: Introdução à qualidade de software Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Olá, estudante! Neste vídeo resumo veremos como os Conceitos de Qualidade de Software envolvem erros (desvios nas especi�cações), falhas (manifestações visíveis de erros em tempo Disciplina Engenharia de Software de execução), defeitos (erros identi�cados durante testes), qualidades (atributos como e�ciência e segurança) e bugs (termo informal para erros/defeitos). A Garantia de Qualidade de Software é um conjunto de práticas para garantir padrões de desenvolvimento, incluindo revisões, testes e conformidade com normas. Métricas de Qualidade são medidas objetivas usadas para avaliar a qualidade do software, como taxa de defeitos, cobertura de teste e satisfação do cliente, auxiliando na gestão e melhoria dos processos. Saiba mais A qualidade de software é um elemento crítico no desenvolvimento de sistemas de informação e aplicações em nossa era digital. Para compreender plenamente a qualidade de software, é fundamental explorar conceitos-chave que moldam nossa abordagem à criação de programas con�áveis e e�cazes. Neste contexto, examinaremos os conceitos de erros, falhas, defeitos, qualidades e bugs, que constituem os pilares fundamentais da qualidade de software. Vamos adentrar cada um desses conceitos e explorar como eles se entrelaçam na busca pela excelência no desenvolvimento de software. CAMPOS, F. M. Qualidade, Qualidade de Software e Garantia da Qualidade de Software são as mesmas coisas? Linha de código. Métricas de software são medidas quantitativas usadas para avaliar características e aspectos do desenvolvimento de software. Elas permitem acompanhar o desempenho, a qualidade e a e�ciência dos processos e produtos de software. http://www.linhadecodigo.com.br/artigo/1712/qualidade-qualidade-de-software-e-garantia-da-qualidade-de-software-sao-as-mesmas-coisas.aspx http://www.linhadecodigo.com.br/artigo/1712/qualidade-qualidade-de-software-e-garantia-da-qualidade-de-software-sao-as-mesmas-coisas.aspx Disciplina Engenharia de Software Essas métricas incluem elementos como a taxa de defeitos, a cobertura de testes, a complexidade do código e outros indicadores que auxiliam no gerenciamento e melhoria dosprojetos de software. O uso adequado de métricas de software é essencial para tomar decisões informadas, melhorar a qualidade do software e atender às necessidades dos clientes. CAMPOS, F. M. Métricas de Software Como Ferramenta de Apoio ao Gerenciamento de Projetos de Software. Linha de código. Referências PRESSMAN, R.; MAXIM, B. R. Engenharia de Software: uma abordagem pro�ssional. 9.ed. Porto Alegre: AMGH, 2021. IEEE Transactions on Software Engineering. ISSN: 0098-5589. Aula 2 Qualidade de produto Introdução http://www.linhadecodigo.com.br/artigo/453/metricas-de-software-como-ferramenta-de-apoio-ao-gerenciamento-de-projetos-de-software.aspx http://www.linhadecodigo.com.br/artigo/453/metricas-de-software-como-ferramenta-de-apoio-ao-gerenciamento-de-projetos-de-software.aspx Disciplina Engenharia de Software Olá, estudante! Nesta aula, falaremos sobre a gestão da qualidade do produto que é um pilar essencial para o sucesso de qualquer organização, independentemente de seu tamanho ou setor. Ela se estende além da simples criação de um produto, envolvendo a aplicação de padrões rigorosos, medições precisas, e avaliações minuciosas para garantir que o produto atenda não apenas às expectativas dos clientes, mas também aos padrões internacionais de qualidade. Abordaremos como medir a qualidade, que não é apenas quanti�car a ausência de defeitos, mas também avaliar a e�cácia, con�abilidade e satisfação do cliente. Ferramentas e métricas precisas são empregadas para medir aspectos como con�abilidade operacional, tempo médio entre falhas (MTBF), satisfação do cliente e conformidade com padrões prede�nidos. A qualidade do produto começa com uma compreensão detalhada dos requisitos do cliente. Estabelecer requisitos claros e mensuráveis é crucial. A avaliação da qualidade implica em garantir que o produto atenda a esses requisitos em todos os estágios do desenvolvimento, desde a concepção até a entrega �nal ao cliente. Isso envolve processos robustos de teste, revisões detalhadas e feedback contínuo dos clientes. A International Organization for Standardization (ISO) estabelece normas globalmente reconhecidas que de�nem critérios para sistemas de gestão da qualidade. Normas como a ISO 9001 fornece diretrizes precisas para estabelecer e manter sistemas de gestão da qualidade e�cazes. A conformidade com essas normas não apenas garante a qualidade do produto, mas também impulsiona a e�ciência operacional e a satisfação do cliente. Gestão da qualidade do produto Disciplina Engenharia de Software A Gestão da Qualidade do Produto é um conjunto de práticas e processos que visam garantir a entrega de produtos ou serviços que atendam ou superem as expectativas dos clientes. Fundamentada em princípios como melhoria contínua, liderança, engajamento dos colaboradores e foco no cliente, a gestão da qualidade do produto tornou-se uma pedra angular para o sucesso empresarial. No cerne desse conceito está o compromisso de criar produtos que se destaquem não apenas pela funcionalidade, mas também pela durabilidade, con�abilidade e experiência do usuário. A gestão da qualidade envolve a de�nição rigorosa de padrões de qualidade, a implementação de processos de produção e�cientes e a realização de avaliações regulares para identi�car áreas de melhoria. A implementação e�caz da gestão da qualidade do produto resulta em inúmeros benefícios. Clientes satisfeitos são mais propensos a se tornarem clientes �éis, recomendando os produtos a outras pessoas. Além disso, a reputação da empresa é fortalecida, levando a um aumento da con�ança dos investidores e parceiros de negócios. Internamente, promove um ambiente de trabalho positivo, onde os funcionários se sentem valorizados pelo seu papel na produção de produtos de alta qualidade. A gestão da qualidade do produto também está intimamente ligada à inovação. Empresas que buscam consistentemente melhorar a qualidade de seus produtos muitas vezes acabam por criar soluções inovadoras para as necessidades dos clientes, mantendo-se à frente da concorrência. No contexto dinâmico dos negócios modernos, medir, entender os requisitos e avaliar a qualidade, tornaram-se pilares essenciais para o sucesso organizacional. A medição é o Disciplina Engenharia de Software processo de quanti�car características e desempenho, proporcionando dados tangíveis para análise. Através da medição, as empresas podem identi�car padrões, monitorar progressos e tomar decisões baseadas em evidências. Entender os requisitos, por sua vez, é vital. São as necessidades e expectativas dos clientes e stakeholders que de�nem o curso de um projeto. Um profundo entendimento dos requisitos é o alicerce de qualquer produto ou serviço de qualidade. Isso não apenas envolve o que os clientes pedem explicitamente, mas também antecipar suas necessidades latentes, garantindo assim uma experiência completa e satisfatória. Desse modo, a avaliação da qualidade é o processo crítico de examinar produtos, processos ou serviços em relação a padrões prede�nidos. Envolve uma análise minuciosa para garantir que o que foi produzido esteja em conformidade com os requisitos estabelecidos. Ela não apenas identi�ca defeitos, mas também destaca áreas de excelência, fornecendo insights valiosos para melhorias contínuas. As Normas ISO de Qualidade são um conjunto de diretrizes e critérios estabelecidos pela International Organization for Standardization (ISO) para assegurar a qualidade e e�ciência de produtos, serviços e sistemas em organizações ao redor do mundo. Essas normas não apenas de�nem padrões técnicos, mas também incorporam as melhores práticas e experiências globais para promover a qualidade, segurança e con�abilidade em diversos setores. O objetivo primordial das Normas ISO de Qualidade é fornecer às organizações um quadro claro e consistente para alcançar a excelência operacional. Elas estabelecem critérios rigorosos para processos, produtos e serviços, abordando áreas como gestão ambiental, gestão de segurança da informação, qualidade de serviços de saúde, entre outras. A conformidade com essas normas não apenas valida a qualidade dos produtos ou serviços, mas também aumenta a credibilidade da organização no mercado global. As normas ISO não são estáticas; elas evoluem para acompanhar as mudanças nas tecnologias, práticas e expectativas do cliente. Ao seguir esses padrões, as organizações podem melhorar continuamente seus processos e operações, resultando em maior e�ciência, redução de desperdícios e melhoria na satisfação do cliente. Além disso, as Normas ISO de Qualidade oferecem uma vantagem competitiva signi�cativa. As empresas que obtêm certi�cações ISO demonstram seu compromisso com a qualidade e a excelência, o que pode atrair novos clientes, parceiros de negócios e investidores. Compreensão e conhecimento sobre qualidade do produto Disciplina Engenharia de Software A compreensão e o conhecimento profundo da gestão da qualidade do produto são cruciais para qualquer organização que busque a excelência e a satisfação do cliente. Signi�ca não apenas entender os princípios teóricos, mas também aplicá-los de maneira prática e adaptável a contextos especí�cos. Isso envolve uma compreensão detalhada das técnicas de medição, dos requisitos precisos do cliente e das normas de qualidade relevantes. Também, requer habilidades em implementar e monitorar sistemas de gestão de qualidade, liderar equipes para alcançar padrões elevados e analisar dados para identi�car áreas de melhoria contínua. A verdadeira expertise em gestão da qualidade do produto não apenas assegura que os produtos atendam ou superem as expectativas dos clientes, mas também ajuda as organizações a alcançar e�ciência operacional, minimizar desperdícios, aumentar a con�ança dos clientes e fortalecer sua posição no mercado. Em última análise, o domínio da gestão da qualidade do produto é um investimento valioso para qualquer pro�ssional ou organização que busque qualidade, inovação e sucesso sustentável. O conhecimentoprofundo sobre medição, requisitos e avaliação da qualidade são essenciais para garantir a excelência em qualquer produto ou serviço. A medição é a base objetiva para avaliar o desempenho, proporcionando dados tangíveis sobre e�ciência, con�abilidade e satisfação do cliente. Entender como medir corretamente é crucial para tomar decisões informadas e melhorar continuamente. Por outro lado, a de�nição precisa dos requisitos é o alicerce sobre o qual qualquer projeto é construído. Saber identi�car e documentar claramente o que o cliente precisa é fundamental para atender às expectativas. A avaliação da qualidade é o processo contínuo de comparar o resultado com esses requisitos, assegurando que cada detalhe seja examinado e que qualquer desvio seja corrigido rapidamente. Ter uma compreensão sólida desses conceitos não apenas garante que o produto �nal seja de alta qualidade, mas também permite a adaptação às mudanças do mercado, promovendo a Disciplina Engenharia de Software satisfação do cliente e impulsionando a inovação e a competitividade. Portanto, a compreensão e o conhecimento em medição, requisitos e avaliação da qualidade são a chave para alcançar padrões superiores e estabelecer um diferencial competitivo signi�cativo no cenário global. As normas ISO de qualidade são vitais para qualquer organização que busque excelência e padrões internacionais em seus produtos ou serviços. Elas oferecem diretrizes e melhores práticas globalmente aceitas, garantindo que as organizações estejam alinhadas com os critérios de qualidade reconhecidos internacionalmente. Ter um profundo entendimento dessas normas não apenas demonstra o compromisso da empresa com a qualidade e a satisfação do cliente, mas também proporciona um conjunto claro de diretrizes para a gestão e�caz dos processos e sistemas. Conhecer as normas ISO permite que as organizações melhorem continuamente seus produtos e serviços, otimizem a e�ciência operacional, reduzam custos, minimizem riscos e mantenham uma vantagem competitiva no mercado global. Assim sendo, a compreensão e o conhecimento aprofundados das normas ISO capacitam as organizações a atingir padrões de qualidade consistentes, construir uma reputação sólida e estabelecer relacionamentos de con�ança com os clientes em todo o mundo. As normas ISO evoluíram desde meados da década de 1990, na direção de articular uma estrutura única ou modelo único de gestão e evolução, para as diversas atividades exercidas pelas empresas. Em tal evolução, os temas qualidade, meio ambiente, segurança do trabalho, segurança da informação, energia, ativos e riscos ganharam, cada um, sua própria norma de sistema de gestão. No ano de 2012, este modelo único de normas de sistemas de gestão foi renovado, uniformizando a estrutura e metodologia de auditoria, permitindo que as empresas uni�cassem o seu sistema de gestão em um sistema único onde cada norma poderia ser adotada, sem a necessidade de criação de estruturas distintas dentro de uma organização. Aplicações de gestão de qualidade Disciplina Engenharia de Software A aplicação efetiva da gestão da qualidade do produto, juntamente com medição, requisitos e avaliação da qualidade, aliada ao cumprimento das normas ISO de qualidade, é um imperativo para organizações que buscam se destacar em um mercado global competitivo. A gestão da qualidade do produto envolve não apenas a eliminação de defeitos, mas também a criação de produtos que se alinham perfeitamente às expectativas dos clientes. Isso começa com uma compreensão profunda dos requisitos do cliente, orientando o desenvolvimento do produto desde as fases iniciais até a entrega �nal. A evolução das normas de qualidade, desde meados da década de 1990, adicionou ao conceito de qualidade a visão a longo prazo de objetivos e metas, para manter ou aprimorar continuamente a satisfação do cliente e também, mais recentemente, a visão de gestão de riscos, para aumentar a resiliência da organização frente a constantes mudanças de tecnologia no mercado. Períodos de guerras, recessão econômica e pandemia passaram a compor a análise crítica contínua de cenários de todas as organizações e ao longo dos anos �cou cada vez mais difícil separar a qualidade dos serviços e produtos de uma empresa de seus canais de marketing, vendas e pós-vendas. Desde o pequeno artesão, até uma grande empresa multinacional, todos dependem de pelo menos um sistema integrado de vendas ou relacionamento com o cliente. A medição é essencial para quanti�car o desempenho e a e�cácia dos processos, enquanto a avaliação contínua da qualidade garante que o produto �nal atenda aos padrões exigidos. A conformidade com as normas ISO de qualidade, como a ISO 9001(ISO, 2015), proporciona um guia estruturado para estabelecer e manter sistemas de gestão de qualidade e�cazes. Adotar Disciplina Engenharia de Software essas normas garante consistência nos processos e confere con�ança aos clientes, mostrando que a organização está comprometida com a excelência e a melhoria contínua. As normas ISO fornecem um conjunto abrangente de diretrizes, desde a de�nição de requisitos até a medição e avaliação da qualidade, estabelecendo um padrão globalmente reconhecido. Ao integrar a gestão da qualidade do produto, medição precisa, requisitos claros e a adesão rigorosa às normas ISO, as organizações podem criar um ambiente onde a inovação �oresce, a satisfação do cliente é maximizada e a reputação é solidi�cada. Essa abordagem não apenas impulsiona a qualidade dos produtos, mas também melhora a e�ciência operacional, reduz os custos associados a defeitos e fortalece a competitividade da organização no mercado internacional. Assim, a aplicação combinada desses princípios não apenas garante produtos de alta qualidade, mas também estabelece um caminho claro para a excelência sustentável e o sucesso a longo prazo. Videoaula: Qualidade de produto Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Olá, estudante! Neste vídeo resumo veremos como os conceitos de Gestão de Qualidade do produto, aliados à medição de requisitos e avaliação da qualidade do produto, é fundamental para as empresas. Saber utilizar é necessário para os pro�ssionais que pretendem interagir com as diversas áreas de aplicação. Por outro lado, é importante conhecer as normas ISO de qualidade e procurar garantir o uso destas para melhorar a qualidade dos produtos desenvolvidos dentro das empresas. Saiba mais Disciplina Engenharia de Software A gestão da qualidade do produto é um processo estratégico essencial para garantir que os produtos atendam ou excedam as expectativas dos clientes. Envolve a de�nição de padrões rigorosos de qualidade, desde a concepção até a entrega, incorporando métodos de medição precisos, análise criteriosa dos requisitos do cliente e avaliação contínua do desempenho. Uma gestão e�caz da qualidade não apenas assegura a con�abilidade e durabilidade dos produtos, mas também impulsiona a satisfação do cliente e a reputação da marca. Saiba mais no artigo: “Gestão da qualidade: 5 motivos para fazer”. As normas ISO de qualidade, estabelecidas pela International Organization for Standardization (ISO), são conjuntos de diretrizes técnicas globalmente aceitas que visam garantir a excelência e a consistência em produtos, serviços e sistemas. Estas normas são fundamentais para organizações que buscam alcançar padrões internacionais de qualidade e e�ciência. Elas oferecem um conjunto claro de regras e melhores práticas, ajudando as empresas a melhorar a qualidade dos produtos, otimizar processos, aumentar a e�ciência operacional e, por �m, aumentar a satisfação do cliente. A conformidade com as normas ISO não apenas valida a qualidade dos produtos e serviços, mas também reforça a reputação da organização, garantindo aos clientes que estão lidando com uma empresa queopera em níveis globalmente reconhecidos de excelência e con�abilidade. Saiba mais no artigo disponível na base de artigos cientí�cos Scielo, intitulado “Contribuição dos modelos de qualidade e maturidade na melhoria dos processos de software”, dos autores Antônio Carlos Tonini, Marly Monteiro de Carvalho e Mauro de Mesquita Spinola. TONINI, A.C.; CARVALHO, M. M,; SPINOLA, M. M. Contribuição dos modelos de qualidade e maturidade na melhoria dos processos de software. Produção, v. 18 n. 2, maio/ago. 2008, p. 275- 286. https://tworh.com.br/gestao-da-qualidade-5-motivos-para-fazer/ https://www.scielo.br/j/prod/a/hVWM5wDTD6vYzGRcq7FzSxc/?format=pdf&lang=pt https://www.scielo.br/j/prod/a/hVWM5wDTD6vYzGRcq7FzSxc/?format=pdf&lang=pt Disciplina Engenharia de Software Referências ABNT - ASSOCIAÇÃO BRASILEIRA DE NORMAS TÉCNICAS. ABNT NBR ISO 9001:2015: Sistemas de gestão da qualidade – requisitos. Rio de Janeiro, 2008. BASILI, V. R. et al., Experimentation in software engineering, in IEEE Transactions on Software Engineering, vol. SE-12, no. 7, pp. 733-743, Julho de 1986, doi: 10.1109/TSE.1986.6312975. PAULA FILHO, W. P. Engenharia de Software: projetos e processos. 4.ed. Rio de Janeiro: LTC, 2019. PRESSMAN, R.; MAXIM, B. R. Engenharia de Software: uma abordagem pro�ssional. 9.ed. Porto Alegre: AMGH, 2021. SOMMERVILLE, I. Engenharia de Software. 10.ed. São Paulo: Pearson Education do Brasil, 2018. Aula 3 Qualidade de processo Introdução Disciplina Engenharia de Software Olá, estudante! A Melhoria de Processo de Software Brasileiro (MPS.BR) é uma iniciativa nacional que visa aprimorar os processos de desenvolvimento de software no Brasil. Essa abordagem sistemática foi criada para elevar os padrões da indústria de software brasileira, promovendo a excelência e a competitividade. O MPS.BR foi desenvolvido por especialistas brasileiros e é adaptado às necessidades e realidades do cenário de TI do país. Para dar continuidade, iremos descrever os Modelos de Maturidade, como o Capability Maturity Model (CMM) e seu sucessor, o Capability Maturity Model Integration (CMMI), representam abordagens sistemáticas para avaliar e melhorar a maturidade dos processos de uma organização. Esses modelos oferecem um caminho estruturado para aprimorar as práticas e os procedimentos em organizações que estão envolvidas em atividades complexas, como o desenvolvimento de software. O CMM, desenvolvido pelo Software Engineering Institute (SEI) nos Estados Unidos, foi pioneiro nesse campo ao fornecer um conjunto de critérios para avaliar a maturidade dos processos de desenvolvimento de software. Abordaremos, também, as normas ISO de qualidade de processos que são conjuntos de diretrizes e critérios internacionalmente reconhecidos, estabelecidos pela International Organization for Standardization (ISO), que de�nem padrões para garantir a excelência operacional e a qualidade em diversas áreas da indústria. Essas normas proporcionam às organizações um conjunto claro de melhores práticas para aprimorar seus processos, gerenciar riscos e alcançar a satisfação do cliente. Elas estabelecem padrões elevados para a e�ciência e a e�cácia dos processos, mas também promovem a inovação, a sustentabilidade e a competitividade global. Ao seguir as normas ISO de qualidade de processos, as organizações não apenas garantem a conformidade com padrões internacionais, mas também demonstram um compromisso inabalável com a melhoria contínua e a excelência em suas operações. Disciplina Engenharia de Software Processo de software brasileiro Na engenharia de software, em que a complexidade se encontra com a criatividade, a gestão da qualidade do produto assume um papel central. É mais do que apenas eliminar defeitos; é sobre criar sistemas que não apenas atendem às expectativas dos clientes, mas as superem. Na essência da gestão da qualidade do produto está a criação de software que é robusto, seguro, con�ável, e�ciente e, acima de tudo, valioso para o usuário �nal. O primeiro passo crucial na gestão da qualidade do produto é a de�nição de requisitos claros e compreensíveis. Compreender exatamente o que o cliente precisa é a base de qualquer projeto bem-sucedido. A análise cuidadosa dos requisitos, envolvendo todas as partes interessadas, é essencial para evitar mal-entendidos e garantir que a visão do cliente seja totalmente incorporada no produto �nal. A medição, requisitos e avaliação da qualidade são pilares fundamentais para garantir produtos e serviços de alta qualidade em qualquer domínio, desde a engenharia de software até a produção industrial. A medição envolve a aplicação de métricas especí�cas para quanti�car diversos aspectos do processo ou do produto, permitindo uma compreensão objetiva do desempenho e identi�cando áreas para melhorias. Por outro lado, a de�nição clara e detalhada dos requisitos é essencial. Os requisitos precisam ser compreendidos profundamente, tanto em termos técnicos quanto nas expectativas dos clientes, para orientar o processo de desenvolvimento na direção certa. Por �m, a avaliação da qualidade é um processo contínuo que envolve a comparação dos resultados obtidos com os requisitos estabelecidos, veri�cando se o produto está conforme o esperado e permitindo ajustes e melhorias contínuas. Em conjunto, esses três elementos formam a espinha dorsal da garantia da qualidade, garantindo que os produtos e serviços atendam aos padrões esperados, sejam eles relacionados à funcionalidade, con�abilidade, segurança ou satisfação do cliente. Disciplina Engenharia de Software As normas ISO de qualidade, desenvolvidas pela International Organization for Standardization (ISO), estabelecem diretrizes e padrões internacionalmente reconhecidos para garantir a qualidade e a e�ciência em diversos setores. Essas normas oferecem um conjunto de melhores práticas, processos e critérios que as organizações podem seguir para garantir a qualidade dos produtos, serviços e sistemas, bem como para melhorar continuamente seu desempenho. Ao aderir às normas ISO de qualidade, as empresas demonstram um compromisso com a excelência e a satisfação do cliente. Além disso, a conformidade com essas normas não apenas melhora a qualidade dos produtos e serviços, mas também aumenta a e�ciência operacional, reduz os custos, fortalece a reputação da empresa e, em última análise, contribui para o sucesso e a competitividade no mercado global. As normas ISO, portanto, desempenham um papel fundamental na criação de padrões consistentes de qualidade em escala internacional, bene�ciando tanto as organizações quanto os consumidores. Melhoria do processo do software brasileiro A interpretação e compreensão da Melhoria de Processo de Software Brasileiro, ou MPS.BR, são fundamentais para as organizações que buscam aprimorar seus processos de desenvolvimento de software no contexto brasileiro. O MPS.BR é uma iniciativa nacional que oferece um caminho estruturado para melhorar continuamente os processos organizacionais, elevando a qualidade dos produtos de software e a competitividade das empresas. Interpretar e conhecer o MPS.BR, envolve compreender os critérios e práticas de�nidos pelo modelo, adaptados às necessidades especí�cas das empresas brasileiras. Isso inclui a compreensão das diferentes etapas de maturidade, desde o nível F (incompleto) até o nível A (em otimização), e a aplicação de práticas especí�cas para alcançar cada estágio. Disciplina Engenharia de Software Compreendê-lo, portanto, requer a familiaridade com as diretrizes do modelo e a capacidade de as contextualizar nas operações da organização. Envolve identi�car áreas de melhoria nos processos existentes, implementar as melhores práticas sugeridas pelo MPS.BR e monitorar continuamente o progresso para garantir a conformidade com os padrões estabelecidos. Assim, é necessário engajamento ativo de todas as partes interessadas, desde líderes de equipe até desenvolvedores e gerentes de projeto. Isso requer uma comunicação clara e e�cazpara garantir que todos compreendam o propósito do MPS.BR, os benefícios que ele traz para a organização e as responsabilidades de cada indivíduo no processo de implementação. Modelos de Maturidade, como o Capability Maturity Model (CMM) e o Capability Maturity Model Integration (CMMI), são importantes para as organizações que buscam aprimorar seus processos e alcançar padrões elevados de excelência operacional. Eles fornecem uma estrutura sólida para avaliar a maturidade dos processos organizacionais, permitindo uma análise profunda e uma melhoria estruturada. Interpretar o CMM envolve entender os cinco níveis de maturidade: Inicial, Repetitivo, De�nido, Gerenciado e Otimizado. Cada nível representa um estágio especí�co de maturidade nos processos da organização, desde a ausência de um processo de�nido até a melhoria contínua e otimização. Compreender o CMM signi�ca aplicar as melhores práticas e os critérios de avaliação em cada estágio, permitindo uma transição suave de um nível para outro. Já o CMMI expande essa compreensão para várias áreas de processo, incluindo desenvolvimento, serviços, aquisição e gerenciamento. Interpretar o CMMI envolve identi�car as áreas de processo relevantes para a organização e aplicar as práticas especí�cas em cada uma delas. Além disso, compreender o CMMI signi�ca entender os diferentes níveis de capacidade e maturidade para cada área de processo, desde processos inicialmente executados até processos otimizados e em melhoria contínua. Interpretar normas como a ISO 9001, que se concentra em sistemas de gestão da qualidade, envolve entender os requisitos especí�cos para estabelecer, implementar, manter e melhorar continuamente um sistema de gestão de qualidade. Desse modo, deve-se analisar cada cláusula da norma e adaptar suas diretrizes para atender às necessidades e às operações da organização. Compreender as normas ISO de qualidade de processos requer um conhecimento profundo dos princípios de gestão de qualidade, incluindo liderança, envolvimento das partes interessadas, abordagem de processos, melhoria contínua, abordagem baseada em evidências e tomada de decisões baseada em dados. É essencial traduzir esses princípios em práticas operacionais tangíveis e alinhadas com os objetivos estratégicos da organização. A interpretação e compreensão das normas ISO também envolvem a capacidade de adaptar as diretrizes padrão para o contexto especí�co da organização. Isso signi�ca personalizar os processos e os sistemas de acordo com a natureza do negócio, o tamanho da organização, a indústria em que atua e as expectativas dos clientes. Além disso, interpretar e compreender essas normas, implica em uma abordagem contínua de aprendizado e melhoria. As organizações devem estar cientes das atualizações nas normas, bem como das melhores práticas emergentes, para garantir que seus sistemas de gestão da qualidade estejam sempre alinhados com os padrões mais recentes e e�cazes. Disciplina Engenharia de Software Aplicações de melhoria no processo do produto A aplicação efetiva da gestão da qualidade do produto, juntamente com medição, requisitos e avaliação da qualidade, aliada ao cumprimento das normas ISO de qualidade, é um imperativo para organizações que buscam se destacar em um mercado global competitivo. A gestão da qualidade do produto envolve a eliminação de defeitos e a criação de produtos que se alinham perfeitamente às expectativas dos clientes. Isso começa com uma compreensão profunda dos requisitos do cliente, orientando o desenvolvimento do produto desde as fases iniciais até a entrega �nal. A medição é essencial para quanti�car o desempenho e a e�cácia dos processos, enquanto a avaliação contínua da qualidade garante que o produto �nal atenda aos padrões exigidos. A aplicação da Melhoria de Processo de Software Brasileiro, conhecido como MPS.BR, é um marco signi�cativo para as organizações de desenvolvimento de software no Brasil. Trata-se de uma iniciativa nacional que oferece uma estrutura estratégica e sistemática para melhorar os processos de software, promovendo a qualidade, a e�ciência e a competitividade no mercado global. Uma das principais características do MPS.BR é sua �exibilidade. Ele pode ser adaptado para atender às necessidades especí�cas de diferentes tipos de empresas, independentemente do seu tamanho ou setor de atuação. A aplicação envolve uma série de etapas, desde a avaliação inicial da maturidade dos processos até a implementação de práticas e melhorias contínuas. A primeira etapa envolve uma avaliação rigorosa dos processos existentes na organização. Com base nessa avaliação, são identi�cados pontos fortes e áreas de melhoria. Em seguida, um plano de ação é desenvolvido para implementar práticas que estejam em conformidade com os padrões estabelecidos pelo MPS.BR. Isso pode incluir treinamento de equipe, revisão e reestruturação de processos, implementação de ferramentas de gerenciamento e monitoramento contínuo do desempenho. Disciplina Engenharia de Software A aplicação dos Modelos de Maturidade, como o Capability Maturity Model (CMM) e o Capability Maturity Model Integration (CMMI), é uma estratégia fundamental para organizações que buscam aprimorar seus processos e atingir níveis mais altos de e�ciência e qualidade. Esses modelos fornecem uma estrutura sólida e bem de�nida para avaliar a maturidade dos processos organizacionais, permitindo uma melhoria gradual e estruturada. A aplicação envolve uma análise aprofundada dos processos existentes da organização, classi�cando-os em cinco níveis de maturidade: Inicial, Repetitivo, De�nido, Gerenciado e Otimizado. Cada nível representa um estágio especí�co de maturidade, desde processos informais até processos altamente e�cientes e otimizados. Ao identi�car o nível atual de maturidade, a organização pode desenvolver um plano de melhoria que inclui a implementação de práticas especí�cas para elevar o nível de maturidade dos processos. Por outro lado, o CMMI expande essa aplicação para várias áreas de processo, incluindo desenvolvimento, serviços, aquisição e gerenciamento. A organização deve identi�car as áreas de processo relevantes para seu contexto e aplicar as práticas especí�cas de�nidas pelo CMMI. A aplicação bem-sucedida do CMMI requer uma abordagem integrada, em que as práticas são aplicadas de forma interconectada para garantir uma melhoria abrangente dos processos A aplicação do modelo CMMI está intimamente ligada à gestão de projetos, uma vez que ao avançar pelos níveis de maturidade a organização precisa articular e encadear projetos de curto, médio e longo prazos, envolvendo tanto áreas internas, como externas à organização. Nessa gestão de projetos que envolve a evolução pelos níveis de maturidade, será possível notar ao longo dos anos a respectiva evolução da empresa e seus produtos / serviços em relação ao aprimoramento de sua qualidade e redução correspondente de custos e riscos. A aplicação das normas ISO de qualidade de processos é um passo fundamental para organizações que buscam alcançar padrões internacionalmente reconhecidos de excelência operacional. As normas da ISO (International Organization for Standardization) fornecem diretrizes detalhadas e estruturadas para melhorar processos e sistemas organizacionais, garantindo e�cácia, e�ciência e satisfação do cliente. Ao aplicar as normas ISO, as organizações precisam, primeiro, entender os requisitos especí�cos de cada norma que se aplica ao seu setor e contexto. Por exemplo, a ISO 9001(ABNT,2015) foca em sistemas de gestão de qualidade, enquanto a ISO 27001(ABNT, 2006) trata de sistemas de gestão de segurança da informação. A aplicação bem-sucedida dessas normas envolve uma análise profunda dos processos organizacionais existentes para identi�car pontos fortes e áreas de melhoria em relação aos padrões de�nidos pela ISO. A implementação prática dessas normas requer um compromisso total da liderança e uma participação ativa de todos os membros da organização. Isso implica a criação ea documentação de processos claros e procedimentos operacionais que estejam em conformidade com os requisitos da norma. Além disso, envolve a realização de auditorias internas regulares para garantir que os processos continuem em conformidade e a preparação para auditorias externas, feitas por órgãos de certi�cação, quando necessário. A aplicação das normas ISO não apenas eleva os padrões de qualidade e e�ciência, mas também leva a uma cultura organizacional voltada para a melhoria contínua. Ao seguir os princípios e as práticas recomendadas pelas normas, as organizações podem reduzir erros, aumentar a con�abilidade de seus produtos e serviços, melhorar a satisfação do cliente e, por consequência, fortalecer sua reputação no mercado. Disciplina Engenharia de Software Videoaula: Qualidade de processo Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Olá, estudante! Neste vídeo resumo veremos conceitos de Melhorias do Processo de Software Brasileiro, e interpretação e utilização dos modelos de Maturidade – CMM e CMMI, trataremos, também, das normas da ISO utilizada para a qualidade de processos. Tudo isso aplicado nas empresas do seguimento de projetos e desenvolvimento de software, no território brasileiro. É muito importante compreender de forma a aplicar dentro das empresas, de forma a melhorar a qualidade do software projetado. Saiba mais A gestão de qualidade do produto é vital para empresas que buscam oferecer produtos que atendam ou superem as expectativas dos clientes. Envolve a implementação de estratégias, processos e técnicas para garantir que os produtos atendam aos padrões de qualidade Disciplina Engenharia de Software estabelecidos. Isso inclui desde a concepção e desenvolvimento até a produção, distribuição e suporte pós-venda. A gestão de qualidade do produto engloba a de�nição de requisitos claros, o controle rigoroso de processos de produção, a realização de testes de qualidade detalhados e a monitorização contínua do desempenho do produto no mercado. Além de assegurar que o produto atenda às especi�cações técnicas, a gestão de qualidade do produto também visa garantir a segurança, a con�abilidade e a durabilidade dos produtos, bem como a satisfação e a �delidade dos clientes. Uma gestão e�caz da qualidade do produto não apenas eleva a reputação da empresa, mas também fortalece a relação com os clientes e impulsiona a competitividade no mercado. Saiba mais sobre o assunto no artigo cientí�co, disponível na base Scielo, intitulado “Alinhando objetivos estratégicos e processo de desenvolvimento em empresas de software”, dos autores André Leme Fleury, Mauro de Mesquita Spinola, Fernando José Barbin Laurindo e Marcelo Schneck de Paula Pessôa. FLEURY, A. L. et al. Alinhando objetivos estratégicos e processo de desenvolvimento em empresas de software. Produção, v. 24, n. 2, Abr/Jun. 2014, p. 379-39. Os Modelos de Maturidade, como o Capability Maturity Model (CMM) e o Capability Maturity Model Integration (CMMI), representam padrões globalmente reconhecidos na área de gerenciamento de processos e qualidade. Eles oferecem uma estrutura detalhada para avaliar e melhorar a maturidade dos processos organizacionais. Ele foca em áreas especí�cas do processo, fornecendo uma avaliação detalhada do estado atual e orientando as organizações para melhorias incrementais. Por outro lado, uma expansão do CMM, abrange várias disciplinas, como desenvolvimento, serviços e aquisição, permitindo uma abordagem mais ampla para avaliação e melhoria de processos. Saiba mais sobre o assunto no artigo a seguir: THIAGO. CMMI (Capability Maturity Model Integration). DEVMEDIA. 2006. Referências https://www.scielo.br/j/prod/a/pBFg7djgTHMt9HNsdpvjssy/?format=pdf&lang=pt https://www.scielo.br/j/prod/a/pBFg7djgTHMt9HNsdpvjssy/?format=pdf&lang=pt https://www.devmedia.com.br/cmmi-capability-maturity-model-integration/3530 https://www.devmedia.com.br/cmmi-capability-maturity-model-integration/3530 Disciplina Engenharia de Software ABNT – ASSOCIAÇÃO BRASILEIRA DE NORMAS TÉCNICAS. ABNT NBR ISO/IEC 27001 – Tecnologia da informação – Técnicas de segurança – Sistemas de gestão de segurança da informação – Requisitos. 2006. ABNT - ASSOCIAÇÃO BRASILEIRA DE NORMAS TÉCNICAS. ABNT NBR ISO 9001:2015: Sistemas de gestão da qualidade – requisitos. Rio de Janeiro, 2008. BASILI, V. R. et al., Experimentation in software engineering, in IEEE Transactions on Software Engineering, vol. SE-12, no. 7, pp. 733-743, Julho de 1986, doi: 10.1109/TSE.1986.6312975. PAULA FILHO, W. P. Engenharia de Software: projetos e processos. 4.ed. Rio de Janeiro: LTC, 2019. PRESSMAN, R.; MAXIM, B. R. Engenharia de Software: uma abordagem pro�ssional. 9. ed. Porto Alegre: AMGH, 2021. SOMMERVILLE, I. Engenharia de Software. 10.ed. São Paulo: Pearson Education do Brasil, 2018. Aula 4 Auditoria de sistemas Introdução Disciplina Engenharia de Software Olá, estudante! Nesta aula falaremos sobre os conceitos de auditoria de tecnologia de informação do produto, ciclos de vida da auditoria e Tipos de auditoria. A auditoria de tecnologia da informação é uma prática essencial que visa avaliar a e�cácia e a segurança dos sistemas de informação de uma organização. Para conduzir auditorias e�cazes, os pro�ssionais precisam entender os conceitos fundamentais da auditoria de tecnologia da informação, incluindo metodologias de avaliação e práticas de revisão. Essas auditorias seguem ciclos de vida especí�cos, envolvendo a preparação, a execução, a documentação dos resultados e a comunicação das descobertas. Existem diversos tipos de auditorias de tecnologia da informação, como auditorias de segurança, de conformidade e de desempenho, cada uma focada em aspectos especí�cos dos sistemas de informação. Compreender esses conceitos é essencial para garantir que as auditorias sejam conduzidas de forma abrangente, identi�cando vulnerabilidades, garantindo a conformidade com padrões e regulamentações, e promovendo a e�ciência operacional dos sistemas de TI da organização. Conceitos de auditoria Disciplina Engenharia de Software Os conceitos de auditoria de tecnologia da informação desempenham um papel essencial no mundo digital da atualidade, pois a segurança e a e�ciência dos sistemas de informação são fundamentais para o sucesso das organizações. A auditoria de tecnologia da informação refere-se à avaliação sistemática e independente dos processos, sistemas e infraestrutura de TI de uma organização. Ela tem como objetivo avaliar a integridade, con�dencialidade, disponibilidade e autenticidade das informações, bem como identi�car e mitigar riscos relacionados à segurança cibernética. No contexto empresarial, a auditoria de TI ajuda a assegurar que os controles de segurança estejam robustos, que as práticas estejam em conformidade com padrões e regulamentações, e que os dados estejam protegidos contra ameaças internas e externas. Compreender os conceitos fundamentais desse processo é importante para pro�ssionais de TI, auditores e gestores, pois permite uma abordagem estratégica e e�caz para garantir a integridade e segurança dos ativos digitais de uma organização. Os ciclos de vida da auditoria representam as fases essenciais do processo, desde a fase de planejamento até a comunicação dos resultados. Durante a fase de planejamento, os auditores de�nem os objetivos, escopo e abordagem da auditoria. Em seguida, vem a fase de execução, em que os procedimentos de auditoria são aplicados, dados são coletados e análises são realizadas. Após a execução, a fase de relatório começa, nesse momento os resultados são documentados, incluindo descobertas, recomendações e conclusões. Finalmente, na fase de acompanhamento, as ações corretivas são monitoradas para garantir que as recomendações sejam implementadas. Esses ciclos de vida são vitais para garantirque a auditoria seja conduzida de forma abrangente, objetiva e e�caz, proporcionando uma visão clara do estado dos processos e controles auditados. Os tipos de auditorias formam uma categoria diversi�cada de práticas de avaliação, cada uma focada em objetivos especí�cos dentro do campo da auditoria. Estes tipos incluem auditorias Disciplina Engenharia de Software �nanceiras, que se concentram nas �nanças e contabilidade de uma organização, visando a precisão e conformidade com regulamentos; auditorias operacionais, que avaliam e�ciência, e�cácia e economia dos processos organizacionais; e auditorias de conformidade, que asseguram que as operações estejam em linha com leis e regulamentações. Além disso, existem auditorias de segurança da informação que avaliam sistemas e controles de segurança cibernética; auditorias ambientais, que focam em práticas sustentáveis e conformidade ambiental; e auditorias de qualidade, que garantem que produtos ou serviços atendam aos padrões de�nidos. Compreender esses diferentes tipos de auditorias é crucial para adaptar as estratégias de avaliação de acordo com os objetivos especí�cos da organização, garantindo que sejam conduzidas de maneira precisa, e�ciente e bené�ca para a empresa. Ciclo de vida das auditorias Conceitos de auditoria de tecnologia da informação (TI) referem-se às práticas e processos fundamentais empregados para avaliar, analisar e melhorar os sistemas de informação de uma organização. A auditoria de TI envolve uma avaliação independente e sistemática dos controles, políticas, procedimentos, estruturas organizacionais e salvaguardas tecnológicas de uma empresa. Seu objetivo é assegurar que os sistemas de informação estejam operando e�cazmente, sejam Disciplina Engenharia de Software seguros contra ameaças cibernéticas e estejam em conformidade com padrões regulatórios e políticas internas. Os pro�ssionais dessa área examinam a infraestrutura tecnológica da organização, identi�cam vulnerabilidades, avaliam a e�cácia dos controles de segurança e recomendam melhorias. Isso não apenas garante a proteção dos ativos de informação da empresa, como também ajuda a aumentar a e�ciência operacional e a con�abilidade dos sistemas. Os ciclos de vida da auditoria são estruturas fundamentais que de�nem as etapas e os processos envolvidos na condução de uma auditoria e�caz. Essas etapas são projetadas para garantir que a auditoria seja abrangente, objetiva e siga uma abordagem sistemática para avaliação. Existem várias etapas-chave em um ciclo de vida típico de auditoria, começando pelo planejamento, em que os objetivos da auditoria são estabelecidos, o escopo é de�nido e os recursos são alocados. A próxima fase é a de execução, em que os procedimentos de auditoria são aplicados, dados são coletados, evidências são examinadas e análises são realizadas. Essa etapa envolve entrevistas, revisões de documentos, testes e outras atividades para veri�car a conformidade, precisão e e�cácia dos controles e processos auditados. Após a execução, a fase de relatório entra em jogo. Nesse estágio, os resultados da auditoria são documentados de forma clara e objetiva. Isso inclui descobertas, recomendações, conclusões e, se necessário, planos de ação para correções ou melhorias. O relatório de auditoria deve ser claro em relação à premissas utilizadas para a auditoria, as quais estabelecem os limites de abrangência de profundidade de cada tipo de erro, vulnerabilidade ou problema que a auditoria tem como objetivo identi�car A auditoria não se encerra com a reunião de entrega do relatório �nal, pois os pontos elencados, como não conformidades ou sugestões de melhoria, precisam ser atrelados a um responsável e respectivo prazo para a resolução, formalizando um plano de ação consistente. Cada resolução poderá ainda, dentro do plano de ação resultante do relatório de auditoria, ser dividida em duas partes. Uma primeira parte denominada disposição ou contenção, que visa amenizar ou deter, os efeitos causados pelo problema detectado na auditoria e a segunda parte, que constitui a resolução completa do problema, se esta não for possível ser imediatamente implementada, devido à necessidade de modi�cação ou implementação de nova infraestrutura de dados. As auditorias de software são processos essenciais que visam avaliar a qualidade, segurança e conformidade dos sistemas e aplicativos de software em uma organização. Existem vários tipos de auditorias de software, cada um com foco em aspectos especí�cos dos sistemas de TI. 1. Auditoria de segurança de software: concentra-se na identi�cação de vulnerabilidades de segurança nos sistemas de software. Os auditores examinam os controles de segurança, as políticas de acesso e as práticas de criptogra�a para garantir que os dados e sistemas estejam protegidos contra ameaças cibernéticas. 2. Auditoria de conformidade de software: nesse tipo de auditoria, os auditores avaliam se o software e os sistemas estão em conformidade com regulamentações e padrões da indústria. Isso é essencial para garantir que a organização cumpra requisitos legais, contratuais e regulatórios, como leis de proteção de dados ou normas da indústria de pagamento. 3. Auditoria de qualidade de software: tem como foco a qualidade do código e do processo de desenvolvimento. Os auditores examinam o código-fonte, a arquitetura do software, os Disciplina Engenharia de Software padrões de codi�cação e os processos de teste para garantir que o software seja robusto, con�ável e livre de defeitos. 4. Auditoria de desempenho de software: neste tipo de auditoria, os auditores avaliam o desempenho dos aplicativos e sistemas. Eles analisam tempos de resposta, escalabilidade, carga máxima e e�ciência operacional para garantir que o software funcione de maneira rápida e e�caz, mesmo sob carga intensa. 5. Auditoria de licenciamento de software: veri�ca se a organização está utilizando o software de acordo com as licenças adquiridas. Isso é crucial para evitar problemas legais e �nanceiros associados à violação de direitos autorais e licenças de software. Compreender os diferentes tipos de auditorias de software é fundamental para garantir que os sistemas de TI estejam seguros, em conformidade e operando com e�ciência. Cada tipo de auditoria desempenha um papel importante na proteção dos ativos digitais e na garantia da con�ança dos usuários e clientes. Aplicações de auditorias A aplicação dos conceitos de auditoria de tecnologia da informação é importante para garantir a segurança, e�cácia e conformidade dos sistemas de informação em uma organização. Ao aplicar esses conceitos, os pro�ssionais de auditoria podem realizar avaliações detalhadas dos controles de segurança, políticas de acesso, práticas de gerenciamento de riscos e conformidade com regulamentações. Ela ajuda a identi�car vulnerabilidades, detectar ameaças cibernéticas, avaliar a integridade dos dados e garantir que os sistemas estejam alinhados com os objetivos estratégicos da empresa. Também, veri�ca se as políticas de segurança estão sendo seguidas, se os dados estão sendo protegidos adequadamente e se os sistemas estão operando com e�ciência. Ao realizar auditorias regulares, as organizações podem evitar violações de dados, minimizar riscos de segurança, garantir a conformidade com regulamentações como GDPR (General Data Protection Regulation - Regulamento Geral de Proteção de Dados), HIPAA (Health Insurance Portability and Accountability Act - Lei de Portabilidade e Responsabilidade de Seguro de Saúde) ou PCI DSS (Payment Card Industry Data Security Standard - Padrão de Segurança de Dados da Indústria de Cartões de Pagamento), e melhorar a e�ciência operacional dos sistemas de TI. Disciplina Engenharia de Software Além disso, as auditorias de TI proporcionam transparência e con�ança aos stakeholders, clientes e parceiros, demonstrando um compromisso sólido com a segurança da informação e a integridade dos dados. A aplicação dos ciclos de vida da auditoria é essencialpara conduzir uma auditoria de forma e�caz e abrangente em qualquer organização. Esses ciclos representam as fases cruciais pelas quais uma auditoria passa, desde o planejamento até o acompanhamento das ações corretivas. Planejamento: a fase inicial do ciclo de vida envolve estabelecer os objetivos, de�nir o escopo e determinar as metodologias e recursos necessários para a auditoria. Os auditores elaboram um plano detalhado, identi�cam os riscos a serem avaliados e desenvolvem uma estratégia de execução. Execução: durante essa fase, os procedimentos de auditoria são aplicados. Isso inclui coletar dados, analisar documentos, realizar entrevistas, testes e outras atividades para avaliar os controles, a conformidade e a e�cácia dos processos. Relatório: após a execução, os resultados são documentados em um relatório. Este documento inclui descobertas, recomendações e conclusões derivadas da auditoria. O relatório é uma peça fundamental, pois fornece informações claras sobre as áreas de melhoria e as ações corretivas necessárias. Acompanhamento: esta fase é essencial para garantir que as recomendações da auditoria sejam implementadas de forma adequada e e�caz. Os auditores monitoram as ações corretivas, veri�cam se as melhorias foram feitas conforme recomendado e avaliam se os controles estão operando conforme o esperado. Ao longo de alguns ciclos �nalizados de auditoria é possível atrelar gradualmente os resultados das ações corretivas aos indicadores corporativos de melhoria de qualidade, redução de custos e redução dos prazos de atendimento de demandas internas e externas. Embora o processo de auditorias de sistemas de gestão de dados seja uma evolução dos sistemas de asseguramento da qualidade de produtos e serviços, ele possui características especí�cas quanto à análise de riscos e de�nição de um sistema de contingências capaz de bloquear ou pelo menos amenizar um problema, tão logo este seja detectado. A �nalização de alguns ciclos de auditoria também pode originar dentro da organização uma matriz de riscos mais aprimorada, fornecendo premissas mais robustas para as auditorias posteriores. A matriz de risco aprimorada ao longo de vários ciclos de auditoria também trará para as equipes internas, uma visão mais clara de como detectar mais rapidamente erros simples e como prevenir que problemas complexos possam ser pelo menos barrados em ações de contingência mais e�cientes. Cada tipo de auditoria de software tem um foco especí�co, mas quando aplicados em conjunto, oferecem uma visão completa e detalhada do ambiente de software de uma empresa. 1. Auditoria de segurança de software: a auditoria de segurança de software foca em identi�car vulnerabilidades e ameaças nos sistemas. Ela examina políticas de segurança, con�gurações de �rewall, práticas de autenticação e autorização, bem como outros controles de segurança. Ao identi�car e corrigir falhas de segurança, as organizações podem proteger dados sensíveis contra acessos não autorizados e ataques cibernéticos. 2. Auditoria de conformidade de software: veri�ca se os sistemas e aplicativos estão em conformidade com leis, regulamentações e padrões do setor. Isso inclui regulamentos Disciplina Engenharia de Software como o GDPR, HIPAA e PCI DSS. Garantir a conformidade com essas leis é vital para evitar multas e manter a con�ança dos clientes. 3. Auditoria de qualidade de software: a auditoria de qualidade de software avalia o código- fonte, arquitetura do software e práticas de desenvolvimento. Isso ajuda a garantir que o software seja robusto, e�ciente e livre de defeitos. Uma qualidade de software superior reduz falhas, melhora a experiência do usuário e aumenta a e�ciência operacional. 4. Auditoria de desempenho de software: avalia a e�ciência operacional dos sistemas de software. Ela analisa tempos de resposta, escalabilidade e e�ciência operacional sob carga. Melhorar o desempenho do software garante uma experiência do usuário mais rápida e con�ável. 5. Auditoria de licenciamento de software: esta auditoria veri�ca se os softwares estão sendo usados de acordo com as licenças adquiridas. Isso é essencial para evitar penalidades legais e garantir o uso ético e legal do software. Existem empresas especializadas na execução, separadamente ou em conjunto, de cada um dos 5 tipos de auditoria elencados acima, mas uma equipe interna ou externa à organização que receberá a auditoria, deverá ser formada para planejar e concluir a organização proveniente de cada uma delas Tal equipe de coordenação geral, da auditoria e suas ações rami�cadas, será responsável por encerrar cada ciclo, validando as ações concluídas dos planos de ação elaborados para resolver as contingências e ações corretivas, originadas pela auditoria. Videoaula: Auditoria de sistemas Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Olá, estudante! Neste vídeo resumo veremos os conceitos de auditoria de tecnologia da informação, é importante este conhecimento pela aplicação na área de tecnologia. Falaremos sobre Regulamento Geral de Proteção de Dados, e os tipos de auditoria de software que existem. Vejamos uma breve descrição sobre cada um destes itens, garantem um conhecimento na área de engenharia de software. Saiba mais Disciplina Engenharia de Software As auditorias de software desempenham um papel crucial na garantia da segurança, qualidade e conformidade dos sistemas digitais. Existem diversos tipos de auditoria em software, cada um com um enfoque especí�co. A auditoria de segurança de software, concentra-se na identi�cação e correção de vulnerabilidades para proteger contra ameaças cibernéticas. Por outro lado, a auditoria de conformidade de software assegura que os sistemas estejam alinhados com regulamentações e padrões do setor, como o GDPR ou o HIPAA. A auditoria de qualidade de software avalia a robustez e con�abilidade do código-fonte, melhorando a experiência do usuário e reduzindo defeitos. Em relação ao desempenho, a auditoria de desempenho de software analisa a e�ciência operacional, garantindo que os sistemas operem de forma rápida e e�caz mesmo sob carga intensa. E1IT. Auditoria de Software: 6 dicas para preparar a sua empresa. Marketing. 2018. A auditoria em software é um processo essencial que visa avaliar a integridade, segurança e conformidade dos sistemas de computador e aplicativos em uma organização. Envolve uma análise sistemática e detalhada do código-fonte, arquitetura, controles de segurança e práticas de desenvolvimento. Os conceitos de auditoria em software abrangem diversas áreas, incluindo a identi�cação de vulnerabilidades, análise de conformidade com regulamentações e padrões do setor, avaliação da qualidade do código, desempenho e e�ciência operacional. Além disso, a auditoria em software também se estende à veri�cação de licenciamento para garantir que os softwares sejam usados de acordo com as licenças adquiridas. SUNSOFTWARE BRASIL. Auditoria de TI: entenda quais são as principais e seus objetivos. 2018. Referências https://e1it.com.br/post/auditoria-de-software-6-dicas-para-preparar-a-sua-empresa https://www.sunsoftware.com.br/auditoria-de-ti/ Disciplina Engenharia de Software BASILI, V. R. et al., Experimentation in software engineering, in IEEE Transactions on Software Engineering, vol. SE-12, no. 7, pp. 733-743, Julho de 1986, doi: 10.1109/TSE.1986.6312975. PAULA FILHO, W. P. Engenharia de Software: projetos e processos. 4. ed. Rio de Janeiro: LTC, 2019. PRESSMAN, R.; MAXIM, B. R. Engenharia de Software: uma abordagem pro�ssional. 9. ed. Porto Alegre: AMGH, 2021. SOMMERVILLE, I. Engenharia de Software. 10. ed. São Paulo: Pearson Education do Brasil, 2018. Aula 5 Revisão da unidade Qualidade de produto e de processo Disciplina Engenharia de Software A qualidade de software é uma disciplina crucial no desenvolvimentode sistemas, abrangendo diversos conceitos essenciais. Erros, falhas e defeitos representam estágios distintos no processo, começando com equívocos no código (erros), manifestando-se como comportamentos indesejados (falhas) e resultando em desvios da especi�cação original (defeitos). Para garantir a qualidade, é necessária uma abordagem estruturada, conhecida como garantia de qualidade de software, que envolve atividades preventivas e de veri�cação para assegurar que os processos e produtos atendam aos padrões estabelecidos. A avaliação da qualidade de software é apoiada por métricas, que proporcionam indicadores mensuráveis para atributos como e�ciência, con�abilidade, manutenibilidade, usabilidade, portabilidade e segurança. Essas métricas são cruciais para identi�car áreas de melhoria, tomar decisões informadas e aprimorar continuamente os processos de desenvolvimento. Bugs, por sua vez, são imperfeições especí�cas no código que causam comportamentos indesejados. A detecção e correção e�caz de bugs são aspectos críticos da garantia de qualidade, visando garantir que o software atenda aos requisitos do usuário de maneira consistente e con�ável. A gestão da qualidade do produto é uma abordagem integral que busca garantir a excelência em todas as fases do ciclo de vida do produto. Isso envolve a de�nição clara de requisitos de qualidade, medição precisa do desempenho do produto em relação a esses requisitos e avaliação contínua para identi�car oportunidades de melhoria. A medição da qualidade do produto é essencial para avaliar o grau de conformidade com os requisitos prede�nidos. Isso inclui a utilização de métricas especí�cas que abrangem Disciplina Engenharia de Software características como con�abilidade, durabilidade, e�ciência e usabilidade. A coleta e análise sistemática dessas métricas permitem uma visão objetiva do desempenho do produto. Os requisitos de qualidade desempenham um papel central na gestão da qualidade do produto, de�nindo as expectativas e padrões a serem alcançados. Esses requisitos devem ser claros, mensuráveis e alinhados às necessidades dos clientes. As normas ISO de qualidade desempenham um papel crucial na padronização e melhoria contínua da gestão da qualidade do produto. A norma ISO 9001 (ABNT, 2015), por exemplo, estabelece diretrizes para sistemas de gestão de qualidade, promovendo a e�ciência operacional, satisfação do cliente e conformidade com requisitos regulamentares. O MPS.BR (Melhoria de Processo do Software Brasileiro) é uma iniciativa nacional que busca aprimorar a qualidade e a maturidade dos processos de desenvolvimento de software no Brasil. Esse modelo fornece um conjunto de práticas e critérios para avaliar e aprimorar os processos de software, atendendo às necessidades especí�cas do contexto brasileiro. Os modelos de maturidade, como o CMM (Capability Maturity Model) e o CMMI (Capability Maturity Model Integration), são frameworks internacionais que de�nem estágios evolutivos nos processos de uma organização. O CMMI, em particular, oferece uma abordagem mais abrangente, integrando diferentes áreas de processo e promovendo a melhoria contínua. Normas ISO, como a ISO/IEC 12207 (ISO, 1995) e a ISO/IEC 15504 (ISO, 2004), desempenham um papel crucial na qualidade dos processos de software, fornecendo diretrizes para o ciclo de vida do software e avaliação da capacidade de processo. Essas normas internacionais estabelecem padrões reconhecidos globalmente, promovendo a interoperabilidade e a conformidade com as melhores práticas. A implementação do MPS.BR, aliada aos modelos de maturidade e normas ISO, oferece às organizações brasileiras uma estrutura robusta para aprimorar seus processos de desenvolvimento de software. Essas abordagens promovem e�ciência, previsibilidade e qualidade, resultando em produtos e serviços mais con�áveis e competitivos no cenário global. A auditoria de tecnologia da informação (TI) envolve a avaliação sistemática e independente dos controles de tecnologia de uma organização para garantir a integridade, con�dencialidade e disponibilidade de suas informações. Os ciclos de vida da auditoria de TI são compostos por fases distintas, começando com o planejamento, seguido pela execução, comunicação de resultados e, �nalmente, pelo acompanhamento e monitoramento contínuo. Existem diversos tipos de auditorias de TI, cada um direcionado a objetivos especí�cos. A auditoria de conformidade veri�ca se os controles estão alinhados com padrões e regulamentações, enquanto a auditoria operacional avalia a e�cácia dos processos internos. A auditoria de segurança se concentra em identi�car vulnerabilidades e ameaças, enquanto a auditoria de sistemas examina a integridade e a e�ciência dos sistemas de informação. Durante o ciclo de vida da auditoria, é essencial garantir a independência do auditor e a objetividade na avaliação dos controles. A comunicação e�caz dos resultados da auditoria, juntamente com recomendações para melhorias, é uma parte vital do processo, permitindo que a organização fortaleça seus controles e proteja seus ativos de informação. Videoaula: Revisão da unidade Disciplina Engenharia de Software Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Olá, estudante! Neste vídeo resumo veremos como a gestão da qualidade do produto é essencial para o desenvolvimento de sistemas, envolvendo a de�nição de requisitos, medição de desempenho e avaliação contínua. Métricas especí�cas, como e�ciência e usabilidade, são fundamentais na busca pela excelência. A norma ISO 9001 contribui para padronização e melhoria contínua. Na gestão da qualidade de software, o MPS.BR busca aprimorar processos no contexto brasileiro, enquanto modelos de maturidade como CMM e CMMI e normas ISO, como a ISO/IEC 12207, fortalecem a qualidade internacionalmente. Ao abordar a auditoria de tecnologia da informação, o ciclo de vida inclui planejamento, execução, comunicação de resultados e acompanhamento. Diversos tipos de auditorias, como conformidade e segurança, garantem a integridade, con�dencialidade e disponibilidade das informações, essenciais para a e�ciência das organizações no ambiente digital. Estudo de caso Melhoria de processo de software em uma empresa brasileira Em uma empresa brasileira de desenvolvimento de software, a implementação do MPS.BR (Melhoria de Processo do Software Brasileiro) foi adotada como parte integrante da estratégia Disciplina Engenharia de Software para elevar a qualidade de seus produtos. O processo iniciou com a avaliação inicial dos processos existentes, identi�cação de lacunas e a de�nição de metas especí�cas de melhoria, alinhadas aos requisitos do MPS.BR. A empresa também buscou a certi�cação ISO 9001 para fortalecer sua abordagem de gestão da qualidade. Durante o processo de implementação, a empresa adotou métricas de qualidade, como e�ciência e usabilidade, para monitorar o desempenho dos seus produtos. Além disso, foram implementados modelos de maturidade, como CMMI, para aprimorar a maturidade dos processos, buscando uma abordagem mais abrangente e integrada. Para garantir a conformidade com as práticas recomendadas e padrões estabelecidos, a empresa também passou por auditorias internas e externas, incluindo auditorias de conformidade, operacionais e de segurança de TI. Essas auditorias contribuíram para a identi�cação de áreas de melhoria contínua, garantindo que os processos atendessem aos padrões internacionalmente reconhecidos. Assim, quais foram os principais benefícios que a empresa obteve com a implementação do MPS.BR, ISO 9001 e modelos de maturidade, os quais são três modelos de sistemas de gestão e auditorias de dados? E como as auditorias contribuíram para a evolução dos processos? ___________ Re�ita A qualidade de software se refere à medida em que um produto atende aos requisitos e expectativas dosusuários. Envolve a implementação de práticas e padrões que garantam a e�ciência, con�abilidade, usabilidade e segurança do software. A aplicação desses padrões asseguram totalmente a qualidade do software? Métricas especí�cas, como testes de desempenho e con�abilidade, são frequentemente utilizadas para avaliar e melhorar a qualidade. Modelos de maturidade, como CMMI, fornecem estruturas para aprimorar processos e garantir consistência. Tais métricas se mantém e�cazes ao longo dos anos ou precisam ser constantemente revisadas? A gestão da qualidade de software inclui a identi�cação e correção de erros, defeitos e falhas ao longo do ciclo de vida do desenvolvimento. Normas internacionais, como a ISO/IEC 9126, proporcionam diretrizes para avaliação e garantia da qualidade de software. (TRUECHANGE, 2023). A qualidade do produto abrange a excelência nas características e desempenho de um produto, garantindo que atenda ou supere as expectativas dos clientes. Envolve a de�nição clara de requisitos, a implementação de processos e�cientes e a entrega de um produto con�ável e durável. Como a de�nição clara de tais requisitos é assegurada? Métricas especí�cas, como con�abilidade, usabilidade e e�ciência, são cruciais na avaliação da qualidade do produto. A gestão da qualidade do produto busca identi�car e corrigir possíveis imperfeições ao longo do ciclo de vida, garantindo a satisfação do cliente. O indicador de satisfação do cliente se mantém constante ao longo dos anos? Normas, como a ISO 9001 (ISO, 2015), fornecem diretrizes para sistemas de gestão da qualidade, promovendo a consistência e a melhoria contínua na entrega de produtos. A qualidade do produto é um fator determinante para a competitividade e a reputação de uma empresa no mercado. Qualidade de software e qualidade do produto ou serviço �nal, signi�cam o mesmo conceito para o cliente? Como diferenciá-los, quando necessário? Disciplina Engenharia de Software Videoaula: Resolução do estudo de caso Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Principais benefícios: Melhoria na qualidade do produto: a implementação do MPS.BR contribuiu para uma melhoria signi�cativa na qualidade dos produtos, alinhando os processos com as melhores práticas nacionais. E�ciência operacional: a certi�cação ISO 9001 fortaleceu a e�ciência operacional, estabelecendo diretrizes claras para os processos de gestão da qualidade. Maturidade dos processos: a adoção de modelos de maturidade, como CMMI, elevou a maturidade dos processos, resultando em maior consistência e previsibilidade nas entregas. Contribuição das auditorias: Identi�cação de lacunas: as auditorias internas e externas identi�caram lacunas nos processos, permitindo ações corretivas e preventivas. Conformidade: as auditorias de conformidade asseguraram que a empresa atendesse aos requisitos especí�cos dos padrões, como o MPS.BR e ISO 9001. Aprimoramento contínuo: Através da retroalimentação das auditorias, a empresa implementou melhorias contínuas nos processos, alinhando-se a práticas de classe mundial. Tópicos necessários para a correção da questão: Descrição da implementação do MPS.BR e ISO 9001 na empresa. Destaque para a adoção de modelos de maturidade, como o CMMI. Discussão sobre as métricas de qualidade utilizadas para monitorar o desempenho dos produtos. Explicação sobre os diferentes tipos de auditorias conduzidas, incluindo seus propósitos e resultados. Análise dos benefícios obtidos, destacando como cada iniciativa contribuiu para a melhoria global dos processos na empresa. Resumo visual Disciplina Engenharia de Software Veja o resumo visual da unidade: Referências Disciplina Engenharia de Software ABNT - ASSOCIAÇÃO BRASILEIRA DE NORMAS TÉCNICAS. ABNT NBR ISO 9001:2015: Sistemas de gestão da qualidade – requisitos. Rio de Janeiro, 2008. BASILI, V. R. et al., Experimentation in software engineering, in IEEE Transactions on Software Engineering, vol. SE-12, no. 7, pp. 733-743, Julho de 1986, doi: 10.1109/TSE.1986.6312975. ISO - INTERNATIONAL ORGANIZATION FOR STANDARDIZATION, International Standard 12207 – Information Technology – Software Lifecycle Processes, Reference Number ISO / IEC 12207, Primeira Edição, 1995. ISO - INTERNATIONAL ORGANIZATION FOR STANDARDIZATION, International Standard 15504 – Information Technology – Process Assessment, Reference Number ISO / IEC 15504, Primeira Edição, 2004. PAULA FILHO, W. P. Engenharia de Software: projetos e processos. 4.ed. Rio de Janeiro: LTC, 2019. PRESSMAN, R.; MAXIM, B. R. Engenharia de Software: uma abordagem pro�ssional. 9. ed. Porto Alegre: AMGH, 2021. SOMMERVILLE, I. Engenharia de Software. 10. ed. São Paulo: Pearson Education do Brasil, 2018. TRUECHANGE, Entenda o conceito de qualidade de software e sua função. Disponível em: https://truechange.com.br/blog/qualidade-de- software/#:~:text=O%20que%20é%20e%20para%20que%20serve%20a%20qualidade%20de%20s oftware&text=No%20desenvolvimento%20a%20qualidade%20de,o%20objetivo%20�nal%20do%2 0projeto. Acesso em: 27 nov. 2023. , Unidade 3 https://truechange.com.br/blog/qualidade-de-software/#:~:text=O%20que%20%C3%A9%20e%20para%20que%20serve%20a%20qualidade%20de%20software&text=No%20desenvolvimento%20a%20qualidade%20de,o%20objetivo%20final%20do%20projeto https://truechange.com.br/blog/qualidade-de-software/#:~:text=O%20que%20%C3%A9%20e%20para%20que%20serve%20a%20qualidade%20de%20software&text=No%20desenvolvimento%20a%20qualidade%20de,o%20objetivo%20final%20do%20projeto https://truechange.com.br/blog/qualidade-de-software/#:~:text=O%20que%20%C3%A9%20e%20para%20que%20serve%20a%20qualidade%20de%20software&text=No%20desenvolvimento%20a%20qualidade%20de,o%20objetivo%20final%20do%20projeto https://truechange.com.br/blog/qualidade-de-software/#:~:text=O%20que%20%C3%A9%20e%20para%20que%20serve%20a%20qualidade%20de%20software&text=No%20desenvolvimento%20a%20qualidade%20de,o%20objetivo%20final%20do%20projeto Disciplina Engenharia de Software Teste de Software Aula 1 Conceitos de teste de software Introdução Olá, estudante! Imagine construir uma casa sem consultar um arquiteto ou um engenheiro, sem realizar inspeções, sem veri�car se os materiais estão corretos e sem garantir que cada canto esteja seguro. Agora, aplique essa analogia ao desenvolvimento de software. A qualidade de um software é como a solidez de uma construção - ela requer atenção cuidadosa, processos bem de�nidos e testes rigorosos. A realização de testes é um dos momentos principais e críticos para garantir que o software funcione corretamente, de modo a atender aos requisitos do cliente e que proporcione uma experiência positiva aos usuários. Trata-se, então, de uma prática preventiva que ajuda a identi�car defeitos antes que eles atinjam o cliente �nal. Por outro lado, a não realização dos testes por questões de economia de tempo e de recursos, resultará em um alto custo a longo prazo. Defeitos não detectados, tanto na lógica de negócio quanto na interface do software podem se transformar em falhas dispendiosas após o lançamento. Conseguimos lembrar sobre a importância do teste de software pensando controle de tráfego aéreo com erros não identi�cados - as consequências podem ser devastadoras. Disciplina Engenharia de Software Nesta aula, exploraremos três pilares da garantia de qualidade do software: casos de testes, plano de testes e veri�cação e validação. Os casos de testes são como peças de quebra-cabeça que montamos para garantir que o software funcione corretamente; o plano de testes, por sua vez, representa um guia estratégico que nos orienta nessa jornada de testes; por �m, a veri�cação e validação são os processos que nos asseguram que o software foi construído corretamente e atende às necessidades dos usuários. Fundamentos de teste de software Agora, vamos mergulhar nos pilares fundamentaisdos testes de software, explorando os conceitos essenciais de casos de testes, plano de testes e, por �m, a etapa de veri�cação e validação. Ao compreender e dominar esses conceitos, você estará preparado para construir software robusto, con�ável e valioso. Vamos mergulhar nesses tópicos, explorar suas nuanes e descobrir como eles se encaixam no ciclo de desenvolvimento de software. Casos de Testes Como dito anteriormente, começaremos pelos casos de testes que são como cenários que simulam diferentes situações pelas quais o software pode passar. Eles são criados com base em requisitos e especi�cações, detalhando as condições de entrada, os passos a serem seguidos e os resultados esperados. Disciplina Engenharia de Software Em outras palavras, são instruções precisas sobre como testar uma parte especí�ca do software, ou seja, os casos de teste de�nem como o software será testado em relação a um conjunto especí�co de condições (SOMMERVILLE, 2018). Os casos de teste de�nem o que deve ser feito para testar um sistema, incluindo as etapas executadas no sistema, os valores dos dados de entrada que são inseridos no sistema e os resultados esperados durante a execução do caso de teste. O uso de casos de teste permite que desenvolvedores e testadores descubram erros que possam ter ocorrido durante o desenvolvimento ou defeitos que não foram percebidos durante testes ad hoc (testes sem plano formal de�nido). Plano de Testes Um plano de teste é um documento detalhado que cataloga as estratégias de teste, objetivos, cronograma, estimativas, prazos e recursos necessários para concluir aquele projeto. Pense nisso como um plano para executar os testes necessários para garantir que o software esteja funcionando corretamente – controlados pelos gerentes de teste. Um plano de teste bem elaborado é um documento dinâmico que muda de acordo com a progressão do projeto e permanece sempre atualizado. Trata-se, então, do ponto de referência com base no qual as atividades de teste são executadas e coordenadas entre uma equipe de controle de qualidade. O plano de teste também é compartilhado com analistas de negócios, gerentes de projeto, equipes de desenvolvimento e qualquer pessoa associada ao projeto. Isto oferece principalmente transparência nas atividades de controle de qualidade para que todas as partes interessadas saibam como o software será testado. O plano é elaborado por gerentes ou líderes de controle de qualidade com base nas contribuições de membros da equipe de controle de qualidade (e às vezes não pertencentes ao controle de qualidade). Sua criação não deve levar mais do que 1/3 do tempo alocado para todo o projeto. Considere o plano de testes então como um roteiro criado para guiar todo o processo de teste, sendo considerado uma abordagem estratégica que descreve: Quais casos de teste serão executados. Quem será responsável por cada teste. Quando esses testes serão realizados. Logo, trata-se de uma diretriz fundamental para garantir que todos os aspectos do software sejam testados de maneira sistemática e organizada. Desse modo, podemos a�rmar que um plano de testes identi�ca o que deve ser testado, quem fará os testes, como os testes serão feitos e em que ordem eles serão executados (SOMMERVILLE, 2018). Veri�cação e Validação A veri�cação se concentra em con�rmar se o software está sendo construído de acordo com as especi�cações. Envolve revisões de código, testes unitários e outras técnicas que garantem que o software seja desenvolvido corretamente. Por outro lado, a validação busca assegurar que o software atende às necessidades reais dos usuários e ao propósito previsto. Em conjunto, veri�cação e validação fornecem uma abordagem holística para garantir a qualidade do software. A veri�cação e validação em testes de software consistem em: Disciplina Engenharia de Software A veri�cação avalia artefatos de software (como requisitos, design, código etc.) para garantir que atendam aos requisitos e padrões especi�cados. Ele garante que o software seja construído de acordo com as necessidades e especi�cações do projeto. A validação avalia o software para atender às necessidades e requisitos do usuário. Ele garante que o software atenda à �nalidade pretendida e atenda às expectativas do usuário. De acordo com Sommerville (2018), a veri�cação envolve veri�car que um sistema atenda às suas especi�cações e a validação envolve veri�car que o sistema atenda às necessidades dos usuários. Isso destaca a diferença fundamental entre con�rmar se o software foi construído corretamente (veri�cação) e garantir que ele seja útil e relevante para os usuários (validação). Aprofundando o conhecimento Disciplina Engenharia de Software Veremos, agora, aspectos da garantia de qualidade. Começaremos explorando os casos de testes e compreendendo os seus diferentes tipos. Já de início, consideraremos um sistema de gerenciamento de biblioteca on-line. Um exemplo de caso de teste seria "realizar uma pesquisa por título de livro e veri�car se os resultados correspondem à pesquisa realizada". Isso envolveria inserir um termo de pesquisa, acionar a pesquisa e analisar se os resultados exibidos correspondem ao termo fornecido. Os casos de testes podem ser categorizados em diferentes tipos, cada um com um foco especí�co (PRESSMAN; MAXIM, 2021). Os tipos incluem: Testes funcionais: os testes funcionais são projetados para veri�car se o software executa as funções conforme os requisitos (funcionais) estabelecidos. Eles são essenciais para Disciplina Engenharia de Software garantir que cada funcionalidade do software esteja operando corretamente. Testes de usabilidade: os testes de usabilidade se concentram na experiência do usuário, garantindo que o software seja intuitivo e fácil de usar. Aqui, a meta é veri�car se o �uxo de interação do usuário é natural e se as interfaces são compreensíveis. Testes de desempenho: os testes de desempenho avaliam como o software se comporta sob diferentes condições de carga. Isso inclui testar sua velocidade, e�ciência e capacidade de escalabilidade. Criar um plano de testes e�caz requer uma abordagem estratégica que cubra todas as dimensões do software. Por exemplo, para um aplicativo de comércio eletrônico, uma estratégia de teste pode ser dividida em áreas como funcionalidade (testes de compra, pagamento), desempenho (carga durante promoções) e usabilidade (navegação intuitiva). Existem diferentes tipos de planos de teste os quais variam de acordo com o foco e o estágio de desenvolvimento do software. A seguir estão dois dos tipos mais comuns, de acordo com Sommerville (2018): Plano de Testes de Aceitação do Usuário (UAT): esse plano se concentra em garantir que o software atenda às necessidades reais dos usuários �nais. É conduzido após os testes iniciais, permitindo que os usuários validem se o software está pronto para ser implantado. Plano de Testes de Integração: testa a integração entre diferentes módulos ou componentes do software. Garante que as partes individuais funcionem bem juntas e que não haja con�itos. Já a veri�cação e validação são duas etapas interligadas que garantem que o software seja construído corretamente (veri�cação) e que ele atenda aos requisitos e expectativas dos usuários (validação). Uma estratégia sólida de veri�cação envolve revisões de código, análise estática, testes unitários e de integração (PRESSMAN, 2021). Analisaremos alguns tipos de casos de teste para veri�cação e validação: Veri�cação Testes unitários: veri�cam individualmente as partes do software, como funções ou módulos, para garantir que eles funcionem corretamente. Testes de integração: veri�cam como diferentes partes do software se integram e funcionam em conjunto. Validação: Testes funcionais: validam se o software atende aos requisitos funcionais especi�cados. Testes de Aceitação do Usuário (UAT): Validam se o software atende às necessidades reais dos usuários �nais. Veri�cação e validação são etapas essenciais para garantir queo software atenda aos requisitos, seja construído corretamente e proporcione uma experiência positiva aos usuários. Exemplos de aplicações Disciplina Engenharia de Software Vamos ver aplicações tanto com casos de testes, plano de teste, validação e veri�cação. Caso de teste Considere um aplicativo de mídia social. Dessa aplicação podemos gerar um caso de teste chamado "publicar uma postagem e veri�car se ela é exibida corretamente no feed de notícias dos seguidores", em que você precisaria simular a criação de uma postagem, publicá-la e garantir que ela apareça corretamente para os seguidores. A seguir, são apresentados alguns exemplos de cada um dos casos de testes. Teste funcional em um aplicativo de Comércio Eletrônico: Cenário: testar se o botão "Finalizar Compra" de um aplicativo de comércio eletrônico processa a compra corretamente. Resultado esperado: a compra é processada, os itens são removidos do carrinho e um recibo é gerado. Teste de usabilidade em um aplicativo de Música em Streaming: Cenário: testar se o processo de criar e compartilhar uma playlist é intuitivo para o usuário. Resultado esperado: o processo é simples e direto, permitindo ao usuário criar e compartilhar playlists sem di�culdades. Teste de desempenho – Aplicativo de E-Commerce Durante Promoção: Disciplina Engenharia de Software Cenário: testar como o aplicativo de e-commerce lida com muitos usuários acessando simultaneamente durante uma promoção de vendas. Resultado esperado: o aplicativo deve manter a estabilidade e o tempo de resposta aceitável mesmo sob carga intensa. Existem várias ferramentas para facilitar a criação e a execução de casos de testes, a principal delas é o Selenium, uma ferramenta popular para testes automatizados de interfaces web, permitindo a simulação de interações do usuário. Plano de teste Vejamos alguns exemplos práticos de planos de teste e discutir algumas ferramentas que podem facilitar e agilizar o processo de planejamento e execução. Plano de Testes de Aceitação do Usuário (UAT) em um aplicativo de reserva em restaurantes: Cenário: garantir que os usuários possam realizar reservas de restaurantes de maneira e�caz. Resultado esperado: os usuários validam se o processo de reserva é intuitivo e se atende às suas expectativas. Plano de teste de integração em um sistema de reservas de viagem: Cenário: veri�car se os módulos de reserva de voos, hotéis e aluguel de carros funcionam em conjunto. Resultado esperado: o sistema deve coordenar as informações corretamente e fornecer uma reserva completa. No ambiente de desenvolvimento de software, existem várias ferramentas que podem ajudar no planejamento e execução de testes, dentre elas o TestRail, uma ferramenta de gerenciamento de testes que ajuda a planejar, rastrear e organizar casos de testes. Veri�cação e Validação A veri�cação e a validação são etapas fundamentais no processo de desenvolvimento de software, deste modo, apresentaremos exemplos concretos, abordando diferentes cenários e ferramentas relevantes para cada etapa. Exemplo de Veri�cação - Aplicativo de E-mail: Cenário: veri�car se um aplicativo de e-mail envia mensagens corretamente. Ação: enviar um e-mail para um destinatário e veri�car se a mensagem é entregue e exibida corretamente na caixa de entrada. Exemplo de Validação - Sistema de Reservas de Voo: Cenário: validar se um sistema de reservas de voos con�rma reservas com as companhias aéreas. Ação: fazer reservas de voos �ctícias e veri�car se as informações são enviadas corretamente para as companhias aéreas. Como ferramentas temos: Disciplina Engenharia de Software ESLint: responsável por realizar uma análise de código e veri�car se este segue as regras de estilo e melhores práticas. W3C Markup Validation Service: que veri�ca se o código HTML de uma página web segue os padrões e especi�cações do W3C. OWASP ZAP: que veri�ca e valida a segurança de aplicações web, identi�cando vulnerabilidades e ameaças. Por �m, cabe salientar que a criação criteriosa de Casos de Testes permite a avaliação detalhada das funcionalidades, enquanto os Planos de Testes estabelecem estratégias para garantir a cobertura adequada. Por outro lado, a Veri�cação assegura a conformidade do software com as especi�cações, enquanto a Validação foca em atender às necessidades reais dos usuários. Videoaula: Conceitos de teste de software Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Olá, estudante! Neste vídeo resumo, desvendaremos os segredos, as principais de�nições e ferramentas por de trás dos casos de teste, planos de teste, veri�cação e validação. Veremos como esses elementos garantem a qualidade e con�abilidade do software que usamos todos os dias. Saiba mais Disciplina Engenharia de Software O Selenium é uma ferramenta essencial na área de testes de software, permitindo a automação de testes de interface de usuário em aplicações web. Trata-se de uma ferramenta capaz de agilizar testes repetitivos, aumentar a cobertura de testes e melhorar a e�ciência do processo de desenvolvimento. Com suporte a diversas linguagens de programação, o Selenium é altamente relevante para garantir a qualidade funcional e de usabilidade das aplicações. Para conhecer mais sobre suas funcionalidades e utilização, recomendo explorar a documentação o�cial disponível no site do Selenium. Referências https://www.selenium.dev/ https://www.selenium.dev/ Disciplina Engenharia de Software PRESSMAN, R.; MAXIM, B. R. Engenharia de Software: uma abordagem pro�ssional. 9. ed. Porto Alegre: AMGH, 2021. SOMMERVILLE, I. Engenharia de Software. 10. ed. São Paulo: Pearson Education do Brasil, 2018. Aula 2 Estratégias de testes Introdução Disciplina Engenharia de Software Olá, estudante! Nesta aula, compreenderemos como as Estratégias de Teste de Software desempenham um papel crucial na garantia da qualidade de um projeto de desenvolvimento de software. Exploraremos os diferentes tipos de testes que são essenciais para o sucesso de qualquer projeto de software. Iniciaremos nossos estudos abordando os testes de unidade e integração, que são as bases para garantir que cada parte do código funcione individualmente e em conjunto. Durante os estudos, você compreenderá como identi�car e corrigir erros em nível de componente, economizando tempo e recursos a longo prazo. Em seguida, abordaremos o teste de validação, que avalia se o software atende aos requisitos do cliente e se está pronto para ser implantado. Por �m, exploraremos o teste de sistema, que veri�ca o desempenho e a integração de todo o sistema. Essa etapa é vital para garantir que o software funcione sem problemas em seu ambiente de destino. Vamos começar! Tipos de testes de software Disciplina Engenharia de Software Entender os diferentes tipos de testes é essencial para garantir a qualidade e con�abilidade dos sistemas de software que você desenvolverá ao longo da sua carreira. Testes de unidade e integração Os testes de unidade e integração são os primeiros passos na jornada de garantir que seu software funcione corretamente. Vamos conceituar cada um deles: Teste de unidade: imagine o código-fonte do seu software como sendo um grande quebra- cabeça, composto por muitas peças individuais. O teste de unidade concentra-se em Disciplina Engenharia de Software veri�car se cada peça deste quebra-cabeça funciona corretamente por conta própria. Cada peça (ou unidade) pode ser uma função, um método ou uma classe. A ideia aqui é testar minuciosamente essas unidades para ter certeza de que elas desempenham suas funções conforme o esperado. Um dos pioneiros nessa abordagem foi Kent Beck, que desenvolveu o conceito de Test-Driven Development (TDD), onde os testes de unidade são escritos antes do código em si. Isso garante que o código seja mais con�ávele robusto desde o início (PRESSMAN; MAXIM 2021). Teste de integração: considerando a montagem de todas as peças do quebra-cabeça e precisa veri�car se elas se encaixam perfeitamente, sem falhas na união. O teste de integração é exatamente isso. Ele avalia como os diferentes componentes do seu software interagem quando são combinados. À medida que o software cresce, é vital veri�car como as partes se unem harmoniosamente. Isso ajuda a identi�car possíveis con�itos, problemas de comunicação e falhas de integração que podem surgir quando as unidades individuais se encontram (PRESSMAN; MAXIM, 2021). Esses dois tipos de teste, unidade e integração, trabalham em conjunto para garantir que cada parte do software funcione individualmente e em conjunto como um sistema coeso. Eles formam os alicerces da qualidade de software, pois se problemas são detectados nessa fase inicial do desenvolvimento, eles podem ser corrigidos de maneira mais e�ciente e econômica (SOMMERVILLE, 2018). Teste de validação: o teste de validação é a próxima etapa em nosso processo de teste. Ele se concentra em responder à pergunta: "O software atende aos requisitos do cliente?". Trata-se então de um teste vital veri�car se o software faz o que foi especi�cado no início do projeto. Teste de sistema: o software é testado em seu ambiente real. Isso envolve avaliar o desempenho, a segurança e a usabilidade do sistema como um todo, garantindo que ele esteja pronto para implantação. Compreendendo as estratégias de testes Disciplina Engenharia de Software Vamos nos aprofundar ainda mais nas estratégias essenciais da Engenharia de Software. Teste de unidade e integração: complementando a qualidade Como vimos anteriormente, os testes de unidade se concentram na veri�cação de unidades individuais de código, enquanto os testes de integração avaliam como essas unidades se combinam para formar o sistema. Para entender a relação entre esses dois pilares, imaginemos a construção de uma casa. Os testes de unidade seriam equivalentes à veri�cação de cada tijolo, assegurando que cada um seja sólido e atenda aos padrões. São exemplos de teste de unidade (SOMMERVILLE, 2018): Testes de caixa branca: examinam o código-fonte, avaliando sua estrutura e lógica interna. Testes de caixa preta: concentram-se nos resultados do código, sem se preocupar com sua implementação interna. De outro modo, os testes de integração envolvem a inspeção de como esses tijolos se encaixam para formar as paredes, garantindo que não haja vazamentos, rachaduras ou falhas de comunicação entre eles. Como exemplos de teste de integração temos (SOMMERVILLE, 2018): Testes top-down: começam pelos módulos de nível superior e continuam testando os módulos inferiores à medida que são incorporados. Testes bottom-up: iniciam pelos módulos de nível mais baixo e progridem para os módulos superiores à medida que são incorporados. Ao combinar testes de unidade e testes de integração, você cria uma base sólida para seu software, garantindo que cada parte funcione bem individualmente e em conjunto. Isso é crucial para evitar problemas complexos no futuro e economizar tempo de depuração. Teste de validação: con�rmar a conformidade O próximo passo em nossa jornada de testes é o teste de validação. Ele é como uma inspeção �nal antes de entregar a casa ao proprietário. Ele se concentra em responder à pergunta: "O software atende às necessidades e expectativas do cliente?" Durante o teste de validação, os requisitos do cliente são cuidadosamente veri�cados. Isso envolve a con�rmação de que todas as funcionalidades prometidas foram implementadas e funcionam conforme o esperado. São exemplos para este tipo de teste (PRESSMAN, 2021): Testes funcionais: veri�cam se todas as funcionalidades do software estão de acordo com os requisitos do cliente. Testes de aceitação do cliente: são executados pelo cliente ou usuários �nais para garantir que o software atenda às suas expectativas. Testes de compatibilidade: avaliam como o software se comporta em diferentes ambientes, sistemas operacionais e navegadores. O teste de validação desempenha um papel vital na garantia de que o software atenda às especi�cações e às expectativas do cliente, sendo fundamental para a satisfação do mesmo e para o sucesso do projeto. Teste de sistema: o ambiente real Essa é a etapa �nal antes da implantação do software no ambiente de produção. Esse teste é como uma inspeção da casa completa, veri�cando se tudo está funcionando conforme o esperado no ambiente real. São exemplos de teste de sistema (PRESSMAN, 2021): Disciplina Engenharia de Software Testes de carga: avaliam como o sistema se comporta sob pressão, veri�cando seu desempenho em situações de alta demanda. Testes de segurança: identi�cam vulnerabilidades de segurança, protegendo o sistema contra ameaças externas. Testes de recuperação de desastres: veri�cam a capacidade do sistema de se recuperar de falhas inesperadas. Testes de usabilidade: avaliam a facilidade de uso e a experiência do usuário �nal. Essa abordagem garante que o software funcione sem problemas em seu ambiente de destino, proporcionando con�abilidade e satisfação ao usuário �nal. Exemplos de aplicações das estratégias de testes Agora, vamos explorar como aplicar efetivamente as estratégias de Testes de Unidade, Testes de Integração, Teste de Validação e Teste de Sistema em um projeto de desenvolvimento de software. Entender como essas estratégias se encaixam no ciclo de desenvolvimento é essencial para garantir a qualidade do software. Teste de unidade: imagine que você está desenvolvendo um sistema de gerenciamento de tarefas. Para aplicar o teste de unidade, seriam criados testes especí�cos para cada função, como adicionar uma tarefa, marcar uma tarefa como concluída ou excluir uma Disciplina Engenharia de Software tarefa. Cada teste se concentraria em veri�car se a funcionalidade especí�ca funciona corretamente, sem considerar o restante do sistema. Teste de integração: continuando com o exemplo do sistema de gerenciamento de tarefas, após a realização dos testes de unidade em cada função individual, você realizará testes de integração para garantir que todas essas funções se integrem perfeitamente. Isso envolve testar cenários em que, por exemplo, adicionar uma tarefa afeta corretamente a lista de tarefas em exibição. Teste de validação: quando o sistema de gerenciamento de tarefas estiver completo, você realizará testes de validação para garantir que ele satisfaça as necessidades do cliente. Isso pode envolver testar o software em um ambiente semelhante ao ambiente do usuário �nal, veri�cando se todas as funcionalidades prometidas estão presentes e funcionando corretamente, como a capacidade de atribuir tarefas a diferentes usuários. Teste de sistema: para o sistema de gerenciamento de tarefas, o teste de sistema envolve veri�car como ele se comporta no mundo real. Você pode realizar testes de carga para veri�car como o sistema se comporta sob carga máxima de tarefas, testes de segurança para garantir que os dados dos usuários estejam protegidos e testes de usabilidade para avaliar a facilidade de uso da interface. É importante observar que essas estratégias não são etapas isoladas, mas sim interdependentes. Os testes de unidade ajudam a identi�car problemas em nível de código, que podem ser corrigidos antes que eles se propaguem para testes de integração, validação e sistema. Os testes de integração veri�cam a interação entre os componentes, garantindo que eles funcionem em conjunto. Os testes de validação con�rmam que o software atende às expectativas do cliente, e os testes de sistema garantem que ele funcione de forma con�ável no ambiente real. A aplicação adequada dessas estratégias é essencial para garantir a qualidade do software e evitar problemas dispendiosos no futuro. Ao realizar testes em cada estágio do desenvolvimento, você reduz o risco de defeitos, economiza tempo de depuração e aumenta a satisfação do cliente. Videoaula:Estratégias de testes Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Olá, estudante! Neste vídeo resumo, veremos um resumo da jornada essencial pelos Testes de Unidade e Integração, Teste de Validação e Teste de Sistema na Engenharia de Software. Descobriremos como essas estratégias se conectam, aprofundando seu conhecimento e Disciplina Engenharia de Software preparando-o para aplicá-las com con�ança. Não perca essa oportunidade de fortalecer sua expertise em testes de software! Vamos lá! Saiba mais A Integração Contínua (CI) é uma prática-chave nos Testes de Sistema. Envolve a integração automática de código em um repositório compartilhado, seguida de testes automatizados. Isso acelera o desenvolvimento, melhora a qualidade do software e permite uma entrega contínua. Ao compreender a importância da CI, exploraremos uma prática essencial para o desenvolvimento de software de alta qualidade. Saiba mais lendo o artigo “O que signi�ca integração contínua?”. Referências https://aws.amazon.com/pt/devops/continuous-integration https://aws.amazon.com/pt/devops/continuous-integration Disciplina Engenharia de Software PRESSMAN, R.; MAXIM, B. R. Engenharia de Software: uma abordagem pro�ssional. 9. ed. Porto Alegre: AMGH, 2021. SOMMERVILLE, I. Engenharia de Software. 10. ed. São Paulo: Pearson Education do Brasil, 2018. Aula 3 Tipos de testes Introdução Disciplina Engenharia de Software Olá, estudante! Nesta aula exploraremos três abordagens distintas e igualmente cruciais para garantir a qualidade e con�abilidade de nossos sistemas: o Teste do Caminho Básico, Testes Baseados em Grafos e Testes Baseados em Modelos. Testar software é um aspecto essencial do desenvolvimento, pois busca identi�car e corrigir defeitos que possam comprometer a funcionalidade, segurança e desempenho do sistema. Compreender as diferentes técnicas de teste é fundamental para criar sistemas robustos e con�áveis. Começaremos mergulhando no conceito de Teste do Caminho Básico, uma técnica que nos ajuda a garantir que todas as combinações de caminhos possíveis em nosso código sejam devidamente testadas. Em seguida, exploraremos os Testes Baseados em Grafos, uma abordagem que utiliza representações grá�cas para modelar as interações entre componentes de software. Veremos como essa técnica ajuda a identi�car cenários de teste abrangentes e a avaliar a cobertura de testes. Por �m, investigaremos os Testes Baseados em Modelos, que empregam modelos formais para descrever o comportamento do sistema. Aprenderemos como criar modelos de software e usá- los para gerar casos de teste automatizados, aprimorando a e�ciência do processo de teste. Bons estudos! Técnicas de teste de software Disciplina Engenharia de Software Para começar, é fundamental compreender três técnicas essenciais: Teste do Caminho Básico, Testes Baseados em Grafos e Testes Baseados em Modelos. Testes do caminho básico O Teste do caminho básico é uma técnica que busca garantir que todos os caminhos possíveis em um programa de computador sejam testados pelo menos uma vez. Um caminho é uma sequência única de comandos que começa em um ponto de entrada e termina em um ponto de saída no código (SOMMERVILLE, 2018). Por exemplo, se você tiver uma função que calcula a raiz quadrada de um número, um caminho básico poderia ser: “Entrada de um número -> Cálculo da raiz quadrada -> Saída do resultado”. Para entender melhor: Caminho: um caminho é uma sequência única de comandos que começa em um ponto de entrada e termina em um ponto de saída no código. Por exemplo, ao navegar por um site, você segue um caminho especí�co ao clicar em links e interagir com os elementos da página. Ponto de entrada: é o ponto inicial a partir do qual um caminho começa a ser percorrido. Pode ser uma função, um método ou um evento que inicia a execução do programa. Ponto de saída: é o ponto onde um caminho termina. Geralmente, é onde se obtém o resultado da execução. Essa técnica é especialmente útil para identi�car casos de teste que podem revelar erros lógicos e �uxos inesperados em um programa. Ela ajuda a garantir uma boa cobertura do código, mas Disciplina Engenharia de Software pode ser complexa em programas extensos devido à quantidade de caminhos possíveis. Testes baseados em grafos Os testes baseados em grafos são uma abordagem que utiliza representações grá�cas como grafos, para modelar as interações entre os componentes de um software. Nesse contexto, um grafo é uma estrutura composta por nós (ou vértices) e arestas que conectam esses nós (SOMMERVILLE, 2018). Essa técnica ajuda a identi�car cenários de teste abrangentes e a avaliar a cobertura de testes. Imagine um software de compras on-line, onde os nós do grafo representariam diferentes páginas da web, e as arestas seriam os links que os conectam. A principal vantagem dessa técnica é que ela permite analisar de forma sistemática os caminhos possíveis no software, garantindo que todos os cenários críticos sejam testados. Isso é crucial para identi�car falhas de software que podem ocorrer em situações especí�cas. Testes baseados em modelos Os testes baseados em modelos envolvem a criação de modelos formais que descrevem o comportamento do sistema. Esses modelos podem ser grá�cos, matemáticos ou baseados em linguagens de especi�cação (SOMMERVILLE, 2018). Ao criar um modelo, podemos gerar casos de teste automaticamente a partir dele, economizando tempo e melhorando a e�ciência do processo de teste. Isso é particularmente útil em sistemas complexos, como sistemas de controle de tráfego aéreo. Explorando os tipos de testes Disciplina Engenharia de Software Agora, vamos aprofundar nossos estudos em três técnicas essenciais de teste de software: Teste do Caminho Básico, Testes Baseados em Grafos e Testes Baseados em Modelos. Vamos detalhar as características importantes de cada uma e dar exemplos práticos de como aplicá- las. O teste do caminho básico é uma técnica que visa cobrir todos os caminhos possíveis em um programa de software (PRESSMAN; MAXIM, 2021). Aqui estão algumas características importantes e um exemplo prático: Identi�cação de caminhos críticos: para aplicar o Teste do Caminho Básico de forma e�caz, é fundamental identi�car os caminhos críticos, ou seja, aqueles que exercitam as partes mais importantes e complexas do código. Por exemplo, em um programa de cálculo de empréstimos, um caminho crítico pode ser aquele que veri�ca a validade das informações do cliente. Priorização de testes: devido à complexidade de alguns programas, é impossível testar todos os caminhos. Portanto, é importante priorizar os testes nos caminhos críticos para garantir que as áreas mais arriscadas sejam bem avaliadas. Para ilustrar podemos imaginar um software de processamento de pedidos online. Um caminho crítico pode ser aquele que envolve a seleção de produtos, o preenchimento de informações de pagamento e a �nalização do pedido. Testar esse caminho é crucial para garantir que os pedidos sejam processados sem erros. Os testes baseados em grafos são ideais para sistemas nos quais as interações entre componentes são complexas (PRESSMAN; MAXIM, 2021). Aqui estão algumas características importantes: Representação visual: a principal característica dos Testes Baseados em Grafos é a representação visual das interações. Um exemplo prático é o uso de grafos direcionados para representar os estados e transições de um aplicativo de jogos. Os nós podem representar os estados do jogo, como "Início" e "Fim", e as arestas indicam como o jogador pode se mover entre esses estados. Análise de cobertura: o uso de grafos permite uma análise clara da cobertura de testes. Você pode veri�car visualmente quais estados e transições foram testados e quais precisam de mais atenção. Vamos supor um texto em um sistema de reserva de voosonline. Cada nó do grafo pode representar um estado, como "Seleção de Destino", "Escolha de Data" e "Pagamento". As arestas indicam como os usuários podem navegar entre esses estados. Ao seguir esses caminhos no grafo, você pode criar casos de teste especí�cos para garantir que o sistema funcione corretamente em todas as situações. Os testes baseados em modelos envolvem a criação de modelos formais que descrevem o comportamento esperado do sistema (PRESSMAN; MAXIM, 2021). Aqui estão algumas características importantes e um exemplo prático: Diversidade de modelos: é possível criar diferentes tipos de modelos, como modelos matemáticos, grá�cos ou baseados em linguagens de especi�cação. Por exemplo, é possível criar um modelo grá�co de um sistema de automação industrial, representando os estados das máquinas e as transições entre eles. Disciplina Engenharia de Software Geração automática de casos de teste: uma das maiores vantagens é a capacidade de gerar automaticamente casos de teste a partir do modelo. Isso economiza tempo e garante que todos os cenários sejam testados. Considere como exemplo um software de gerenciamento de estoque, onde você pode criar um modelo matemático que descreve como o sistema deve calcular o estoque disponível com base nas entradas e saídas. Usando esse modelo, é possível gerar automaticamente casos de teste que veri�cam se o cálculo do estoque está correto em várias situações. Exemplos de aplicações Vamos aprofundar nossa compreensão dessas técnicas e sua aplicação no contexto da Engenharia de Software. Teste do caminho básico Imagine que você está trabalhando em um aplicativo de comércio eletrônico. Seu objetivo é garantir que os clientes possam navegar pelo site, adicionar produtos ao carrinho, fazer o checkout e concluir suas compras sem problemas. Para aplicar o teste do caminho básico, você identi�caria todos os caminhos possíveis, como: Caminho 1: Pesquisar um produto -> Adicionar ao carrinho -> Realizar o checkout -> Concluir a compra. Disciplina Engenharia de Software Caminho 2: Pesquisar um produto -> Visualizar detalhes -> Adicionar ao carrinho -> Realizar o checkout -> Concluir a compra. Você continuaria identi�cando todos os caminhos alternativos e excepcionais, garantindo que cada �uxo seja testado. Isso ajuda a evitar problemas como produtos desaparecendo do carrinho ou erros no processo de pagamento. Testes baseados em grafos Imagine que você está trabalhando no desenvolvimento de um sistema de gerenciamento de projetos para uma grande empresa de construção civil. Este sistema é crítico, pois controla todos os projetos em andamento, desde a fase de planejamento até a conclusão. Para aplicar os testes baseados em grafos, você começa criando um grafo que representa os estados e as transições possíveis no ciclo de vida de um projeto. Os nós do grafo representam os estados, como "Planejamento", "Execução" e "Encerramento", enquanto as arestas indicam como um projeto pode progredir de um estado para outro. Por exemplo, uma aresta saindo do estado "Planejamento" pode representar a transição para o estado "Execução" quando todos os recursos necessários foram alocados. Nesse momento, testes baseados em grafos se tornam poderosos. Ao examinar visualmente o grafo, você pode identi�car cenários críticos. Por exemplo, você pode ver se há caminhos no grafo que podem resultar em projetos �cando presos em um estado especí�co por muito tempo, o que pode atrasar o cronograma. Pode, também, avaliar como o sistema lida com transições inesperadas, como a reatribuição de recursos de um projeto para outro. Além disso, você pode criar casos de teste especí�cos com base nas transições do grafo, como para testar a transição do estado "Planejamento" para "Execução", você pode simular alocar recursos para um projeto e veri�car se o sistema faz essa transição corretamente. Testes baseados em modelos Considere um sistema de automação residencial que controla luzes, temperatura e segurança. Você pode criar um modelo que descreva os diferentes estados do sistema, como "Luzes Desligadas", "Temperatura Ajustada" e "Sistema de Segurança Armado". Com base nesse modelo, você pode gerar automaticamente casos de teste que veri�cam se todas as combinações de estados e transições funcionam corretamente. Isso é fundamental para garantir que a automação residencial funcione sem erros, proporcionando conforto e segurança aos moradores. Esses exemplos ilustram como essas técnicas podem ser aplicadas em situações diversas para garantir a qualidade e o desempenho do software. Ao compreender essas abordagens e suas aplicações práticas, você estará preparado para enfrentar os desa�os da Engenharia de Software, criando sistemas con�áveis e e�cazes que atendam às necessidades dos usuários. Videoaula: Tipos de testes Disciplina Engenharia de Software Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Olá, estudante! Neste vídeo resumo, mergulharemos nos fundamentos dos testes de software de uma forma superinteressante, onde abordaremos o Teste do Caminho Básico, Testes Baseados em Grafos e Testes Baseados em Modelos. Esses são conceitos que podem fazer toda a diferença na qualidade dos softwares que construímos. Vamos lá! Saiba mais A Integração Contínua (CI) é uma prática-chave nos Testes de Sistema. Envolve a integração automática de código em um repositório compartilhado, seguida de testes automatizados. Isso acelera o desenvolvimento, melhora a qualidade do software e permite uma entrega contínua. A gestão sociotécnica é uma abordagem complementar da integração contínua e um exemplo de sua aplicação pode ser lido no artigo intitulado: “Gestão sociotécnica do teste de software em projetos de sistemas de informação”, de autoria de Mauro Tosetto e Carlo Gabriel Porto Bellini, disponível na base de artigos cientí�cos Scielo. TOSETTO, M.; BELINI, C. G. P. Gestão sociotécnica do teste de software em projetos de sistemas de informação. Revista de Gestão da Tecnologia e Sistemas de Informação Journal of https://www.scielo.br/j/jistm/a/xMpw9Y8PWgkSg6C7Zdd9Lkh/?lang=pt https://www.scielo.br/j/jistm/a/xMpw9Y8PWgkSg6C7Zdd9Lkh/?lang=pt Disciplina Engenharia de Software Information Systems and Technology Management Vol. 5, No. 2, 2008, p. 325-346. Referências PRESSMAN, R.; MAXIM, B. R. Engenharia de Software: uma abordagem pro�ssional. 9. ed. Porto Alegre: AMGH, 2021. SOMMERVILLE, I. Engenharia de Software. 10. ed. São Paulo: Pearson Education do Brasil, 2018. Aula 4 Desenvolvimento orientado a testes Introdução Disciplina Engenharia de Software Olá, estudante! Nesta aula, exploraremos os conceitos cruciais para o desenvolvimento de software de alta qualidade. Nos concentraremos em três áreas fundamentais que desempenham um papel central na garantia da qualidade do software. Primeiramente, abordaremos as "Ferramentas CASE para Testes de Software". Essas ferramentas, conhecidas como Computer-Aided Software Engineering, são projetadas para simpli�car a criação e a execução de testes de software. Descobriremos como elas podem aprimorar a e�ciência do processo de teste, tornando-o mais preciso e e�caz na identi�cação de problemas. Em seguida, mergulharemos no "Gerenciamento de Testes". Compreender como planejar, organizar e supervisionar o processo de teste é fundamental para garantir que todos os aspectos críticos do software sejam adequadamente avaliados. A gestão adequada dos testes é uma habilidade essencial no desenvolvimento de software. Por �m, exploraremos o emocionante mundo dos "Testes Automatizados de Software". Aprenderemos como a automação da execução de testes pode economizar tempo, melhorar a consistência dos resultados e acelerar o ciclo de desenvolvimento de software. Fundamentos de teste e gerenciamento Disciplina Engenharia de Software As Ferramentas CASE (Computer-AidedSoftware Engineering) são um conjunto de softwares projetados para auxiliar no processo de desenvolvimento de software, e desempenham um papel crucial no campo dos testes de software (PRESSMAN; MAXIM 2021). Essas ferramentas oferecem funcionalidades que simpli�cam a criação, execução e gerenciamento de testes. Elas permitem que os engenheiros de software criem casos de teste de maneira e�ciente, automatizem a geração de scripts de teste e facilitem o rastreamento de requisitos, garantindo que cada requisito seja adequadamente testado. Outra característica marcante é o fato dessas ferramentas muitas vezes incluírem recursos avançados de gerenciamento de defeitos, permitindo que os problemas identi�cados durante os testes sejam registrados, rastreados e priorizados de forma e�caz. O uso de Ferramentas CASE para testes de software ajuda a melhorar a qualidade do software, economiza tempo e recursos, e promove a colaboração entre membros da equipe. Gerenciamento de testes O gerenciamento de testes é uma disciplina crítica na engenharia de software, responsável por coordenar e supervisionar todas as atividades relacionadas aos testes de software. Isso envolve a criação de estratégias de teste que de�nem como os testes serão planejados e executados (PRESSMAN; MAXIM, 2021). O gerenciamento de testes também inclui a alocação de recursos, como pessoal, ambientes de teste e hardware necessário. Os gerentes de teste estabelecem critérios de aceitação para os testes, monitoram o progresso das atividades e fornecem relatórios sobre o status deles. Além disso, desempenham um papel importante na priorização de defeitos identi�cados e no acompanhamento de sua resolução. Disciplina Engenharia de Software O gerenciamento e�caz de testes ajuda a garantir que sejam conduzidos de forma organizada, abrangente e dentro do cronograma do projeto, contribuindo assim para a entrega de software de alta qualidade. Testes automatizados de software Os testes automatizados de software são uma prática que envolve a criação de scripts e o uso de ferramentas de automação para realizar testes de forma programada e repetitiva. Esses testes são particularmente valiosos em ambientes de desenvolvimento ágil, onde as mudanças frequentes no código exigem veri�cações constantes (PRESSMAN; MAXIM, 2021). Ao automatizá-los, as organizações podem acelerar o processo, garantir que os testes de regressão sejam executados rapidamente e fornecer feedback imediato sobre a qualidade do software. Os testes automatizados também desempenham um papel fundamental na implementação de práticas de integração contínua (CI) e entrega contínua (CD), permitindo que as atualizações de software sejam entregues de forma rápida e con�ável. No entanto, é importante lembrar que os testes automatizados não podem substituir completamente os testes manuais, pois alguns aspectos do software exigem avaliação humana, como a usabilidade e a experiência do usuário. Potencializando a qualidade do software Vejamos, agora, como os conceitos de Ferramentas CASE para testes de software, Gerenciamento de Testes e Testes Automatizados de Software se relacionam e se Disciplina Engenharia de Software complementam, destacando suas importâncias e características. Ferramentas CASE para testes de software No contexto dos testes de software, as Ferramentas CASE oferecem uma ampla gama de funcionalidades que simpli�cam, aprimoram e automatizam muitos aspectos do processo de teste. Vamos aprofundar o entendimento sobre essas ferramentas e sua importância. Criação de casos de teste: as Ferramentas CASE permitem que os testadores criem casos de teste de maneira e�ciente. Elas fornecem interfaces intuitivas para especi�car condições de teste, entradas, saídas esperadas e critérios de aceitação (PRESSMAN; MAXIM, 2021). Um exemplo notável é o TestRail, que permite a criação e documentação detalhada de casos de teste de forma organizada. Rastreamento de Requisitos: uma característica crucial das Ferramentas CASE é a capacidade de rastrear requisitos. Elas permitem que você associe casos de teste a requisitos especí�cos, garantindo que cada funcionalidade do software seja testada. Isso é particularmente valioso em projetos de grande escala. Ferramentas como o IBM Engineering Requirements Management DOORS integram gerenciamento de requisitos com testes de software. Automação de Testes: muitas Ferramentas CASE incluem recursos avançados de automação de testes. Elas permitem que você crie scripts de teste automatizados e execute testes de regressão com facilidade. Uma ferramenta poderosa para automação de testes é o Selenium, que oferece suporte para testes de interface do usuário em diversos navegadores. Relatórios e Métricas: para avaliar o progresso e a e�cácia dos testes, as Ferramentas CASE oferecem recursos de geração de relatórios e métricas. Elas fornecem insights sobre a cobertura de teste, a taxa de defeitos encontrados e outros indicadores-chave de qualidade. O Relatório de Teste do TestLink, por exemplo, oferece uma visão clara do status dos testes. Colaboração em Equipe: as Ferramentas CASE promovem a colaboração e�caz entre os membros da equipe de teste e desenvolvimento. Elas oferecem recursos de compartilhamento de informações e colaboração em tempo real. O TestCollab, por exemplo, permite que equipes trabalhem juntas na criação e execução de casos de teste. Testes automatizados de software Um dos principais benefícios dos testes automatizados é a capacidade de realizar testes de regressão de forma e�caz. À medida que novas funcionalidades são adicionadas ou alterações são feitas no código, os testes de regressão garantem que as funcionalidades existentes não sejam afetadas. Isso economiza tempo e ajuda a evitar a introdução de novos defeitos. Os testes automatizados são uma parte fundamental da Integração Contínua (CI). Nesse processo, sempre que um desenvolvedor faz uma alteração no código, um conjunto de testes automatizados é acionado automaticamente. Se algum teste falhar, a alteração não é integrada ao código principal até que o problema seja resolvido. Isso ajuda a manter um código mais estável e con�ável. Eles não se limitam apenas a testar a funcionalidade do software, mas também podem ser usados para realizar testes de desempenho e carga, simulando condições de uso intensivo para avaliar como o software se comporta sob estresse. Ferramentas como o Apache JMeter permitem criar cenários de teste complexos para medir o desempenho do software. Disciplina Engenharia de Software Potencializando o teste de software A respeito das ferramentas CASE, gerenciamento de testes e os Testes Automatizados, vamos mergulhar em exemplos práticos para cada um desses tópicos e mostrar como eles se aplicam no mundo real da engenharia de software. Ferramentas CASE para Testes de Software Considere que você está trabalhando em um projeto de desenvolvimento de software para um sistema de gerenciamento de biblioteca. Sua equipe precisa criar e executar casos de teste para garantir que o sistema atenda a todos os requisitos do cliente. Neste cenário, você pode utilizar ferramentas CASE como o TestRail ou o TestLink para simpli�car o processo. Primeiro, você cria casos de teste detalhados, especi�cando as ações que devem ser executadas, as entradas esperadas e os resultados desejados. Esses casos de teste podem ser organizados em suítes, tornando a gestão mais e�ciente. Depois, associe esses casos de teste aos requisitos do sistema, garantindo que cada funcionalidade seja testada. Isso ajuda a rastrear o progresso e a cobertura dos testes, certi�cando-se de que nenhum requisito seja deixado de lado. Quando chega a hora de executá-los, você utilizará as ferramentas para registrar os resultados. Se um caso de teste falhar, a ferramenta permite que você documente o defeito de forma organizada, facilitando a comunicação com a equipe de desenvolvimento. Gerenciamento de testes Suponha que você está liderando a equipe de teste no mesmo projeto da biblioteca.Como gerente de testes, sua responsabilidade é garantir que todas as atividades de teste sejam Disciplina Engenharia de Software executadas de forma e�caz. Você utiliza uma ferramenta de gerenciamento de testes, como o qTest, para criar um plano de teste abrangente. Nesse plano, você de�ne quais testes serão realizados, quem será responsável por cada tarefa e os prazos para conclusão. Além disso, você aloca os recursos necessários, como máquinas de teste e pessoal, e prioriza os testes de acordo com a importância e a criticidade das funcionalidades. À medida que os testes são executados, você monitora o progresso em tempo real por meio da ferramenta de gerenciamento. Isso permite que você tome decisões informadas sobre quais áreas precisam de mais atenção e quais podem ser consideradas como passadas. Testes Automatizados de Software Agora, vamos considerar que você está trabalhando em um projeto de comércio eletrônico. Para garantir que o processo de compra funcione sem problemas em cada atualização do software, você decide implementar testes automatizados. Você utiliza uma ferramenta como o Selenium para criar scripts de teste que simulam a interação de um cliente real com a loja on-line. Esses scripts podem ser executados automaticamente sempre que houver uma nova versão do software. Ao criar um script que simula a seleção de produtos, a adição ao carrinho de compras e o processo de checkout. Esse script pode ser repetido quantas vezes forem necessárias, detectando automaticamente qualquer falha, como um botão de "comprar" quebrado. Ao integrar esses testes automatizados em seu �uxo de trabalho de CI/CD, você garante que cada atualização do software seja testada automaticamente, identi�cando problemas imediatamente. Isso economiza tempo, evita erros humanos e aumenta a con�abilidade do sistema. Videoaula: Desenvolvimento orientado a testes Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Olá, estudante! Neste vídeo resumo, mergulharemos nos fundamentos dos testes de software de uma forma superinteressante, em que abordaremos o Teste do Caminho Básico, Testes Baseados em Grafos e Testes Baseados em Modelos. Esses são conceitos que podem fazer toda a diferença na qualidade dos softwares que construímos. Vamos lá! Saiba mais Disciplina Engenharia de Software Os testes de software em cada organização podem seguir processos um pouco distintos daqueles elencados na literatura cientí�ca. Um bom artigo para visualizar tais diferenças é o intitulado “A importância da atividade do teste no desenvolvimento de software”, de autoria de Karla Pires de Souza e Angelita Moutin Segoria Gasparotto, fornecido pela Associação Brasileira de Engenharia de Produção (ABEPRO). SOUZA, K. P. de; GASPAROTTO, A. M. S. A importância da atividade do teste no desenvolvimento de software. XXXIII ENCONTRO NACIONAL DE ENGENHARIA DE PRODUCAO. A Gestão dos Processos de Produção e as Parcerias Globais para o Desenvolvimento Sustentável dos Sistemas Produtivos. Salvador, BA, Brasil, 2013. Referências https://abepro.org.br/biblioteca/enegep2013_TN_STO_177_007_23030.pdf https://abepro.org.br/biblioteca/enegep2013_TN_STO_177_007_23030.pdf Disciplina Engenharia de Software PRESSMAN, R.; MAXIM, B. R. Engenharia de Software: uma abordagem pro�ssional. 9. ed. Porto Alegre: AMGH, 2021. Aula 5 Revisão da unidade Testes de software Disciplina Engenharia de Software Olá, estudante! Nesta unidade, demos os primeiros passos na jornada do teste de software e adquiriu diversas competências neste processo. Deste modo, vamos resumir sete das principais competências que você desenvolveu ao longo dessa etapa. Durante esta unidade, vimos os fundamentos essenciais dos testes de software. Compreendemos a importância de testar sistemas de software para identi�car falhas e garantir a qualidade. Falamos sobre os tipos de testes e como eles se encaixam no ciclo de desenvolvimento de software. Desenvolvemos a habilidade de elaborar casos de teste e�cazes. Aprendemos a traduzir requisitos de software em cenários de teste detalhados, de�nindo entradas, ações e critérios de veri�cação. Compreendemos, também, a importância de abordar diferentes condições e �uxos de dados para garantir uma cobertura abrangente dos testes. Ao falarmos sobre automação de testes, entendemos seu papel na aceleração e na melhoria da consistência dos testes de software. Conhecemos as principais ferramentas de automação, como Selenium e JUnit, para criar e executar testes automatizados. Essa competência é valiosa para agilizar o processo de teste em projetos de grande escala. Aprofundamos nosso conhecimento em estratégias avançadas de teste, de modo a compreender a importância dos testes de integração, que avaliam a interação entre diferentes módulos ou componentes de software. Além disso, explorou os testes de aceitação, que garantem que o software atenda aos requisitos do cliente e aos critérios de aceitação de�nidos. Ainda, desenvolvemos as competências em gerenciamento de testes. Compreendemos o que é planejar estrategicamente os testes de software, de�nindo objetivos, escopo, recursos necessários e cronograma. Isso é fundamental para garantir que os testes sejam conduzidos de forma e�caz e e�ciente. Compreendemos a importância da rastreabilidade de defeitos, que permite acompanhar a relação entre requisitos, casos de teste e defeitos. Além disso, desenvolvemos habilidades de controle e gerenciamento de defeitos de maneira sistemática, garantindo que sejam identi�cados, priorizados e resolvidos de forma adequada. Disciplina Engenharia de Software Por �m, aprofundamos nosso conhecimento sobre a integração contínua e DevOps. Compreendemos como os testes automatizados desempenham um papel fundamental nesse contexto, garantindo que cada alteração de código seja testada automaticamente, permitindo assim identi�car falhas rapidamente. Essas habilidades adquiridas até aqui são essenciais para garantir a qualidade do software e contribuir para o sucesso de projetos de desenvolvimento. Videoaula: Revisão da unidade Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Olá, estudante! Neste vídeo resumo, vamos apresentar um resumo abrangente da disciplina de teste de software, explorando conceitos fundamentais que são essenciais para o desenvolvimento das competências que são inerentes ao pro�ssional capacitado a partir desta disciplina. Veremos os principais conceitos apresentados durante a disciplina, de modo a recapitular pontos fundamentais e de realizar a �xação de conceitos que possam ter passado por desapercebido. Estudo de caso Disciplina Engenharia de Software Para contextualizar sua aprendizagem, imagine que você trabalha para uma empresa de tecnologia que desenvolve um aplicativo de mobilidade urbana amplamente utilizado por milhões de usuários em todo o país. Nos últimos meses, a empresa tem enfrentado um aumento signi�cativo nas reclamações dos usuários devido a erros e falhas no aplicativo, o que está prejudicando a experiência do cliente e afetando a reputação da empresa. A equipe de desenvolvimento realizou várias atualizações recentes no aplicativo para adicionar novos recursos e melhorias, mas essas mudanças parecem ter introduzido novos problemas e afetado a estabilidade geral do sistema. Como parte da equipe de teste de software, você foi designado para abordar essa situação e restaurar a con�ança dos usuários no aplicativo. Desa�o: aplicar os testes de software para melhorar a qualidade do aplicativo de mobilidade urbana. 1. Casos de Testes e Plano de Testes Elabore casos de teste abrangentes que cubram os principais recursos e funcionalidades do aplicativo, levando emconsideração as reclamações dos usuários. Crie um plano de testes que inclua a estratégia de teste, os recursos necessários, os prazos e os critérios de aceitação. 2. Estratégias de testes de software Realize testes de unidade para veri�car o funcionamento correto de cada componente do aplicativo. Execute testes de integração para garantir que os diferentes módulos se comuniquem sem problemas. Disciplina Engenharia de Software Valide os cenários de uso do aplicativo por meio de testes de validação. Realize testes de sistema abrangentes para garantir que o aplicativo funcione corretamente em diferentes dispositivos e condições. 3. Técnicas de teste de software Utilize técnicas de teste do caminho básico para identi�car os principais �uxos de navegação no aplicativo. Aplique testes baseados em grafos e modelos para explorar cenários complexos de interação com o aplicativo. 4. Ferramentas CASE para Testes de Software Selecione e utilize ferramentas CASE apropriadas para facilitar a criação e execução de casos de teste. Gerencie e�cazmente os casos de teste, resultados e defeitos por meio de uma ferramenta de gerenciamento de testes. Automatize testes repetitivos e críticos para acelerar o processo de teste. Espera-se que, ao aplicar os conhecimentos e técnicas de teste de software aprendidos nesta unidade, você seja capaz de identi�car e corrigir os problemas no aplicativo de mobilidade urbana, melhorando a qualidade e a con�abilidade do sistema. Além disso, sua contribuição será fundamental para restaurar a satisfação dos usuários e a reputação da empresa. ________ Re�ita Agora que você está imerso no estudo de caso de melhorar a qualidade de um aplicativo de mobilidade urbana, vamos re�etir sobre como os conceitos estudados podem ser aplicados de forma prática. Primeiramente, pense nos casos de teste e no plano de testes que você pode preparar. Eles serão cruciais para garantir uma cobertura completa do aplicativo? Certi�que-se de incluir cenários que reproduzam as principais reclamações dos usuários, como erros durante a reserva de viagens ou problemas de localização. Os testes de unidade e integração são fundamentais para identi�car e corrigir possíveis defeitos em componentes individuais e na interação entre eles? Lembre-se de que, ao realizar testes de validação e sistema, você está testando o aplicativo como um todo, garantindo que ele atenda aos requisitos funcionais e de desempenho. A aplicação das técnicas de teste do caminho básico, testes baseados em grafos e testes baseados em modelos ajuda a explorar todas as possíveis interações no aplicativo? Utilizar ferramentas CASE simpli�cará a criação e execução de casos de teste? Não se esqueça de gerenciar seus testes e resultados por meio de uma ferramenta de gerenciamento de testes. Disciplina Engenharia de Software Lembre-se de que seu objetivo é identi�car e corrigir erros no aplicativo, melhorando sua qualidade e a satisfação do usuário. Videoaula: Resolução do estudo de caso Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Agora que você está imerso na situação-problema de melhorar a qualidade de um aplicativo de mobilidade urbana, vamos abordar como aplicar os conhecimentos adquiridos nas aulas de teste de software para resolver esse desa�o. 1. Casos de Testes e Plano de Testes: comece elaborando casos de teste que abranjam os principais recursos e funcionalidades do aplicativo, levando em consideração as reclamações dos usuários. Por exemplo, crie casos de teste para veri�car a reserva de viagens, o cálculo de rotas e a funcionalidade de pagamento. Em seguida, crie um plano de testes que inclua a estratégia de teste, os recursos necessários, os prazos e os critérios de aceitação. Isso garantirá que seus esforços de teste sejam organizados e bem direcionados. 2. Estratégias de teste de software: realize testes de unidade para examinar componentes individuais do aplicativo, como módulos de reservas e cálculos de tarifas. Isso ajudará a identi�car erros de programação especí�cos. Execute testes de integração para garantir que os diferentes módulos do aplicativo funcionem corretamente juntos. Por exemplo, veri�que se a reserva de viagens interage adequadamente com o sistema de pagamento. Valide os cenários de uso do aplicativo por meio de testes de validação. Isso envolve simular ações reais de usuários, como solicitar uma viagem e veri�car se o resultado está correto. É importante criar uma classi�cação ou hierarquia de tipos de erros possíveis, oriundos da interação homem-máquina ou da interação entre sistemas acessórios de bancos de dados ou conteúdo disponível na Internet, desse modo, a equipe de gestão dos testes pode se certi�car que todos os testes realizados atingirão o mesmo nível de profundidade, tanto em termos de abrangência do erro ou problema, quanto a profundidade e impacto do erro na operação como um todo. Realize testes de sistema em diversos dispositivos e condições para garantir que o aplicativo funcione perfeitamente em todas as situações. Disciplina Engenharia de Software 3. Técnicas de teste de software: utilize técnicas de teste do caminho básico para identi�car os principais �uxos de navegação no aplicativo. Por exemplo, teste o processo de reserva de viagens do início ao �m, veri�cando todas as etapas. Aplique testes baseados em grafos e modelos para explorar cenários complexos de interação com o aplicativo. Isso ajudará a identi�car combinações inesperadas de ações do usuário que podem levar a erros. Para evitar que os testes sejam redundantes, ou seja, identi�quem apenas os mesmos tipos de erros ou problemas, avalie os resultados separadamente, identi�cando quais classes de problemas cada teste conseguiu efetivamente identi�car. 4. Ferramentas CASE para Testes de Software: utilize ferramentas CASE adequadas para criar casos de teste de forma e�ciente e automatizar partes dos testes. Gerencie seus casos de teste, resultados e defeitos por meio de uma ferramenta de gerenciamento de testes. Isso facilitará o acompanhamento do progresso e a comunicação com a equipe. Considere a automação de testes para casos repetitivos ou críticos. Isso economizará tempo e permitirá que você execute testes frequentemente. Lembre-se de documentar cuidadosamente todos os testes realizados, incluindo os cenários de teste, resultados e qualquer defeito encontrado. Isso fornecerá uma base sólida para análise posterior e garantirá que as correções sejam feitas de maneira e�caz. Existem empresas no mercado especializadas em realizar apenas testes de software em diferentes escalas. Tais serviços terceirizados podem fornecer uma alternativa mais rápida para testes generalistas e dedicados a erros simples, mas di�cilmente poderão prever interações mais complexas com fornecedores, parceiros e clientes que realmente utilizarão o software desenvolvido. Resumo visual Disciplina Engenharia de Software Veja o resumo visual: Disciplina Engenharia de Software Referências Disciplina Engenharia de Software PRESSMAN, R.; MAXIM, B. R. Engenharia de Software: uma abordagem pro�ssional. 9. ed. Porto Alegre: AMGH, 2021. SOMMERVILLE, I. Engenharia de Software. 10. ed. São Paulo: Pearson Education do Brasil, 2018. , Unidade 4 Tópicos avançados em engenharia de software Aula 1 Manutenção e evolução de software Introdução Disciplina Engenharia de Software Olá, estudante! Nesta aula, exploraremos conceitos cruciais que têm um impacto profundo na qualidade e na longevidade dos sistemas de software. A engenharia de software é uma disciplina em constante evolução, e a manutenção de software desempenha um papel central nesse cenário. Aprenderemos como identi�car e classi�car esta atividade, compreendendo a importância de manter os sistemas de software atualizados. Ao �nal desta aula, conseguiremosidenti�car os tipos de manutenção, entender como a engenharia reversa e a reengenharia podem ser aplicadas para melhorar sistemas existentes, e a importância da evolução contínua no contexto das demandas em constante mudança. Conceitos da manutenção e evolução de software Disciplina Engenharia de Software A manutenção de software é uma das fases mais críticas do ciclo de vida do desenvolvimento de software. Envolve aprimorar, corrigir e adaptar o software após sua entrega inicial. Para compreender essa complexa área, é fundamental conhecer os tipos de atividades de manutenção. Manutenção corretiva: essa atividade lida com a correção de erros e defeitos identi�cados após a entrega do software. Seu foco principal é restaurar o software ao seu estado funcional original. Manutenção adaptativa: envolve a modi�cação do software para acomodar mudanças no ambiente, como atualizações de sistemas operacionais ou hardware. O objetivo é garantir que o software continue a funcionar de forma e�caz em novos cenários. Manutenção perfectiva: nesse caso, o software é aprimorado para adicionar novos recursos ou melhorar o desempenho. A manutenção perfectiva visa atender às necessidades em constante evolução dos usuários. Manutenção preventiva: Foca na antecipação de problemas futuros, evitando falhas potenciais. Isso é feito por meio de análises e atualizações regulares para evitar o envelhecimento prematuro do software. A engenharia reversa é o processo de analisar um software existente para extrair informações sobre seu design, estrutura e funcionamento. Isso é útil quando a documentação original está ausente ou desatualizada. Por outro lado, a reengenharia envolve a recriação ou reformulação de um sistema existente para melhorar sua qualidade, desempenho ou manutenibilidade. Engenharia Reversa: Análise de código-fonte: A engenharia reversa começa com a análise do código-fonte existente, identi�cando padrões e estruturas. Disciplina Engenharia de Software Diagramas UML: O uso de diagramas UML pode ajudar a visualizar a estrutura do software, tornando-o mais compreensível. Reengenharia: Refatoração: essa técnica visa melhorar a estrutura interna do software sem alterar seu comportamento externo. Modernização: atualização de tecnologias obsoletas ou migração para novas plataformas. A evolução de software refere-se à capacidade de um sistema de software de continuar a atender às necessidades em constante mudança dos usuários e do ambiente. É uma parte vital da manutenção de software e envolve: Melhorias contínuas: atualizações regulares para adicionar recursos, melhorar o desempenho e corrigir erros. Adaptação a novos ambientes: certi�cando-se de que o software continue funcionando em novos sistemas operacionais, hardware ou redes. Migração de dados: movendo dados de sistemas legados para novas soluções. Ferramentas de automação, como ferramentas de teste automatizado e implantação automatizada, são cruciais para apoiar a evolução contínua do software. Os princípios da evolução de software, como a capacidade de resposta às mudanças e a entrega de valor constante, são fundamentais para garantir que o software permaneça relevante e competitivo. A evolução de software é essencial para garantir que os sistemas de software permaneçam relevantes e úteis ao longo do tempo Etapas, ferramentas e classi�cações fundamentais de manutenção e evolução de software Disciplina Engenharia de Software Agora, aprofundaremos nossos conhecimentos sobre os conceitos de Manutenção de Software, Engenharia Reversa e Evolução de Software, explorando suas etapas, ferramentas e classi�cações fundamentais. A manutenção de software é um processo complexo que requer um conjunto especí�co de etapas e classi�cações para atender às diversas necessidades de um sistema de software. Aqui estão os principais elementos desse conceito: 1. Etapas da manutenção: Identi�cação de necessidades: a primeira etapa é identi�car as necessidades de manutenção, que podem ser correções de erros, adaptações, melhorias ou prevenção de problemas futuros. Disciplina Engenharia de Software Análise e planejamento: após identi�car as necessidades, é importante analisar o impacto das mudanças propostas e planejar as atividades de manutenção. Implementação: nessa fase, as mudanças são implementadas, seja corrigindo erros, adaptando o software a novos ambientes ou aprimorando-o. Teste e validação: após a implementação, o software é testado para garantir que as mudanças não introduzam novos problemas ou afetem negativamente o funcionamento do sistema. Documentação: É essencial documentar todas as mudanças realizadas para manter um registro claro do que foi feito. 2. Classi�cação da manutenção: Manutenção corretiva: corrige erros e falhas após a entrega do software. Manutenção adaptativa: adapta o software a mudanças no ambiente, como atualizações de hardware ou sistemas operacionais. Manutenção perfectiva: melhora o software adicionando novos recursos ou otimizando o desempenho. Manutenção preventiva: realiza atividades proativas para evitar futuros problemas e falhas. A engenharia reversa e reengenharia são abordagens fundamentais para entender e melhorar sistemas existentes. Aqui estão os principais elementos desses conceitos: 3. Etapas da engenharia reversa e reengenharia: Análise do código-fonte: inicia-se pela análise do código-fonte existente para compreender a estrutura e a lógica do sistema. Extração de modelos: com base na análise, é possível extrair modelos de representação do sistema, como diagramas UML. Identi�cação de padrões e funcionalidades: através da análise, é possível identi�car os padrões de funcionamento e as principais funcionalidades do sistema. Tomada de decisões: com as informações obtidas, as decisões são tomadas, determinando se a Reengenharia é necessária e como ela será realizada. A evolução de software é crucial para manter sistemas de software relevantes e funcionais. Aqui estão os principais elementos desse conceito: 4. Etapas da evolução de software: Avaliação contínua: a evolução começa com uma avaliação contínua das necessidades do sistema e das oportunidades de melhoria. Atualizações incrementais: as atualizações são realizadas de forma incremental para adicionar novos recursos, melhorar o desempenho e corrigir erros. Adaptação a novos ambientes: o software deve ser adaptado para funcionar em novos ambientes, como atualizações de sistemas operacionais ou mudanças na infraestrutura de TI. Migração de dados: a migração de dados de sistemas legados para novas soluções deve ser cuidadosamente planejada e executada. Disciplina Engenharia de Software Compreender essas etapas, ferramentas e classi�cações é essencial para resolver problemas, classi�car situações e interpretar as necessidades relacionadas à manutenção de software, engenharia reversa e evolução de software. Manutenção de software, engenharia reversa e evolução de software em cenários reais Classi�cação e tipos de atividades de manutenção de software Imagine que você trabalha em uma empresa que desenvolve um software de gestão empresarial amplamente utilizado por várias organizações. Com o tempo, os usuários começam a relatar erros frequentes, desempenho lento e di�culdades de adaptação a novos requisitos legais. Aplicação na prática: Manutenção corretiva: você e sua equipe identi�cam os erros relatados pelos usuários, priorizam-nos e começam a corrigi-los. Isso envolve a análise de código, a identi�cação das causas raiz e a implementação de correções. Disciplina Engenharia de Software Manutenção adaptativa: você precisa adaptar o software para cumprir as novas regulamentações governamentais. Isso requer a modi�cação de partes do sistema afetadas pelas mudanças legais. Manutenção perfectiva: além das correções e adaptações, é possível melhorar a usabilidade do software, redesenhando a interface do usuário e otimizando os processos. Engenharia reversa e reengenharia Em outro cenário,você é contratado por uma empresa que adquiriu um sistema legado de um concorrente. No entanto, o sistema é antigo e mal documentado, e a equipe não tem conhecimento completo sobre como funciona. Aplicação na prática: Engenharia reversa: para compreender o sistema, você começa com a análise do código- fonte e da estrutura existente. Utilizando ferramentas de análise estática e dinâmica, você extrai informações sobre o design e o funcionamento do sistema. Reengenharia: com base na análise, você toma a decisão de recriar partes do sistema para melhorar a e�ciência e a manutenibilidade. Isso envolve refatorar o código, otimizar algoritmos e atualizar bibliotecas desatualizadas. Evolução de software Agora, imagine que você é o gerente de um projeto de software em uma startup de rápido crescimento. O software da empresa está em constante evolução para atender às necessidades do mercado em rápida mudança. Aplicação na prática: Avaliação contínua: a equipe de desenvolvimento realiza avaliações contínuas do software para identi�car oportunidades de melhoria. Isso inclui a coleta de feedback dos usuários e a análise de métricas de desempenho. Atualizações incrementais: com base nas avaliações, a equipe implementa atualizações incrementais do software, adicionando novos recursos e aprimorando a experiência do usuário. Adaptação a novos ambientes: à medida que a empresa expande, você garante que o software seja compatível com novas plataformas e sistemas operacionais, para que os clientes possam acessá-lo em diferentes dispositivos. Migração de dados: quando a empresa migra para um sistema de gerenciamento de banco de dados mais moderno, você planeja e executa a migração de dados para garantir a continuidade das operações. Videoaula: Manutenção e evolução de software Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no Disciplina Engenharia de Software aplicativo para assistir mesmo sem conexão à internet. Olá, estudante! Neste vídeo resumo abordaremos de forma concisa e envolvente os principais conceitos de Manutenção de software, Engenharia Reversa, Reengenharia e Evolução de software. Este vídeo será seu guia para revisitar os tópicos-chave que exploramos nesta aula, preparando-o para o sucesso em suas futuras atividades e projetos na área de Engenharia de Software. Saiba mais Aqui estão algumas recomendações exclusivas de recursos que podem auxiliar você a aprofundar seu conhecimento nos temas abordados nesta aula: Ferramentas de engenharia reversa: experimente ferramentas como o Jadx para análise de aplicativos Android e o IDA Pro para análise de código de baixo nível. Essas ferramentas são essenciais para engenheiros de software que trabalham com Engenharia Reversa. GitHub: explore repositórios no GitHub que contenham projetos de código aberto relacionados à Manutenção de Software e Evolução de Software. Você pode aprender muito ao estudar projetos reais e suas contribuições. Stack Over�ow: aproveite a comunidade do Stack Over�ow para fazer perguntas, buscar respostas e aprender com outros engenheiros de software que enfrentam desa�os https://github.com/skylot/jadx https://hex-rays.com/ida-pro/ https://github.com/ https://stackoverflow.com/ Disciplina Engenharia de Software semelhantes. É uma excelente fonte de conhecimento prático. Plataformas de desenvolvimento: para aprofundar seus conhecimentos em programação e desenvolvimento de software, considere explorar plataformas como LeetCode, HackerRank e CodeSignal. Elas oferecem desa�os de programação que podem aprimorar suas habilidades. Conferências e Meetups: participe de conferências e grupos de meetups locais ou online relacionados à Engenharia de Software. Esses eventos são ótimas oportunidades para networking e aprendizado prático. Lembre-se de que o aprendizado contínuo é essencial na área de Engenharia de Software, e esses recursos podem ajudá-lo a se manter atualizado e aprofundar seus conhecimentos em tópicos avançados. Explore cada um deles de acordo com suas necessidades especí�cas e objetivos pro�ssionais. Referências BASILI, V. R. et al., Experimentation in software engineering, in IEEE Transactions on Software Engineering, vol. SE-12, no. 7, pp. 733-743, Julho de 1986, doi: 10.1109/TSE.1986.6312975. HIRAMA, Kechi. Engenharia de Software: qualidade e produtividade com tecnologia. Rio de Janeiro: Elsevier, 2011. PAULA FILHO, Wilson de Pádua. Engenharia de Software: projetos e processos. 4.ed. Rio de Janeiro: LTC, 2019. PRESSMAN, Roger, e MAXIM, Bruce R. Engenharia de Software: uma abordagem pro�ssional. 9.ed. Porto Alegre: AMGH, 2021. https://leetcode.com/ https://www.hackerrank.com/ https://codesignal.com/developers/ https://codesignal.com/developers/ Disciplina Engenharia de Software SBROCCO, José Henrique T. de C. Metodologias ágeis: engenharia de software sob medida. 1.ed. São Paulo: Érica, 2012. SEIJAS, P. L., THOMPSON, S. FRANCISCO, M. A. , Model extraction and test generation from JUnit test suites. Software Quality Journal, V. 26 . pp. 1519-1552. 2018. ISSN 0963-9314.. SOMMERVILLE, Ian. Engenharia de Software. 10.ed. São Paulo: Pearson Education do Brasil, 2018. Aula 2 Gestão de risco Introdução Olá, estudante! A gestão de risco desempenha um papel fundamental na engenharia de software, por isso precisamos aprender sobre os riscos associados ao desenvolvimento de programas. Compreender estes riscos é essencial, pois eles podem afetar a qualidade, a e�cácia e até mesmo a conclusão bem-sucedida desses projetos. Nesta jornada de aprendizado, será introduzido os conceitos de riscos de software e suas diversas facetas. Aprenderemos a identi�car e prever riscos potenciais em projetos de engenharia de software, uma habilidade crítica para qualquer pro�ssional da área. Além disso, exploraremos as estratégias de mitigação, monitoramento e gestão de riscos (RMMM) que permitem que equipes de desenvolvimento minimizem ameaças e aproveitem oportunidades. Disciplina Engenharia de Software A gestão de risco não é apenas teoria; ela tem aplicações práticas em todos os aspectos do desenvolvimento de software. Nesse tópico essencial iremos moldar sua compreensão da engenharia de software e o capacitar a enfrentar desa�os reais no seu cotidiano pro�ssional. Gestão de risco em engenharia de software Os três principais tópicos que exploraremos nesta aula são: Riscos de Software, Identi�cação e Previsão do Risco e Mitigação, Monitoramento e Gestão de Riscos (RMMM). Esses temas são cruciais para o sucesso em qualquer empreendimento de engenharia de software. Riscos de software: os riscos de software são eventos incertos que podem in�uenciar positiva ou negativamente os objetivos de um projeto de software. Segundo Pressman e Maxim (2014), "riscos de software referem-se a condições e eventos que podem resultar em falhas ou atrasos no desenvolvimento do software". Isso pode incluir desde desa�os técnicos, como a complexidade do código, até fatores externos, como mudanças nas demandas do mercado. Compreender os riscos inerentes à engenharia de software é fundamental para a tomada de decisões informadas. Identi�cação e previsão do risco: a identi�cação e previsão do risco são passos cruciais na gestão de riscos em engenharia de software. Conforme Sommerville (2018), a identi�cação Disciplina Engenharia de Software de riscos envolve a busca ativa de eventos incertos que podem afetar o projeto. Isso pode ser realizado através de técnicas como análise de requisitos detalhados, consulta a especialistas e revisão de projetos semelhantes. A previsão do risco, por sua vez, emprega métodos como a técnica Delphi, que coleta opiniões de especialistas para estimar a probabilidade de ocorrência de riscos futuros. Essas etapas são cruciais para antecipar potenciais problemas e preparar estratégias de mitigação. Mitigação, Monitoramento e Gestão de Riscos (RMMM): a mitigação, monitoramentoe gestão de riscos (RMMM) representam a fase de ação na gestão de risco. Como enfatizado por Paula Filho (2019), a mitigação envolve a criação de planos de contingência e estratégias para reduzir a probabilidade e o impacto dos riscos identi�cados. O monitoramento é uma atividade contínua que visa rastrear a evolução dos riscos e a e�cácia das estratégias de mitigação. A gestão de riscos é um ciclo iterativo que exige a adaptação constante das estratégias com base nos dados obtidos durante o monitoramento. Introduzimos os pilares fundamentais da gestão de risco em engenharia de software. Compreendemos o signi�cado dos riscos de software, aprendemos a identi�cá-los e prever sua ocorrência, e viu a importância da mitigação, monitoramento e gestão de riscos (RMMM). Estes conceitos formam a base para uma gestão de risco e�caz em projetos de desenvolvimento de software. A seguir, abordaremos estratégias práticas de mitigação de riscos e como elas podem ser implementadas com sucesso em projetos de engenharia de software. Estratégias de identi�cação, previsão e mitigação de riscos Disciplina Engenharia de Software Vamos, agora, explorar a importância intrínseca de cada um desses conceitos e como se relacionam para garantir o sucesso em projetos de desenvolvimento de software. Riscos de software: entendendo a complexidade Os riscos de software são como as variáveis desconhecidas em uma equação. Podem surgir em várias formas e têm o potencial de moldar o curso de um projeto. Eles podem estar relacionados a fatores técnicos, como complexidade do código, ou a elementos externos, como mudanças nas necessidades do cliente. Identi�car e compreender esses riscos desde o início é crucial, pois, como mencionado por Pressman e Maxim (2021, p. 214), eles "podem resultar em falhas ou atrasos no desenvolvimento do software". Identi�cação e previsão do risco: ferramentas para a antecipação A identi�cação e previsão do risco são etapas proativas na gestão de risco em engenharia de software. A técnica SWOT (Forças, Fraquezas, Oportunidades e Ameaças), conforme sugerido por Sommerville (2018), é uma bússola valiosa nesse contexto, Sommerville ressaltou a importância de identi�car riscos em estágios iniciais do projeto. Esta matriz classi�ca os riscos com base na probabilidade de ocorrência e no impacto potencial, auxiliando as equipes na priorização das ameaças mais signi�cativas. Além disso, a técnica Delphi, que coleta opiniões de especialistas para prever a probabilidade de riscos futuros, é uma ferramenta valiosa para antecipar possíveis desa�os. Mitigação, Monitoramento e Gestão de Riscos (RMMM): ação contínua Após identi�car e prever riscos, a mitigação e a gestão e�cazes desses riscos são cruciais. Paula Filho (2019) ressalta que a mitigação envolve a criação de planos de contingência e estratégias Disciplina Engenharia de Software para reduzir a probabilidade e o impacto dos riscos. Isso pode incluir a alocação de recursos adicionais ou a implementação de medidas preventivas. O monitoramento contínuo é uma atividade essencial para garantir que as estratégias de mitigação funcionem conforme o planejado. Ferramentas como o Grá�co de Gantt permitem o acompanhamento visual do progresso do projeto e a detecção de desvios em relação ao plano original. Conclusão: integrando os conceitos para o sucesso Neste bloco, exploramos os conceitos centrais da gestão de risco em engenharia de software e como eles se relacionam para assegurar o sucesso do projeto. Compreendemos a complexidade dos riscos de software, a importância da identi�cação e previsão proativa e a necessidade de ações contínuas de mitigação e gestão. Agora, podemos aplicar esses conceitos em cenários reais de engenharia de software e enfrentar desa�os com con�ança. A seguir, examinaremos exemplos práticos e situações do mundo real para fortalecer ainda mais sua compreensão e habilidades em gestão de risco. Gestão de risco em engenharia de software em cenários reais Vamos explorar exemplos e situações do cotidiano pro�ssional que ilustram a importância e a utilidade desses conceitos em projetos de desenvolvimento de software. Riscos de software na prática Disciplina Engenharia de Software Imagine que você está liderando um projeto de desenvolvimento de um sistema de pagamento on-line. Um risco de software comum nesse cenário é a segurança das transações. Os ataques cibernéticos estão em constante evolução, representando uma ameaça signi�cativa. Para mitigar esse risco, você pode implementar medidas de segurança robustas, como criptogra�a de dados e autenticação de dois fatores, e monitorar continuamente a atividade suspeita. Outra situação seria um projeto de uma startup que está desenvolvendo um aplicativo de saúde que coleta dados vitais dos pacientes e os envia para médicos em tempo real. Um risco crítico nesse cenário é a segurança dos dados do paciente. Para mitigar esse risco, você precisa implementar criptogra�a de ponta a ponta, autenticação forte e realizar testes de penetração regulares. Além disso, é essencial monitorar constantemente a atividade do sistema em busca de possíveis violações. Identi�cação e previsão do risco Em um projeto de desenvolvimento de um aplicativo de delivery de comida, a identi�cação de riscos pode ser crucial. Considere um risco potencial relacionado à dependência de terceiros, como restaurantes parceiros. Se esses restaurantes não conseguirem atender aos pedidos a tempo, isso pode afetar a reputação do seu aplicativo. Usando a técnica Delphi, você pode consultar os gerentes de restaurantes parceiros para prever a probabilidade de atrasos e criar planos de contingência, como a inclusão de restaurantes alternativos. Mitigação, monitoramento e gestão de riscos na prática No desenvolvimento de um sistema de gerenciamento de projetos, você pode enfrentar o risco de desvios de escopo. Para mitigar esse risco, é essencial de�nir claramente o escopo do projeto desde o início e envolver os stakeholders em revisões regulares para garantir que o projeto permaneça alinhado com as expectativas. O uso de ferramentas de monitoramento, como Grá�cos de Controle, pode ajudar a detectar desvios rapidamente e tomar medidas corretivas. Desenvolvimento de habilidades Além dos aspectos técnicos, a gestão de risco em engenharia de software também envolve o desenvolvimento de habilidades interpessoais. Suponha que você precise apresentar a um cliente um risco signi�cativo relacionado a atrasos no projeto. Aqui, suas habilidades de comunicação e empatia são essenciais. Saber comunicar de forma clara e empática pode ser crucial para estabelecer con�ança com o cliente e trabalhar juntos para encontrar soluções. Após o conteúdo apresentado, você está preparado para enfrentar desa�os no mundo real e aplicar esses conhecimentos em projetos de engenharia de software. Videoaula: Gestão de risco Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Disciplina Engenharia de Software Olá, estudante! Neste vídeo resumo descobriremos como identi�car, prever e mitigar riscos em projetos de desenvolvimento de software, com exemplos do mundo real que ilustram a aplicação prática desses conceitos. Além disso, exploraremos a importância das habilidades interpessoais no contexto da gestão de risco. Saiba mais Para aprofundar ainda mais seu conhecimento em gestão de risco em engenharia de software e estar preparado para os desa�os do mercado de trabalho, leia o artigo intitulado “Gestão de riscos em projetos de desenvolvimento de software com Scrum: um estudo de caso”, dos autores Bruna Naira Milare e Claudio Luis Carvalho Larieira, disponível neste link. MILARE, B. N.; LARIEIRA, C. L .C. Gestão de riscos em projetos de desenvolvimento de software com Scrum: um estudo de caso. Revista de Gestão e Projetos – GeP. 2019. Após a leitura do artigo,você também poderá explorar a seguir, algumas sugestões de recursos valiosos: 1. Gestão de projetos com agile e scrum: para uma compreensão aprofundada de como a gestão de risco se integra a metodologias ágeis como o Scrum, você pode explorar recursos como o "Scrum.org". Este site oferece cursos e materiais gratuitos sobre Scrum e sua aplicação na gestão de projetos de software. 2. Ferramentas de Gestão de Risco: Para praticar a identi�cação e mitigação de riscos, você pode experimentar ferramentas como o "RiskyProject", que oferece recursos avançados para modelagem e análise de riscos em projetos de software. https://pesquisa-eaesp.fgv.br/sites/gvpesquisa.fgv.br/files/arquivos/gestao_de_riscos_em_projetos_de_desenvolvimento.pdf https://pesquisa-eaesp.fgv.br/sites/gvpesquisa.fgv.br/files/arquivos/gestao_de_riscos_em_projetos_de_desenvolvimento.pdf https://pesquisa-eaesp.fgv.br/sites/gvpesquisa.fgv.br/files/arquivos/gestao_de_riscos_em_projetos_de_desenvolvimento.pdf https://www.scrum.org/ https://www.scrum.org/ https://www.intaver.com/ Disciplina Engenharia de Software 3. IEEE Transactions on Software Engineering: Essa revista cientí�ca é uma fonte con�ável para artigos e pesquisas sobre engenharia de software e gestão de riscos. Referências BASILI, V. R. et al., Experimentation in software engineering, in IEEE Transactions on Software Engineering, vol. SE-12, no. 7, pp. 733-743, Julho de 1986, doi: 10.1109/TSE.1986.6312975. PAULA FILHO, W. P. Engenharia de Software: projetos e processos. 4. ed. Rio de Janeiro: LTC, 2019. PRESSMAN, R.; MAXIM, B. R. Engenharia de Software: uma abordagem pro�ssional. 9. ed. Porto Alegre: AMGH, 2021. SEIJAS, P. L., THOMPSON, S. FRANCISCO, M. A. , Model extraction and test generation from JUnit test suites. Software Quality Journal, V. 26 . pp. 1519-1552. 2018. ISSN 0963-9314. SOMMERVILLE, I. Engenharia de Software. 10. ed. São Paulo: Pearson Education do Brasil, 2018. Aula 3 Métricas e análise de software Introdução da aula https://www.computer.org/csdl/journal/ts https://www.computer.org/csdl/journal/ts Disciplina Engenharia de Software Olá, estudante! A engenharia de software é uma disciplina em constante evolução, e seu sucesso depende, em grande parte, da capacidade de medir, analisar e aprimorar o processo de desenvolvimento e os produtos resultantes. Imaginemos uma construção de um arranha-céu sem a habilidade de medir e avaliar seu progresso. Da mesma forma, no desenvolvimento de software, a medição é fundamental. Ela nos permite entender a qualidade do código, a e�ciência do processo de desenvolvimento, e até mesmo identi�car possíveis riscos. Nesta aula, exploraremos como medir software, as métricas que utilizamos para avaliar produtos de software e como aplicar métricas na fase de teste e manutenção. Iremos adquirir conhecimentos valiosos sobre métricas de software, compreenderemos como elas contribuem para a qualidade e e�ciência do desenvolvimento de software, e aprenderá como aplicá-las no mundo real. Fundamentos das métricas de software Disciplina Engenharia de Software Nesta aula abordaremos três áreas-chave: medição de software, métricas de produtos de software e métricas para teste e manutenção. Medição de software: entendendo o básico A medição de software é a pedra angular da Engenharia de Software. Ela nos permite quanti�car e quali�car aspectos essenciais do software em desenvolvimento. A medição é a base para a análise, o controle e a melhoria contínua do processo de desenvolvimento de software. Em outras palavras, você não pode melhorar o que não pode medir. Para entender a medição de software, é importante conhecer o conceito de métricas. As métricas de software são parâmetros mensuráveis usados para avaliar diferentes características do software. Elas podem variar desde o tamanho do código até a complexidade, a e�ciência e a qualidade. Uma métrica comum é o número de linhas de código (LOC), que fornece uma medida do tamanho do software. Outra métrica importante é a complexidade ciclomática, que avalia a complexidade do �uxo de controle do programa. "Medição é a primeira etapa que conduz ao controle e, eventualmente, à melhoria. Se você não pode medir algo, você não pode entender. Se você não pode entender, você não pode controlar. Se você não pode controlar, você não pode melhorar." (HARRINGTON, 1991, p. 57). Métricas de produtos de software: avaliando a qualidade As métricas de produtos de software são usadas para avaliar a qualidade e a e�cácia do próprio software. Elas nos ajudam a determinar se um produto de software atende aos padrões de qualidade esperados e se está em conformidade com as especi�cações. Métricas de produtos incluem taxas de defeitos, con�abilidade, desempenho e usabilidade, entre outras. Disciplina Engenharia de Software Uma métrica importante nesta categoria é a Taxa de Defeitos por Linha de Código (DPLC), que indica a qualidade do código em termos de defeitos por quantidade de código escrito. Outra métrica relevante é a disponibilidade do software, que mede o tempo que o software está disponível e funcionando corretamente. Métricas para teste e manutenção: garantindo a qualidade contínua Na fase de teste e manutenção de software, as métricas desempenham um papel essencial na avaliação da qualidade do software e no direcionamento das atividades de correção e melhoria. Métricas de teste incluem a cobertura de código, que mede a porcentagem do código que foi testada, e a taxa de defeitos identi�cados durante os testes. Durante a manutenção de software, as métricas de manutenção são usadas para rastrear a e�cácia das correções e atualizações. Isso inclui métricas como o tempo médio de resolução de defeitos e a taxa de reintrodução de defeitos, que indicam a e�cácia das correções realizadas. "Métricas de software são a chave para entender, controlar e melhorar o processo de desenvolvimento de software. Elas são a bússola que nos orienta na busca pela qualidade e e�ciência." (Autor Desconhecido) Métricas de software e qualidade: interpretações Agora, vamos explorar em detalhes os conteúdos desta aula. Medição de software: uma janela para o desenvolvimento Disciplina Engenharia de Software A medição de software é a base para avaliar o processo de desenvolvimento e seus resultados. Ela nos fornece informações cruciais para tomar decisões informadas durante todo o ciclo de vida do projeto de software. Para realizar medições e�cazes, é importante entender os tipos de métricas que podem ser usadas. Métricas de processo: essas métricas focam no processo de desenvolvimento de software em si. Exemplos incluem a produtividade da equipe, o tempo médio de resolução de defeitos e a e�cácia das revisões de código. Ao medir esses aspectos, podemos identi�car oportunidades de melhoria no processo. Métricas de produto: essas métricas se concentram nos produtos de software, como código-fonte e documentação. Exemplos incluem a complexidade ciclomática, a quantidade de código não documentado e a taxa de defeitos por linha de código. Essas métricas ajudam a avaliar a qualidade do software e a identi�car áreas problemáticas. Métricas de produtos de software: qualidade sob o microscópio A qualidade do software é um fator crítico para o sucesso de um projeto. As métricas de produtos de software nos ajudam a avaliar e garantir a qualidade. Vamos aprofundar algumas métricas importantes: Taxa de Defeitos por Linha de Código (DPLC): essa métrica nos ajuda a entender a qualidade do código. Quanto menor a DPLC, melhor a qualidade, indicando que há menos defeitos por quantidade de código escrito. Con�abilidade: métricas de con�abilidade avaliam a probabilidade de um sistema falhar durante a operação. Uma métrica comum é o tempo médio entre falhas (MTBF). Desempenho: métricas de desempenho avaliam a capacidade do software de realizar suas funções dentro dos limites de recursos disponíveis. Métricas para teste e manutenção: aperfeiçoando a qualidade Na fase de teste e manutenção,as métricas são importantes na avaliação da qualidade do software e na orientação das atividades de correção e melhoria. Vamos aprofundar essas métricas: Cobertura de código: essa métrica indica a porcentagem do código que foi testada. Uma alta cobertura de código signi�ca que a maioria das partes do software foi testada, reduzindo o risco de defeitos não detectados. Taxa de defeitos identi�cados durante os testes: essa métrica mostra quantos defeitos foram identi�cados durante os testes em relação ao total de defeitos. Isso ajuda a avaliar a e�cácia dos testes. Tempo médio de resolução de defeitos: essa métrica mede o tempo necessário para corrigir defeitos identi�cados. Um tempo menor signi�ca uma resposta mais rápida a problemas. Compreender e aplicar essas métricas de software é essencial para melhorar a qualidade, e�ciência e con�abilidade do desenvolvimento de software. Ao interpretar essas métricas, poderemos identi�car áreas de melhoria, tomar decisões embasadas em dados e entregar produtos de alta qualidade Disciplina Engenharia de Software Métricas de software na prática: impulsionando a qualidade Vamos explorar como as métricas apresentadas podem ser usadas para aprimorar o desenvolvimento de software e alcançar resultados excepcionais. Aplicação de métricas de processo: otimizando o desenvolvimento Imagine que você está liderando um projeto de desenvolvimento de software e deseja melhorar a e�ciência do processo, para isso, decide utilizar métricas de processo. Uma métrica importante nesse cenário é a Produtividade da Equipe, que mede a quantidade de trabalho realizado pela equipe em um determinado período. Suponha que, após medir a produtividade, você identi�ca que a equipe está trabalhando abaixo do seu potencial. Com base nessa métrica, você pode tomar medidas para otimizar o processo, como alocar recursos de forma mais e�ciente, fornecer treinamento adicional ou ajustar prazos. Aplicação de métricas de produto: garantindo qualidade Agora, imagine que você é um desenvolvedor de software e está responsável por escrever código de alta qualidade. Uma métrica relevante nesse contexto é a Complexidade Ciclomática, que avalia a complexidade do código. Você pode usar ferramentas de análise estática de código para calcular essa métrica. Ao analisar a complexidade ciclomática do seu código, você pode identi�car áreas que podem ser simpli�cadas, reduzindo a complexidade e tornando o código mais fácil de entender e manter. Isso não apenas melhora a qualidade do código, mas também economiza tempo de desenvolvimento e reduz o risco de defeitos. Aplicação de Métricas para Teste e Manutenção: Melhorando a Con�abilidade Agora, vamos considerar a fase de teste e manutenção. Suponha que você seja um testador de software e está encarregado de garantir a con�abilidade do sistema. Uma métrica valiosa nesse contexto é a Cobertura de Código. Disciplina Engenharia de Software Você executa testes abrangentes e usa ferramentas de cobertura de código para determinar a porcentagem de código que foi testada. Se a cobertura for baixa em certas áreas, isso indica que essas partes do software não foram adequadamente testadas, o que aumenta o risco de defeitos não detectados. Com base nessa métrica, você pode priorizar áreas de teste adicionais e melhorar a con�abilidade do sistema, garantindo que todas as partes críticas do código sejam testadas minuciosamente. Integrando métricas de software em sua carreira pro�ssional A aplicação de métricas de software não se limita apenas ao desenvolvimento de software. Elas são amplamente utilizadas em toda a indústria de TI para melhorar a qualidade, e�ciência e con�abilidade dos sistemas de software. Ao dominar a aplicação dessas métricas, você desenvolve habilidades valiosas de análise de dados, resolução de problemas e tomada de decisões informadas. Essas habilidades são altamente valorizadas no mercado de trabalho e podem abrir portas para oportunidades de carreira signi�cativas. Lembre-se de que as métricas de software não são apenas números, são ferramentas poderosas para impulsionar a qualidade e o sucesso em projetos de desenvolvimento de software. À medida que você continua a sua jornada na Engenharia de Software, use essas métricas como aliadas para alcançar resultados excepcionais. Videoaula: Métricas e análise de software Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Olá, estudante! Neste vídeo resumo exploraremos conceitos essenciais, aplicação prática e recursos valiosos para aprimorar sua compreensão. Descobriremos como medir, interpretar e aplicar métricas de software em projetos reais. Saiba mais Disciplina Engenharia de Software O artigo intitulado “Controle de métricas no processo de desenvolvimento de software através de uma ferramenta de work�ow”, dos autores Gustavo Zanini Kantorski, Marcelo Lopes Kroth, possui uma boa complementação sobre métricas de software. KANTORSKI, G. Z.; KROTH, M. L. Controle de métricas no processo de desenvolvimento de software através de uma ferramenta de work�ow. Centro de Processamento de Dados Universidade Federal de Santa Maria Santa Maria, RS, Brasil. Como material adicional sobre as métricas, após do artigo anterior, você também pode buscar na Internet as seguintes plataformas: Ferramenta de Análise Estática de Código - SonarQube: essa ferramenta de análise estática de código ajuda a identi�car problemas de qualidade, complexidade e vulnerabilidades em seu código-fonte. É uma ferramenta amplamente utilizada na indústria de software para melhorar a qualidade do código. Plataforma de gerenciamento de projetos - Jira: é uma plataforma de gerenciamento de projetos que pode ser adaptada para projetos de desenvolvimento de software. Ele oferece recursos avançados de rastreamento de tarefas, planejamento e relatórios. Livro de leitura complementar recomendado - Software Metrics: A Guide to Planning, Analysis, and Application: de C. Ravindranath Pandian, esse livro fornece uma compreensão aprofundada das métricas de software e sua aplicação prática. Ele explora diferentes tipos de métricas, como métricas de processo, produto e projeto, e como usá-las e�cazmente para melhorar a qualidade do software. Referências https://www.ufsm.br/app/uploads/sites/350/2018/07/2540.pdf https://www.ufsm.br/app/uploads/sites/350/2018/07/2540.pdf https://www.sonarsource.com/products/sonarqube/ https://www.atlassian.com/br/software/jira Disciplina Engenharia de Software HARRINGTON, H. J. Business Process Improvement. [S. l.]: McGraw-Hill, 1991. Aula 4 Engenharia de software avançada Introdução Disciplina Engenharia de Software Olá, estudante! Nesta aula, mergulharemos em três conceitos-chave: CI/CD (Integração Contínua e Entrega Contínua), Domain Driven Design (DDD) e o reúso de software. A engenharia de software é uma disciplina em constante evolução, e dominar esses tópicos avançados é fundamental para se destacar no mercado e entregar produtos de alta qualidade. Aprenderemos como CI/CD revoluciona o ciclo de desenvolvimento, acelerando a entrega de software. O DDD permitirá que você projete sistemas que re�itam �elmente os domínios do mundo real, melhorando a escalabilidade e a manutenção. Além disso, exploraremos estratégias e�cazes para o reúso de código, economizando tempo e recursos. Prepare-se para uma jornada empolgante, repleta de insights valiosos e práticas que você poderá aplicar diretamente em seu cotidiano pro�ssional. Vamos começar a explorar esses tópicos avançados e descobrir como eles moldam o presente e o futuro da engenharia de software. Entendendo as práticas de Engenharia de software avançada Disciplina Engenharia de Software Vamos de�nir e explorar cada um dos conceitos fundamentais, fornecendo uma base sólida para compreender como eles moldam a prática da engenharia de softwaremoderna. A Integração Contínua (CI) e a Entrega Contínua (CD) são práticas essenciais para acelerar o desenvolvimento e a entrega de software. A Integração Contínua (CI) envolve a integração frequente do código desenvolvido por várias equipes ou desenvolvedores individuais em um repositório central. Isso é acompanhado por testes automatizados para garantir que as mudanças não causem regressões. A Entrega Contínua (CD) leva a CI um passo adiante, permitindo a entrega automatizada e segura das mudanças de código para ambientes de teste e produção. Isso resulta em ciclos de desenvolvimento mais curtos e feedback rápido, garantindo que o software seja entregue com qualidade e e�ciência. Disciplina Engenharia de Software "A Integração Contínua e a Entrega Contínua são práticas que visam acelerar o ciclo de desenvolvimento, minimizar erros e garantir que o software seja entregue rapidamente e com qualidade" (PRESSMAN; MAXIM, 2021, p. 129). O Domain Driven Design (DDD – Design Direcionado ao Domínio) é uma abordagem de design de software que se concentra na modelagem do domínio de negócios. Ele busca mapear com precisão as entidades, agregados e serviços do domínio, resultando em um software que re�ete com �delidade a realidade do negócio. O DDD promove uma comunicação mais e�caz entre desenvolvedores e especialistas de domínio, resultando em sistemas mais escaláveis, �exíveis e fáceis de manter. "O Domain Driven Design é uma abordagem que coloca o foco no domínio de negócios, permitindo que o software seja desenvolvido de maneira mais alinhada com as necessidades reais da empresa" (SOMMERVILLE, 2018). O reúso de software é uma prática que envolve o desenvolvimento de componentes de software que podem ser reutilizados em diferentes partes de um sistema ou em projetos subsequentes. Isso economiza tempo e recursos, além de melhorar a consistência e a qualidade do software. O reúso de software pode ocorrer por meio de bibliotecas de código, frameworks ou microserviços, e é uma estratégia fundamental para aumentar a produtividade e a e�ciência no desenvolvimento de software. "O reúso de software é uma estratégia essencial para acelerar o desenvolvimento e melhorar a qualidade do software, aproveitando componentes já existentes" (PAULA FILHO, 2019, p. 236) Até aqui, adquirimos um entendimento mais profundo sobre CI/CD, Domain Driven Design (DDD) e Reúso de Software. Esses conceitos são fundamentais para a prática da Engenharia de Software Avançada, e dominá-los abrirá portas para o desenvolvimento de software de alta qualidade, e�ciência e adaptabilidade. Compreendendo CI/CD, Domain Driven Design (DDD) e reúso de software Disciplina Engenharia de Software A Integração Contínua (CI) e a Entrega Contínua (CD) são práticas intimamente relacionadas que revolucionaram o desenvolvimento de software. A CI envolve a automação de testes e a integração frequente do código. Esse processo rápido e automatizado ajuda a identi�car e corrigir erros mais cedo, tornando o desenvolvimento mais e�ciente. A Entrega Contínua (CD) amplia a CI, possibilitando a entrega automatizada e segura das mudanças de código para ambientes de teste e produção. Isso elimina a necessidade de lançamentos manuais demorados, garantindo que novos recursos ou correções de bugs cheguem aos usuários mais rapidamente. A interconexão entre CI/CD resulta em um ciclo de desenvolvimento mais curto, permitindo que equipes desenvolvam, testem e entreguem software com agilidade, mantendo a qualidade. O Domain Driven Design (DDD) concentra-se na modelagem de domínio de negócios. Ele cria um vocabulário compartilhado entre desenvolvedores e especialistas de domínio, permitindo uma comunicação mais e�caz. Essa abordagem é particularmente útil em projetos complexos, em que é crucial compreender profundamente as regras de negócio. A interconexão entre DDD e CI/CD se manifesta na melhoria da qualidade do software. A modelagem precisa do domínio simpli�ca os testes e a manutenção, enquanto a entrega contínua garante que as mudanças no modelo de domínio sejam implementadas de forma e�ciente. O reúso de software é uma prática que economiza tempo e recursos, mas como ele se relaciona com CI/CD e DDD? O reúso pode ser alcançado por meio da criação de bibliotecas de código ou serviços compartilhados. Isso signi�ca que, após desenvolver e testar componentes de software uma vez, você pode reutilizá-los em diferentes partes de seu sistema ou em projetos futuros. Disciplina Engenharia de Software A interconexão entre Reúso de Software e CI/CD se traduz em maior e�ciência e consistência. Componentes reutilizáveis são testados e comprovados, reduzindo o tempo gasto em desenvolvimento e testes. A relação com DDD é evidente quando você considera que os componentes reutilizáveis podem ser modelados para se alinhar perfeitamente com os domínios de negócios, fortalecendo ainda mais a compreensão e a comunicação entre equipes de desenvolvimento e partes interessadas do negócio. Importância e características das práticas CI/CD acelera o ciclo de desenvolvimento, garantindo que as mudanças de código sejam testadas e entregues rapidamente. DDD melhora a compreensão das regras de negócio, simpli�cando a manutenção e permitindo uma comunicação mais e�caz. Reúso de software economiza tempo e recursos, promovendo a e�ciência e a consistência no desenvolvimento. A combinação desses conceitos é fundamental para a engenharia de software avançada, permitindo a entrega rápida e e�caz de software de alta qualidade que atenda às necessidades do negócio. Compreender como CI/CD, DDD e reúso de software se interconectam é o primeiro passo para se tornar um engenheiro de software altamente e�ciente e inovador. Práticas de engenharia de software avançada Disciplina Engenharia de Software Agora, vamos explorar como as práticas estudadas podem ser aplicados em situações reaus, promovendo o desenvolvimento de competências essenciais na engenharia de software avançada. Aplicando CI/CD Imagine que você está liderando uma equipe de desenvolvimento trabalhando em um aplicativo de comércio eletrônico. A aplicação está em constante evolução, com novos recursos sendo adicionados regularmente. Para garantir a entrega e�ciente dessas atualizações, você decide implementar CI/CD. A equipe começa a usar um sistema de integração contínua que automatiza a compilação e os testes sempre que o código é modi�cado. Isso signi�ca que, assim que um desenvolvedor envia uma alteração, o código é veri�cado automaticamente quanto a erros, garantindo a qualidade. A Entrega Contínua entra em ação ao automatizar a implantação dessas alterações em um ambiente de teste. Isso permite que os testadores e as partes interessadas avaliem as mudanças rapidamente, fornecendo feedback valioso. A equipe pode então continuar com a Entrega Contínua, implantando automaticamente no ambiente de produção quando estiverem prontos. Isso acelera a entrega de novos recursos e correções de bugs para os clientes, aumentando a satisfação do usuário e a e�ciência da equipe. Aplicando Domain Driven Design (DDD) Agora, vamos considerar como o DDD pode ser aplicado em um projeto de software. Suponha que você esteja desenvolvendo um sistema de gerenciamento de estoque para uma cadeia de supermercados. Disciplina Engenharia de Software Usando o DDD, você começa mapeando cuidadosamente os domínios de negócios, identi�cando conceitos-chave, como produtos, pedidos e fornecedores. Você cria um modelo de domínio rico em detalhes e um vocabulário compartilhado com especialistas em logística e gerentes de lojas. Isso resulta em uma compreensão profunda das regras de negócio e uma comunicação mais e�caz entre a equipe de desenvolvimento e as partes interessadas do negócio. À medida que novos requisitos surgem, o modelo de domínio permite que você os incorpore de maneira e�ciente, mantendo a coesão e a consistência em todo o sistema. Aplicando Reúso de Software Agora, considere o contexto do reúso de softwareem uma empresa que desenvolve software de automação industrial. Você trabalha em um projeto para criar um sistema de controle para várias máquinas em uma linha de produção. Para acelerar o desenvolvimento, você identi�ca componentes de software que podem ser reutilizados em várias máquinas, como algoritmos de controle de movimento. Você os encapsula em bibliotecas de código reutilizável. À medida que novos projetos de automação são iniciados, sua equipe pode simplesmente incorporar essas bibliotecas de código existentes, economizando tempo e garantindo que a funcionalidade de controle seja consistente em todas as máquinas. Em resumo, exploramos exemplos práticos de como CI/CD, Domain Driven Design (DDD) e eeúso de software podem ser aplicados no mundo real. Ao implementar esses conceitos, podemos acelerar o desenvolvimento, melhorar a qualidade do software e promover uma comunicação e�caz com partes interessadas.. Videoaula: Engenharia de software avançada Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Olá, estudante! Neste vídeo resumo, falaremos sobre CI/CD, Domain Driven Design (DDD) e Reúso de Software. Aprofunde seus conhecimentos e desenvolva habilidades essenciais enquanto exploramos exemplos práticos e recursos adicionais. Saiba mais Disciplina Engenharia de Software Para aprofundar seu conhecimento em Engenharia de Software Avançada, é essencial estar atualizado com as ferramentas e técnicas mais recentes do mercado. Aqui estão algumas recomendações exclusivas que podem auxiliar você no seu aprendizado: 1. GitLab CI/CD: para mergulhar ainda mais no mundo da Integração Contínua e Entrega Contínua (CI/CD), o GitLab oferece uma plataforma completa que inclui pipelines de CI/CD integrados. Você pode aprender a con�gurar, automatizar e otimizar seu �uxo de trabalho de desenvolvimento. 1. DDD Community: se você deseja explorar o Domain Driven Design (DDD) em profundidade, a comunidade DDD é uma excelente fonte de informações. Você encontrará artigos, fóruns de discussão e exemplos práticos compartilhados por especialistas em DDD. 1. GitHub Repository Reuse: para entender melhor o Reúso de Software, o GitHub é uma plataforma que abriga milhões de repositórios de código aberto. Explore projetos e bibliotecas de código existentes para ver como o reúso é aplicado na prática. 1. Jenkins: para aprofundar sua compreensão de CI/CD, Jenkins é uma ferramenta de automação de código aberto amplamente usada. Você pode con�gurá-lo em seu ambiente de desenvolvimento para criar pipelines de integração e entrega personalizados. Referências https://docs.gitlab.com/ee/ci https://dddcommunity.org/ https://github.com/ https://www.jenkins.io/ Disciplina Engenharia de Software PAULA FILHO, W. P. Engenharia de Software: projetos e processos. 4. ed. Rio de Janeiro: LTC, 2019. PRESSMAN, R.; MAXIM, B. R. Engenharia de Software: uma abordagem pro�ssional. 9. ed. Porto Alegre: AMGH, 2021. SOMMERVILLE, I. Engenharia de Software. 10. ed. São Paulo: Pearson Education do Brasil, 2018. Aula 5 Revisão da unidade Engenharia de software: desvendando os pilares fundamentais Disciplina Engenharia de Software Nesta unidade de Tópicos Avançados da Engenharia de Software, abordamos quatro competências essenciais da Engenharia de Software, cada uma contribuindo para sua formação como pro�ssional preparado para os desa�os dinâmicos do desenvolvimento de software. Abordamos os conceitos fundamentais da Classi�cação e Tipos de Atividades de Manutenção de Software, exploramos os diferentes tipos de manutenção, como corretiva, adaptativa, perfectiva e preventiva. Nas práticas da engenharia reversa e reengenharia, vimos como utilizar essas práticas para analisar e compreender a estrutura de funcionamento de um software já existente, ou como reestruturar e aprimorar sistemas legados, garantindo que permaneçam relevantes e e�cientes. Além disso, examinamos a evolução de software, essencial para garantir que os sistemas atendam às crescentes demandas do usuário e do mercado. Avançamos para a Gestão de risco, uma competência crítica na engenharia de software moderna, e essencial para garantir o sucesso de projetos de software. Ao entender os riscos especí�cos associados ao desenvolvimento de software, desde a incerteza nos requisitos até desa�os técnicos, além de identi�car e prever ameaças antes que que elas se tornem problemas signi�cativos, e aplicar estratégias de mitigação e�caz e monitoramento contínuo e a gestão ativa, é possível a implementação de estratégias para reduzir a probabilidade de ocorrência e minimizar o impacto dos ricos inevitáveis. Aprofundamos nossa compreensão com Métricas e Análise de Software. Aprendemos a importância da medição de software, para avaliar não apenas a e�cácia do software, mas também o progresso do projeto e a satisfação do cliente. Exploramos métricas para avaliar a qualidade intrínseca do produto, de sua e�ciência de código até a facilidade de manutenção. E, Disciplina Engenharia de Software por �m, descobriu como métricas adequadas facilitam os processos de teste e manutenção, que são partes críticas do ciclo de vida do software, garantindo a longevidade e con�abilidade deste. Concluímos nossa jornada com Engenharia de Software Avançada, com os conceitos para necessários a compreensão da integração contínua e a entrega contínua (CI/CD), uma prática que revoluciona o ciclo de vida do software. Abordamos o Domain Driven Design (DDD) para projetar sistemas complexos, identi�cando e delineando domínios especí�cos, e desvendou estratégias para o reuso e�ciente de software. A manutenção e evolução são respaldadas pela gestão e�ciente de riscos, enquanto as métricas se tornam a base para avaliação contínua e tomada de decisões informadas. A engenharia de software avançada não é apenas uma competência isolada, mas uma abordagem integrada que otimiza todo o ciclo de vida do software. O entendimento das atividades de manutenção e evolução de software, a habilidade de gerenciar riscos de forma proativa, a apreciação da importância das métricas e a imersão nas práticas avançadas da engenharia de software nos coloca em uma posição vantajosa dentro da área de Engenharia de Software. Ao conectar os pontos entre manutenção, gestão de riscos, métricas e práticas avançadas, desenvolvemos uma compreensão holística que será essencial em sua carreira. Videoaula: Revisão da unidade Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Olá, estudante! Neste vídeo resumo, descobriremos os alicerces essenciais da Engenharia de Software. Mergulharemos nas competências-chave abordadas em nosso curso avançado. Da Manutenção à Engenharia Avançada, cada conceito ganha vida com exemplos práticos. Estudo de caso Disciplina Engenharia de Software Otimização do processo de manutenção em uma empresa de desenvolvimento de software Para contextualizar sua aprendizagem, vamos explorar um cenário em que você atua como engenheiro de software em uma empresa, uma empresa, especializada no desenvolvimento de sistemas corporativos. Nesse contexto, surgiram desa�os especí�cos relacionados à Manutenção e Evolução de Software, assim como à aplicação de Métricas e Análise de Software. A empresa possui um sistema crítico para um cliente �nanceiro importante, que evolui constantemente suas necessidades. A equipe enfrenta di�culdades na gestão da manutenção, com demandas emergentes, e busca formas de otimizar o processo sem comprometer a qualidade. A métrica atual de e�cácia da manutenção é inconsistente, tornando difícil avaliar o impacto das alterações no sistema. As mudanças frequentes estão causando uma pressão intensa na equipe, resultandoem atrasos e desa�os na garantia da qualidade do software. Desa�os: 1. Priorização de atividades emergentes: a equipe está constantemente recebendo solicitações de manutenção emergente, mas a falta de um sistema e�ciente de priorização leva a confusões. Como você criaria um método que permitisse à equipe priorizar corretamente as tarefas, considerando a urgência e o impacto nas operações do cliente? 2. Gestão de mudanças frequentes: o cliente �nanceiro requer mudanças frequentes para atender às suas necessidades em evolução. A equipe está lutando para equilibrar as alterações necessárias sem comprometer a estabilidade do sistema. Como você organizaria o �uxo de trabalho para acomodar essas mudanças sem prejudicar a qualidade do software existente? 3. Métricas signi�cativas: atualmente, a empresa não possui métricas claras para avaliar a e�cácia da manutenção. Isso torna difícil demonstrar o valor das atividades de Disciplina Engenharia de Software manutenção para a alta administração. Como você introduziria métricas signi�cativas que evidenciem o impacto positivo das atividades de manutenção, como redução de bugs e aumento da satisfação do cliente? Como engenheiro de software, sua missão é otimizar o processo de manutenção na empresa deste estudo de caso, integrando conceitos de Manutenção e Evolução de Software com Métricas e Análise de Software. ___________ Re�ita Ao mergulhar nos desa�os práticos da empresa deste estudo de caso, é hora de re�etir sobre como os conceitos aprendidos nas aulas podem ser aplicados de maneira mais profunda. Como você equilibraria a urgência das demandas emergentes com a necessidade de manter a estabilidade do sistema? Quais métricas especí�cas seriam mais relevantes para a TechSolutions, considerando seu contexto e as expectativas do cliente? Como a implementação e�ciente de métricas pode contribuir para a tomada de decisões informadas sobre o processo de manutenção? Imagine-se no papel de um engenheiro de software enfrentando a priorização de atividades emergentes. Como você equilibraria a urgência das solicitações com a necessidade de manter a estabilidade do sistema? Considere as técnicas ágeis de gestão de projetos e como elas podem ser adaptadas à dinâmica da empresa deste estudo de caso. Ao abordar a gestão de mudanças frequentes, pense em como as práticas ágeis, como Scrum, podem proporcionar �exibilidade necessária. Como você organizará sprints para garantir uma resposta ágil às mudanças sem comprometer a qualidade do software existente? A introdução de métricas signi�cativas é um desa�o vital. Re�ita sobre quais métricas, como MTTR e Taxa de Reincidência de Bugs, seriam mais impactantes para demonstrar o valor das atividades de manutenção na da empresa deste estudo de caso. Como essas métricas podem ser apresentadas de forma clara para convencer a alta administração do impacto positivo? Videoaula: Resolução do estudo de caso Este conteúdo é um vídeo! Para assistir este conteúdo é necessário que você acesse o AVA pelo computador ou pelo aplicativo. Você pode baixar os vídeos direto no aplicativo para assistir mesmo sem conexão à internet. Enfrentar os desa�os da empresa deste estudo de caso exige uma abordagem estratégica, alinhada aos conceitos de Manutenção e Evolução de Software, bem como à aplicação de Disciplina Engenharia de Software Métricas e Análise de Software. Vamos traçar um caminho para otimizar o processo de manutenção, considerando cada desa�o detalhadamente. 1. Priorização de atividades emergentes Para lidar com as solicitações emergentes, é crucial estabelecer um sistema de priorização robusto, por meio da implementação de ferramentas de gestão de projetos e rastreamento de problemas, baseadas na metodologia Kaban, que permita à equipe visualizar e priorizar as tarefas de forma clara. Duas dessas ferramentas, que permitem a gestão de projetos são o Jira e o Trello, que con�gurados para categorizar e priorizar solicitações de manutenção com critérios claros, incluindo a criticidade para o cliente, o tempo necessário para a resolução e o impacto potencial no sistema, podem contribuir para que a equipe se mantenha atualizada nas prioridades de desenvolvimento. Lembre-se também de realize sessões regulares de triagem com a equipe para reavaliar e ajustar prioridades conforme necessário. 2. Gestão de Mudanças Frequentes Organizar o �uxo de trabalho para acomodar mudanças frequentes requer a adoção de métodos ágeis. Implemente práticas do Scrum, dividindo o trabalho em sprints ou iterações curtas. Isso permitirá que a equipe responda rapidamente às mudanças nos requisitos do cliente sem comprometer a estabilidade do sistema. Estimule a comunicação contínua entre a equipe e os stakeholders para garantir alinhamento do projeto com as mudanças necessárias. 3. Métricas Signi�cativas Introduza métricas que capturem o valor da manutenção de forma tangível. Adote o MTTR (Mean Time to Repair) para avaliar o tempo de recuperação, a Taxa de Reincidência de Bugs para medir a qualidade e pesquisas de satisfação do cliente para evidenciar o impacto positivo. Utilize ferramentas de monitoramento para garantir a precisão dos dados e crie relatórios regulares para demonstrar o progresso. Essa resolução destaca a aplicação prática de competências em métodos ágeis, gestão e�ciente de projetos e seleção de métricas relevantes. Como engenheiro de software, sua capacidade de equilibrar agilidade, qualidade e mensuração de impacto será crucial para o sucesso na empresa deste estudo de caso. Resumo visual Disciplina Engenharia de Software Veja o resumo visual da unidade: Disciplina Engenharia de Software Referências Disciplina Engenharia de Software Harrington, H. J. Business Process Improvement. [S. l.]: McGraw-Hill, 1991. HIRAMA, K. Engenharia de Software: qualidade e produtividade com tecnologia. Rio de Janeiro: Elsevier, 2011. PAULA FILHO, W. P. Engenharia de Software: projetos e processos. 4. ed. Rio de Janeiro: LTC, 2019. PRESSMAN, R.; MAXIM, B. R. Engenharia de Software: uma abordagem pro�ssional. 9.ed. Porto Alegre: AMGH, 2021. SBROCCO, J. H. T. C. Metodologias ágeis: engenharia de software sob medida. 1.ed. São Paulo: Érica, 2012. SOMMERVILLE, I. Engenharia de Software. 10. ed. São Paulo: Pearson Education do Brasil, 2018.