Na última década assistiu-se a uma evolução muito significativa da indústria de testes de software, que deu lugar a múltiplas novas oportunidades, aumentando a relevância desta área para as organizações. É cada vez mais importante garantir o desempenho eficaz das aplicações e dos testes de software, certificando-nos que essas aplicações ou programas são executados com o menor número possível de falhas.
Estas garantias assentam na definição de uma série de atividades que conduzem à execução dos Testes: o Ciclo de Vida de Testes de Software (STLC – Software Testing Life Cycle). Este procedimento identifica quais as diversas fases dos testes de software e quando devem ser realizadas e concluídas. No STLC cada atividade é executada de forma planeada e sistematizada e cada fase tem objetivos e entregáveis diferentes.
Mesmo a nível dos profissionais da área de Testes de Software, com a evolução já referida, existe por vezes uma certa confusão sobre algumas das componentes que fazem parte deste ciclo, assim como as competências e atividades que eles próprios, ou os colegas, estão capacitados para executar.
Vamos por isso esclarecer resumidamente o que são três conceitos essenciais: Níveis de Teste, Tipos de Teste e Execução de Testes.
Níveis de Teste
Segundo a ISTQB® (International Software Testing Qualifications Board), os níveis de teste são grupos de atividades organizadas e geridas em conjunto. Cada nível é uma instância do processo de teste e estão divididos da seguinte forma:
Teste de Componentes (Component Testing)
O Teste de Componentes ou teste unitário ou de módulos, verifica o funcionamento da unidade mais pequena do código de uma aplicação, independentemente da sua interação com outras partes do código.
Geralmente, este nível de teste é realizado isoladamente do resto do sistema. Podem utilizar-se objetos simulados, virtualização de serviços, simuladores ou controladores. O teste unitário pode abranger funcionalidades (por exemplo: correção de cálculos), características não funcionais (por exemplo, procura de fugas de memória) e propriedades estruturais (por exemplo: teste de decisões).
Este nível de teste é efectuado habitualmente pelo programador que desenvolveu o código. Os testes unitários são simples e rápidos, mas não são suficientes. É importante que sejam complementados com outros níveis de teste.
Integração (Integration Testing)
Quando de está a preparar os testes para um projeto, é comum os testes de integração serem esquecidos. Mesmo testando separadamente dois componentes que interagem entre si, usando mocks, virtualização etc, e concluindo que ambas estão a funcionar como esperado, é possível que os dois componentes não funcionem bem em conjunto.
Os testes de integração são mais complexos de desenvolver, manter e mais lentos que os testes de componentes, dado que testam funcionalidades inteiras, muitas vezes, com persistência de dados.
Realizar testes de integração não é testar a lógica dos componentes, mas testar como os diferentes componentes interagem entre si (testes de integração de componentes).
Esta mesma lógica de teste de integração aplica-se a quaisquer elementos que possam ser integrados. Por exemplo, quando temos dois sistemas integrados também devemos endereçar a interação entre estes sistemas recorrendo a testes de integração de sistemas.
Teste de Sistema (System Testing)
O teste de sistema centra-se no comportamento e nas capacidades de todo um sistema ou produto. Consideram-se as execuções das tarefas do sistema de ponta a ponta (End to End Test) e os comportamentos não funcionais exibidos ao executar tais tarefas.
Este nível de teste produz informações que são usadas pelos stakeholders para a tomada de decisões. Pode também satisfazer requisitos ou obrigações normativas e regulamentares. É comum implementar-se este nível de teste, pois simula a experiência do utilizador. É por isso de extrema importância, dado que são os testes mais próximos do que o utilizador final vai encontrar ao usar a aplicação.
Tipicamente, este nível de teste é realizado no ambiente que antecede a produção. O teste de sistema deve focar-se no comportamento geral, funcional e não funcional, de ponta a ponta do sistema, como um todo.
Teste de Aceitação
O teste de aceitação, tal como o teste de sistema, centra-se no comportamento e capacidade de todo um sistema ou produto. Pode produzir informações para avaliar a situação do sistema, no sentido da sua implementação e utilização pelo cliente final (utilizador). O teste de aceitação pode também satisfazer requisitos, obrigações normativas ou regulamentos.
As formas mais comuns de testes de aceitação incluem o seguinte:
- Teste de aceitação de utilizador (UAT)
Consiste em colocar o sistema num ambiente controlado, para que o utilizador da aplicação faça um “TestDrive”. É aqui que podemos recolher informações sobre se o sistema corresponde aos requisitos e se o utilizador consegue executar os processos de negócio com o mínimo de dificuldade, custo e risco.
- Teste de aceitação operacional (OAT)
Esta forma de teste de aceitação é focada na equipa de administração de sistemas. Realizado igualmente num ambiente controlado, pode incluir testes como backup, instalação, recuperação de desastres, gestão de utilizadores, tarefas de manutenção, vulnerabilidade, segurança e teste de performance.
- Teste de aceitação contratual e de regulamentação (Contractual and Regulatory Acceptance Testing)
O teste de aceitação contratual é realizado com base nos critérios de aceitação de um contrato para desenvolver softwares específicos.
- Teste Alfa e Beta
O Teste Alfa é uma forma de teste de aceitação, no entanto, é realizado de uma forma não planeada, disponibilizando o sistema dentro da infraestrutura da empresa que desenvolveu o produto e para um pequeno grupo de pessoas. Essas pessoas são geralmente membros da organização e também do cliente mas não da equipa de desenvolvimento. O objetivo é que essas pessoas forneçam inputs sobre a situação atual do sistema.
O Teste Beta é realizado também de forma não planeada, e pode ser executado por um grande número de pessoas desconhecidas. O sistema é executado na infraestrutura dessas pessoas, que tipicamente não fazem parte da equipa ou da empresa que efetuou o seu desenvolvimento. É utilizado como uma forma de aceitação externa, possibilitando avaliar o feedback do mercado.
Tipos de Teste
Um tipo de teste é um grupo de atividades, destinado a testar características específicas de um sistema de software, ou parte, com base em objetivos de teste específicos.
Os principais tipos de teste são:
Teste Funcional
O teste funcional envolve testes que avaliam as funcionalidades que o sistema deve executar. Os requisitos funcionais podem ser descritos, por exemplo, como especificações de requisitos de negócio, user stories, casos de uso ou especificações funcionais, podendo ainda não estar documentados. O projeto e a execução de testes funcionais podem envolver o recurso a profissionais especializados numa determinada área ou competência, como o conhecimento específico de um problema de negócio que o software resolve, ou o papel específico que o software desempenha ou deverá desempenhar.
O teste funcional é o teste de “o que” o sistema deve fazer.
Teste Não Funcional
Os testes não funcionais avaliam as características dos sistemas e software, como a usabilidade, eficiência de desempenho ou segurança. Pode consultar a norma [ISO25010] que regula os requisitos e avaliação dos sistemas e modelos de qualidade de software.
O teste não funcional é o teste de “quão bem” o sistema deve comportar-se.
Tipos e Níveis de Teste
É possível executar qualquer um dos tipos de teste em qualquer nível de teste, mas não é necessário ter todos os tipos de testes representados em todos os níveis.
Teste Manual e Teste de Automação
Depois da descrição dos principais tipos e fases de teste, avançamos para as suas forma de execução.
Podemos executar os teste de duas formas, manual ou automatizada.
Teste Manual
Tal como o nome indica, o Teste Manual é a forma de uma aplicação ser testada por um ser humano, manualmente. Um especialista em garantia de qualidade (tester) que executa testes manuais garante que a aplicação está a funcionar corretamente, seguindo as condições descritas nos casos de teste.O tester avalia o design, a funcionalidade e o desempenho da aplicação, verificando ainda outros elementos. Os testes manuais são mais recomendados quando se utilizam testes exploratórios, testes de usabilidade e testes de aceitação.
Teste de Automação
Os Testes Automáticos implicam o desenvolvimento de testes programados para serem executados automaticamente, comparando os resultados reais com os resultados esperados. Os Testes Automáticos são executados com o auxílio de ferramentas, scripts e software, sendo principalmente recomendados para realizar testes de regressão, testes de carga e testes de desempenho.
Conclusão
Esperamos ter contribuído para um maior esclarecimento entre os três tópicos abordados.
Relembrando:
- O Teste manual é um Teste manual; já o Teste Funcional, pode ser manual ou automático;
- O teste unitário pode ser um teste funcional (tal como os outros níveis de teste)
- Reduzir o custo e o tempo para a conclusão de um projeto, com qualidade, não pode depender apenas de testes automáticos. É imprescindível realizar a combinação certa entre testes manuais e testes automáticos. Igualmente fulcral, é encontrar um equilíbrio na distribuição dos tipos de testes nos níveis de teste para obter os melhores resultados.
Considere por favor que, para o seu projeto, não é necessário realizar todos os testes que mencionámos aqui. Os testes que deverá executar, dependem do tipo de software que se encontra a desenvolver e de outros fatores, que devem depender de uma análise atenta e cuidada.