Qualidade de software: mais do que apenas um código bem escrito

Qualidade de software: mais do que apenas um código bem escrito

E o que é QA, velhinho?

Personagem Pernalonga, com metade do corpo para fora de um buraco no chão, diz: “What 's up doc?”, enquanto come uma cenoura. Ao fundo, um bosque com árvores e arbustos.

Imagine que você está fazendo um bolo. Agora, imagine que você é chef de cozinha e seus bolos sempre passam por uma rigorosa inspeção para garantir um alto padrão de qualidade, e hoje decidiu fazer um bolo diferente, um bolo de software! E de quem você precisa para garantir que esse bolo seja incrível? De uma pessoa analista de qualidade de software, é claro!

Analistas de qualidade de software (QA) são como a pessoa inspetora de qualidade da sua cozinha, que garante que o bolo (ou software) que está sendo feito seja o melhor possível e atenda a todas as expectativas de clientes.

Basicamente o que fazem é:

  • Testam o bolo (ou software): assim como você experimenta a massa do bolo para ter certeza de que está doce o suficiente, a pessoa analista de qualidade testa o software para ter certeza de que ele funciona corretamente. Pressionam todos os botões, clicam em todos os links e tentam todas as combinações possíveis para verificar se algo quebra.

  • Eliminam ingredientes estragados (ou bugs): assim como você verifica os ingredientes para se certificar de que nenhum deles está estragado, analistas de qualidade procuram por bugs no software. Encontram erros que podem fazer o software travar ou não funcionar como deveria.

  • Seguem a receita (ou especificações): verificam se o software está sendo feito de acordo com a receita, ou seja, as especificações. Se algo estiver fora do lugar, alertam a equipe de desenvolvimento.

  • Tornam o bolo bonito (ou user-friendly): certificam-se de que o bolo (ou software) seja fácil de usar e agradável aos olhos. Se algo não estiver bonito ou intuitivo, sugerem melhorias.

  • Dão feedback a chefs (ou devs): analistas de qualidade fornecem feedback a devs, assim como você diria para chefs como melhorar o sabor do bolo. Isso ajuda a equipe de desenvolvimento a corrigir problemas e aprimorar o software.

Agora, quanto à importância deles, pense nisso: se você servisse um bolo sem prová-lo, como saberia se ele está bom? Da mesma forma, o analista de qualidade é fundamental para garantir que o software seja de alta qualidade e atenda às necessidades dos usuários, evitando que problemas apareçam após o lançamento.

A rotina de analista de qualidade pode variar, mas geralmente envolve:

  • testar diferentes partes do software;
  • documentar problemas;
  • trabalhar em estreita colaboração com pessoas desenvolvedoras para solucionar os problemas encontrados;
  • garantir que o software esteja pronto para ser entregue aos clientes.
Tirinha com duas pessoas olhando para tela do computador. Uma delas pergunta:”O que está fazendo?”, a outra responde:”Estou removendo todo código ruim do app”. A primeira pessoa torna a perguntar:”E o que sobrou?” Na tela do computador é exibida a mensagem “Olá mundo. Pressione uma tecla para continuar”.

(Tradução livre:”O que está fazendo?”. ”Estou removendo todo código ruim do app”.”E o que sobrou?”. “Olá mundo Pressione uma tecla para continuar”.)

Fonte: MonkeyUser.com (tradução nossa)

Tipos de testes, automação e carreira

Antes de continuarmos a falar sobre aspectos importantes da qualidade de software, existem temas que fazem parte desse universo que fizemos questão de abordar em artigos específicos, assim você poderá ter mais informações sobre os temas:

  • Testes de software e documentação: pilares para garantir qualidade e eficiência no desenvolvimento de software - desenvolver um projeto eficiente e de qualidade é o objetivo de qualquer equipe que trabalha com desenvolvimento de software, correto? Para atingir esses objetivos, dois pilares fundamentais desempenham um papel central: os testes de software e a documentação. Vamos explorar o mundo dos testes de software e da documentação, revelando como essas práticas não apenas asseguram a qualidade do software, mas também impulsionam a eficiência no processo de criação.

  • A sintonia perfeita: automatização de testes e DevOps - em um cenário tecnológico em constante evolução, a busca pela conexão perfeita entre desenvolvimento e operações tornou-se imperativa para empresas que desejam entregar software de alta qualidade de forma rápida e eficiente. Nesse artigo, exploraremos a sinergia entre automatização de testes e DevOps, destacando como essa combinação não apenas acelera o ciclo de desenvolvimento, mas também melhora a confiabilidade, a escalabilidade e a qualidade dos produtos de software.

  • Carreiras em qualidade de software e quais soft skills são importantes para os profissionais da área - criamos esse artigo para descrever melhor as carreiras disponíveis nesse campo dinâmico e discutiremos algumas soft skills que desempenham um papel fundamental no sucesso dos profissionais que atuam nessa área. Aprenda como se destacar e crescer em um mundo onde a qualidade do software é uma prioridade.

Certo, já podemos voltar ao tema central do nosso artigo!

Banner da Escola de DevOps: Matricula-se na escola de DevOps. Junte-se a uma comunidade de mais de 500 mil estudantes. Na Alura você tem acesso a todos os cursos em uma única assinatura; tem novos lançamentos a cada semana; desafios práticos. Clique e saiba mais!

Como aplicar?

A aplicação da qualidade de software envolve uma série de práticas e processos ao longo do ciclo de vida do desenvolvimento de software. Podemos considerar como etapas fundamentais para aplicar a qualidade de software:

  1. Definir requisitos claros: o primeiro passo é estabelecer requisitos de software claros e bem definidos. Isso envolve uma comunicação eficaz com os stakeholders para entender suas necessidades e expectativas. Os requisitos devem ser documentados de maneira detalhada e compreensível.
  2. Planejamento de qualidade: crie um plano de qualidade de software que descreva como a qualidade será gerenciada ao longo do projeto. Isso inclui a definição de métricas de qualidade, processos de teste e critérios de aceitação.
  3. Padrões e conformidade: estabeleça padrões de desenvolvimento de software e assegure-se de que a equipe os siga. Isso inclui diretrizes de codificação, boas práticas de desenvolvimento e conformidade com normas relevantes, como ISO 9001 ou outras normas específicas da indústria.
  4. Testes e revisões: realize testes de qualidade em diferentes fases do projeto, desde testes unitários até testes de sistema e testes de aceitação. Além disso, conduza revisões de código para identificar problemas antes que eles se tornem críticos.
  5. Automação de testes: use ferramentas de automação de testes para aumentar a eficiência e a cobertura dos testes. Isso ajuda a identificar problemas de qualidade de forma mais rápida e consistente.
  6. Gerenciamento de defeitos: registre, rastreie e priorize os defeitos encontrados durante os testes e revisões. Certifique-se de que os problemas sejam corrigidos e verificados antes do lançamento.
  7. Melhoria contínua: estabeleça um ciclo de melhoria contínua, em que você analisa os resultados dos testes, identifica áreas de fraqueza e implementa melhorias nos processos de desenvolvimento e teste.
  8. Treinamento e desenvolvimento: mantenha sua equipe atualizada com treinamento regular em práticas de desenvolvimento de qualidade e novas tecnologias.
  9. Documentação: mantenha uma documentação adequada de todos os processos, testes e mudanças realizadas ao longo do ciclo de vida do software. Isso ajuda na rastreabilidade e na auditoria de qualidade.
  10. Avaliação externa: considere a realização de auditorias de qualidade externas ou revisões independentes para garantir uma avaliação imparcial da qualidade do software.
  11. Envolvimento do cliente: mantenha uma comunicação constante com os clientes para garantir que o software atenda às suas necessidades e expectativas.
  12. Monitoramento em produção: após o lançamento, monitore continuamente o software em produção para identificar e resolver problemas em tempo real.

Lembrando que a qualidade de software não é apenas uma responsabilidade da equipe de desenvolvimento, mas de toda a organização. Ela deve ser incorporada em todos os processos e práticas relacionadas ao software, desde o planejamento até a manutenção em produção. A busca pela qualidade é um esforço contínuo que visa garantir que o software atenda aos mais altos padrões de desempenho, segurança e usabilidade.

Modelos de qualidade

Modelos de qualidade são estruturas e abordagens que ajudam a medir, avaliar e melhorar a qualidade de software. Existem três modelos principais de qualidade de software: qualidade interna, qualidade externa e qualidade em uso. Cada um se concentra em aspectos diferentes da qualidade do software. Mas calma, vou te ajudar a entender melhor:

  1. Modelo de qualidade interna: concentra-se na qualidade do código-fonte e nos processos internos de desenvolvimento do software. Ele avalia como o software é construído, observando fatores como a estrutura do código, a consistência, a modularidade, a legibilidade e a manutenibilidade. Os modelos de qualidade interna ajudam a criação de um software mais fácil de gerenciar, melhorar e expandir. Exemplos de modelos de qualidade interna incluem o ISO/IEC 9126 e o modelo de qualidade de McCall.
  2. Modelo de qualidade externa: concentra-se na qualidade percebida pelos usuários finais do software. Ele avalia como o software se comporta em termos de desempenho, confiabilidade, usabilidade e eficácia quando usado em situações reais. Os modelos de qualidade externa medem a qualidade com base em critérios externos e objetivos. Um exemplo é a conformidade com padrões de usabilidade ou a ausência de erros críticos em produção.
  3. Modelo de qualidade em uso: concentra-se na qualidade do software durante seu uso real no ambiente do cliente. Ele leva em consideração a satisfação do usuário, a eficiência, a eficácia e a produtividade alcançada ao usar o software em cenários do mundo real. Os modelos de qualidade em uso ajudam a entender como o software atende às necessidades e expectativas dos usuários e como ele pode ser aprimorado para oferecer uma experiência melhor. Um exemplo é o modelo de qualidade de produto de Garvin.

Geralmente, esses modelos de qualidade estão interconectados. A qualidade interna afeta a qualidade externa, e a qualidade em uso depende da qualidade externa. Portanto, melhorar a qualidade do software envolve aprimoramentos em todas essas áreas.

Métricas

Métricas de qualidade de software são como os termômetros que usamos para medir a saúde do nosso corpo, mas, neste caso, medem a saúde do software. Abaixo explicamos cada uma das principais métricas:

  • Taxa de bugs: imagine que o software é como um carro e os bugs são como pequenos problemas nele, por exemplo, faróis quebrados ou pneus murchos. A taxa de bugs mede quantos desses problemas existem no software. Quanto menos bugs, melhor!
  • Tempo de resposta: é como medir quanto tempo leva para o carro acelerar quando pisamos no pedal do acelerador. No software, mede quanto tempo leva para uma ação acontecer quando clicamos em um botão. Menos tempo de resposta é melhor, porque as coisas acontecem mais rapidamente.
  • Confiabilidade: é como saber se o carro vai ligar sempre que você girar a chave. No software, mede quão confiável ele é. Um software confiável não trava ou apresenta erros com frequência.
  • Usabilidade: refere-se à facilidade de usar o software. É como ter um carro com controles simples e intuitivos, em vez de ter que ler um manual enorme. Um software fácil de usar é mais agradável.
  • Eficiência: imagine se o carro gastasse muito combustível para rodar apenas alguns quilômetros. Eficiência no software é medir quão bem ele utiliza os recursos do computador, como memória e processador. Um software eficiente é rápido e não consome muitos recursos.
  • Segurança: é como ter um carro com um bom sistema de travagem e cintos de segurança. No software, mede quão bem ele protege suas informações pessoais e se impede o acesso não autorizado.
  • Facilidade de manutenção: é como avaliar quão fácil é consertar o carro quando algo dá errado. No software, mede a simplicidade de fazer atualizações e correções sem causar mais problemas.

Quanto melhor essas métricas, mais saudável e confiável é o software!

Cultura de qualidade

A cultura de qualidade de software abrange tanto a mentalidade quanto as práticas que uma organização adota para priorizar a qualidade em todos os aspectos do desenvolvimento de software. Ela envolve:

  • Comprometimento com a qualidade: todos os membros da equipe, de pessoas desenvolvedoras a gerentes, reconhecem a importância da qualidade e estão comprometidos em entregá-la.
  • Colaboração: as equipes de desenvolvimento, teste e operações trabalham juntas para garantir que o software seja testado e implementado com qualidade.
  • Aprendizado contínuo: a organização está sempre em busca de melhorias e aprendizado com os erros, visando aperfeiçoar seus processos e práticas.
  • Transparência: a comunicação aberta e transparente são incentivadas, permitindo que problemas de qualidade sejam identificados e resolvidos mais rapidamente.
  • Automatização: a automação de processos de teste e entrega contínua é valorizada para aumentar a eficiência e a consistência.
  • Responsabilidade compartilhada: todas as pessoas na equipe compartilham a responsabilidade pela qualidade do software, e não apenas quem testa.

