5
Estudo Dirigido 4 Engenharia de Computação – Tópicos 2, Sistemas de Informações - UFG 2012 Aluno: André Campos Rodovalho – 064896 Testes de Software 1- O que é? Teste de software é o processo de executar programas com o objetivo de encontrar defeitos. Estes erros feitos inadvertidamente podem ter se propagado do projeto ou ser de cunho codificativo. Um projeto bem organizado tem um plano para testes, e sua estratégia é desenvolvida pelo gerente de projeto, engenheiros de software ou especialistas em testes. Testes de desenvolvedor focam na verificação, isto é, garantir que o software implementa corretamente uma função específica. Testes de Revisão de Configuração focam na validação, isto é, conferir se os requisitos do cliente foram satisfeitos. 2- Objetivo O desenvolvimento de software utilizando técnicas e boas práticas em análise, projeto e codificação não oferecem a total garantia de qualidade do produto obtido, apesar de melhorá-la significativamente. Por esta razão, uma etapa fundamental na obtenção de um alto nível de qualidade do software a ser produzido é a realização de procedimentos de teste. O foco é evitar transtornos e prejuízos que serão causados caso os erros apareçam durante o seu uso, estando implantado. Desgastes certamente acontecerão com o cliente nesta situação. Em especial haverá imputação de responsabilidade por danos caso falhas causadas pelo software em sistemas críticos (aqueles sistemas dos quais dependem vidas humanas, como controle de voo e a supervisão de reatores nucleares) sejam detectadas. No caso de programas com este nível de sensibilidade, a atividade de teste pode custar de 3 a 5 vezes o valor gasto nas demais atividades de desenvolvimento do software. 3- Premissas de um bom teste Em geral há ferramentas e formas para automatizar todas as técnicas. Porém isso não elimina o caráter subjetivo do que seja “ software bem testado”, já que na maioria das vezes é impossível cobrir todas as quase infinitas possibilidades de dados de entrada, e consequentemente caminhos lógicos a serem atingidos em execução. Para auxiliar nessas questões foram propostos critérios de teste. Tais critérios podem ser classificados em critério de seleção e critério de adequação. Os critérios de seleção auxiliam a escolher os casos de teste que tenham uma maior probabilidade de revelar defeitos. Os critérios de adequação estabelecem predicados que devem ser satisfeitos para que a atividade de teste seja considerada satisfatória ou mesmo encerrada.

Resumo de Testes de Software

Embed Size (px)

DESCRIPTION

Testes de Software

Citation preview

Page 1: Resumo de Testes de Software

Estudo Dirigido 4Engenharia de Computação – Tópicos 2, Sistemas de Informações - UFG 2012 Aluno: André Campos Rodovalho – 064896

Testes de Software

1- O que é?

Teste de software é o processo de executar programas com o objetivo de encontrar defeitos. Estes erros feitos inadvertidamente podem ter se propagado do projeto ou ser de cunho codificativo.

Um projeto bem organizado tem um plano para testes, e sua estratégia é desenvolvida pelo gerente de projeto, engenheiros de software ou especialistas em testes.

Testes de desenvolvedor focam na verificação, isto é, garantir que o software implementa corretamente uma função específica. Testes de Revisão de Configuração focam na validação, isto é, conferir se os requisitos do cliente foram satisfeitos.

2- Objetivo

O desenvolvimento de software utilizando técnicas e boas práticas em análise, projeto e codificação não oferecem a total garantia de qualidade do produto obtido, apesar de melhorá-la significativamente. Por esta razão, uma etapa fundamental na obtenção de um alto nível de qualidade do software a ser produzido é a realização de procedimentos de teste.

O foco é evitar transtornos e prejuízos que serão causados caso os erros apareçam durante o seu uso, estando implantado. Desgastes certamente acontecerão com o cliente nesta situação.

Em especial haverá imputação de responsabilidade por danos caso falhas causadas pelo software em sistemas críticos (aqueles sistemas dos quais dependem vidas humanas, como controle de voo e a supervisão de reatores nucleares) sejam detectadas. No caso de programas com este nível de sensibilidade, a atividade de teste pode custar de 3 a 5 vezes o valor gasto nas demais atividades de desenvolvimento do software.

3- Premissas de um bom teste

Em geral há ferramentas e formas para automatizar todas as técnicas. Porém isso não elimina o caráter subjetivo do que seja “software bem testado”, já que na maioria das vezes é impossível cobrir todas as quase infinitas possibilidades de dados de entrada, e consequentemente caminhos lógicos a serem atingidos em execução.

Para auxiliar nessas questões foram propostos critérios de teste. Tais critérios podem ser classificados em critério de seleção e critério de adequação. Os critérios de seleção auxiliam a escolher os casos de teste que tenham uma maior probabilidade de revelar defeitos. Os critérios de adequação estabelecem predicados que devem ser satisfeitos para que a atividade de teste seja considerada satisfatória ou mesmo encerrada.

