A garantia de qualidade está a tornar-se cada vez mais popular. Os especialistas estimam que os empregos na área dos testes, só nos EUA, irão aumentar 25% na próxima década. Se este tema lhe interessa, poderá perguntar-se por onde começar a aprender sobre testes de software.
Neste artigo, responderei a perguntas para o ajudar a começar com os testes de software. Analisarei o que são os testes de software, os conceitos de teste mais importantes e algumas ferramentas de testes de software a considerar.
Testes de software explicados
O processo constituído por todas as atividades do ciclo de vida, estáticas e dinâmicas, relacionadas com o planeamento, a preparação e a avaliação de um componente ou sistema e dos produtos de trabalho relacionados, com o objetivo de determinar se cumprem os requisitos especificados, demonstrar que são adequados à finalidade e detetar defeitos.
Glossário do ISTQB
Os testes de software desempenham um papel importante no processo de desenvolvimento de software, validando se a aplicação de software funciona conforme previsto e cumpre os requisitos e as expectativas dos seus utilizadores finais.
O objetivo é identificar defeitos, erros e inconsistências na aplicação de software antes de esta ser disponibilizada ao público. Os testes envolvem a execução do software em diferentes condições, configurações e cenários, para garantir que funciona corretamente e de forma eficiente.
Se tem curiosidade em saber como começar na área dos testes de software, eis uma lista de perguntas comuns de entrevistas de QA (e respostas!).
Ciclo de vida dos testes de software
O ciclo de vida dos testes de software (STLC) é o processo seguido pelos testadores de software para garantir que a aplicação em teste cumpre os padrões de qualidade e os requisitos especificados. O STLC é normalmente constituído por várias fases concebidas para garantir que a aplicação de software é testada exaustivamente e cumpre o nível de qualidade pretendido antes de ser disponibilizada aos utilizadores finais. Seguem-se as fases do ciclo de vida dos testes de software:

