Uma visão geral sobre o que é teste de software

Introdução

Esse capítulo tem o objetivo de passar uma ideia geral sobre os conceitos relacionados ao teste de software.

Como esse capítulo está estruturado

O presente capítulo possui quatro seções. Cada uma delas trata de um assunto específico, conforme a lista a seguir:

Conceitos iniciais

O teste de software é uma atividade que tem o objetivo de verificar se os resultados obtidos, através do uso do produto, correspondem aos resultados esperados. Além disso, ela é responsável também por tentar fazer com que o sistema que está sendo testado esteja livre de Defeitos.

Roger Pressmann, diz que o teste de software faz parte de um processo amplo ao qual podemos chamar de Verificação e Validação (V&V). Por Verificação estamos nos referindo a um conjunto de atividade que estão relacionadas com a garantia de que o software "implementa corretamente uma função específica". Já a Validação tem como preocupação o atendimento aos requisitos do cliente.

Segundo Ian Sommerville [SOMMERVILLE], o teste de software é uma etapa dentro do ciclo de vida que visa descobrir os defeitos que um programa possui, antes que ele entre em produção. Isto ocorre antes de o software ser entregue para que os usuários comecem a utilizá-lo.

Edsger Dijkstra, argumenta que os testes apenas são capazes de mostrar a presença de erros e não a sua ausência, pois é possível de usar uma entrada de dados de testes que não seja boa ou até mesmo esquecermos de testar alguma parte do sistema. Assim, os testes não conseguem demonstrar que não há defeitos ou que ele sempre se comportará da maneira prevista em qualquer situação.

Podemos entender que o teste é um processo independente, pois nem sempre quem desenvolve testará o software. Além disso, cumpre lembrar que o número de tipos diferentes de testes varia tanto quanto as técnicas de desenvolvimento.

  1. Envolve processos de (i) inspeção e revisão e (ii) testes do sistema.

  2. Testes do sistema envolvem executar o sistema com casos de teste. Tais casos são provenientes de especificações dos dados reais que deverão ser processados pelo sistema.

  3. O teste é a atividade de V&V mais usada.

Defeito x Erro x Falha

É importante, antes de definirmos melhor o que é teste, diferenciar três termos: defeito, erro e falha. Há autores como [PRESSMAN] que afirmam que dentro da comunidade de Engenharia de Software, esses termos são tratados como sinônimos. Ele, no entanto, faz uma diferenciação entre erro e defeito usando o critério temporal. Assim, temos:

  • Erro: é qualquer problema encontrado antes que o software tenha sido entregue aos usuários finais.

  • Falha: é um problema que é encontrado somente após a entrega para os usuários finais.

Por outro lado, a International Software Testing Qualification Board ISTQB, entidade que certifica os profissionais da área de teste, faz uma distinção maior, adicionando o termo defeito. Ela altera um pouco o significado de erro e falha, criando uma espécie de graduação:

  • Defeito: é uma deficiência mecânica ou algorítmica que, se ativada, pode levar a uma falha. É uma inconsistência no software, algo que foi implementado de maneira incorreta. Ele ocorre em uma linha de código, como uma instrução errada ou um comando incorreto. O defeito é a causa de um erro, porém, se uma linha de código que contém o defeito nunca executar, o defeito não vai provocar um erro.

  • Erro: Erro humano produzindo resultado incorreto. O erro evidencia o defeito, ou seja, quando há diferença entre o valor obtido e o valor esperado, isto constitui um erro.

  • Falha: evento notável em que o sistema viola suas especificações. Ele é o resultado ou manifestação de um defeito ou erro.

Note
Neste material sempre usaremos erro e falha como sinônimos, mas o autor considera importe que você saiba que existem outras maneiras de interpretar esses termos.

Quais são os objetivos do teste de software?

Em seu livro de Engenharia de Software, Roger Pressman elenca três objetivos principais, a saber:

  • Teste é um processo de execução de um programa com a finalidade de encontrar um erro.

  • Um teste bem-sucedido é aquele que descobre um erro ainda não descoberto.

  • Um bom caso de teste é aquele que tem alta probabilidade de encontrar um erro ainda não descoberto.

Isso posto, nos faz pensar que estamos indo contra a visão inicial que alguns de nós poderíamos ter de que um teste bem-sucedido é aquele no qual não são encontrados erros.

Os profissionais que se dedicam a testar softwares são responsáveis por projetar testes que descubram diferentes tipos de erros. Isso deve ser feito de uma forma sistemática dentro de um ambiente em que há sempre uma pressão muito grande em relação ao produto que está sendo testado. Os testes devem ser os mais completos possíveis, mas eles contam com uma quantidade mínima de tempo e devem consumir o mínimo de esforço possível.

Por que executar testes de software?

O teste é importante porque os erros de software podem ser caros ou até tornarem-se perigosos. Erros de software podem causar perdas monetárias e humanas. Nossa história recente está cheia de exemplos.

  • O Voo 501 da Agência Espacial Européia Ariane 5 foi destruído 40 segundos após a decolagem (4 de junho de 1996).

  • O protótipo de foguete de US$ 1 bilhão foi destruído devido a um bug no software de orientação a bordo. Clique no link abaixo para ver como foi o lançamento e a destruição do foguete.

Podemos então dizer a grosso modo, que o teste de software é necessário para detectar os bugs no software e para testar se o software atende aos requisitos do cliente. Isso ajuda a equipe de desenvolvimento a corrigir os erros e entregar um produto de boa qualidade.

Há vários pontos no processo de desenvolvimento de software em que o erro humano pode levar a um software que não atende aos requisitos dos clientes. Alguns deles estão listados abaixo.

  • O cliente / pessoa que fornecer os requisitos, em nome da organização do cliente, pode não saber exatamente o que é necessário ou pode esquecer de fornecer alguns detalhes. Isto eventualmente resultará em falta de recursos no software.

  • A pessoa que está coletando os requisitos pode interpretar erroneamente ou perder completamente um requisito quando documentá-los.

  • Se houver problemas durante a fase de projeto, isso pode levar a erros no futuro.

  • Bugs podem ser introduzidos durante a fase de desenvolvimento por erro humano, falta de experiência, etc.

  • Os testadores podem perder erros durante a fase de testes devido a erro humano, falta de tempo, experiência insuficiente, etc.

  • Os clientes podem não ter a largura de banda para testar todos os recursos do produto e podem liberar o produto para seus usuários finais, o que pode levar estes a encontrarem erros no software.

O negócio e reputação de organizações depende da qualidade de seus produtos e, em alguns casos, até a receita pode depender das vendas de produtos de software. Os usuários podem preferir comprar um produto concorrente se um produto da empresa tiver qualidade ruim. Isso pode resultar em perda de receita para a organização. No mundo de hoje, a qualidade é uma das principais prioridades de qualquer organização.

Atividade

  • Organizar grupos com até 5 estudantes.

  • Cada um dos grupos deverá responder às seguintes perguntas:

    1. Explique por que um programa não precisa, necessariamente, ser completamente livre de defeitos antes de ser entregue ao cliente.

    2. Explique melhor a afirmação que diz que os testes podem detectar apenas a presença de erros e não a sua ausência.

    3. Acesse os links a seguir e escolha qual desses erros foi, em sua opinião, o mais preocupante.: (i) What is Software Testing? (ii) 5 Most Embarrassing Software Bugs in History.

Os grupos terão 30 minutos para a discussão e elaboração das repostas. No fim, todos deverão compartilhar suas respostas. Essa atividade vale 0,25 pontos na nota final.