Prévia do material em texto
104 Unidade III Unidade III 7 ENGENHARIA DE SOFTWARE E QUALIDADE A engenharia de software é uma área que se concentra no desenvolvimento de sistemas de software de alta qualidade. Nesse caso, a qualidade não se limita ao seu desempenho e funcionalidade; mas também em relação à confiabilidade, usabilidade, eficiência, manutenibilidade e portabilidade. A engenharia de software emprega uma abordagem sistemática, disciplinada e quantificável para alcançar esses objetivos de qualidade. Portanto, o gerenciamento da qualidade é um componente essencial da engenharia de software. Assim, é importante atentar-se a procedimentos e tarefas necessários para garantir que os padrões de qualidade sejam atendidos durante todo o ciclo de vida do desenvolvimento do software. O gerenciamento da qualidade do produto visa garantir que o produto final atenda às expectativas dos usuários finais e aos requisitos especificados, enquanto o gerenciamento da qualidade do processo se concentra em melhorar continuamente os processos utilizados para a criação do produto. Além disso, a engenharia de software orientada a serviços (SOA) se tornou um paradigma predominante no desenvolvimento de sistemas distribuídos flexíveis. Ao apresentar as funcionalidades do sistema como serviços independentes que podem ser utilizados por vários clientes, sejam eles internos ou externos à organização, o SOA facilita a reutilização. Esse método aumenta a eficiência do desenvolvimento e facilita a integração de várias tecnologias e sistemas. Desse modo, alavancar produtos de software de alta qualidade requer uma combinação cuidadosa de práticas rigorosas de engenharia de software e um compromisso constante com o gerenciamento da qualidade em todos os níveis organizacionais. A excelência operacional e a inovação contínua em produtos digitais podem ser alcançadas adotando metodologias ágeis ou tradicionais, conforme a necessidade, bem como incorporando práticas modernas como SOA e engenharia de proteção. 7.1 Gerenciamento da qualidade (processo e produto) Em engenharia de software, o gerenciamento da qualidade é fundamental para o desenvolvimento de produtos digitais que atendam às necessidades dos usuários e superem suas expectativas. A qualidade do processo e a qualidade do produto são as duas dimensões principais desse conceito. Qualidade do processo Para garantir a eficiência e a eficácia da produção, é determinante buscar melhorias contínuas nos processos utilizados na criação de software. Metodologias ágeis, como Scrum ou Kanban, possibilitam maior adaptabilidade e resposta rápida às mudanças, o que resulta em um ambiente de desenvolvimento 105 QUALIDADE DE SOFTWARE dinâmico. Além disso, práticas como integração contínua (CI) e entrega contínua (CD) promovem uma cultura de testes automatizados constantes, reduzindo significativamente os riscos associados ao lançamento de novas versões do software. As empresas líderes da área de tecnologia, como Amazon e Netflix, usam essa abordagem para implementar a metodologia DevOps. Através da automação extensiva e do monitoramento contínuo, elas conseguiram acelerar a entrega de novas funcionalidades e aumentar significativamente a estabilidade e a segurança dos sistemas. O produto é de alta qualidade Uma atenção meticulosa aos detalhes em todas as fases do desenvolvimento é necessária para garantir que o produto final atenda às expectativas dos clientes. Isso inclui definir claramente os requisitos e realizar testes rigorosos para encontrar e corrigir os erros antes do lançamento. O processo pode ser facilitado por ferramentas de análise estática de código contemporâneas, que podem identificar possíveis vulnerabilidades ou violações das boas práticas de programação. O sucesso da plataforma GitHub, que se destaca pela facilidade de uso e confiabilidade que oferece aos desenvolvedores em todo o mundo, exibe a aplicação eficaz desses princípios. Ao implementar padrões elevados de gestão de processos e avaliação de qualidade de produto contínua, o GitHub conseguiu criar uma comunidade vibrante e engajada, demonstrando como essas práticas contribuem no sucesso comercial. A excelência em engenharia de software depende do gerenciamento da qualidade tanto no processo quanto no produto. As empresas podem otimizar seus fluxos de trabalho e fabricar produtos excepcionais que atendam às crescentes demandas do mercado digital, usando estratégias focadas na melhoria contínua e em ferramentas adequadas para monitoramento e avaliação. 7.2 Engenharia de proteção Uma área importante da engenharia de proteção de software se concentra na implementação de medidas de segurança para proteger os sistemas contra ameaças internas e externas. Essa área cobre desde a concepção do sistema até sua manutenção, garantindo que as vulnerabilidades sejam identificadas e mitigadas de forma eficaz. O desenvolvimento seguro é um componente fundamental da engenharia de proteção e inclui a incorporação de práticas de segurança no ciclo de vida do desenvolvimento de software (SDLC). Análises de risco, modelagem de ameaças, revisões de código focadas em segurança e testes de penetração são exemplos disso. O Google e a Microsoft adotam essas práticas com rigor, usando ferramentas avançadas para automação desses procedimentos e promovendo uma cultura organizacional que prioriza a segurança. 106 Unidade III Além disso, a gestão eficaz de identidades e acessos (IAM) é essencial para garantir que apenas pessoas autorizadas possam acessar dados sensíveis. Com o objetivo de evitar violações de dados, técnicas como autenticação multifator (MFA), controle rigoroso sobre privilégios mínimos necessários e gerenciamento contínuo de permissões são importantes. Assim, as instituições financeiras globais também estão adotando essas estratégias para demonstrar seu valor inestimável na proteção contra ataques cibernéticos complexos. A resposta a incidentes também é importante na engenharia de proteção. Para minimizar os danos causados por acidentes de segurança, é essencial desenvolver um plano abrangente que inclua detecção precoce, resposta rápida e recuperação eficaz. Os principais grupos da indústria tecnológica fazem grandes investimentos em centros operacionais de segurança (SOCs), que são equipados com os mais novos recursos para monitoramento e análise forense contínuos. Observação A engenharia de proteção é uma área multidisciplinar que requer o desenvolvimento contínuo de novas tecnologias e práticas. As organizações podem proteger seus ativos digitais e fortalecer sua reputação no mercado extremamente competitivo atual ao adotar uma abordagem proativa à segurança cibernética. Saiba mais Para aprofundar seus conhecimentos em engenharia de proteção, recomenda-se a leitura a seguir: PFLEEGER, S. L.; ATLEE, J. M. Software engineering: theory and practice. London: Pearson, 2006. 8 BOAS PRÁTICAS E TENDÊNCIAS EM QUALIDADE DE SOFTWARE O sucesso de projetos de tecnologia da informação depende da qualidade do software. As boas práticas e tendências na área de qualidade de software têm ganhado destaque devido à evolução constante das metodologias de desenvolvimento e à crescente complexidade dos sistemas. Em tal situação, algumas estratégias são particularmente notáveis por promoverem melhorias substanciais nos procedimentos e produtos finais. 107 QUALIDADE DE SOFTWARE 8.1 CMMI e o aprimoramento dos processos Apesar de ser uma metodologia de desenvolvimento de sistemas, o CMMI foi capaz de fornecer excelentes padrões de boas práticas de desenvolvimento, o que colaborou o refinamento da qualidade de desenvolvimento de software. Quando se trata de maturidade dos processos de desenvolvimento de software, o Modelo de Maturidade de Capacidade-Integração (CMMI) é um padrão já estabelecido. Além de melhorar seus processos internos, as empresas que implementam o CMMI visam mostrar ao mercado sua capacidade de entregar produtos de qualidade superior. A implementaçãoimportância da qualidade do software na nuvem, bem como as principais questões enfrentadas. De grande importância e de impacto estratégico, a qualidade do software na nuvem influencia no sucesso, na reputação e na competitividade de uma empresa em um mercado em questão. 8.9.1 Conceitos básicos sobre qualidade do software na nuvem O conceito de qualidade do software na nuvem abrange uma variedade de fatores, como funcionalidade, desempenho, segurança, escalabilidade e disponibilidade. Também conhecida como ambiente cloud, a computação em nuvem tem suas dimensões moldadas pela sua natureza distribuída, o modelo de serviço sob demanda e a elasticidade dos recursos. A qualidade desse ambiente é influenciada por elementos técnicos e operacionais, o que significa que sua gestão deve ser feita de forma ampla. Um exemplo prático dessa complexidade pode ser observado no desafio de manter a alta disponibilidade de serviços críticos hospedados na nuvem. Empresas como Netflix e Amazon AWS utilizam estratégias avançadas de replicação geográfica e balanceamento de carga para garantir que seus serviços permaneçam acessíveis mesmo diante de falhas em datacenters individuais. Essas práticas explicitam a importância da arquitetura e do planejamento na qualidade do software na nuvem. Além disso, a segurança emerge como uma preocupação central na qualidade do software na nuvem. A adoção de protocolos robustos de criptografia, autenticação multifatorial e políticas rigorosas de controle de acesso são fundamentais para proteger dados sensíveis armazenados ou processados na nuvem. Casos como o vazamento de dados da Equifax, em 2017, ressaltam as consequências devastadoras que falhas de segurança podem ter sobre a confiança dos usuários e a reputação das empresas. A escalabilidade é outro pilar crucial da qualidade em ambientes cloud. A capacidade de ajustar de forma dinâmica os recursos computacionais, de acordo com a demanda, possibilita otimizar custos e assegurar o desempenho adequado durante picos inesperados de tráfego. Ferramentas como o Kubernetes têm se tornado essenciais nesse aspecto, oferecendo soluções eficientes para a orquestração automática de contêineres e gerenciamento da infraestrutura. Por fim, alcançar uma alta qualidade no software desenvolvido para operar na nuvem requer um entendimento profundo das particularidades desse ambiente. Isso envolve desde escolhas arquiteturais até práticas operacionais específicas, como a implementação rigorosa de medidas de segurança e a adoção flexível da infraestrutura para lidar com variações na demanda. 8.9.2 Funcionalidade e usabilidade A funcionalidade e a usabilidade de um software na nuvem são aspectos cruciais que determinam a satisfação do usuário final. A complexidade aumenta quando consideramos a diversidade de dispositivos e plataformas através dos quais os usuários acessam esses serviços. Para enfrentar esses desafios, é crucial adotar práticas como o design responsivo, que assegura que o software funcione de maneira eficaz em diferentes tamanhos de tela e resoluções. 133 QUALIDADE DE SOFTWARE No entanto, garantir essas qualidades em ambientes cloud apresenta desafios únicos. A natureza distribuída da computação em nuvem implica que os aplicativos devem ser projetados para operar eficientemente em múltiplas regiões geográficas, o que pode gerar latências variáveis e exigir uma otimização constante das interfaces de usuário para diferentes mercados. Além disso, a diversidade de dispositivos e navegadores usados pelos usuários finais requer testes extensivos de compatibilidade e responsividade. Um exemplo notável dessa complexidade é o desenvolvimento de aplicativos móveis baseados na nuvem, onde a experiência do usuário pode variar significativamente dependendo do dispositivo, sistema operacional e qualidade da conexão à internet. Empresas líderes no setor, como Spotify e Dropbox, investem pesadamente em equipes multidisciplinares que focam na otimização contínua da usabilidade e na realização de testes para entender melhor as preferências dos usuários. Essas práticas destacam a importância de abordagens iterativas e centradas no usuário para garantir a funcionalidade e usabilidade em ambientes cloud. Além disso, a implementação de testes automatizados se torna indispensável para garantir a qualidade da funcionalidade em diversos ambientes. Ferramentas como Selenium ou Appium possibilitam simular interações do usuário em múltiplos navegadores e dispositivos, identificando problemas de usabilidade antes que afetem o usuário final. Empresas inovadoras no setor tecnológico frequentemente utilizam frameworks ágeis para iterar rapidamente sobre feedbacks dos usuários, ajustando interfaces e fluxos de trabalho para melhor atender às suas necessidades. Um aspecto muitas vezes subestimado é a importância da localização e internacionalização dos aplicativos na nuvem. Adaptar o software para suportar múltiplos idiomas e formatos regionais não apenas expande seu alcance global, mas também melhora significativamente a usabilidade para usuários não nativos do idioma original do aplicativo. Essa prática demonstra um compromisso com uma experiência do usuário inclusiva e acessível. Todas as práticas de gestão da qualidade e métricas de testes se aplicam aos projetos de softwares para ambiente de nuvem e podem ser utilizadas sem nenhum constrangimento. 8.9.3 Desempenho do software na nuvem O desempenho é outra dimensão crítica da qualidade do software na nuvem, influenciando diretamente a percepção do usuário sobre o serviço. A adoção de arquiteturas sem servidor (serverless) pode oferecer escalabilidade automática, possibilitando ao sistema que se ajuste rapidamente às mudanças na demanda sem intervenção manual. Outro ponto crítico é a implementação de caching eficiente tanto no lado do cliente quanto no do servidor. Isso reduz latências ao servir conteúdo previamente armazenado de forma mais rápida do que se fosse necessário processá-lo novamente. Estratégias como Content Delivery Networks (CDNs) são essenciais para distribuir conteúdo globalmente, minimizando atrasos independentemente da localização geográfica do usuário. 134 Unidade III Desafios como o gerenciamento eficiente dos recursos computacionais para lidar com cargas de trabalho variáveis são amplificados pela elasticidade da nuvem. Ferramentas modernas de monitoramento de desempenho, como New Relic e Datadog, possibilitam uma visão granular sobre o comportamento dos sistemas em tempo real, facilitando a identificação rápida de gargalos e a otimização proativa dos recursos. Um caso emblemático é o uso dessas ferramentas por empresas como X (antigo Twitter) e Netflix durante eventos globais de grande escala (como Copa do Mundo ou lançamentos de séries populares), quando picos súbitos no tráfego podem levar à necessidade urgente de escalonamento automático dos serviços. A capacidade dessas plataformas de manter um desempenho estável sob demanda intensa não apenas demonstra a robustez das soluções baseadas em nuvem, mas também ressalta a importância crítica do monitoramento contínuo e do ajuste dinâmico dos recursos disponíveis. A análise proativa de logs e métricas desempenha um papel crucial na manutenção da performance ideal. Tal acompanhamento contínuo facilita uma compreensão mais profunda das necessidades dos usuários e da forma como eles interagem com o sistema sob diferentes condições. Lembrete Ferramentas avançadas de monitoramento possibilitam detectar padrões anormais ou picos inesperados no uso, propiciando correções rápidas antes que impactem significativamente a experiência do usuário. 8.9.4 Segurança A segurança é possivelmente o aspecto mais sensível quando se trata da qualidade do software na nuvem. Com ameaças cibernéticas evoluindo rapidamente, garantir a segurança dos dados armazenados ou processados na nuvem exige vigilância constante, bem como a adoção das melhores práticas internacionais.Assim, estratégias como encriptação end-to-end, autenticação multifatorial (MFA) e segmentação rigorosa da rede tornaram-se padrões mínimos nas arquiteturas cloud modernas. Em ambientes cloud, exige-se abordagem multifacetada, dada a natureza complexa e dinâmica. As práticas recomendadas incluem a implementação rigorosa de políticas de acesso baseadas em roles (RBAC), assegurando que apenas usuários autorizados possam acessar informações sensíveis ou realizar operações críticas dentro do sistema. A criptografia dos dados em trânsito e em repouso é outra camada essencial de proteção, que certifica que informações confidenciais permaneçam seguras contra interceptações não autorizadas. Além disso, a realização regular de testes de penetração e avaliações de vulnerabilidade ajuda a identificar e a corrigir falhas de segurança antes que possam ser exploradas em ataques. 135 QUALIDADE DE SOFTWARE Saiba mais Para uma compreensão mais aprofundada sobre esses temas, recomenda-se a seguinte leitura: MATHER, T.; KUMARASWAMY, S.; LATIF, S. Cloud security and privacy: an enterprise perspective on risks and compliance. Massachusetts: O’Reilly, 2009. 8.10 Tendências futuras em qualidade de software À medida que a tecnologia evolui e novas demandas surgem, as tendências futuras em qualidade de software moldam o futuro do desenvolvimento de software. Neste capitulo, serão discutidas as tendências emergentes que estão moldando o cenário da qualidade do software e como elas estão afetando a forma como os produtos de software são desenvolvidos, testados e entregues. As tendências futuras em qualidade de software estão redefinindo as expectativas dos clientes e impulsionando a inovação em toda a indústria de tecnologia, devido à incorporação da automação e da inteligência artificial, bem como à crescente demanda por segurança e privacidade. A seguir, serão examinadas essas tendências para entender como elas estão impactando o futuro do desenvolvimento de software e do fornecimento de produtos de alta qualidade aos usuários finais. 8.10.1 Novas tecnologias e abordagens que impactam a qualidade do software As últimas décadas testemunharam uma revolução tecnológica sem precedentes, impactando significativamente a qualidade do software. Desse modo, entre as inovações mais disruptivas, estão a inteligência artificial (IA) e o aprendizado de máquina (AM), que não apenas transformaram os métodos de desenvolvimento de software, mas também redefiniram os padrões de qualidade. A IA e o AM têm sido fundamentais na automação dos processos de teste, possibilitando uma cobertura mais ampla em menos tempo e com menor esforço humano. Ferramentas baseadas em IA podem se preparar a partir de dados e históricos de defeitos, identificar padrões complexos e prever áreas potenciais de falha antes mesmo que o código seja escrito. Isso possibilita uma abordagem proativa para garantir a qualidade, em vez da reativa, focada na detecção e correção de defeitos após sua ocorrência. Além disso, essas tecnologias estão remodelando as práticas de desenvolvimento por meio da implementação de sistemas auto-otimizáveis. Por exemplo, sistemas baseados em IA podem ajustar dinamicamente seus próprios parâmetros operacionais em resposta às mudanças no ambiente ou nos requisitos do usuário, melhorando continuamente seu desempenho e confiabilidade sem intervenção humana direta. 136 Unidade III Um caso emblemático dessa aplicação é o uso da IA para personalizar experiências do usuário em softwares complexos. Empresas como Netflix e Spotify utilizam algoritmos de recomendação baseados em AM para analisar grandes volumes de dados sobre preferências dos usuários e fornecer conteúdo personalizado que atende às suas expectativas individuais. Essa capacidade melhora a satisfação do usuário e eleva os padrões da percepção de qualidade do software. No entanto, apesar desses avanços promissores, a integração efetiva da IA e AM na qualidade do software apresenta desafios significativos. Questões como viés algorítmico, realização de explicação das decisões automatizadas e segurança dos dados são preocupações crescentes que exigem atenção contínua dos profissionais da área. Se por um lado, as novas tecnologias citadas oferecem oportunidades extraordinárias para melhorar a qualidade do software, por outro, elas impõem novos desafios éticos e técnicos. Navegar por essas complexidades requer um equilíbrio cuidadoso entre aproveitar as vantagens dessas inovações e mitigar seus riscos potenciais. 8.10.2 Desafios emergentes na área da qualidade do software: segurança cibernética A segurança cibernética tem se tornado um desafio cada vez mais complexo e multifacetado na área da qualidade do software. Com a crescente digitalização dos serviços e a expansão da internet das coisas (IoT), o volume de dados sensíveis gerado de compartilhados online nunca foi tão alto. Isso, por sua vez, atraiu uma nova onda de ameaças cibernéticas, variando de ransomware a ataques direcionados a infraestruturas críticas. Um aspecto particularmente desafiador é a evolução constante das técnicas utilizadas pelos cibercriminosos. Por exemplo, os ataques de phishing tornaram-se extremamente sofisticados, muitas vezes imitando comunicações legítimas de forma quase indistinguível. Além disso, o surgimento de malwares baseados em inteligência artificial (IA), capazes de aprender e se adaptar a fim de contornar medidas de proteção tradicionais, representa uma nova fronteira para a segurança cibernética. Para enfrentar esses desafios, as práticas de desenvolvimento de software estão evoluindo. A implementação do DevSecOps, que integra considerações de segurança desde as fases iniciais do ciclo de desenvolvimento, é um exemplo dessa mudança. Ferramentas automatizadas baseadas em IA também estão sendo desenvolvidas para identificar vulnerabilidades no código antes que ele seja lançado. Contudo, essas abordagens exigem uma mudança cultural significativa nas organizações e um investimento contínuo em formação e ferramentas especializadas. Além disso, regulamentações como o GDPR, na União Europeia, impõem requisitos rigorosos sobre como os dados pessoais devem ser tratados e protegidos. Isso adiciona uma camada adicional de complexidade ao desenvolvimento de software seguro, exigindo não apenas competências técnicas, mas também conhecimento legal detalhado. 137 QUALIDADE DE SOFTWARE 8.10.3 O papel da automação na melhoria contínua da qualidade do software A automação tem se tornado um pilar fundamental na evolução das práticas de qualidade de software. Com a adoção crescente de metodologias ágeis e DevOps, a necessidade de processos mais rápidos e eficientes se tornou evidente. A automação entra como uma solução poderosa, possibilitando as equipes que realizem testes de forma mais rápida, confiável e com menor esforço manual. Um exemplo claro dessa transformação pode ser visto na implementação de pipelines CI/CD. Elas automatizam o processo de integração do código, execução de testes e deployment, reduzindo significativamente o tempo necessário para disponibilizar novas funcionalidades e correções. Além disso, a automação dos testes viabiliza uma cobertura maior em menos tempo, aumentando a confiança na qualidade do software entregue. Contudo, a automação não é apenas sobre velocidade. Ela também contribui para a consistência dos resultados. Testes manuais estão sujeitos a variações decorrentes da intervenção humana, enquanto os testes automatizados podem ser repetidos inúmeras vezes com exatidão. Isso garante que bugs previamente identificados não sejam reintroduzidos nas versões subsequentes do software. Empresas líderes no setor tecnológico têm compartilhado suas experiências bem-sucedidas com automação. Por exemplo, a Netflix utiliza uma abordagem chamada chaos engineering, em que sistemas são intencionalmente submetidos a falhas para testar sua resiliência. Grande parte desse processo é automatizada, possibilitandoà empresa garantir alta disponibilidade e qualidade em seus serviços. 8.10.4 O papel da DevOps na melhoria contínua da qualidade do software A cultura DevOps representa uma mudança paradigmática no desenvolvimento de software, enfatizando a colaboração entre as equipes de desenvolvimento (Dev) e operações (Ops), com um foco especial na melhoria contínua da qualidade do software. Essa abordagem promove um período de feedback constante entre as equipes envolvidas no ciclo de vida do desenvolvimento do software, desde o planejamento até o deployment e operação. Uma das principais contribuições da DevOps para a qualidade do software é sua ênfase em práticas como integração contínua (CI) e entrega contínua (CD). Tais práticas propiciam que as alterações no código sejam integradas frequentemente ao repositório principal e que o software seja entregue aos usuários finais rapidamente. Isso facilita a detecção precoce de erros e possibilita ajustes rápidos, melhorando significativamente a qualidade final do produto. Além disso, DevOps incentiva uma mentalidade na qual todos são responsáveis pela qualidade e estabilidade do sistema. Isso significa que questões relacionadas à segurança são tratadas desde as fases iniciais do desenvolvimento, tal abordagem é conhecida como security by design. Ferramentas automatizadas desempenham um papel crucial aqui, ajudando a identificar vulnerabilidades antes que elas possam impactar negativamente o projeto. 138 Unidade III Casos reais ilustram o impacto positivo da DevOps na qualidade do software. Empresas como Amazon e Google adotaram essa cultura para acelerar o lançamento de produtos. Saiba mais Para aprofundar seus conhecimentos sobre o papel da automação e DevOps na melhoria contínua da qualidade do software, seguem algumas sugestões de leitura: FORSGREN, N.; HUMBLE, J.; KIM, G. Accelerate: the science of lean software and DevOps: building and scaling high performing technology organizations. It revolution Press, 2018. BLOG do Martin Fowler. Disponível em: https://martinfowler.com/. Acesso em: 7 jun. 2024. 139 QUALIDADE DE SOFTWARE Resumo A engenharia de software é uma disciplina que aborda a criação e a manutenção de sistemas de software de forma sistemática e disciplinada, envolvendo, assim, a escrita de código, bem como a análise de requisitos, o projeto de sistemas, a realização de testes e a manutenção do software ao longo do tempo. Portanto, o objetivo final é produzir um software de alta qualidade que atenda às necessidades dos usuários finais e seja confiável, eficiente e fácil de manter. Quando se trata de qualidade de software, a discussão é sobre a capacidade do software de atender aos requisitos funcionais e não funcionais, bem como às expectativas dos usuários finais. Aspectos como desempenho, usabilidade, segurança e confiabilidade estão nesse conjunto. A qualidade de software é fundamental para garantir a satisfação do cliente e a competitividade da empresa no mercado. Para alcançar a qualidade de software, é importante seguir boas práticas ao longo do processo de desenvolvimento. Isso inclui começar com uma compreensão clara dos requisitos do sistema, estabelecendo um plano de projeto detalhado e adotando metodologias ágeis que promovam a colaboração e a entrega contínua de software. Além disso, é essencial realizar testes abrangentes em todas as fases do desenvolvimento, realizar revisões de código regulares e automatizar processos sempre que possível para aumentar a eficiência e reduzir erros humanos. No cenário atual, várias tendências estão moldando a forma como abordamos a qualidade de software. O movimento DevOps, por exemplo, está promovendo uma integração mais estreita entre equipes de desenvolvimento e operações, facilitando a entrega rápida e contínua de software. Além disso, a inteligência artificial e o aprendizado de máquina estão sendo cada vez mais utilizados para automatizar testes, identificar padrões de uso do software e prever problemas de qualidade antes que eles ocorram. Outra tendência importante é a qualidade centrada no usuário, que coloca um foco maior na experiência do usuário e na satisfação do cliente, o que contempla incorporar o feedback do usuário em todas as fases do desenvolvimento de software e garantir que o software seja intuitivo e fácil de usar. 140 Unidade III Já a segurança tem se tornado uma preocupação cada vez maior no desenvolvimento de software, com um cerne crescente na identificação e mitigação de vulnerabilidades desde o início do processo de desenvolvimento. Práticas como análise de segurança estática e dinâmica, bem como testes de penetração para identificar e corrigir vulnerabilidades antes que elas possam ser exploradas por hackers estão entre as ações necessárias. Por fim, a qualidade de software é uma preocupação fundamental na engenharia de software. Seguir boas práticas e estar ciente das tendências emergentes é essencial para garantir que os sistemas de software atendam às necessidades dos usuários finais e mantenham a competitividade no mercado. 141 QUALIDADE DE SOFTWARE Exercícios Questão 1. (FGV 2024, adaptada) No desenvolvimento de software por metodologias ágeis, têm sido empregadas métricas ágeis para acompanhamento de projetos Scrum. Elas têm sido aplicadas para avaliar se os requisitos de qualidade e as necessidades dos clientes foram atendidos. Quanto ao emprego de métricas ágeis baseadas em Scrum, avalie as afirmativas. I – Permitem o acompanhamento individual e em tempo real de equipe, software e projeto. II – Concentram-se no sucesso do projeto exclusivamente a partir da visão do gestor. III – Medem diretamente a produtividade por meio de linhas de código, mas têm limitações em mensurar esforços da equipe. É correto o que se afirma em: A) I, apenas. B) III, apenas. C) I e II, apenas. D) II e III, apenas. E) I, II e III. Resposta correta: alternativa A. Análise das afirmativas I – Afirmativa correta. Justificativa: as métricas ágeis permitem o acompanhamento do progresso da equipe, do software e do projeto como um todo. II – Afirmativa incorreta. Justificativa: as métricas ágeis não se concentram exclusivamente na visão do gestor. Elas são projetadas para fornecer uma visão abrangente do progresso do projeto para todos os stakeholders. 142 Unidade III III – Afirmativa incorreta. Justificativa: de forma geral, as métricas ágeis não medem a produtividade por meio de linhas de código, pois essa não é uma medida útil da produtividade ou da qualidade do software. Além disso, elas podem, sim, mensurar os esforços da equipe envolvida no projeto do software. Questão 2. (UFSCar 2023, adaptada) DevOps representa uma mudança paradigmática no desenvolvimento de software, enfatizando a colaboração entre as equipes envolvidas no ciclo de vida do software. Sobre DevOps, avalie as afirmativas. I – É o nome da função desempenhada pelo profissional que faz a interface entre as equipes de desenvolvimento e operações. II – Requer a utilização de práticas tradicionais de desenvolvimento de software para garantir a entrega de software funcionando de maneira segura e estável. III – É uma cultura colaborativa entre as equipes de desenvolvimento e de operações para entregar o software funcionando de maneira ágil, segura e estável. É correto o que se afirma em: A) I, apenas. B) III, apenas. C) I e II, apenas. D) II e III, apenas. E) I, II e III. Resposta correta: alternativa B. Análise das afirmativas I – Afirmativa incorreta. Justificativa: DevOps é uma cultura organizacional, não o nome de um cargo ou de uma função. II – Afirmativa incorreta. Justificativa: DevOps não se limita às práticas tradicionais de desenvolvimento de software. Na verdade, na maior parte das vezes, a cultura envolve a adoção de novas práticas e de novas ferramentas, como integração contínua (CI) e entrega contínua (CD). 143 QUALIDADE DE SOFTWARE III – Afirmativa correta. Justificativa:DevOps não é uma função ou um cargo, mas uma cultura. A cultura DevOps enfatiza a colaboração entre as equipes de desenvolvimento (Dev) e de operações (Ops), com um foco especial na melhoria contínua da qualidade do software. 144 REFERÊNCIAS ANDERSON, D. J. Kanban: mudança evolucionária de sucesso para seu negócio de tecnologia. Washington D.C.: Blue Hole Press, 2011. ASSOCIAÇÃO BRASILEIRA DE NORMAS TÉCNICAS (ABNT). NBR ISO/IEC 9126-1: Engenharia de software – Qualidade de produto. Parte 1: modelo de qualidade. Rio de Janeiro, 2013. Disponível em: https://tinyurl.com/2wyyv44c. Acesso em: 10 jun. 2024. ASTELS, D. Test-driven development: a practical guide. New Jersey: Prentice Hall, 2003. BARBOSA, S. D. J.; SILVA, B. S. Interação humano-computador. São Paulo: Pearson, 2011. BARTIÉ, A. Garantia da qualidade de software: adquirindo maturidade organizacional. Rio de Janeiro: Campus, 2002. BASTIANI, J. A. Diagrama de Pareto: o que é e como fazer? Blog da Qualidade, 2012. Disponível em: https://shre.ink/8Hi5. Acesso em: 24 maio 2024. BATISTA, C. F. A. Métricas de segurança de software. 2007. Dissertação (Mestrado em Informática) – Pontifícia Universidade Católica do Rio de Janeiro, Rio de Janeiro, 2007. Disponível em: https://tinyurl.com/3rt6jzbm. Acesso em: 4 jun. 2024. BOEHM, B. W. Characteristics of software quality. TRW series of software technology, v. 1. California: North-Holland Publishing Company, 1978. BOEHM, B. W. Software engineering economics. Michigan: Prentice Hall, 1981. COHN, M. Agile estimating and planning. London: Pearson, 2005. CROSBY, P. B. Quality is free: the art of making quality certain – so that it becomes a source of profit for your business. New York: McGraw Hill, 1979. DEMING, W. E. Out of the crisis. São Paulo: Marques Saraiva, 1990. DEMING, W. E. Saia da crise. Massachusetts: MIT Press, 1986. DEVMEDIA. Técnicas e fundamentos de testes de software. 2008. Disponível em: https://tinyurl.com/t6wd3u5t. Acesso em: 31 maio 2024. DIAS, R. Métricas para avaliação de sistemas de informação. Revista Eletrônica de Sistemas de Informação, v. 1, n. 1, 2002. Disponível em: https://tinyurl.com/3wrz246v. Acesso em: 4 jun. 2024. 145 ELASTIC. Kibana: Descubra, itere e resolva com ES|QL no Kibana. [s.d.]. Disponível em: https://tinyurl.com/hcn7m3ff. Acesso em: 1º jul. 2024. ENGHOLM JUNIOR, H. Engenharia de software na prática. São Paulo: Novatec, 2010. FEIGENBAUM, A. V. Total quality control. 3rd. ed. New York: McGraw-Hill, 1983. FERREIRA, B. N.; ARAKAKI, J. Métricas de manutenibilidade apoiando a refatoração. Academia Edu, São Paulo, [s.d.]. Disponível em: https://tinyurl.com/2ejypmmk. Acesso em: 4 jun. 2024. FORMIGHIERI, G. Diagrama de Ishikawa: o que é e como desenvolver. Konquest Keeps, 2021. Disponível em: https://tinyurl.com/2m63uh7x. Acesso em: 3 jun. 2024. FORSGREN, N.; HUMBLE, J.; KIM, G. Accelerate: the science of lean software and DevOps – building and scaling high performing technology organizations. Portland: It Revolution Press, 2018. FOWLER, M. Refatoração: aperfeiçoando o design de códigos existentes. São Paulo: Novatec, 2020. GRAFANA. Grafana tutorials. [s.d.]. Disponível em: https://tinyurl.com/659ncmrr. Acesso em: 1º jul. 2024. GUIMARÃES, W. Métricas em testes de usabilidade, como usá-las para melhorar o seu produto. UX Collective BR, 2019. Disponível em: https://tinyurl.com/5n6ab3xj. Acesso em: 4 jun. 2024. HIRAMA, K. Engenharia de software: qualidade e produtividade com tecnologia. Barueri: LTC, 2011. HUMBLE, J.; FARLEY, D. Continuous delivery: reliable software releases through build, test, and deployment automation. Boston: Addison-Wesley, 2010. INTERNATIONAL ORGANIZATION ASSOCIATION (ISO). ISO/IEC 25010:2011. Systems and software engineering – Systems and software Quality Requirements and Evaluation (SQuaRE) – System and software quality models. Geneva, 2011. KAN, S. H. Metrics and models in software quality engineering. London: Addison-Wesley, 2002. KOSCIANSKI, A.; SOARES, M. S. Qualidade de software. 2. ed. São Paulo: Novatec, 2007. LEÃO, T. Diagrama de Ishikawa: o que é, como funciona e como fazer. Nomus Meu Blog Industrial, 2024. Disponível em: https://tinyurl.com/yx7uh4pd. Acesso em: 1º jul. 2024. MATHER, T.; KUMARASWAMY, S.; LATIF, S. Cloud security and privacy: an enterprise perspective on risks and compliance. Massachusetts: O’Reilly, 2009. 146 MEREO. Técnica dos 5 porquês: o que é e sua importância. 28 maio 2021. Disponível em: https://tinyurl.com/2svw4pk4. Acesso em: 7 jun. 2024. MOLINARI, L. Testes de software: produzindo sistemas melhores e mais confiáveis. São Paulo: Érica, 2008. MURPHY, N. R. et al. Site reliability engineering: how google runs production systems. Massachusetts: O’Reilly, 2016. NEWMAN, S. Building microservices: designing fine-grained systems. Massachusetts: O’Reilly, 2015. NIELSEN, J. Usability engineering. Massachusetts: Morgan Kaufmann, 1993. NOGUEIRA, E. Introdução do quadrante de teste ágil. Blog Adaptworks Emphasys Group, 2013. Disponível em: https://tinyurl.com/bdf2sd5w. Acesso em: 28 maio 2024. NOGUEIRA, M. Engenharia de software: um framework para a gestão de riscos em projetos de software. Rio de Janeiro: Ciência Moderna, 2009. NORMAN, D. A. The design of everyday things. New York: Basic Books, 2013. NUNES, A. As principais métricas para avaliar a usabilidade de uma interface. UX Collective BR, 2020. Disponível em: https://tinyurl.com/3p325ty4. Acesso em: 4 jun. 2024. OPENTEXT. OpenText LoadRunner Professional. [s.d.]. Disponível em: https://tinyurl.com/mr44b4nt. Acesso em: 5 jun. 2024. PAULA FILHO, W. de P. Engenharia de software: fundamentos, métodos e padrões. Rio de Janeiro: LTC, 2008. PFLEEGER, S. L.; ATLEE, J. M. Software engineering: theory and practice. London: Pearson, 2006. PRESSMAN, R. S.; MAXIM, B. R. Engenharia de software: uma abordagem profissional. 7. ed. Porto Alegre: AMGH, 2011. PROJECT MANAGEMENT INSTITUTE. Um guia do conhecimento em gerenciamento de projetos (Guia PMBOK®). 5. ed. Newtown Township: Project Management Institute, 2013. QUALIDADE. In: DICIONÁRIO Houaiss de Língua Portuguesa. Rio de Janeiro: Objetiva, 2009. RAMOS, D. Causa raiz das não conformidades: boas práticas para análise e identificação. Blog da Qualidade, 2019. Disponível em: https://tinyurl.com/zjsky55j. Acesso em: 1º jul. 2024. SEBRAE. Kanban: a metodologia ágil mais simples e mais utilizada atualmente. [s.d.]. Disponível em: https://tinyurl.com/5bk3uu9t. Acesso em: 6 jun. 2024. 147 SEBRAE. Seis sigma é ferramenta de melhoria contínua para as empresas. 18 abr. 2023. Disponível em: https://tinyurl.com/mkzn8dbp. Acesso em: 28 maio 2024. SERVIÇO FEDERAL DE PROCESSAMENTO DE DADOS (SERPRO). Roteiro Serpro de contagem de pontos de função e estimativas. 2014. Disponível em: https://tinyurl.com/yc4pm7xe. Acesso em: 28 maio 2024. SILVA, M. C. da. CMMI para iniciantes. [s.d.]. Disponível em: https://tinyurl.com/7jyu38jf. Acesso em: 1º jul. 2024. SINGH, M. What you need to know about CI/CD? Medium, 2019. Disponível em: https://tinyurl.com/324v7frw. Acesso em: 7 jun. 2024. SOFTWARE ENGINEERING INSTITUTE. CMMI for development, version 1.3: improving processes for developing better products and services. Pittsburgh: Carnegie Mellon University, 2010. Disponível em: https://tinyurl.com/4zt7u6em. Acesso em: 1º jul. 2024. SOMMERVILLE, I. Engenharia de software. São Paulo: Pearson, 2011. SOUZA, T. B. A. Um modelo para avaliação da manutenibilidade de código-fonte orientado a objeto. 2005. TCC (Trabalho de graduação em Engenharia de Software) – Universidade Federal de Pernambuco, Recife, 2005. Disponível em: https://tinyurl.com/26zj4fhv. Acesso em: 4 jun. 2024. STUTTARD, D.; PINTO, M. The web application hacker’s handbook: finding and exploiting security flaws. New Jersey: Wiley, 2011. SUTHERLAND, J. Scrum: a arte de fazer o dobro do trabalho na metade do tempo. Rio de Janeiro: Sextante, 2019. SWICEGOOD, T. Pragmatic version control usinggit. Raleigh: Pragmatic Bookshelf, 2008. TANENBAUM, A. S. Sistemas operacionais modernos. 4. ed. São Paulo: Pearson, 2016. VARGAS, R. Gerenciamento de projetos: estabelecendo diferenciais competitivos. São Paulo: Brasport, 2017. VAZQUEZ, C. E.; SIMÕES, G. S.; ALBERT, R. M. Análise de pontos de função. 12. ed. São Paulo: Érica, 2012. VIRGENS, G. B. D. Extração de métricas de usabilidade a partir de protótipos de fidelidade mista. 2010. Dissertação (Mestrado em Ciência da Computação) – Pontifícia Universidade Católica do Rio Grande do Sul, Porto Alegre, 2010. Disponível em: https://tinyurl.com/mrk4dj7k. Acesso em: 4 jun. 2024. 148 Informações: www.sepi.unip.br ou 0800 010 9000do CMMI exige a identificação de áreas de melhoria contínua antes de uma avaliação minuciosa dos procedimentos atuais da organização. A indústria aeroespacial é um exemplo notável dessa prática, pois empresas como a Boeing adotaram o CMMI para garantir altos padrões de qualidade em seus softwares embarcados. O CMMI, que fornece um framework sólido para o aprimoramento contínuo dos processos de desenvolvimento, é um marco importante na evolução da qualidade do software. A sua adoção por uma organização não é apenas um indicativo de seu compromisso com a qualidade, mas também uma estratégia poderosa para se destacar em um mercado cada vez mais competitivo. A implementação do CMMI começa por uma avaliação minuciosa dos processos atuais. Após essa etapa, são definidos objetivos específicos de melhoria e implementadas as práticas sugeridas pelo modelo. Como o CMMI tem como característica distintiva o foco no aperfeiçoamento contínuo, as organizações seguem com a revisão de seus processos e resultados regularmente, como forma de descobrir novas oportunidades de otimização. O envolvimento ativo da liderança e de todos os membros da equipe no processo é fundamental para o sucesso da implementação do CMMI. A mudança cultural relacionada à implementação desse modelo é muitas vezes tão significativa quanto aquelas relacionadas às alterações técnicas nos processos. A Lockheed Martin e outras grandes empresas demonstraram como a integração efetiva do CMMI pode levar a melhorias significativas na eficiência operacional e na satisfação do cliente, resultando em produtos de software que não apenas atendam, mas superem as expectativas. Além disso, a flexibilidade do CMMI possibilita às organizações de vários tamanhos e setores que adaptem o modelo às suas necessidades únicas. Como resultado, o CMMI está disponível para empresas que desejam melhorar sua capacidade competitiva por meio da excelência em seus processos de desenvolvimento, independente do seu porte. Para concluir, o CMMI é uma ferramenta útil para organizações que desejam alcançar a excelência no desenvolvimento de software, pois tal modelo contribui significativamente para o fortalecimento das capacidades organizacionais, fornecendo um caminho claro para o aprimoramento dos processos. Isso resulta em produtos finais que se destacam pela sua qualidade superior. 108 Unidade III 8.2 Ciclo de melhoria continua O século XX trouxe uma nova visão da qualidade, que deixou de ser apenas uma verificação da conformidade técnica e passou a ser o aprimoramento contínuo e constante de todos os processos envolvidos durante a fabricação do produto. O responsável por essa mudança no conceito de qualidade foi o professor William Edwards Deming. Deming (1990) ao afirmar que era função do produto atender às necessidades do cliente, gerando assim satisfação ao usuário, criou o ciclo de Deming para a qualidade que, hoje, não é utilizado apenas na qualidade de produtos e serviços. Trata-se de um método iterativo para melhoria contínua da qualidade de operações, bens e serviços. O ciclo PDCA consiste em planejar, executar, verificar e agir e todas essas ações formam uma sequência cíclica, que, a cada iteração do ciclo PDCA, leva a avanços incrementais na qualidade do software e nos processos de desenvolvimento, contribuindo para a entrega de produtos de alta qualidade e a satisfação dos clientes. Objetivo: tomar ações corretivas e/ou preventivas com base na etapa de verificação Objetivo: avaliar os resultados da implementação para comparar com as metas estabelecidas Objetivo: estabelecer metas e identificar maneiras de alcançá-las Objetivo: implementar o plano elaborado na fase de planejamento A P C D Figura 21 – Ciclo PDCA Adaptada de: Deming (1986). O ciclo PDCA é um processo contínuo; após a etapa Agir, retorna-se à fase Planejar para iniciar uma nova iteração do ciclo. Cada ciclo novo propicia a aprendizagem contínua, ajustando e aprimorando os processos no decorrer do tempo. Como o ciclo PDCA permeou todos os processos das empresas, não demorou muito até estar atrelado ao desenvolvimento de software. O desenvolvimento de software como campo específico emergiu posteriormente ao ciclo elaborado por Deming, assim, a aplicação do PDCA ao desenvolvimento de software foi uma extensão natural do seu uso em processos em geral. À medida em que as práticas de gestão de qualidade foram incorporadas à engenharia de software, aconteceu a transição do PDCA para o desenvolvimento de software. 109 QUALIDADE DE SOFTWARE Observação Para o leitor, pode dar a impressão que o desenvolvimento de software já nasceu com as práticas do PDCA embarcadas no ciclo de vida de desenvolvimento. Porém, não foi o que aconteceu! Não houve um “momento específico” em que o PDCA foi introduzido no desenvolvimento de software, mas sim uma evolução gradual e contínua à medida que as práticas de gestão de qualidade foram integradas ao campo da engenharia de software. A aplicação do PDCA no desenvolvimento de software promove a melhoria contínua, bem como a eficiência e a eficácia nos processos de criação de software. Veja como o ciclo PDCA se aplica ao desenvolvimento de software: • Planejar (Plan): — Objetivo: estabelecer metas e definir as atividades necessárias para atingi-las. — No desenvolvimento de software: - definição dos requisitos do projeto; - estabelecimento de metas de qualidade e prazos; - planejamento das atividades de desenvolvimento e teste. • Executar (Do): — Objetivo: implementar o plano elaborado na fase de planejamento. — No desenvolvimento de software: - codificação do software; - execução de testes unitários e de integração; - implementação de funcionalidades de acordo com o plano. 110 Unidade III • Verificar (Check): — Objetivo: avaliar os resultados da implementação para comparar com as metas estabelecidas. — No desenvolvimento de software: - realização de testes de sistema e aceitação; - verificação da conformidade com os requisitos; - análise de métricas de qualidade e desempenho. • Agir (Act): — Objetivo: tomar ações corretivas e/ou preventivas com base na avaliação realizada na etapa de verificação. — No desenvolvimento de software: - correção de bugs identificados nos testes; - melhoria contínua de processos com base nos resultados; - atualização do plano de desenvolvimento conforme necessário. A aplicação do ciclo PDCA no desenvolvimento de software ajuda as equipes a gerenciar de modo eficiente os projetos, melhorar a qualidade do software e responder de maneira ágil às mudanças nos requisitos ou nas condições do projeto. Essa abordagem iterativa contribui para a entrega bem-sucedida de produtos de software que atendam às necessidades do cliente. O ciclo PDCA, ou ciclo de Deming, é outra ferramenta essencial no arsenal das boas práticas em qualidade de software. Ele promove a melhoria contínua através do planejamento das atividades, da execução das tarefas planejadas, da verificação dos resultados obtidos e da atuação corretiva sobre os desvios encontrados. Empresas como a Toyota são famosas por aplicarem tal princípio não somente na fabricação de automóveis, mas também no desenvolvimento dos softwares que integram seus veículos. O ciclo de melhoria contínua, um conceito fundamental na engenharia de software, é essencial para manter e elevar a qualidade dos serviços oferecidos. Esse processo iterativo envolve várias etapas críticas, começando pela identificação e análise das necessidades atuais e futuras dos usuários, seguindo para o desenvolvimento e implementação de soluções inovadoras que atendam ou superem essas expectativas. Uma das primeiras etapas no ciclo de melhoria contínua é o estabelecimento de métricas claras e objetivas, as quais possibilitam às organizações avaliar efetivamente o desempenho atual de seus serviços e identificar áreas que exigem atenção imediata. Por exemplo, uma métrica comum em ambientes de 111 QUALIDADEDE SOFTWARE software como serviço (SaaS) é o tempo médio de resposta do sistema. Uma deterioração nessa métrica pode indicar a necessidade de otimizações no código ou na infraestrutura subjacente. Após a definição das métricas, segue-se a fase de coleta e análise de dados. Ferramentas avançadas de monitoramento e análise são empregadas para capturar informações detalhadas sobre o comportamento do sistema em diferentes condições operacionais. Essa análise profunda ajuda a revelar padrões ocultos, dependências inesperadas entre componentes do sistema ou gargalos de desempenho que não seriam evidentes sem uma investigação minuciosa. A fase subsequente abrange a implementação das melhorias identificadas durante a análise, as quais podem variar desde ajustes finos em configurações até a revisões arquiteturais significativas do sistema. É importante ressaltar que cada mudança deve ser seguida por uma rigorosa etapa de testes para garantir que os aprimoramentos alcancem os resultados esperados sem introduzir novos problemas. Para encerrar o ciclo, realiza-se a revisão dos resultados obtidos após a implementação das melhorias. Nesse momento, avalia-se se os objetivos inicialmente propostos foram alcançados e se há a necessidade de novas iterações do ciclo para refinamentos adicionais. A utilização eficaz desse ciclo garante não apenas a satisfação contínua dos usuários, mas também mantém as organizações competitivas em um mercado dinâmico. Resumidamente, o ciclo de melhoria contínua representa uma abordagem sistemática e estruturada para otimizar continuamente os processos e produtos da engenharia de software orientada a serviços. Ao adotar essa prática, as organizações asseguram um alto nível de qualidade nos serviços prestados aos seus clientes, adaptando-se eficientemente às mudanças nas demandas do mercado e às evoluções tecnológicas. Saiba mais Para aprofundar seu entendimento sobre o ciclo de melhoria contínua e suas aplicações na engenharia de software, segue uma sugestão de leitura: VARGAS, R. Gerenciamento de projetos: estabelecendo diferenciais competitivos. São Paulo: Brasport, 2017. 8.3 Cultura de qualidade na organização A construção e a manutenção da cultura da qualidade dentro das organizações transcendem as metodologias e ferramentas específicas, focando então nas pessoas que são os verdadeiros agentes da qualidade. Iniciativas como treinamentos regulares, workshops sobre melhores práticas e reconhecimento dos colaboradores que contribuem significativamente para o avanço da qualidade são fundamentais. Empresas como o Google têm liderado pelo exemplo, criando ambientes onde a inovação é incentivada, mas sem perder o foco na excelência do produto final. 112 Unidade III Philip Crosby (1979), um renomado especialista em qualidade, afirmava considerar a qualidade como sendo a conformidade com os requisitos, ou seja, ela enfatiza a importância de estabelecer requisitos claros e garantir que todos na empresa estejam comprometidos a atendê-los, como forma de garantir a qualidade do produto de software que está sendo adquirido. Um aspecto essencial da cultura de qualidade na organização é a liderança comprometida com a qualidade. Isso destaca a importância de os líderes da organização demonstrarem um compromisso claro com a qualidade e fornecerem o suporte necessário para garantir que os objetivos de qualidade sejam alcançados em toda a organização. As boas práticas e tendências em qualidade de software refletem um compromisso com a excelência operacional e com a satisfação do cliente final. A adoção dessas práticas possibilita às organizações que otimizem seus processos internos e fortaleçam sua posição competitiva no mercado. 8.4 Gerenciamento de configuração de software O gerenciamento de configurações no desenvolvimento de software é como um sistema de organização meticuloso e detalhado que garante que todas as peças do quebra-cabeça do projeto se encaixem corretamente. Imagine uma sala de arquivos bem organizada, onde cada documento, pasta e etiqueta têm um lugar designado e é cuidadosamente catalogado. Nesse contexto, as configurações referem-se a todas as partes do projeto: o código-fonte, a documentação, os artefatos de desenvolvimento, os recursos de infraestrutura e até mesmo os ambientes de teste e produção. O objetivo do gerenciamento de configurações é garantir que todas essas partes sejam gerenciadas e controladas de maneira eficaz ao longo do ciclo de vida do desenvolvimento. Para começar, é necessário definir cada elemento do projeto, atribuindo a ele um identificador único. É como rotular cada caixa em um armazém, para que você possa encontrar exatamente o que necessita quando precisar. Isso facilita a rastreabilidade e o controle das mudanças no decorrer do tempo. Em seguida, entra o controle de versão, que é como uma linha do tempo detalhada do projeto. Cada alteração feita em qualquer parte do projeto é registrada e documentada, facilitando que você acompanhe quem fez quais alterações, quando e por quê. Isso é essencial para garantir a integridade e a consistência do sistema. O gerenciamento de mudanças é como um sistema de autorização para qualquer alteração no projeto. Antes que uma modificação possa ser implementada, ela passa por um processo de revisão e aprovação para garantir que seja avaliada quanto ao seu impacto no sistema. Dessa forma, é possível evitar mudanças não planejadas e manter a estabilidade do projeto. Assim, baselines e releases são como marcos no projeto. Quando uma parte do projeto atinge um estado estável e pronto para ser lançado, é criada uma baseline que serve como referência para essa versão específica do sistema. Da mesma forma, quando uma versão do software está pronta para ser entregue aos usuários, ela é liberada a partir de uma baseline específica, gerando, assim, uma release do 113 QUALIDADE DE SOFTWARE produto. Logo a baseline é uma versão do código que pode ou não ter a liberação para o usuário; já a release tem de ser uma versão de liberação para o usuário baseado em uma baseline. Finalmente, a auditoria e o relatório são como uma verificação de qualidade contínua do projeto. Isso envolve a realização de auditorias regulares para garantir que os processos de gerenciamento de configurações estejam sendo seguidos corretamente, bem como a geração de relatórios para fornecer visibilidade sobre o estado e histórico do projeto. O gerenciamento de configurações é como um guardião diligente que protege a integridade e a qualidade do projeto, garantindo que todas as partes estejam organizadas, controladas e gerenciadas de maneira eficaz durante o ciclo de vida do desenvolvimento de software. 8.4.1 Conceitos básicos de gerenciamento de configuração O gerenciamento de configuração de software é uma disciplina da engenharia de software que se preocupa com a identificação, a organização e o controle das mudanças durante o ciclo de vida do software. Tal processo assegura que todos os aspectos do software em desenvolvimento sejam monitorados e mantidos sob controle, possibilitando a rastreabilidade e facilitando a gestão da qualidade. Um dos principais objetivos do gerenciamento de configuração é endossar que o ambiente de desenvolvimento seja estável e previsível. Para isso, deve haver a manutenção de registros detalhados sobre as versões do software, incluindo todas as alterações realizadas, além de quem as fez e por quê. Essa prática não apenas ajuda na resolução eficiente de problemas, mas também facilita a colaboração entre equipes ao garantir que todos estejam trabalhando com as mesmas informações. Dessa forma, minimiza-se o risco de introduzir defeitos no produto final e garante-se que todas as alterações estejam alinhadas com os objetivos gerais do projeto. Na prática, o gerenciamento de configuração pode envolver o uso de ferramentas especializadas que automatizam partes do processo, como sistemas de controle de versão (por exemplo, Git) pararastrear alterações no código-fonte, além de sistemas automatizados para construir e testar o software após cada modificação. São ferramentas que aumentam a eficiência e melhoram a precisão dos registros mantidos. O gerenciamento de configuração é fundamental para manter a integridade e estabilidade do processo de desenvolvimento do software. Ao fornecer uma estrutura para controlar mudanças e garantir que elas sejam feitas de maneira ordenada e sistemática, ele desempenha um papel vital na entrega bem-sucedida de produtos de software confiáveis e de alta qualidade. 114 Unidade III Lembrete O gerenciamento de configuração desempenha um papel crucial na gestão da qualidade do software ao estabelecer processos para a revisão e a aprovação das mudanças propostas antes que elas sejam implementadas. 8.4.2 Processo de gerenciamento de configuração O processo de gerenciamento de configuração é uma metodologia estruturada que visa assegurar a integridade e a estabilidade do software durante seu ciclo de vida. Desse modo, ele abrange várias atividades críticas, como a identificação de configurações, o controle de mudanças, o registro e o relatório do estado das configurações, e a auditoria da configuração. A identificação das configurações é o primeiro passo crucial para essa etapa, que envolve definir e documentar as características dos itens de configuração (ICs) dentro do projeto. Os ICs podem variar de documentos de requisitos a componentes específicos do código-fonte. A clara identificação desses itens facilita sua rastreabilidade no desenvolvimento projeto, viabilizando que as equipes compreendam exatamente quais versões estão sendo utilizadas em cada fase. O controle de mudanças é outra área-chave dentro desse processo. Ele se refere à implementação rigorosa de procedimentos para solicitar, avaliar e aprovar alterações nos ICs. Por exemplo, quando um desenvolvedor propõe uma modificação no código-fonte, ela deve ser revisada por um comitê antes da implementação para garantir que não afetará negativamente outras partes do sistema, nem os objetivos gerais do projeto. Nessa etapa, ferramentas como sistemas de controle de versão são essenciais para registrar todas as alterações realizadas. Também o registro e o relatório do estado das configurações são vitais para manter todos os stakeholders informados sobre o status atual dos ICs e quaisquer mudanças que ocorreram. Isso inclui a geração automática de relatórios detalhados sobre o histórico das modificações, quem as fez e por quê. Por fim, a auditoria da configuração é uma prática importante que verifica se os ICs estão de acordo com os requisitos especificados, bem como se todas as mudanças foram adequadamente documentadas e autorizadas. As auditorias são importantes, pois podem ajudar a identificar discrepâncias ou problemas potenciais antes que eles impactem negativamente o projeto. O processo de gerenciamento de configuração desempenha um papel crucial na manutenção da qualidade e integridade do software ao longo do seu desenvolvimento. Ao adotar uma abordagem sistemática para controlar mudanças e garantir a rastreabilidade dos ICs, as organizações evitam erros custosos e asseguram que seus projetos atendam aos padrões exigidos. 115 QUALIDADE DE SOFTWARE 8.4.3 Ferramentas e práticas recomendadas para o gerenciamento de configuração O gerenciamento de configuração de software é uma disciplina que requer atenção meticulosa aos detalhes, processos bem definidos e ferramentas adequadas para ser eficaz. Nesse contexto, a escolha das ferramentas certas e a adoção de práticas recomendadas são fundamentais para garantir a integridade e a estabilidade do software ao longo do seu ciclo de vida. No coração do gerenciamento de configuração estão as ferramentas que viabilizam as equipes controlar, registrar e auditar as mudanças no software. Sistemas de controle de versão como Git, SVN e Mercurial são indispensáveis, pois oferecem um meio robusto para rastrear alterações em código-fonte, documentação e outros itens críticos. Além disso, ferramentas como Jenkins ou Bamboo facilitam a integração contínua (CI) e a entrega contínua (CD), automatizando o processo de build e deploy, o que é crucial para manter a estabilidade do ambiente de produção. Para complementar, plataformas como JIRA ou Trello podem ser utilizadas para gerenciar o fluxo de trabalho das mudanças propostas, desde sua solicitação até a implementação. É possível acompanhar de forma clara os status das mudanças, promovendo a comunicação eficaz entre os membros da equipe. 8.4.4 Práticas recomendadas Além da seleção cuidadosa das ferramentas, adotar práticas recomendadas é vital para um gerenciamento eficaz da configuração. Uma dessas práticas é a implementação rigorosa do controle de mudanças, ou seja, é importante estabelecer um comitê de controle de mudanças (CCB) responsável por revisar todas as propostas de alteração antes da sua implementação. Assim, cada mudança pode ser avaliada quanto ao seu impacto potencial no projeto. A automação dos testes também desempenha um papel crucial na manutenção da qualidade do software. Através da automação dos testes unitários, integrados e funcionais, as equipes podem detectar rapidamente regressões ou defeitos introduzidos por novas alterações. Por fim, é fundamental realizar auditorias regulares da configuração para garantir que os itens estejam de acordo com a elaboração dos documentos do projeto e que todas as mudanças foram adequadamente reportadas e autorizadas. Essa abordagem é útil para identificar discrepâncias que podem resultar em problemas mais graves no futuro. As empresas podem alcançar níveis mais altos de eficiência operacional e produtos finais com mais qualidade com a ajuda de ferramentas sofisticadas, bem como com técnicas recomendadas de gerenciamento de configuração. 116 Unidade III Saiba mais Para aprofundar seus conhecimentos em gerenciamento de configuração de software, segue uma sugestão de leitura: SWICEGOOD, T. Pragmatic version control using git. Raleigh: Pragmatic Bookshelf, 2008. Em relação às ferramentas JIRA e Bamboo, você pode encontrar guias extensivos no site oficial da Atlassian. Também o blog de Martin Fowler apresenta artigos relevantes sobre práticas de integração contínua e entrega contínua. Disponível em: https://www.atlassian.com/br. Acesso em: 5 jun. 2024. Disponível em: https://martinfowler.com/. Acesso em: 5 jun. 2024. 8.5 Garantia da qualidade do software A garantia da qualidade do software é o conjunto de procedimentos e atividades planejados e sistemáticos que uma organização implementa para garantir que os produtos de software atendam aos requisitos de qualidade definidos. Ela é uma parte importante do gerenciamento da qualidade e visa garantir que os produtos de software sejam entregues dentro do orçamento, no prazo e atendendo às expectativas dos clientes. A partir desse conceito em mente, você verá que a garantia da qualidade do software é essencial para garantir que os produtos de software atendam aos requisitos de qualidade estabelecidos e proporcionem valor aos clientes. Ela abarca a definição de padrões de qualidade, processos e procedimentos, bem como a realização de revisões de qualidade e testes para garantir a conformidade com tais padrões. Uma abordagem sistemática e proativa para a garantia da qualidade é fundamental para o sucesso em longo prazo de um projeto de software. 8.5.1 Definição e importância da garantia da qualidade do software A garantia da qualidade do software (GQS) é um conjunto de atividades planejadas e sistemáticas que são aplicadas no processo de desenvolvimento de software para assegurar que os produtos de software atendam aos requisitos especificados. A importância da GQS reside não apenas na entrega de um produto sem defeitos, mas também na prevenção de falhas, na redução dos custos de desenvolvimento e manutenção, e na melhoria contínua dos processos produtivos. Umexemplo prático da importância da GQS pode ser observado no caso de software utilizado em sistemas críticos, como os sistemas de controle aéreo. Uma falha neles pode resultar em consequências catastróficas. Portanto, a garantia da qualidade, nesses contextos, vai além da funcionalidade do software, envolvendo aspectos como confiabilidade, segurança e disponibilidade. 117 QUALIDADE DE SOFTWARE Além disso, a GQS desempenha um papel crucial na satisfação do cliente. Um produto de software com alta qualidade não apenas atende às expectativas do cliente em termos de funcionalidade, mas também oferece uma experiência de usuário superior, o que se traduz em maior fidelidade do cliente e vantagem competitiva no mercado. No contexto atual onde o mercado está cada vez mais competitivo e as tecnologias evoluem rapidamente, a GQS é ainda mais relevante. Empresas que adotam práticas robustas de garantia da qualidade conseguem adaptar-se mais facilmente às mudanças tecnológicas e às exigências dos clientes, mantendo-se à frente dos concorrentes. Para implementar efetivamente a GQS, as organizações devem adotar padrões e normas internacionais como ISO/IEC 25010:2011, que define modelos para avaliar a qualidade do produto de software ou o CMMI, o qual fornece um modelo para melhorar os processos organizacionais. Além disso, é fundamental promover uma cultura organizacional que valorize a qualidade em todos os aspectos do desenvolvimento de software. 8.5.2 Atividades e processos envolvidos na garantia da qualidade do software A GQS é uma disciplina abrangente que engloba uma série de atividades e processos meticulosamente planejados para assegurar a excelência dos produtos de software. Essas atividades são fundamentais para identificar e corrigir falhas, prevenir defeitos, e garantir que o software atenda ou supere as expectativas dos usuários finais em termos de desempenho, confiabilidade e segurança. Uma das principais atividades dentro da GQS é a revisão de código, que abarca a análise detalhada do código-fonte por outros desenvolvedores ou auditores, com o objetivo de identificar erros ou problemas potenciais que possam comprometer a qualidade do produto final. Além do aperfeiçoamento da qualidade do software, a revisão de código promove um ambiente colaborativo entre os membros da equipe, com o compartilhamento de conhecimento e práticas. Outra atividade fundamental é o teste de software, que pode ser dividido em várias categorias: testes unitários, testes de integração, testes de sistema e testes de aceitação pelo usuário. Cada um deles tem como foco diferentes aspectos do software, desde a verificação das menores unidades de código até a avaliação da experiência geral do usuário. Os testes são essenciais para garantir que o software funcione conforme esperado em todas as situações previstas. A implementação eficaz da GQS também depende fortemente da gestão de configuração, um processo destinado a manter o controle sobre as alterações no software durante todo o ciclo de desenvolvimento. Nesse ponto, é importante ter atenção ao versionamento adequado, controle rigoroso sobre as atualizações e modificações no código-fonte, bem como no gerenciamento eficiente dos artefatos produzidos durante o desenvolvimento. A gestão de configuração ajuda a evitar conflitos entre versões e assegura que todos na equipe estejam trabalhando com as mesmas informações. 118 Unidade III Além dessas atividades específicas, uma abordagem holística para GQS envolve a adoção contínua das melhores práticas e padrões internacionais relevantes ao setor. Organizações bem-sucedidas frequentemente se baseiam em frameworks como ISO/IEC 25010:2011 ou CMMI para orientar seus esforços na garantia da qualidade. As normas fornecem diretrizes claras sobre como estruturar processos produtivos para alcançar altos níveis de qualidade no produto final. No entanto, mais importante do que seguir rigidamente procedimentos padronizados, é cultivar uma cultura organizacional que valorize profundamente a qualidade em todas as etapas do desenvolvimento. Empresas líderes no campo tecnológico frequentemente relatam que sua dedicação à excelência começa muito antes da codificação propriamente dita, ela está enraizada nos valores centrais da organização e é refletida nas atitudes diárias dos seus colaboradores. 8.5.3 Métricas e indicadores para avaliar a qualidade do software A avaliação da qualidade do software é um processo complexo que requer o uso de métricas e indicadores específicos, capazes de fornecer uma visão clara sobre a eficácia dos processos de desenvolvimento e a excelência do produto final. Essas métricas são ferramentas essenciais para gestores e equipes técnicas, possibilitando identificar áreas de melhoria, otimizar recursos e garantir a satisfação do usuário. Uma das métricas mais relevantes na indústria de software é o MTBF, que mede a confiabilidade do software calculando o tempo médio entre falhas consecutivas durante um período determinado. Um MTBF alto indica um produto mais estável e confiável, aspecto crucial para softwares críticos como sistemas operacionais ou aplicativos bancários. Outro indicador fundamental é a taxa de defeitos, que quantifica o número de problemas encontrados no software em relação ao seu próprio tamanho (geralmente medido em linhas de código). Essa métrica ajuda as equipes a entenderem a densidade de defeitos, facilitando o planejamento das atividades de teste e correção. Empresas líderes no setor tecnológico, como Google e Microsoft, a utilizam para priorizar esforços na garantia da qualidade. O índice de satisfação do cliente é outra medida vital, refletindo diretamente a percepção dos usuários finais sobre o produto e pode ser obtido por meio de pesquisas ou feedbacks diretos, sendo um termômetro real da qualidade percebida. Produtos com altos índices de satisfação tendem a ter melhor aceitação no mercado e maior fidelidade dos clientes. Além dessas métricas específicas, muitas organizações adotam frameworks como o CMMI ou normas como a ISO/IEC 25010:2011, que oferecem conjuntos completos de indicadores alinhados às melhores práticas internacionais. A implementação desses padrões propicia a medição e o aperfeiçoamento contínuo dos processos internos e da qualidade final dos produtos. No contexto atual, onde softwares desempenham papéis cada vez mais críticos em diversas esferas da vida cotidiana, adotar uma abordagem sistemática para medição da qualidade tornou-se indispensável. Assim, as empresas que dominam o uso dessas métricas conseguem entregar produtos superiores e se destacar em um mercado altamente competitivo. 119 QUALIDADE DE SOFTWARE Saiba mais Para aprofundar seus conhecimentos sobre métricas e indicadores de qualidade de software, seguem algumas sugestões de leitura: HIRAMA, K. Engenharia de software: qualidade e produtividade com tecnologia. Barueri: LTC, 2011. 8.5.4 Testes de desempenho e carga Os testes de desempenho e carga são fundamentais para garantir que um sistema ou aplicação possa suportar o volume de trabalho esperado sem comprometer a experiência do usuário. Eles simulam cenários reais de uso, possibilitando identificar gargalos e limitações do sistema antes que se tornem problemas críticos em um ambiente de produção. A importância desses testes reside na capacidade de prever o comportamento do software sob condições extremas, como um grande número de acessos simultâneos ou processamento intensivo de dados. Isso é crucial não apenas para sistemas web voltados ao consumidor final, mas também para aplicações empresariais nas quais a eficiência e a estabilidade são essenciais para as operações diárias. Um exemplo prático da importância desses testes pode ser observado em eventos de venda online, como a Black Friday. Sites que não foram adequadamente testados podem sofrer quedas ou apresentar desempenho insatisfatório sob alta demanda, resultando em perda direta de receita e danos àreputação da marca. Por outro lado, uma plataforma bem preparada pode lidar com picos de acesso sem comprometer a velocidade ou funcionalidade, proporcionando uma experiência positiva ao usuário. Além disso, os testes de desempenho e carga fornecem insights valiosos sobre a escalabilidade do sistema. Eles ajudam a determinar se será necessário aumentar recursos como memória, CPU ou largura de banda à medida que o número de usuários cresce. A posse dessa informação é determinante para o planejamento estratégico e orçamentário. Os testes de desempenho e carga são essenciais para qualquer projeto digital que aspire à excelência operacional e satisfação do cliente, pois propiciam às organizações antecipar problemas potenciais, otimizar recursos e garantir uma experiência superior ao usuário final. 8.5.5 Planejamento e estratégias para os testes de desempenho e carga O planejamento cuidadoso e a definição de estratégias adequadas são etapas cruciais para a realização eficaz dos testes de desempenho e carga. É na fase inicial que se define o escopo do teste, os objetivos específicos, as métricas de sucesso, além da seleção das ferramentas e tecnologias a serem utilizadas. Um planejamento bem elaborado garante que os testes estejam alinhados com as necessidades reais do negócio, de forma abrangente. 120 Unidade III Uma estratégia eficiente começa com a compreensão profunda do sistema ou da aplicação a ser testada. Assim, é necessário conhecer a arquitetura, as dependências externas, os fluxos críticos de trabalho e os possíveis pontos de falha. A partir dessa compreensão, é possível criar cenários de teste realistas que simulam o comportamento esperado dos usuários finais sob diversas condições de carga. A definição clara dos objetivos dos testes é outro aspecto fundamental, pois eles podem verificar desde a capacidade máxima suportada pelo sistema até identificar o tempo médio de resposta sob diferentes níveis de carga. Objetivos bem definidos ajudam na criação de benchmarks claros contra os quais o desempenho real pode ser medido. Na mesma linha, selecionar as ferramentas certas é igualmente importante. Com várias opções disponíveis no mercado, a escolha deve considerar não apenas as capacidades técnicas da ferramenta, mas também sua compatibilidade com o ambiente tecnológico existente e a facilidade de integração com outras ferramentas já em uso pela equipe. Uma estratégia robusta deve incluir planos para análise detalhada dos resultados dos testes. Isso envolve identificar gargalos ou problemas de desempenho, bem como entender suas causas raízes para que possam ser corrigidas de forma eficiente. Além disso, essa análise contribui para um ciclo contínuo de melhoria, no qual insights obtidos podem informar futuros ciclos de desenvolvimento e teste. Por fim, um planejamento meticuloso, combinado a estratégias bem definidas, é essencial para garantir que os testes de desempenho e carga sejam conduzidos de maneira eficiente e eficaz. Essa combinação contribui para otimizar recursos e melhorar continuamente a qualidade do software entregue. 8.5.6 Ferramentas e técnicas para realizar os testes de desempenho e carga Os testes de desempenho e carga são essenciais para garantir que aplicações web e sistemas operacionais possam suportar o volume de acessos esperado, mantendo a qualidade e a estabilidade. A escolha das ferramentas certas, combinada a técnicas eficazes, é crucial para o sucesso desses testes. Diversas ferramentas se destacam no mercado quando o assunto é teste de desempenho e carga. JMeter, uma ferramenta open-source da Apache, é amplamente utilizada por sua capacidade de simular cargas pesadas em diferentes aplicações para analisar o desempenho geral. Outra opção robusta é o LoadRunner da Micro Focus, conhecido pela precisão nas simulações de ambientes virtuais complexos. Para equipes que preferem uma solução baseada em nuvem, o BlazeMeter oferece compatibilidade com JMeter, além de recursos avançados como testes de API e de integração contínua. A eficácia dos testes não depende apenas das ferramentas escolhidas, mas também das técnicas aplicadas durante o processo. Uma abordagem valiosa é a modelagem de usuários virtuais que imitam comportamentos reais dos usuários finais, possibilitando uma análise mais precisa do desempenho sob condições variáveis. Além disso, a implementação de testes em etapas progressivas, com aumento gradual da carga até alcançar ou ultrapassar os limites esperados do sistema, ajuda na identificação precisa de gargalos. 121 QUALIDADE DE SOFTWARE A fase posterior à execução dos testes é crítica, trata-se do momento de uma análise detalhada dos resultados coletados, em que se busca entender as causas raízes dos gargalos identificados – seja na codificação ineficiente, ou em problemas na infraestrutura, ou na configuração inadequada do ambiente. Assim, ferramentas como Grafana ou Kibana podem ser integradas para visualizar dados em tempo real, facilitando a identificação rápida de problemas. Um conjunto bem selecionado de ferramentas aliado a técnicas refinadas pode elevar significativamente a qualidade dos testes de desempenho e carga. A chave está em adaptar esses recursos às necessidades específicas do projeto, garantindo assim resultados confiáveis que contribuam para otimizações significativas no desempenho das aplicações. Saiba mais Para aprofundar seus conhecimentos a respeito de testes de desempenho e carga, seguem alguns links para você explorar tais recursos: JMeter. Disponível em: https://jmeter.apache.org/. Acesso em: 5 jun. 2024. OPENTEXT. OpenText LoadRunner Professional. [s.d.]. Disponível em: https://tinyurl.com/mr44b4nt. Acesso em: 5 jun. 2024. Blog BlazeMeter. Disponível em: https://www.blazemeter.com/. Acesso em: 5 jun. 2024. Além disso, tutoriais sobre Grafana e Kibana podem ser úteis para aprender sobre análise dedados. Essas fontes são essenciais para quem busca excelência na área de testes de desempenho. GRAFANA. Grafana tutorials. [s.d.]. Disponível em: https://tinyurl.com/659ncmrr. Aceso em: 1º jul. 2024. ELASTIC. Kibana: descubra, itere e resolva com ES|QL no Kibana. [s.d.]. Disponível em: https://tinyurl.com/hcn7m3ff. Acesso em: 1º jul. 2024. 122 Unidade III 8.6 Testes de segurança do software Os testes de segurança do software são uma parte fundamental da garantia da qualidade e têm como objetivo identificar vulnerabilidades, ameaças e riscos que podem comprometer a segurança. Esses testes são essenciais para prevenir ataques maliciosos, proteger dados sensíveis e assegurar a confiabilidade e integridade das aplicações. A abordagem dos testes de segurança envolve uma série de práticas específicas, como análise estática e dinâmica do código, testes de penetração, revisões de código e modelagem de ameaças. A análise estática, também conhecida como SAST (Static Application Security Testing), possibilita aos desenvolvedores identificar vulnerabilidades no código-fonte antes mesmo da execução do programa. Por outro lado, a análise dinâmica ou DAST (Dynamic Application Security Testing) avalia o comportamento do aplicativo durante sua execução, identificando falhas em tempo real. Os testes de penetração simulam ataques externos ao sistema para descobrir pontos fracos exploráveis por hackers. Um exemplo notável da importância dos testes de segurança é o caso do Heartbleed Bug em 2014. Este bug afetou milhões de websites que utilizavam a versão vulnerável da biblioteca OpenSSL. O Heartbleed permitia aos atacantes ler informações protegidas pela criptografia SSL/TLS, expondo dados sensíveis dos usuários. Tal incidente destaca a necessidade crítica de realizar testes de segurança abrangentes para identificar e corrigir vulnerabilidades antes que elas sejam exploradas. Além disso, os testes não se limitam apenas à fase de desenvolvimento, eles devem ser contínuos para se adaptar às novas ameaças emergentes. A implementação eficaz dos testes de segurançarequer uma combinação equilibrada entre ferramentas automatizadas e expertise humana especializada para interpretar os resultados dos testes e tomar as medidas corretivas necessárias. Os conceitos básicos sobre os testes de segurança do software englobam um conjunto diversificado de técnicas projetadas para fortalecer as aplicações contra invasões mal-intencionadas. Ao integrar essas práticas no processo de desenvolvimento, as organizações podem melhorar significativamente a postura geral de segurança dos seus sistemas digitais. 8.6.1 Tipos de testes de segurança do software Teste de penetração O teste de penetração, ou pen test (do inglês), é uma abordagem proativa e ofensiva para identificar as vulnerabilidades de um sistema. Esse tipo de teste simula ataques cibernéticos contra o software para descobrir pontos fracos que possíveis invasores poderiam explorar. Diferentemente das análises estáticas e dinâmicas, que se concentram no código-fonte e na execução do programa, respectivamente, o teste de penetração avalia a aplicação em um ambiente que imita condições reais de ataque. Um exemplo notável da eficácia do teste de penetração foi a descoberta da vulnerabilidade no protocolo WPA2 em 2017. 123 QUALIDADE DE SOFTWARE Pesquisadores realizaram um ataque bem-sucedido chamado KRACK (Key Reinstallation Attacks), expondo uma falha crítica na forma como dispositivos se comunicam em redes Wi-Fi protegidas pelo WPA2. Esse caso destaca a importância dos testes de penetração para antecipar e mitigar riscos antes que eles sejam explorados maliciosamente. A metodologia do teste de penetração pode ser dividida em várias fases, incluindo reconhecimento, varredura, ganho de acesso, manutenção do acesso e análise dos resultados. Cada fase é crucial para entender profundamente como um atacante penetra no sistema e quais medidas são tomadas para fortalecer a segurança. Teste de vulnerabilidade O teste de vulnerabilidade foca na identificação sistemática das vulnerabilidades presentes no software sem necessariamente explorá-las. Utilizando ferramentas automatizadas e manuais, os testadores examinam o sistema em busca de falhas conhecidas que possam comprometer a segurança. Ao contrário do teste de penetração, o objetivo aqui não é simular um ataque realista, mas garantir que todas as vulnerabilidades potenciais sejam identificadas e catalogadas. Um aspecto fundamental desse tipo de teste é sua capacidade de ser integrado ao ciclo contínuo de desenvolvimento do software (CI/CD), propiciando uma detecção precoce e a correção das falhas antes da implantação final do produto. Empresas como a Microsoft têm adotado práticas semelhantes com seu modelo Shift Left, movendo os testes para as fases iniciais do desenvolvimento a fim de melhorar a qualidade e segurança dos seus produtos. A eficiência dos testes de vulnerabilidade depende significativamente da atualização constante das ferramentas utilizadas, pois novas vulnerabilidades são descobertas diariamente. A integração desses testes com bancos de dados atualizados com ameaças conhecidas possibilita uma cobertura mais ampla contra possíveis ataques. A segurança do software não é responsabilidade exclusiva da equipe de segurança, ela deve ser uma preocupação compartilhada por todos os stakeholders envolvidos no desenvolvimento e na operação. Isso inclui desenvolvedores, gerentes de projeto, equipes de QA (Quality Assurance), usuários finais e até mesmo fornecedores terceirizados. Promover uma cultura organizacional que valorize a segurança como um componente integral da qualidade do software pode ajudar a garantir que todos estejam alinhados com as melhores práticas e comprometidos com a manutenção da segurança. A realização esporádica dos testes de segurança não é suficiente para garantir a proteção contínua contra ameaças emergentes. Assim, eles devem ser realizados regularmente, seguindo um cronograma definido, ou sempre que houver mudanças significativas no código ou na infraestrutura subjacente ao software. Essa prática ajuda a identificar rapidamente novas vulnerabilidades introduzidas por atualizações ou modificações no sistema, possibilitando correções ágeis antes que essas falhas possam ser exploradas maliciosamente. 124 Unidade III Saiba mais Para aprofundar seus conhecimentos sobre as melhores práticas em testes de segurança do software, segue uma sugestão de leitura: STUTTARD, D.; PINTO, M. The web application hacker’s handbook: finding and exploiting security flaws. New Jersey: Wiley, 2011. 8.7 Manutenção e evolução do software 8.7.1 Ciclo de vida da manutenção e evolução do software A manutenção e a evolução do software são etapas cruciais no ciclo de vida de qualquer sistema, garantindo que ele permaneça funcional, relevante e eficiente ao longo do tempo. Essas atividades começam após o lançamento inicial do software e continuam durante todo o período de sua utilização. A compreensão profunda desses processos é fundamental para assegurar a qualidade e a satisfação do usuário final. O ciclo de vida da manutenção e evolução do software pode ser dividido em várias fases, incluindo a identificação de necessidades de mudança, a implementação dessas alterações, os testes para garantir que as modificações não geraram novos defeitos, e o lançamento das versões atualizadas para os usuários. Como é possível perceber, o ciclo é iterativo, então cada rodada de manutenção proporciona uma oportunidade para melhorar o software. Entretanto, a gestão eficaz das solicitações de mudança exige muita atenção. Assim, deve-se avaliar o impacto potencial das modificações propostas e priorizá-las de acordo com critérios já definidos, como urgência e importância, e planejar sua implementação de maneira que minimize a interrupção dos serviços existentes. Ferramentas modernas de rastreamento de problemas e sistemas de controle de versão desempenham um papel vital nesse aspecto, possibilitando uma gestão eficiente das mudanças. Além disso, a evolução do software frequentemente exige uma reavaliação dos requisitos originais a partir das novas condições ou tecnologias emergentes. Isso leva à refatoração ou à reestruturação significativa do código existente para aperfeiçoar a performance ou facilitar a adição de novas funcionalidades. Exemplos notáveis incluem a transição para arquiteturas baseadas em microsserviços ou a adoção de práticas DevOps para acelerar os ciclos de lançamento. Por fim, é essencial reconhecer que manutenção e evolução eficazes exigem um compromisso contínuo com as melhores práticas em engenharia de software e gerenciamento da qualidade, com técnicas avançadas de programação e teste, bem como uma cultura organizacional que valoriza feedback constante, aprendizado contínuo e melhoria incremental. 125 QUALIDADE DE SOFTWARE 8.7.2 Manutenção corretiva A manutenção corretiva é essencialmente reativa, focada na correção de defeitos identificados no software após sua implantação. Esse tipo de manutenção é crucial para a estabilidade e a confiabilidade do sistema, pois possibilita que falhas inesperadas sejam prontamente resolvidas. Assim, uma abordagem eficaz para a manutenção corretiva abarca várias etapas, a começar pela coleta e análise detalhada dos relatórios de erro fornecidos pelos usuários ou sistemas de monitoramento automatizados. O uso de sistemas de rastreamento debugs é uma técnica comum empregada nessa área, pois viabiliza uma gestão organizada das falhas reportadas, facilitando a priorização e a alocação de recursos para sua correção. Além disso, práticas como programação em par ou revisões de código podem ser utilizadas para aumentar a qualidade da solução implementada e reduzir o risco de gerar novos erros durante o processo. Em empresas que adotam metodologias ágeis, onde a correção de bugs é frequentemente integrada a sprints regulares, é observada essa abordagem, uma vez que possibilita uma resposta rápida às necessidades dos usuários sem comprometero desenvolvimento contínuo do produto. 8.7.3 Manutenção adaptativa A manutenção adaptativa lida com as alterações necessárias para fazer o software operar eficientemente em um ambiente modificado ou atualizado. A partir disso, é possível encontrar atualizações no sistema operacional, mudanças nas políticas externas ou evoluções tecnológicas que exijam ajustes no software para manter sua funcionalidade e desempenho. Para garantir que o software permaneça funcional mesmo quando o ambiente operacional ou tecnológico muda, a manutenção adaptativa requer uma abordagem proativa. É importante manter o monitoramento contínuo do ambiente externo, o que inclui ajustes nos sistemas operacionais, mudanças nas políticas regulatórias e desenvolvimentos tecnológicos que possam afetar o software. Já a análise preditiva é uma ferramenta avançada usada para antecipar as necessidades de adaptação no futuro, possibilitando às equipes que planejem com antecedência as mudanças necessárias. A arquitetura baseada em microsserviços também fornece maior flexibilidade para atualizações rápidas e isoladas sem afetar todo o sistema. Um caso notável é o da transição para IPv6 em muitos sistemas online, exigindo uma revisão cuidadosa das funções relacionadas à rede nos softwares existentes para assegurar compatibilidade sem sacrificar performance ou segurança. Não somente nesse caso, mas em muitos outros, a manutenção adaptativa desempenhou um papel crucial na transição para IPv6 em muitos sistemas online, garantindo compatibilidade, desempenho e segurança sem interromper as operações existentes. A abordagem proativa e sistemática da manutenção adaptativa foi essencial para garantir uma transição suave e bem-sucedida para IPv6. 126 Unidade III 8.7.4 Manutenção preventiva de software A manutenção preventiva ajuda a evitar problemas futuros de software aperfeiçoando o código e a estrutura do sistema antes que eles ocorram. Essa abordagem proativa de manutenção pode reduzir significativamente os custos ao longo prazo, pois evita os custosos reparos de emergência e evita interrupções imprevistas. A atualização constante das bibliotecas e frameworks utilizados pelo software para versões mais recentes e seguras, além da refatoração regular do código são métodos eficazes, pois promovem uma arquitetura flexível, capaz de se adaptar facilmente às mudanças sem grandes dificuldades. A implementação de padrões de design sólidos também contribui significativamente para esse objetivo. Desse modo, a manutenção preventiva é fundamental porque possibilita às organizações que desenvolvam uma cultura de excelência e inovação antes que os defeitos surjam. As empresas podem descobrir vulnerabilidades ou partes obsoletas no código de forma precoce, implementando técnicas como análise estática do código-fonte com frequência. O uso extensivo da automação nos processos de teste também é vital nessa estratégia, propiciando a execução frequente dos testes regressivos sem sobrecarga adicional para as equipes. Ferramentas modernas, como Selenium ou Jenkins, podem ser integradas ao ciclo CI/CD para garantir que cada nova linha do código seja verificada quanto à qualidade e segurança antes da implantação. A manutenção preventiva de software é uma abordagem proativa e sistemática que visa evitar problemas, além de garantir que os sistemas funcionem continuamente e de forma eficaz. As organizações podem reduzir custos e minimizar interrupções operacionais ao investir na manutenção preventiva, aumentando a confiabilidade, desempenho e segurança de seus sistemas. A manutenção preventiva também ajuda as equipes de desenvolvimento a assegurar a longevidade e o valor contínuo dos sistemas de software, identificando e corrigindo possíveis falhas. Em um mundo em constante mudança tecnológica, a manutenção preventiva é essencial para sustentar a competitividade das organizações e, assim, obtenham sucesso em longo prazo, a partir de uma base sólida para a inovação e o crescimento contínuo. Saiba mais Para compreender melhor sobre as práticas de manutenção de software, incluindo manutenção corretiva, adaptativa e preventiva, seguem algumas sugestões de leitura: FOWLER, M. Refatoração: aperfeiçoando o design de códigos existentes. São Paulo: Novatec, 2020. 127 QUALIDADE DE SOFTWARE HUMBLE, J.; FARLEY, D. Continuous delivery: reliable software releases through build, test, and deployment automation. Boston: Addison-Wesley, 2010. MURPHY, N. R. et al. Site reliability engineering: how google runs production systems. Massachusetts: O’Reilly, 2016. NEWMAN, S. Building microservices: designing fine-grained systems. Massachussetts: O’Reilly, 2015. 8.7.5 Manutenção corretiva de software A manutenção corretiva, embora reativa por natureza, desempenha um papel fundamental na sustentação da confiabilidade e estabilidade de sistemas de software. Uma estratégia eficiente para essa modalidade de manutenção começa com a implementação de um robusto sistema de rastreamento de erros, que não apenas facilita a identificação e correção dos bugs, mas também ajuda a analisar padrões de falhas recorrentes. Além disso, a adoção de práticas de CI/CD, por exemplo, pode transformar significativamente o processo de manutenção corretiva. Por meio dessas práticas, as equipes podem automatizar testes e implantações, possibilitando que os problemas sejam detectados e corrigidos mais rapidamente. Empresas como Netflix e Amazon são exemplos notáveis que utilizam CI/CD para garantir alta disponibilidade e confiabilidade em seus serviços. Outro aspecto crucial é o investimento em treinamento e desenvolvimento profissional das equipes de manutenção. A capacitação contínua em novas tecnologias e metodologias pode preparar melhor os profissionais para enfrentar desafios complexos na correção de bugs, além de incentivar uma cultura de aperfeiçoamento contínuo. Assim, a manutenção corretiva de software é fundamental para resolver problemas e falhas em sistemas de software existentes, sendo responsabilidade das equipes de desenvolvimento garantirem a continuidade das operações e a satisfação dos usuários finais respondendo a defeitos e incidentes de forma rápida e eficiente. Ela também contribui na manutenção da qualidade e confiabilidade dos sistemas de software e reduz os efeitos de problemas inesperados. No entanto, para garantir uma abordagem abrangente e proativa à gestão da qualidade de software, a manutenção corretiva deve ser complementada por outras formas de manutenção, como a preventiva e a adaptativa. A capacidade de resolver problemas rapidamente e garantir a estabilidade dos sistemas de software é essencial para o sucesso das organizações e a satisfação dos clientes em um mundo cada vez mais dependente de tecnologia. 128 Unidade III 8.8 Gestão ágil em projetos de desenvolvimento de software Outra boa prática que vem revolucionando a indústria de construção de software e, por consequência, alterando a forma como gerenciamos a qualidade de nossos softwares é a de metodologias ágeis. A gestão ágil de projetos de desenvolvimento de software é uma abordagem flexível e colaborativa que visa maximizar a entrega de valor aos clientes em um ambiente de desenvolvimento de software em constante mudança. Ela prioriza indivíduos e interações, fornece software funcional e possibilita a adaptação contínua aos requisitos mutáveis do projeto, em contraste com metodologias tradicionais, que se concentram em processos e documentação extensos. Devido à sua capacidade de promover a colaboração, a transparência e a rapidez na entrega de software de alta qualidade, atendendo às demandas dinâmicas do mercado e às expectativas dos clientes, a gestão ágil tem se tornado cada vez mais popular. 8.8.1 Conceitos básicos de gestão ágil em projetos de desenvolvimento de software A gestão ágil em projetos de desenvolvimento de software é uma abordagem que enfatiza a flexibilidade, a colaboração entre equipes e clientes,e a entrega contínua de valor. Diferentemente dos métodos tradicionais, que seguem um plano rigoroso e sequencial, a gestão ágil possibilita ajustes frequentes ao escopo do projeto com base no feedback dos stakeholders e nas mudanças do mercado. Um dos seus pilares é o Manifesto Ágil, criado em 2001 por um grupo de desenvolvedores experientes. O documento destaca que valores como indivíduos e interações valem mais que processos e ferramentas; software funcionando vale mais que uma documentação abrangente; a colaboração com o cliente mais que a negociação de contratos; e responder a mudanças mais que seguir um plano. Na prática, isso se traduz em várias metodologias específicas, como Scrum, Kanban e Extreme Programming (XP), cada uma com suas particularidades, mas todas compartilham os mesmos princípios fundamentais. Por exemplo, o Scrum divide o projeto em ciclos chamados sprints, onde cada um deles tem uma duração fixa na qual um conjunto pré-definido de funcionalidades deve ser desenvolvido e entregue. Outro aspecto importante da gestão ágil é a ênfase na comunicação eficaz. Reuniões diárias curtas (daily meetings) são realizadas para discutir progressos, identificar impedimentos e planejar as atividades do dia. Essas reuniões promovem transparência e possibilitam ajustes rápidos à estratégia do projeto conforme necessário. A adoção da gestão ágil tem demonstrado resultados significativos em termos de produtividade e satisfação do cliente. Empresas como Spotify e Netflix são exemplos notáveis de organizações que implementaram práticas ágeis para inovar enquanto mantêm alta qualidade nos seus produtos digitais. A capacidade de adaptar-se rapidamente às mudanças não apenas proporciona vantagem competitiva, mas também alinha os esforços do desenvolvimento com as necessidades reais dos usuários finais. 129 QUALIDADE DE SOFTWARE Scrum: flexibilidade e entrega contínua O Scrum é uma das metodologias ágeis mais populares no desenvolvimento de software, caracterizada por sua estrutura iterativa e incremental. A base do Scrum é o sprint, um período fixo (geralmente de duas a quatro semanas) durante o qual uma equipe trabalha para completar um conjunto específico de funcionalidades. O sucesso do Scrum reside na sua capacidade de facilitar a adaptação rápida às mudanças, promovendo a colaboração intensa entre todos os envolvidos no projeto. Um aspecto distintivo do Scrum é a definição clara de papéis: o product owner é responsável por maximizar o valor do produto; o scrum master assegura que o processo está sendo seguido corretamente e ajuda a equipe a remover impedimentos; e a equipe de desenvolvimento implementa as funcionalidades. Esses papéis criam uma estrutura que viabiliza a eficiência e a flexibilidade. Além disso, reuniões regulares são essenciais no Scrum. As daily scrums ajudam a equipe a se manter alinhada sobre o progresso e os desafios enfrentados. As revisões de sprint possibilitam apresentar as funcionalidades desenvolvidas aos stakeholders, enquanto as retrospectivas de sprint oferecem um momento para reflexão interna da equipe sobre como melhorar seus processos. Product owner Development team Daily scrum Product backlog refinemet Potentially releasable increment Iterative-incrementalIterative-incremental development development && delivery delivery Sprint review Scrum master Sprint (max 1 month) Sprint retrospective Sprint backlog Team forecasts work needed to achieve sprint goal 11 22 33 44 55 66 77 88 99 1010 1111 1212 1313 1414 1515 PB I PB I’s’s Product backlog Sprint planning Topic 1: forecast PBI’s Topic 2: plan work (e.g. tasks) Stakeholder liaison Figura 22 – Como funciona o Scrum Disponível em: https://tinyurl.com/5v5kf4vs. Acesso em: 6 jun. 2024. Empresas como Google e Amazon utilizam o Scrum não apenas pelo seu potencial em acelerar o desenvolvimento de produtos, mas também pela contribuição na criação de uma cultura organizacional voltada à inovação contínua e ao aprendizado constante. 130 Unidade III Kanban: visualização do fluxo de trabalho O Kanban é outra metodologia ágil amplamente adotada, conhecida por sua simplicidade e foco na gestão visual do trabalho. Originário do sistema Toyota de produção just-in-time, ele utiliza cartões (ou kanbans) para representar tarefas em um quadro dividido em colunas que representam diferentes estágios do processo de desenvolvimento. A principal vantagem do Kanban é proporcionar uma visão clara do fluxo de trabalho atual, com a possibilidade de identificar gargalos e priorizar tarefas com maior eficiência. Ao contrário do Scrum, não há sprints; o trabalho flui continuamente de acordo com o andamento da equipe. Isso torna o Kanban particularmente adequado para ambientes onde os requisitos mudam frequentemente, ou para projetos com demandas imprevisíveis. Figura 23 – Quadro de Kanban Disponível em: https://tinyurl.com/j8xuwm2t. Acesso em: 6 jun. 2024. Um desafio significativo é evitar o acúmulo excessivo de trabalho em progresso (WIP), o que pode levar à sobrecarga da equipe e diminuir a qualidade geral. Para enfrentar isso, é crucial estabelecer limites claros para WIP em cada estágio do fluxo de trabalho. Além disso, as equipes devem se esforçar para identificar gargalos no processo rapidamente, utilizando dados visuais fornecidos pelo quadro Kanban com o objetivo de tomar decisões informadas sobre priorizações. O Kanban enfatiza princípios como limitação do WIP, fluxo contínuo e melhoria contínua (Kaizen). Ao limitar WIP, equipes podem se concentrar em concluir tarefas antes de iniciar novas, melhorando assim a qualidade geral e reduzindo os tempos de entrega. 131 QUALIDADE DE SOFTWARE Empresas como Spotify têm integrado princípios Kanban em suas operações para aumentar a transparência entre equipes multidisciplinares e otimizar seus processos produtivos. A flexibilidade oferecida pelo Kanban facilita ajustes rápidos às prioridades dos projetos sem comprometer os resultados finais. Melhores práticas também incluem a realização regular de reuniões Kaizen para revisão dos processos atuais e a identificação de oportunidades para melhorias incrementais. Assim como Spotify, empresas que demonstram como integrar princípios Kanban podem aumentar significativamente a transparência entre equipes multidisciplinares e otimizar processos produtivos. Ao adotarem essas práticas, organizações ajustam suas prioridades rapidamente sem comprometer os resultados finais, mantendo um alto nível de adaptabilidade em ambientes dinâmicos. Saiba mais Para aprofundar seus conhecimentos sobre Scrum e Kanban, seguem algumas sugestões de leitura: ANDERSON, D. J. Kanban: mudança evolucionária de sucesso para seu negócio de tecnologia. Washington D.C.: Blue Hole Press, 2011. COHN, M. Agile estimating and planning. London: Pearson, 2005. SUTHERLAND, J. Scrum: a arte de fazer o dobro do trabalho na metade do tempo. Rio de Janeiro: Sextante, 2019. Artigos e estudos de caso no site oficial da Scrum Alliance. Disponível em: https://www.scrumalliance.org/. Acesso em: 6 jun. 2024. Artigos e estudos de caso no site oficial do Kanban University. Disponível em: https://kanban.university/. Acesso em: 6 jun. 2024. 8.9 Qualidade do software na nuvem O conceito de software em nuvem vem se tornando popular nos últimos tempos e é interessante que o futuro profissional da qualidade de software tenha uma breve introdução sobre o assunto. À medida que mais empresas adotam soluções baseadas em nuvem para hospedar e executar seus aplicativos e serviços, a qualidade do software na nuvem ganha importância no cenário tecnológico atual. A transição para a nuvem trouxe novas oportunidades e desafios para a garantia da qualidade do software, como escalabilidade, desempenho, confiabilidade e segurança. Para garantir que os aplicativos 132 Unidade III e serviços baseados em nuvem atendam aos mais altos padrões de qualidade e satisfação do usuário, discutiremos a