Qual é o objetivo dos testes de software? [fechadas]

8

Depois de ler muitos livros, há uma contradição básica:

Alguns dizem que "o objetivo do teste é encontrar bugs", enquanto outros dizem "o objetivo do teste é igualar a qualidade do produto", o que significa que os bugs são seus subprodutos.

Concordo também que, se o teste visasse principalmente a uma busca de bugs, quem faria a verificação real e forneceria as informações de que o software está pronto?

Mesmo por exemplo, Kaner mudou sua definição original de meta de teste, de busca de bugs para provisão de avaliação de qualidade, mas ainda não consigo ver a diferença clara. Eu percebo os dois como igualmente importantes.

Posso verificar o software por sua especificação para garantir que funcione e, nesse caso, os erros encontrados são apenas por produtos. Mas também faço testes apenas para quebrar as coisas.

Também qual definição é mais precisa?

Nota acima, estou me referindo principalmente ao teste de software como um processo.

João V
fonte
1
A que tipo de teste você está se referindo principalmente?
Simon Whitehead
Em geral, teste de software como um processo.
John V

Respostas:

19

Como tenho certeza de que você tem conhecimento, existem muitos tipos diferentes de teste de software, como teste de unidade, teste de integração, teste de aceitação, etc. discussão, só podemos realmente falar sobre "qualidade", como um termo amplo. Você está simplesmente validando o software contra quaisquer medidas de aceitabilidade que deseja aplicar. Em diferentes níveis e tipos de teste, eles variam muito e o único ponto em comum é o aspecto da qualidade.

Os erros (como tradicionalmente definidos) são um tipo específico de problema com o software, mas existem muitos outros. A menos que discutamos um nível específico e mais baixo de teste, não faz sentido limitar a definição a erros. Uma interface do usuário é um bug muito lento ? E o fato de termos esquecido de dizer aos desenvolvedores para adicionar uma cesta à nossa loja virtual? Talvez a confusão ocorra com tipos específicos de teste sendo chamados de "teste de software", mas na verdade é apenas semântica.

Se pressionado para formalizar a definição, eu diria que o teste é um processo de validação do software contra seus requisitos (que também podem ser qualitativos). Um bug é apenas uma violação muito específica dos requisitos (especificamente, uma que o desenvolvedor pensou que já funcionava corretamente).

Edição: Eu provavelmente deveria acrescentar que a palavra "bug" tem significados muito diferentes para pessoas diferentes, e nós deveríamos realmente iniciar essa discussão semântica definindo-a. Estou usando a definição da perspectiva de um desenvolvedor - isso não funciona como eu (o desenvolvedor) pretendia. Geralmente, é baseado em um requisito muito específico ou em uma interpretação muito específica de um requisito. A definição do cliente é normalmente semelhante - isso não funciona como eu (o cliente) pretendia, o que é realmente uma coisa muito diferente. Usando a última definição, você pode quase igualar qualidade e erros, porque qualquer coisa que não atenda aos desejos do cliente é um "erro".

Daniel B
fonte
Eu acho que o seu último parágrafo resume muito bem.
Harald
+1. Eu pretendia votar na época em que elaborei. Aparentemente, eu esqueci de fazê-lo.
David Hammen
Is a UI which is a bit too slow a bug?- eu poderia chamá-lo de bug de usabilidade? What about the fact that we forgot to tell the developers to add a basket to our web store?Eu poderia chamá-lo de bug nos requisitos?
Tarun 12/02
@ Tarun você definitivamente poderia seguir esse caminho. A palavra bug é muito facilmente mal compreendida (geralmente na linha de "programador bagunçado"), então talvez não seja a melhor terminologia. Em relação à questão da "interface do usuário muito lenta", eu estava inclinado a uma medida qualitativa que geralmente não é especificada, mas implícita e esperada pelos clientes. Nesse caso, pode ser quase um "bug de usabilidade" e um "bug de requisitos".
Daniel B
10

Da resposta de Daniel B:

Estou usando a definição da perspectiva de um desenvolvedor - isso não funciona como eu (o desenvolvedor) pretendia. Geralmente, é baseado em um requisito muito específico ou em uma interpretação muito específica de um requisito. A definição do cliente é tipicamente semelhante - isso não funciona como eu (o cliente) pretendia, o que é realmente uma coisa muito diferente.

Essa é essencialmente a diferença entre verificação e validação. A verificação responde à pergunta "Criamos isso certo?" A validação responde à pergunta "Construímos a coisa certa?" Teste de verificação e teste de validação são coisas bastante diferentes. A verificação é uma tarefa muito mais fácil que a validação. Com a verificação, você sabe com o que testar: os requisitos (ou histórias) que explicitam o que o software deve fazer. Há um problema aqui: e se esses requisitos ou histórias estiverem errados? Como você testa esse problema? É isso que a validação tenta resolver.

