Garantia de Qualidade de Software
É um conjunto de
atividades técnicas
aplicadas durante
todo
o
processo de desenvolvimento.
• O objetivo é garantir que tanto o processo de desenvolvimento quanto o produto de software atinjam níveis de qualidade especificados.
• VV&T - Verificação, Validação e Teste.
Verificação: Assegurar consistência, completitude e corretitude do
produto em cada fase e entre fases consecutivas do ciclo de vida do
software.
“Estamos
construindo corretamente o
produto?”
. (inspeção,
revisão de produtos e
“walkthroughs”
).
Validação: Assegurar que o produto final corresponda aos requisitos do
software.
Qualidade de Software
Conformidade com requisitos funcionais e de desempenho,
padrões de desenvolvimento documentados, e características
implícitas esperadas de todo software profissionalmente
desenvolvido
.
Definições (terminologia)
Defeito Erro Falha
Defeito:
deficiência mecânica ou algorítmica
que se ativada pode
levar a um erro ou a uma falha.
resultado de um erro encontrado num código ou num documento;
Erro: item de informação ou estado de execução inconsistente.
engano cometido por seres humanos;Definições (terminologia)
Exemplo: A aplicação entra em looping infinito, devido a um erro de lógica, ocasionando o
travamento da mesma.
No exemplo acima citado, o defeito é o looping infinito, que foi causado devido a um erro de lógica do programador e a falha é o travamento da aplicação.
Mitos sobre TESTABILIDADE
Alguns mitos sobre testabilidade atrasam seu uso nos projetos:
Mito: A testabilidade é cara.
A testabilidade não precisa ser cara. Um pequeno investimento durante a fase de projeto pode trazer grandes melhorias na detecção de falhas.
Mito: A testabilidade pode ser um plug-in.
A testabilidade precisa ser gradualmente incluída.
Mito: Aplicações de baixo custo não podem gastar com testabilidade
Defeitos no Processo de Desenvolvimento
A maior parte é de origem humana;
São gerados na comunicação e na transformação de informações; (Principal causa: tradução incorreta de informações);
Permanecem presentes nos diversos softwares produzidos e liberados - (10 defeitos a cada 1000 linhas de código);
Quanto antes a presença do defeito for revelada, menor o custo de correção do defeito e maior a probabilidade de corrigi-lo corretamente;
Solução: introduzir atividades de VV&T ao longo de todo o ciclo de desenvolvimento;
Teste e Depuração
Teste: Processo de executar um programa com o objetivo de revelar a presença
de defeitos. Contribui para
aumentar a confiança
de que o software desempenha
as funções especificadas.
Depuração: é uma conseqüência não previsível do teste. Após revelada a
presença do defeito, ele deve ser encontrado e corrigido;
Teste de Software
Principal Objetivo: certificar-se de que o produto está correto.
Determinar entradas que façam as saídas obtidas diferirem das saídas
esperadas segundo a especificação (busca de um contra-exemplo);
Testes devem ser planejados antes de serem iniciados;
Testes devem ser realizados dos aspectos menos críticos aos mais críticos;
Testes devem ser realizados por diferentes pessoas (principalmente por
pessoas que não participaram do desenvolvimento);
Testes exaustivos não são possíveis;
É um processo destrutivo, sob o ponto de vista psicológico, contrariamente
às demais fases da Engenharia de Software, onde constrói-se um produto;
Defeitos e erros no software não revelados
Falhas a se manifestarem na utilização
pelos
usuários e erros corrigidos
durante a manutenção
.
CUSTOS ALTÍSSIMOS!
Etapas de Teste
GOT;
Planejamento;
Preparação do ambiente de teste;
Especificação – casos de teste;
Execução;
Análise de Resultados – Entrega.
Teste de
SW
teste de SW é o processo que visa a sua execução de forma controlada, com o objetivo de avaliar o seu comportamento baseado no que foi especificado.
Importância dos Testes
Segundo Martin & McClure:
Manutenção contabiliza quase 67% dos custos totais de SW;
20% do orçamento de manutenção é para corrigir defeitos;
25% é gasto para adaptar programas a um novo hardware e SW;
6% é gasto corrigindo documentações;
4% é gasto na resolução de problemas de performance;
Automatização da Atividade de Teste
Ferramentas de Teste
Para a aplicação efetiva de um critério de teste faz-senecessário o uso de ferramentas automatizadas que apoiem a aplicação desse critério.
Contribuem para reduzir as falhas produzidas pela intervenção humana;
Aumento da qualidade e produtividade da atividade de teste;
Aumento da confiabilidade do software
.Estratégias de Teste
Relação entre o processo de
desenvolvimento e uma
aplicados nos menores componentes de código criados, visando garantir que
estes atendem as especificações, em termos de características e funcionalidade;
utiliza, em geral, as técnicas de teste estrutural;
verificam o funcionamento de um pedaço do sistema ou SW isoladamente ou que
possam ser testados separadamente, podendo, inclusive, ser um programa ou um
componente;
Estratégias de Teste
Constrói-se, de uma forma sistemática, a estrutura do programa
realizando, ao mesmo tempo, testes para detectar erros de interface;
Embora os módulos, depois do teste de unidade, funcionem
corretamente de forma isolada, o teste de integração é necessário pois
quando colocados juntos, várias situações inesperadas podem
acontecer;
Teste de
Integração -
Identificar erros associados às interfaces
entre os módulos do software.
O software está montado como um pacote e a validação do mesmo é
realizada através de uma série de testes caixa preta;
Teste de
Validação
Finalidade:
- demonstrar a conformidade aos requisitos funcionais e de desempenho
- verificar se a documentação está correta;
Duas possibilidades:
- aceito
- não está totalmente de acordo com os requisitos: negociar com o usuário.
Engloba o Teste de Aceitação: realizado pelo próprio usuário;
No caso de software desenvolvido para vários usuários:
- teste alfa: realizado pelo usuário no ambiente do desenvolvedor;- teste beta: realizado pelo usuário em seu próprio ambiente;
Estratégias de Teste
Considera o software dentro do seu ambiente mais amplo (todos os aspectos de
interação, como outro hardware, software, pessoas, etc.
Corresponde a uma série de testes que tem por objetivo verificar se todos os
elementos do sistema foram integrados adequadamente e realizam corretamente
suas funções;
Teste de segurança:
tem por objetivo verificar se todos os mecanismos de proteção protegem realmente o software de acessos indevidos. Validam a capacidade de proteção do SW contra acesso interno ou externo não autorizados.
Teste de estresse ou carga:
tem por objetivo confrontar os programas com situações anormais de frequência, volume ou recursos em quantidade. Visam a avaliar a resposta de um SW sob uma pesada carga de dados, repetição de certas ações de entrada de dados, entrada de valores numéricos grandes, ou uma grande quantidade de usuários simultâneos para verificar o nível de escalabilidade, ou seja, o momento onde o tempo de resposta começa a degradar ou a aplicação começa a falhar. Estes testes devem ser aplicados durante os testes de sistema e são também são chamados de testes de estresse.
Teste de desempenho:
tem por objetivo testar o tempo de resposta do sistema e é aplicado, geralmente, para sistemas de tempo real. São também chamados de testes de
Funcional ou Teste Caixa Preta
:
visam verificar a funcionalidade e a aderência aos requisitos, em uma ótica externa ou do usuário, sem se basear em qualquer conhecimento do código e da lógica interna do componente testado (baseada na especificação do software).
Estrutural ou Teste Caixa Branca:
visam avaliar as clausulas de código, a lógica interna do componente codificado, as configurações e outros elementos técnicos (baseada numa implementação em particular).Teste (tipos)
Testes estáticos:
avaliam toda a documentação do projeto, tais como modelos, requisitos, etc.
Testes de configuração:
verificam se o SW está apto a rodar em diferentes versões ou
configurações de ambientes (hardware e software), como por exemplo, diversos browsers
ou versões de browsers.
Teste (tipos)
Testes de usabilidade:
verificam o nível de facilidade de uso do SW pelos usuários.
Deve ser efetuado principalmente em aplicações Web, onde existe muita navegação entre
páginas. As telas de ajuda devem ser avaliadas quanto ao seu conteúdo e clareza de
linguagem, assim como as mensagens de erro. É um tipo de teste subjetivo, baseado nas
opiniões dos usuários obtido através de reuniões, entrevistas ou outras pesquisas. Não deve
ser alocado programadores ou a equipe de testes para realizar este tipo de teste.
Conclusões
A atividade de teste é fundamental no processo de desenvolvimento de software (Qualidade do produto).
Alto custo da atividade de teste.
Desenvolvimento e utilização de ferramentas de teste.
São cometidos muitos erros na fase de Análise de Requisitos.
Erros permanecem latentes e tardam a ser detectados.