Uma parte da cultura de qualidade envolve educar, inspirar e motivar as equipes e as pessoas da organização a abraçarem a cultura de qualidade de software. É como espalhar a importância da qualidade e influenciar outras pessoas a adotarem práticas de qualidade - chamamos isso de evangelização de qualidade, que inclui:

  • Treinamento e conscientização: realizar treinamentos e workshops para ensinar as melhores práticas de qualidade e mostrar porque são cruciais.
  • Defensores da qualidade: identificar e promover pessoas dentro da organização que são apaixonadas por qualidade e podem servir como defensoras e mentoras.
  • Compartilhamento de experiências: compartilhar histórias de sucesso e lições aprendidas com a adoção de práticas de qualidade.
  • Reconhecimento e incentivos: reconhecer e recompensar equipes e pessoas que contribuem significativamente para a melhoria da qualidade.
  • Comunicação constante: manter uma comunicação constante sobre a importância da qualidade e seus benefícios.

Testes no ágil x cascata

Ágil

Os testes de software em um time ágil funcionam de maneira integrada e contínua ao longo de todo o ciclo de desenvolvimento, permitindo que a equipe entregue software de alta qualidade de maneira iterativa. Em um time ágil, os testes funcionam da seguinte forma:

  • Integração do teste desde o início: testes são considerados desde o início do projeto ágil. Os requisitos são detalhados com critérios de aceitação que servem como base para os testes futuros.
  • Planejamento de testes:durante o planejamento de cada iteração (sprint), os testes são considerados como uma parte integrante. A equipe identifica as histórias de usuário a serem desenvolvidas e define os casos de teste correspondentes.
  • Desenvolvimento e teste incremental: o desenvolvimento e os testes ocorrem de forma incremental. À medida que desenvolvedores trabalham nas funcionalidades, testadores criam os casos de teste e começam a testar essas funcionalidades.
  • Testes de unidade: os desenvolvedores realizam testes de unidade para verificar se suas partes individuais de código estão funcionando corretamente. Isso é feito antes de integrar o código principal.
  • Testes de integração contínua: à medida que o código é integrado, os testes de integração são executados para garantir que os diferentes componentes ou módulos funcionem bem juntos.
  • Testes de aceitação automatizados: os casos de teste de aceitação são automatizados sempre que possível. Isso permite a execução rápida e repetitiva dos testes para verificar se as histórias de usuário atendem aos critérios de aceitação.
  • Execução de testes contínuos: os testes são executados continuamente à medida que o desenvolvimento avança. Isso ajuda a identificar problemas rapidamente e permite que os desenvolvedores façam correções imediatas.
  • Feedback imediato: qualquer problema identificado nos testes é tratado prontamente, e a equipe trabalha em conjunto para resolver os problemas. Isso garante que o software seja de alta qualidade desde o início.
  • Testes de regressão automatizados: os testes de regressão, que garantem que as alterações recentes não afetaram as funcionalidades existentes, são automatizados e executados em cada ciclo de desenvolvimento.
  • Avaliação e melhoria contínua: a equipe realiza retrospectivas regulares para revisar o processo de desenvolvimento e os testes, buscando maneiras de melhorar a eficiência e a qualidade.
  • Integração contínua e entrega contínua (CI/CD): a automação desempenha um papel fundamental na integração contínua e na entrega contínua, permitindo que as alterações sejam implementadas rapidamente após a conclusão dos testes. Teste de usabilidade: além dos testes funcionais, os testes de usabilidade são realizados para garantir que o software atenda às necessidades dos usuários finais.

Cascata