Ainda outro componente usado em alguns círculos é o conceito de credenciamento. Isso se torna importante quando o software é reutilizado. Exemplo: suponha que você esteja construindo uma simulação de um veículo e precise de um bom modelo de sua unidade de medida inercial. Você encontra um modelo IMU existente na biblioteca de modelos de componentes. Este modelo existente foi cuidadosamente verificado em relação aos requisitos e validado em relação à realidade. O teste é muito extenso, incluindo comparações com dados de voo. Verificado e validado! Parece bom! Apenas reutilize-o como está.

Então, novamente, talvez não. O uso pretendido desse modelo pode ter sido operações inativas, seu uso é modelar um foguete durante a fase de lançamento. O comportamento da IMU durante o lançamento será próximo ao comportamento das especificações: em outras palavras, péssimo. As IMUs geralmente têm muito, muito melhor desempenho que as especificações durante operações inativas. O uso pretendido desse modelo não corresponde ao uso pretendido. É melhor você não reutilizá-lo. As tentativas de acreditação vão além da verificação e validação. Responde à pergunta "É a coisa certa para este uso específico?"

Outro exemplo é o primeiro teste de vôo do foguete Ariane 5. O bug do software que levou ao fracasso do vôo 501 é considerado um dos erros de software mais infames e mais caros de todos os tempos. O software de voo é extremamente caro de construir. Para evitar esses custos enormes, o software de vôo Ariane 5 reutilizou grandes partes do software de vôo Ariane 4. Amplamente verificado e validado, e já usado em um ambiente do mundo real. Então, basta reutilizá-lo como está. Errado. Deveria ter sido credenciado para reutilização. Um evento supostamente "não pode acontecer", envolvendo um estouro de conversão de 64 bits a 16 bits, e o veículo falhou como resultado.

David Hammen
fonte
+1 para a elaboração de verificação x validação, e costumo concordar que a validação é geralmente a mais difícil das duas.
Daniel B
5

Qual é o objetivo dos testes de software?

Em resumo: como os autores das perguntas comentam, "em geral, o teste de software como um processo". - Sua pergunta é ampla e aqui está sua definição no artigo da Wikipedia .

O teste de software é uma investigação realizada para fornecer às partes interessadas informações sobre a qualidade do produto ou serviço em teste. Os testes de software também podem fornecer uma visão objetiva e independente do software, permitindo que a empresa aprecie e compreenda os riscos da implementação do software.

Assim, o objetivo do teste de software é fornecer informações independentes sobre a qualidade do produto / software. - Como isso precisa ser feito e o subprocesso de teste de software? - é uma pergunta diferente para procurar.

Edit: O processo de teste de software precisa ser fornecido de forma independente, com base nos requisitos de negócios. Caso contrário, haveria menos valor nele. De fato, projetos de software de grande alcance (como projetos imobiliários nacionais ou similares) têm uma oferta separada para controle de qualidade, testes e processos de verificação / aceitação de software.

Yusubov
fonte
Independente? Quase nunca. A maioria dos testes é escrita pela mesma organização que cria o produto. Com o desenvolvimento orientado a testes, não é apenas a mesma organização, são as mesmas pessoas. A verificação e validação independentes são caras e raramente são usadas fora do domínio de sistemas altamente críticos.
David Hammen
1
-1 por citar a Wikipedia. É uma definição muito ampla e, porque tirada da wikipeda, apenas alguém perde a opinião.
Andy
2
@ Andy, se a citação indicar a fonte que não é o motivo da baixa da votação. Em segundo lugar, a Wikipedia está publicamente disponível para edição e aprimoramentos. Portanto, não é uma opinião pessoal. É opinião da comunidade.
Yusubov
4

Identifique as regressões de software assim que elas se apresentarem.

O Teste de Unidade, em particular, destina-se a identificar regressões no início da cadeia de construção / teste / implantação

O Teste de Aceitação é mais sobre o cumprimento de um contrato com um cliente . Mas, novamente, se uma parte de um teste de aceitação não for aprovada enquanto deveria, você identificou uma regressão a ser manipulada.

ZJR
fonte
Da maneira como vejo o termo "teste de regressão" usado, o último não seria uma regressão, pois o recurso nunca funcionou dessa maneira. O teste de regressão é uma das coisas nas quais eu, como desenvolvedor, estou muito interessado, mas não é todo o teste de software, você também precisa de verificação e validação, pois David Hammen explicou bem os termos em sua resposta.
Christopher Creutzig
2

Acredito que o livro "A Arte do Teste de Software", de Glenford J. Myers, define melhor:

