Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

TESTE DE SOFTWARE 
Motivação do Teste de SW 
• Mercado de soluções cada vez mais competitivo; melhores 
práticas e soluções tecnológicas que atendam aos requisitos 
estabelecidos. 
• A adoção de processos no desenvolvimento de produtos de 
software. 
• Nesse contexto, procura-se: 
• Funcionalidades: alinhamento com os requisitos. • Prazo: rápido e 
suficiente. • Custo: adequado. • Qualidade: relevante para os clientes. 
O Teste de SW provê a informação para direcionar o projeto, reduzir e 
gerenciar riscos e garantir o reparo dos erros importantes. 
• Frequentemente, o Teste de SW é responsável pela conformidade 
contratual ou regulatória de um projeto. 
• Originalmente, o Teste de SW é parte da estratégia de garantia da 
qualidade onde a análise da causa raiz permite reduzir a incidência 
de falhas. 
Veremos que as revisões técnicas são mais eficazes na detecção e 
remoção de defeitos, porém, os testes são importantes para 
complementar às revisões e aferir o nível de qualidade proposto. 
• Apesar da sua relevância, a realização de testes é, quase sempre, 
limitada por restrições de cronograma e orçamento. 
Os Testes de SW são indicadores da qualidade do produto, mais 
do que meios de detecção e correção de erros. • Quanto maior o número 
de defeitos detectados em um software, provavelmente maior também o 
número de defeitos não detectados. 
• A ocorrência de um número anormal de defeitos em uma bateria de 
testes indica uma provável necessidade de redesenho dos itens testados. 
O conceito de Erro, Defeito e Falha 
Definições da norma IEEE 610 
• Um defeito ocorre quando uma pessoa comete um engano, chamado de 
erro, na realização de alguma 
atividade relacionada ao desenvolvimento de SW. 
• O especificador do projeto pode não compreender 
corretamente um requisito e criar um projeto que não condiz com a 
verdadeira intenção do cliente. Esse defeito do projeto é uma codificação 
do erro e pode levar a outros defeitos. 
A falha pode ser descoberta antes ou depois de o sistema ser entregue ao 
cliente, durante os testes ou durante a operação e a manutenção. 
• Como a documentação dos requisitos pode conter defeitos, uma falha 
indica que o sistema não está atuando como requerido, embora ele possa 
estar atuando conforme o especificado. 
Portanto, um defeito é uma visão interna do sistema, observada pelo 
ponto de vista dos desenvolvedores, enquanto uma falha é vista à partir 
de um referencial externo ao sistema: um problema que o usuário vê. 
• Nem todo defeito corresponde a uma falha. Se um código com defeitos 
nunca for executado ou se um estado específico nunca ocorrer, então o 
defeito nunca fará o código falhar. 
O que é um BUG? 
Quando ocorre? 
• Na interpretação errônea de um requisito e/ou na especificação do 
sistema. 
• Na codificação/sintaxe do código fonte. 
• Quando existe falta de familiaridade com a tecnologia utilizada. 
• Na integração de múltiplos sistemas. 
 
 
 
Quem deve testar? 
• Os desenvolvedores não são as pessoas mais adequadas para testar seus 
próprios produtos. 
• Assim como nas revisões aos pares, os autores têm maior dificuldade em 
enxergar problemas, comparados com pessoas que não participam do 
desenho e da implementação. 
• Logo, o desenvolvedor tem uma “visão menos crítica” de seu próprio 
trabalho. 
O planejamento e o desenho dos testes devem ser feitos por pessoas 
experientes, que conheçam adequadamente a metodologia de testes 
utilizada, bem como a tecnologia e o produto que se pretende validar. 
• Por outro lado, a execução de testes baseados em planos e 
especificações de testes bem detalhados pode ser feita por pessoas 
menos experientes, ou até parcialmente automatizada. 
Postura pragmática: O testador pragmático é realista e objetivo; suas 
decisões são baseadas no seu conhecimento teórico e prático das técnicas 
de teste e nas ferramentas disponíveis no mercado. 
• Flexível: flexibilidade é um pré-requisito para qualquer profissional de TI 
e na atividade de testes é exigido mais ainda, pois os requisitos mudam, os 
prazos afunilam e o especialista em teste não pode ser a verso as 
mudanças e deve-se adaptar com facilidade as novas realidades. 
• Criativo: deve pensar em todas as situações possíveis de teste e até as 
que aparentam ser impossíveis. 
• Crítico: colocar sempre em dúvida aquilo que está em teste, não se 
contentar com resultados aparentes, ter um olhar crítico. 
• Incansável: sempre interrogar e investigar a causa raiz dos problemas; 
testar a exaustão o software, nunca acreditar que não há mais defeitos. 
 
 
• Assertivo: nunca pressupõe ou se baseia em informações subjetivas; 
suas suposições são aferidas a fim de garantir a sua veracidade. 
• Diplomata: foca os seus esforços nos problemas ao invés de focar nas 
pessoas que os causaram; deve saber se comunicar com o desenvolvedor, 
nunca desprezar ou criticar negativamente o seu trabalho. 
• E por fim, o especialista em teste deve ser um generalista, alcançando 
conhecimentos gerais que muitas vezes não são o alvo do teste. 
Objetivos do Teste de SW 
• Localizar os erros na build, provendo informações consistentes aos 
desenvolvedores de maneira que seja possível identificar as causas do 
defeito e corrigi-lo. 
• Adquirir confiabilidade sobre o nível de qualidade da aplicação. 
• Prevenir defeitos através do envolvimento da equipe de testes desde o 
início do projeto, passando pelas revisões, até o planejamento avançado 
da fase de validação. 
Um objetivo fundamental de toda a metodologia dos testes é maximizar a 
sua cobertura, ou seja, a quantidade potencial de defeitos que podem ser 
detectados por meio da fase de validação. 
• Deseja-se conseguir detectar a maior quantidade possível de defeitos 
que não foram apanhados pelas revisões, dentro dos limites de custo e 
prazo estipulados para o projeto. 
• Prover informações sobre os aspectos fundamentais que envolvem a 
qualidade da aplicação. 
• Para serem eficazes, os testes devem ser cuidadosamente desenhados e 
planejados. 
• Testes irreproduzíveis são inúteis e devem ser evitados. 
• Durante e após a realização dos testes, os resultados de cada teste 
devem ser minuciosamente inspecionados, comparando se resultados 
previstos e obtidos, pois nem sempre é óbvio quando um teste detectou 
um defeito. 
 
 
 