Page 2: Resumo de Testes de Software

A escolha do subconjunto de dados a ser utilizado para o teste pode ser feita com base em aspectos estruturais do software (obtido a partir do código-fonte) ou em aspectos funcionais (a partir da especificação do programa).

Figura 1 – Auditoria de Software

Um aspecto de importância no processo de validação é a chamada revisão de configuração. Ela consiste em garantir que todos os elementos de configuração do software tenham sido adequadamente desenvolvidos e catalogados corretamente com todos os detalhes necessários que deverão servir de apoio à fase de manutenção do software. Esta revisão, algumas vezes denominada auditoria, está ilustrada na Figura 1.

4- Técnicas de Testes

Uma primeira divisão que pode ser estabelecida em relação ao teste de software corresponde à forma de utilização do código obtido na etapa de implementação (ou codificação). Segundo esta ótica, pode-se organizar os testes em estáticos e dinâmicos.

Os testes estáticos são aqueles realizados sobre o código fonte do software, utilizando como técnica básica a inspeção visual. Este tipo de teste é de simples implementação, uma vez que não há necessidade de execução do programa para obter-se resultados.

Os testes dinâmicos são os procedimentos baseados na execução do código objeto (binário ou equivalente) do programa, sendo esta execução realizada com base em subconjuntos de dados — o jogo de teste.

4.1 – Teste Estrutural ou Caixa Branca

Também chamado teste orientado à lógica, a técnica avalia o comportamento interno e detalhes procedimentais do componente de software. Essa técnica trabalha diretamente sobre o código fonte do componente de software para avaliar aspectos tais como: teste de condição, teste de fluxo de dados, teste de ciclos, teste de caminhos lógicos, códigos nunca executados.

Os caminhos lógicos definidos no software são exaustivamente testados, pondo à prova conjuntos bem definidos de condições ou laços. Durante o teste, o “ status” do programa pode ser examinado diversas vezes para eventual comparação com condições de estado esperadas para aquela situação.

Page 3: Resumo de Testes de Software

Apesar da importância do teste de caixa branca, não se deve guardar a falsa ideia de que a realização de testes de caixa branca num produto de software vai oferecer a garantia de 100% de correção deste ao seu final. Isto porque, mesmo no caso de programas de pequeno e médio porte, a diversidade de caminhos lógicos pode atingir um número bastante elevado, representando um grande obstáculo para o sucesso completo desta atividade.

4.2 – Teste Funcional ou Caixa Preta

Quando se fala em teste Caixa Preta de software, refere-se a todo teste que implica na verificação do funcionamento do software através de suas interfaces, o que, geralmente, permite verificar a operacionalidade de todas as suas funções.

Também chamado teste orientado a dado ou orientado a entrada e saída, a técnica avalia o comportamento externo do componente de software, sem se considerar o comportamento interno do mesmo. Dados de entrada são fornecidos, o teste é executado e o resultado obtido é comparado a um resultado esperado previamente conhecido. Como detalhes de implementação não são considerados, os casos de testes são todos derivados da especificação.

Quanto mais entradas são fornecidas, mais rico será o teste. Numa situação ideal todas as entradas possíveis seriam testadas, mas na prática isso é impossível.

4.3 – Teste Baseado em Erros

A técnica de teste baseada em defeitos utiliza certos tipos de defeitos conhecidos e comuns para derivar requisitos de teste. O foco dessa abordagem está nos possíveis erros que o programador ou projetista podem cometer durante o desenvolvimento do software, e que são “manjados” já que muitas vezes eles se repetem independente de quem codifica. Erro causado pela divisão por zero é um exemplo de erro manjado.

Semeadura de Erros e Análise de Mutantes são dois critérios típicos dessa técnica. Os casos de teste gerados são específicos para demonstrar a presença ou ausência dos defeitos.

4. 4 – Teste Alfa e Beta

Apesar do esforço na validação de um software, na maioria das vezes é extremamente difícil para o desenvolvedor prever as diferentes maneiras como o software será utilizado. Principalmente no caso de softwares interativos, os usuários muitas vezes experimentam comandos e entradas de dados as vezes não previstos, o que pode ser um verdadeiro atentado à robustez de um sistema. Da mesma forma, dados de saída ou formatos de apresentação de resultados podem parecer ótimos para o analista, mas completamente inadequados para o usuário.

Quando um software é construído sob demanda, uma bateria de testes de aceitação envolvendo o cliente é conduzida. A duração dos testes de aceitação pode variar entre algumas semanas e vários meses, dependendo da complexidade ou natureza da aplicação.

No caso de um software de prateleira, ou outros que são destinados à utilização por um grande conjunto de usuários, os editores de software fazem uso de um processo

Page 4: Resumo de Testes de Software

denominado teste alfa e teste beta.