Análise de requisitos
Nesta fase, os testadores de software analisam os requisitos e as especificações. Identificam os requisitos funcionais e não funcionais, compreendem a finalidade da aplicação de software e o público-alvo, e desenvolvem casos e cenários de teste em conformidade.
Planeamento dos testes
Nesta fase, a equipa de testes identifica o âmbito dos testes, a abordagem de teste e os recursos necessários para os testes. O plano de testes identifica também os riscos e as restrições associados ao processo de teste e define o calendário dos testes.
Conceção dos testes
Nesta fase, a equipa de testes concebe os casos e cenários de teste com base nos requisitos e nas especificações. Identifica também os dados de teste necessários para os testes e desenvolve scripts de teste que automatizam o processo de teste.
Execução dos testes
Os testadores executam os casos e cenários de teste concebidos na fase anterior. Os resultados dos testes são documentados e quaisquer defeitos ou erros encontrados na aplicação de software são comunicados.
Have an account? Log In
Relatórios de testes
Nesta fase, a equipa de testes prepara um relatório com os resultados dos testes e os defeitos identificados durante os testes. O relatório pode incluir as suas recomendações para corrigir os defeitos e melhorar a qualidade geral da aplicação de software.
Encerramento dos testes
Esta é a última fase, na qual a equipa de testes avalia o processo de teste e identifica áreas a melhorar. Prepara também um relatório de encerramento dos testes que resume o processo de teste e os resultados dos testes.
O ciclo de vida dos testes de software é um processo contínuo que exige colaboração entre a equipa de testes e a equipa de desenvolvimento, para garantir que a aplicação de software cumpre o nível de qualidade e funcionalidade pretendido.
Tipos de testes de software
Existem diferentes tipos de testes de software utilizados pelas equipas de QA, dependendo do contexto e dos requisitos do projeto.
Podemos distinguir entre testes manuais e testes automatizados, dependendo da forma como os testes são executados. Com base no que está a ser testado, podemos diferenciar entre testes funcionais e não funcionais. Dependendo dos métodos utilizados, temos testes estáticos e dinâmicos. Com base na abordagem, podemos identificar os tipos de testes de caixa branca e de caixa preta. Temos também testes exploratórios, testes de fumo e de sanidade, bem como testes de regressão. Todos estes tipos de testes podem sobrepor-se, dependendo da forma como são utilizados.
Testes manuais
Nos testes manuais, os testes são realizados por uma pessoa, sem utilizar ferramentas ou scripts automatizados. Podem estar mais sujeitos a erros e, normalmente, demoram mais tempo.
Testes automatizados
Os testes automatizados são realizados por uma máquina que executa scripts escritos previamente. Requerem mais conhecimentos técnicos, por exemplo, conhecimentos de uma linguagem de programação e de ferramentas de automatização, como o Selenium. Podem ser mais dispendiosos do que os testes manuais e determinados aspetos do processo de teste não podem ser automatizados.
Testes funcionais
Os testes funcionais consistem em verificar o que a aplicação faz. Os testes funcionais verificam as funcionalidades e capacidades da aplicação de software e garantem que estas cumprem os requisitos e as especificações.
Testes não funcionais
Ao contrário dos testes funcionais, os testes não funcionais concentram-se em como a aplicação se comporta. Existem vários subtipos de testes não funcionais, dependendo do principal objetivo dos testes. Neste artigo, abordarei apenas alguns deles.
Testes de desempenho: Medem o tempo de resposta, o débito e a escalabilidade da aplicação de software sob várias condições de carga. Verificam a capacidade da aplicação de software para lidar simultaneamente com vários utilizadores e transações e garantem que funciona de forma eficiente em condições de carga máxima.
Testes de carga: Simulam cargas de utilizadores do mundo real e são realizados para determinar o comportamento de um sistema em condições normais e de pico. São utilizados para identificar se a infraestrutura usada para alojar a aplicação é suficiente e indicam quantos utilizadores simultâneos a aplicação consegue suportar e qual a escala da aplicação necessária em termos de hardware, capacidade de rede, etc., para que mais utilizadores possam aceder à aplicação.
Testes de esforço: Envolvem testar para além da capacidade normal, frequentemente até ao ponto de rutura, para observar os resultados. O objetivo é garantir que o software não falha em condições de recursos computacionais insuficientes, como memória, espaço em disco, pedidos de rede, etc.
Testes de segurança: Garantem que a aplicação de software é segura e está protegida contra acessos não autorizados. Os testes de segurança verificam a existência de vulnerabilidades e pontos fracos nos protocolos de segurança da aplicação de software e identificam potenciais ameaças à segurança.
Testes de usabilidade: São utilizados para avaliar se a aplicação é fácil de utilizar. Verificam a facilidade com que os utilizadores conseguem navegar na aplicação de software e executar as funções pretendidas de forma eficiente.
Testes de acessibilidade: Considerados um subconjunto dos testes de usabilidade, os testes de acessibilidade são realizados para garantir que a aplicação testada pode ser utilizada por pessoas com deficiência.
Testes de localização: Tipo de teste de software no qual o comportamento do software é testado para uma região, localidade ou cultura específica. Alguns atributos a considerar durante os testes de localização: texto traduzido corretamente, moeda, unidades de medida, caracteres especiais permitidos e formatos de números de telefone
Testes de compatibilidade: Testam se a aplicação tem capacidade suficiente para funcionar em diferentes navegadores, bases de dados, hardware, sistemas operativos, dispositivos móveis e redes
Testes estáticos e testes dinâmicos
Os testes estáticos baseiam-se na análise manual de produtos de trabalho, ou seja, revisões, ou na avaliação do código orientada por ferramentas, como as revisões de código, ou de outros produtos de trabalho, como a análise estática. Podem ser realizados, entre outros, sobre especificações, requisitos empresariais, critérios de aceitação, código-fonte, planos de teste, casos de teste, scripts de teste e guias do utilizador.
Os testes dinâmicos consistem na execução efetiva do software que está a ser testado. Podem ser manuais ou automatizados, ou
Testes de caixa branca e testes de caixa preta
Os testes de caixa branca são um tipo de teste em que o responsável pelos testes conhece a estrutura interna do código da aplicação, enquanto os testes de caixa preta são realizados sem qualquer necessidade de compreender o código-fonte. Cada um destes tipos de teste aplica técnicas de teste diferentes, como o particionamento de equivalência, a análise dos valores-limite e a tabela de decisão nos testes de caixa preta, e a cobertura de instruções, além da cobertura de decisões, nos testes de caixa branca.
Testes exploratórios
Os testes exploratórios são um tipo de teste baseado na experiência. Envolvem um planeamento mínimo e uma execução máxima de testes.
As atividades de conceção e execução dos testes são realizadas em paralelo, normalmente sem documentar formalmente as condições de teste, os casos de teste ou os scripts de teste.
É uma abordagem útil quando não existem especificações ou estas são insuficientes e o tempo é extremamente limitado, ou funciona muito bem como complemento aos testes automatizados.
Testes de fumo
Os testes de fumo, por vezes designados por “testes de verificação da compilação” ou “testes de confiança”, são um processo de teste de software no qual os responsáveis pelos testes verificam se a compilação implementada é estável. Os testes de fumo validam se é possível prosseguir com outros testes de software. Consistem num número mínimo de testes executados em cada compilação para testar as funcionalidades críticas do software.
Testes de sanidade
Os testes de sanidade são um tipo de teste de software realizado após a entrega de uma compilação de software com pequenas alterações no código ou nas funcionalidades, para confirmar que os erros foram resolvidos e que não foram introduzidos novos problemas devido a essas alterações. O objetivo é confirmar que a funcionalidade proposta funciona, de forma geral, conforme esperado.
Testes de regressão
Os testes de regressão são um tipo de teste de software no qual voltamos a testar as funcionalidades existentes para validar que continuam a funcionar corretamente após quaisquer alterações ou atualizações à aplicação de software. Os testes de regressão garantem que as novas alterações ou atualizações não afetaram a funcionalidade existente da aplicação de software.
Testes de compatibilidade
Os testes de compatibilidade são utilizados para garantir que a aplicação de software funciona corretamente em diferentes plataformas, dispositivos e navegadores. Verificam se a aplicação de software é compatível com várias configurações de hardware e software