Métodos e Técnicas de Teste 
• Basicamente, existem duas maneiras para construção dos casos de 
teste: 
• Método da caixa branca: tem por objetivo determinar defeitos na 
estrutura interna do produto, através do desenho de testes que exercitem 
suficientemente os possíveis caminhos de execução. 
• Também chamado de Teste Estrutural, pode detectar, entre outros, 
falhas de sintaxe ou ausência de comandos, por exemplo. 
Método da caixa preta: tem por objetivo determinar se os requisitos 
foram total ou parcialmente atendidos pelo produto. 
• Os testes de caixa preta não verificam como ocorre o processamento, 
mas apenas os resultados produzidos. 
• Também chamado de Teste Funcional, pode detectar, entre outras, 
funções não implementadas ou erros nas interfaces do sistema. 
Testes de Unidade têm por objetivo verificar um elemento que possa ser 
logicamente tratado como uma unidade de implementação. Identifica 
erros nos módulos de um sistema individualmente, antes que possam ser 
integrados. 
• Em produtos implementados com tecnologia orientada a objetos, uma 
unidade é tipicamente uma classe. 
Apenas unidades especialmente críticas possuem Testes de Unidade 
realizado em baterias devidamente formalizadas. 
• Seriam unidades cuja falha pudesse acarretar consequências graves, 
como risco de vida ou perdas materiais consideráveis. 
• Normalmente, os testes de unidades são feitos pelos próprios 
desenvolvedores, como parte do fluxo de implementação. 
 
 
 
 
Testes de Integração têm por objetivo verificar as interfaces de uma 
arquitetura de produtoa medida que são agrupadas. 
• Esses testes têm por objetivo verificar se as unidades implementadas em 
cada iteração funcionam corretamente, em conjunto com as unidades já 
implementadas em iterações anteriores, realizando corretamente os casos 
de uso que se quer nessa iteração. 
• Existe tipicamente uma bateria de testes de integração para cada 
iteração de desenho implementável. 
Testes de Sistema validam o produto como um todo, verificando se as 
funcionalidades atendem aos resultados esperados (Testes Funcionais). 
• Esta validação tem por objetivo verificar se a aplicação cumpre os 
requisitos inicialmente propostos. 
Uma categoria especial de baterias de teste é formada pelos Testes de 
Regressão, que executam novamente um subconjunto de testes 
previamente executados em uma das baterias anteriormente descritas. 
• Seu objetivo é assegurar que alterações em partes do produto não 
impactaram em partes anteriormente implementadas. 
Os testes de regressão, via de regra, devem ser automatizados, pois 
representam um aumento considerável ao escopo de testes, impactando 
diretamente em esforço e prazo. 
• É importante esclarecer que a automatização de testes não deve ser 
considerada como a única e melhor solução na performance e qualidade 
da fase de testes; tornar um escopo de testes automático tem custo e 
prazo relevante, sendo necessário determinar se o ganho a ser atingido 
justifica sua implementação. 
Testes de Aceitação têm por objetivo validar o produto, ou seja, verificar 
se ele atende aos requisitos especificados sob a óptica do cliente. 
• Neste contexto, os testes devem (preferencialmente) ser executados no 
ambiente do cliente e supervisão do fornecedor. 
• Essa bateria é parte do procedimento que atesta a aceitação do produto 
pelo cliente. 
 
O Teste Não-funcional deve ser executado para medir as características 
que podem ser quantificadas em uma escala variável, como o tempo de 
resposta em um teste de performance. 
• Exemplo de requisitos não-funcionais: 
• Segurança 
• Desempenho 
• Manutenibilidade 
• Portabilidade 
• Confiabilidade 
Os Testes Não-funcionais podem ser realizados em todas as fases de teste 
e são normalmente executados com ajuda de ferramentas especializadas, 
com grande planejamento, avaliação arquitetural e aplicando técnicas 
avançadas de validação. 
Considerações Finais 
• É importante que os todos os envolvidos na produção de software 
reconheçam que não é possível desenvolver sistemas com qualidade, 
cumprir prazos e custos e atender às expectativas dos usuários sem ter 
um processo de testes definido, compreendido e utilizado por toda a 
equipe. 
• O teste de software é hoje um dos fatores críticos para o sucesso no 
desenvolvimento de software e consequente manutenção das empresas 
neste ramo.

Mais conteúdos dessa disciplina