No modelo de desenvolvimento em cascata, os testes de software são realizados em fases específicas do ciclo de vida do projeto, seguindo uma abordagem sequencial e linear. Na prática, seria algo assim:

  1. Requisitos: a primeira fase é a definição de requisitos, na qual os requisitos do software são coletados e documentados de forma detalhada. Os testes nesta fase geralmente envolvem a revisão dos requisitos para garantir que sejam claros, completos e compreensíveis.
  2. Projeto: com base nos requisitos definidos, pessoas arquitetas e designers criam a estrutura geral do software. Os testes nesta fase incluem revisões de design para garantir que o projeto seja adequado para atender aos requisitos.
  3. Implementação (codificação): as pessoas desenvolvedoras escrevem o código-fonte do software com base no design. Os testes de unidade são realizados para verificar a funcionalidade de unidades individuais de código, como funções ou módulos. Os testes de unidade são frequentemente manuais, mas podem ser automatizados em algumas situações.
  4. Integração: após a implementação, os diferentes componentes ou módulos do software são integrados para formar o sistema completo. Os testes de integração são realizados para garantir que os componentes funcionem bem juntos como um todo. Isso envolve identificação e correção de problemas de interação entre módulos.
  5. Testes de sistema: o software completo é testado em um ambiente que se assemelha ao ambiente de produção. Os testes de sistema garantem que o software atenda aos requisitos especificados e funcione conforme o esperado em cenários do mundo real.
  6. Aceitação: a fase final é a aceitação, na qual cliente ou usuário final testa o software para verificar se atende às suas expectativas. Os testes de aceitação validam se o software está pronto para ser implantado em produção.

É importante notar que, no modelo em cascata, cada fase deve ser concluída antes de passar para a próxima. Isso significa que, se problemas significativos forem identificados em uma fase posterior, pode ser necessário retornar às fases anteriores para fazer ajustes. Essa abordagem pode ser rígida e não é adequada para projetos em que os requisitos podem mudar ou nos quais a flexibilidade é necessária.

Qualidade e ciclo de vida do projeto

Quando se fala sobre aplicar e garantir qualidade durante todo o ciclo de vida do projeto é comum ouvir sobre “Continuous testing” ou teste contínuo.

Podemos entender que aplicar testes contínuos ao projeto é como ter um "guardião" que verifica constantemente se um software funciona corretamente enquanto ele está sendo desenvolvido. Esse "guardião" executa testes automaticamente e fornece feedback aos desenvolvedores sempre que eles fazem alterações no código. Isso ajuda a detectar erros e problemas rapidamente, garantindo que o software seja de alta qualidade desde o início do processo de desenvolvimento, em vez de esperar até o final para verificar se tudo está certo. É como ter um assistente confiável que mantém o software em boas condições durante todo o processo de criação.

Fazem parte das estratégias modernas de garantia de qualidade de software o uso dos conceitos "shift left testing" e "shift right testing":

  • "Shift left testing": é um conceito que enfatiza a antecipação e a realização de atividades de teste mais cedo no ciclo de desenvolvimento de software. Isso significa que os testes são movidos para a esquerda no cronograma de desenvolvimento, ocorrendo em estágios mais iniciais, como o desenvolvimento e a integração de código. O objetivo é identificar e corrigir problemas de qualidade o mais cedo possível, reduzindo custos e melhorando a qualidade do software.

  • "Shift right testing": envolve a realização de testes e atividades de monitoramento após a implantação do software em um ambiente de produção. Isso significa que os testes continuam mesmo após o lançamento do software para os usuários finais. O objetivo é identificar problemas que podem surgir em condições reais de uso e garantir que o software seja ajustado e aprimorado com base no feedback dos usuários.

Ambos os conceitos são popularmente aplicados com o objetivo de melhorar a qualidade, a confiabilidade e a satisfação do usuário ao longo de todo o ciclo de vida do software.

Momentos do ciclo de vida do projeto em que são aplicados o conceito de shift left, que atende as fases de entregas nos ambientes, código e requisitos; o conceito de shift right que atende os momentos de entregas em produção e monitoramento da produção; e o conceito de continuous testing, que atende as fases de requisitos, código, entregas nos ambientes, entregas em produção e monitoramento da produção.

Conclusão

Então, da próxima vez que você usar um aplicativo incrível ou jogar um jogo sem bugs, lembre-se do trabalho da pessoa analista de qualidade de software que garantiu que tudo funcionasse perfeitamente, tornando sua vida digital mais doce!

Para continuar mergulhando confira:

Caroline Carvalho
Caroline Carvalho

Analista de qualidade de software, estudante de Engenharia de Computação e de Análise e Desenvolvimento de Sistemas. Faço parte do Scuba Team, exploradora do universo Python , e também gosto muito de DevOps. Nas horas vagas gosto de falar sobre cultura geek e café.

Veja outros artigos sobre DevOps