"Testar é o processo de executar um programa com a intenção de encontrar erros."

Ele contrasta essa definição com várias definições comuns:

  • "Testar é o processo de demonstrar que erros não estão presentes."
  • "O objetivo do teste é mostrar que um programa executa as funções pretendidas corretamente."
  • "Testar é o processo de estabelecer a confiança de que um programa faz o que é suposto fazer."

Em vez de tentar provar que um programa funciona, devemos assumir que o programa possui erros, e o objetivo do teste de software é encontrá-los. Ao fazer isso, a qualidade do software é aumentada, que é o objetivo final dos testes de software.

Avian00
fonte
1
mas devemos cuidar para que o teste não garanta qualidade.
Alinoz
Como costumávamos dizer no negócio de teste de chips, "Você não pode testar a qualidade em um produto"!
Bill IV
1

A resposta de David Hammen está muito bem colocada, embora não seja exatamente o que eu teria dito. Concordo que a verificação responda "Criamos este corretamente?". Qualquer coisa produzida por um processo pode ser verificada. A fabricação envolve verificação constante de que a coisa que está sendo produzida foi produzida corretamente.

Ele então define Validação, que concordamos ser diferente, como "Construímos a coisa certa?" Eu diria que a validação se move na direção oposta, para confirmar exaustivamente o correto funcionamento correto de um projeto. Mais como "Demonstre objetivamente que a solução foi projetada corretamente". Os graus certos de parafusos, os tamanhos certos de variáveis ​​internas. As peças estão à altura do trabalho.

Valide de David: "Construímos a coisa certa?" é uma pergunta de alto nível que não pode ser executada na compilação diária, com polegares para cima ou para baixo. É um julgamento dos requisitos e, em menor grau, do design. Não é uma pergunta sensata dirigida a uma caixa de texto em uma tela ou a um parâmetro em uma API. Não sabe ao certo qual é o nome de uma palavra para correção de requisitos, talvez Validação de Requisitos. Prova exaustiva de que os requisitos correspondem às necessidades do usuário final.

Por outro lado, minha definição para Validar é a prova da exatidão de um design, testes objetivos que mostram as peças selecionadas farão o trabalho. O software Ariane IV que não era adequado para o Ariane V falharia aqui, porque o Ariane IV tinha um intervalo limitado de alterações na taxa de ângulo. O código foi otimizado para esse intervalo limitado e o Ariane V foi capaz de um intervalo maior de taxas de ângulo, o que causou o estouro. Quando os dois computadores de bordo falharam durante o estouro e o fizeram novamente após a reinicialização automática, o sistema de destruição foi acionado.

Como disse Dykstra, "a otimização prematura é a raiz de todo mal".

Nas minhas definições, presume-se que os requisitos sejam corretos e aceitos, validados pelo teste de Requisitos. A validação de design ou código prova que o design, talvez um pouco da implementação, está correto. Ele ainda precisa ser executado corretamente, mas confirmando que é Verificação, teste baseado em Requisitos aceitos e um Design aceito.

Você notará que isso se aproxima dolorosamente do modelo de desenvolvimento Waterfall, que parece prejudicial se acredita-se que descreva sistemas complexos. Não obstante, os Requisitos são diferentes de Design e o Código é uma terceira coisa inteiramente. Acho que meu argumento é que os elementos na Cachoeira são descrições úteis, mas que 'completo' é enganoso, então mudei para 'aceito', o que sugere contingência e mutabilidade.

Projeto de lei IV
fonte
0

o teste de software não tem como objetivo encontrar bugs, mas sim evitar bugs. O teste adequado nos estágios iniciais evita que os erros entrem nos sistemas de produção.

jwenting
fonte
-1

Eu acho que investimentos em testes são feitos para "melhorar a experiência do usuário".

Muitas vezes os bugs são deixados de lado porque não afetam adversamente o uso do produto. Da mesma forma, "igualar a qualidade do produto" também será discriminado pela utilidade de trabalhar em uma área específica. Por fim, o critério "bom o suficiente para enviar" deve ser reconhecido, pois o estado final dos testes é sempre subjetivo.

duanev
fonte
-1

Um software com ótima qualidade é, entre outras coisas, um software com 0 (ou muito poucos) erros. Portanto, uma busca de bugs é um processo para melhorar a qualidade.

Um software que atenda a todos os seus recursos também é um software de ótima qualidade; portanto, testar para validar os recursos é um processo para melhorar a qualidade.

Um software com uma boa experiência do usuário é um software de ótima qualidade e assim por diante ...

Bem, acho que o objetivo dos testes de sotware é melhorar a qualidade, para que você possa fazer alguns testes de caça de bugs, validação e verificação de recursos, alguns testes na interface do usuário, etc.

ilazgo
fonte