Os testes alfa são realizados com um cliente, ou numa amostra de clientes, sendo realizado nas instalações do desenvolvedor do software. O software é utilizado num ambiente controlado, o desenvolvedor observa o comportamento do cliente e registra as anomalias detectadas durante a utilização.

Já os testes beta são conduzidos em uma ou mais instalações do cliente pelo usuário final do software. Neste caso, é praticamente impossível haver um controle da parte do desenvolvedor sobre os erros encontrados. Estes normalmente são registrados pelo próprio usuário e encaminhados ao desenvolvedor na forma de um relatório escrito.

4. 5 – Teste de Recuperação

Neste tipo de teste, o objetivo é observar a capacidade do sistema para recuperar-se da ocorrência de falhas, num tempo previamente determinado. Em alguns casos (cada vez mais frequentes), exige-se que o sistema seja tolerante a falhas, ou seja, que nele seja previsto processamento que permita retomar seu funcionamento mesmo no caso de ocorrência de algumas falhas.

Neste tipo de teste, falhas são provocadas artificialmente (por injeção de falhas), de modo a analisar a capacidade do sistema do ponto de vista da recuperação. Os valores de tempo exigido para recuperação do sistema (seja por ação automática ou devido à intervenção de um operador humano) devem ser registrados e confrontados aos valores especificados.

4.6 – Teste de Segurança

O teste de segurança visa garantir que o sistema não vai provocar danos irrecuperáveis ou expor brechas à sua regra de negócios. Por exemplo, num sistema de informação acadêmica, um aluno deve ter acesso às notas obtidas nas disciplinas que cursou (histórico escolar), mas não deve ter a possibilidade de alterar seus valores.

No teste de segurança, o analista deve desempenhar um papel semelhante ao de um cracker, tentando contornar todos os mecanismos de segurança implementados no mesmo. As ações a experimentar são as mais diversas:

• Derrubar o sistema como um todo.• Acessar informações confidenciais.• Modificar informações na bases de dados.• Interferir no funcionamento do sistema.• Introduzir vírus de computador no sistema.• Sobrecarregar o sistema pela multiplicação de processos executados e etc.

4.7 – Teste de Estresse

O teste de estresse, como o nome indica, consiste em verificar como o sistema vai se comportar em situações limite. Este limite pode ser verificado sob diferentes pontos de vista, dependendo das características do software. Alguns aspectos que podem ser observados neste contexto são:

• Limite em termos de quantidade de usuários conectados a um determinado

Page 5: Resumo de Testes de Software

sistema servidor.• Quantidade de utilização de memória.• Uso em diferentes versões de processadores.• Quantidade de bloqueios encontrados num dado período de utilização.

4.8 – Teste de Desempenho

Este tipo de teste consiste em verificar se os requisitos de desempenho estão sendo atendidos para o sistema como um todo. Este aspecto, torna-se crítico em aplicações envolvendo sistemas embarcados e sistemas multimídias, que pertencem à classe dos sistemas tempo-real. Nestes sistemas, o não atendimento a um requisito de tempo pode afetar de forma irreversível a função do sistema e, no caso de alguns sistemas (os chamados sistemas críticos), a não realização desta função ou o não atendimento a estes requisitos temporais pode resultar em prejuízos catastróficos (risco a vidas humanas ou grandes prejuízos financeiros).

Os testes de desempenho são realizados, geralmente, com o auxílio de instrumentação de hardware e de software que permitam medir como os recursos do sistema estão sendo utilizados. O uso da instrumentação pode facilitar a coleta de dados e o registro de status do sistema nos seus diferentes pontos de funcionamento.

4. 9 – Teste Baseado em Máquinas de Estados Finitos

É geralmente utilizado para testar sistemas embarcados, protocolos de comunicação, sistemas de telecomunicações e outros Sistemas Reativos, enfim; sistemas em que a especificação pode ser modelada como uma MEF (Máquina de Estados Finitos).

O teste baseado em MEF consiste na geração de um conjunto de casos de teste

que consiga encontrar o máximo de defeitos possível em uma implementação. Com isso, é possível verificar se a implementação da MEF está ou não de acordo com sua especificação. Dessa forma, o teste baseado em MEF considera que tanto a especificação quanto a implementação sejam modeladas por uma MEF.

Assim, a implementação contém um defeito no caso em que possuir um comportamento diferente em relação à especificação. Os defeitos podem ser dos seguintes tipos:

• Defeito de Inicialização: quando o estado inicial não é o correto.• Defeito de Transferência: quando o estado atingido por uma transição não é o

correto.• Defeito de Saída: quando a saída gerada por uma transição não é a correta.• Estados Faltantes: quando os estados da implementação precisam ser

aumentados para torná-la equivalente à especificação.• Estados Extras: quando os estados da implementação precisam ser reduzidos para

torná-la equivalente à especificação.