Níveis de teste
Os testes de software podem ser categorizados em diferentes níveis com base no âmbito e nos objetivos dos testes. Seguem-se os níveis comuns dos testes de software:
Testes unitários
Os testes unitários são o primeiro nível de testes e centram-se no teste de componentes individuais ou unidades de código de forma isolada. Os testes unitários verificam se cada unidade de código funciona conforme esperado e cumpre os requisitos especificados.
Testes de integração
Os testes de integração centram-se no teste das interações entre diferentes módulos ou componentes da aplicação de software. Os testes de integração verificam se os módulos ou componentes funcionam em conjunto conforme previsto e cumprem os requisitos especificados.
More Articles
Testes de sistema
Os testes de sistema são o nível de testes em que toda a aplicação de software é testada como um sistema completo. Os testes de sistema verificam se a aplicação de software cumpre os requisitos especificados e funciona conforme esperado em vários cenários.
Testes de aceitação do utilizador
Os testes de aceitação são o nível de testes em que a aplicação de software é testada na perspetiva do utilizador final. Os testes de aceitação verificam se a aplicação de software satisfaz as necessidades e os requisitos do utilizador final e funciona conforme esperado no ambiente do utilizador. Os tipos comuns de testes de aceitação do utilizador são os testes alfa e os testes beta.
Cada nível de testes é importante e serve um objetivo específico no processo de testes de software. Os testes devem ser realizados em cada nível para garantir que a aplicação de software atinge o nível pretendido de qualidade e funcionalidade e funciona conforme esperado em vários cenários.
Princípios dos testes de software
Existem sete princípios fundamentais dos testes, conforme definidos pelo ISTQB:
- Os testes demonstram a presença de defeitos, não a sua ausência: não é possível garantir que a aplicação não tem defeitos apenas porque foi testada. No entanto, após os testes, a confiança no produto pode aumentar.
- Os testes exaustivos são impossíveis: a maioria das aplicações é extremamente complexa, pelo que é impossível testar todas as combinações e variações possíveis, especialmente porque o tempo e os recursos disponíveis para os testes também são limitados.
- Testes antecipados: quanto mais cedo forem descobertos os erros e defeitos durante o ciclo de vida do desenvolvimento de software, mais fácil será corrigi-los. É aqui que o Agile acerta, uma vez que as atividades de teste começam muito cedo.
- Os defeitos agrupam-se: isto significa que as áreas onde foram encontrados defeitos terão, muito provavelmente, ainda mais defeitos. De acordo com o princípio de Pareto, 80% dos defeitos podem ser encontrados em 20% das funcionalidades.
- O paradoxo do pesticida: executar repetidamente os mesmos testes sem os atualizar não deverá revelar novos problemas.
- Os testes dependem do contexto: as aplicações serão testadas de forma diferente consoante o seu contexto - por exemplo, testa-se uma API de forma diferente de uma interface de utilizador, e as aplicações Web são testadas de forma diferente das aplicações móveis ou de ambiente de trabalho.
- Falácia da ausência de erros: em suma, o facto de os defeitos terem sido encontrados e corrigidos não significa que o software seja útil para os seus utilizadores.
Conclusão
Os testes de software são um domínio muito complexo e podem ser executados muitos tipos de testes. É importante adaptar a sua estratégia de testes com base no contexto do produto de software que está a ser testado. Existem inúmeros recursos sobre testes de software, incluindo podcasts, livros e muito mais.
Se gostou deste artigo, subscreva o boletim informativo do QA Lead e seja o primeiro a saber quando forem publicados novos artigos sobre testes e qualidade.




