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.
fonte
Respostas:
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".
fonte
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?Da resposta de Daniel B:
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.
fonte
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 .
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.
fonte
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.
fonte
Acredito que o livro "A Arte do Teste de Software", de Glenford J. Myers, define melhor:
Ele contrasta essa definição com várias definições comuns:
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte