Engenharia de Software Testes de Software Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Motivação • Existe grande possibilidade de injeção de falhas humanas no processo de desenvolvimento de software • Os custos associados às falhas de software justificam um processo de testes cuidadoso e bem planejado Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Motivação • U$59.500.000.000,00 foi o custo das falhas em software nos EUA, apenas em 2002. • U$22.200.000.000,00 em economia, caso a infra-estrutura para testes fosse melhor Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Motivação • Mars Climate Orbiter • Objetivo – Enviar sinais a partir de Marte, após seu pouso no planeta • Desastre – Chocou-se com o planeta • Motivo – Bug no software responsável pela conversão de medidas • Prejuízo – 165 milhões de dólares Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Motivação • Airbus Airbus 320 • Desastre – USS Vicennes derrubou um Airbus 320 em 1988 • Motivo – Bug no software no software de reconhecimento confundindo o avião com um F14 • Prejuízo – 290 mortes Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Motivação • Máquina de Terapia Radiotiva • Desastre – Overdose em pacientes sob tratamento • Motivo – Inabilidade em gerenciar certas condições de disputa • Prejuízo – Morte de 2 pessoas – 6 outras lesionadas Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Motivação • London Ambulance Service • Desastre – Serviço auxiliado por computador falhou nos dias 26 e 27 de novembro de 1992, gerando várias falhas, como o envio de 2 ambulâncias para o mesmo destino, envio de uma ambulância para um local estando outras mais próximas, etc • Motivo – Tudo indica que o problema estava relacionado a alta carga de emergências durante o período. • Prejuízo – 20 mortes Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Motivação • Airbus A300 China Air Lines • Desastre – Avião caiu em 1994 • Motivo – Foi feita uma investigação e, dentre as recomendações, aconselharam mudanças nos softwares de controle • Prejuízo – 264 mortes Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Motivação • Se a indústria automobilística tivesse se desenvolvido como a indústria do software, nós teríamos carros por U$25, fazendo 5000 milhas com um galão de combustível. • Porém, esse carro iria “quebrar” duas vezes por dia, sem um motivo aparente, e quando você solicitasse assistência junto às concessionárias eles iriam dizer para você reinstalar o motor. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Finalidade dos Testes • Verificar se todos os requisitos do sistema foram corretamente implementados • Assegurar, na medida do possível, a qualidade e a corretude do software produzido • Reduzir custos de manutenção corretiva e retrabalho • Assegurar a satisfação do cliente com o produto desenvolvido Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Finalidade dos Testes • Produzir casos de teste que têm elevada probabilidade de revelar um erro ainda não descoberto com uma quantidade mínima de tempo e esforço • Comparar o resultado dos testes com os resultados esperados a fim de produzir uma indicação da qualidade e da confiabilidade do software • Verificar a correta integração entre todos os componentes de software Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Defeitos, Erros e Falhas • Defeito: deficiência mecânica ou algorítmica que, se ativada, pode levar a uma falha • Erro: item de informação ou estado de execução inconsistente • Falha: evento notável em que o sistema viola suas especificações Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Defeitos no Software • A maior parte é de origem humana • São gerados na comunicação e na transformação de informações • Continuam presentes nos diversos produtos de software produzidos e liberados • A maioria encontra-se em partes do código raramente executadas Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Defeitos no Software • Quanto antes a presença do defeito for revelada, menor o custo de correção do defeito e maior a probabilidade de corrigilo corretamente • Principal causa: tradução incorreta de informações • Solução: introduzir atividades de VV&T ao longo de todo o ciclo de desenvolvimento Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Definição de Teste de Software Processo de executar um programa com o objetivo de revelar a presença de defeitos; ou, falhando nesse objetivo, aumentar a confiança sobre o programa. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Teste de Software • Objetivo: revelar a presença de erros • Inexistência de erro: – Software é de alta qualidade? – Conjunto de casos de teste T é de baixa qualidade? • Defeitos e erros não revelados – Falhas se manifestam durante a utilização pelos usuários – Erros devem ser corrigidos durante a manutenção – Alto custo Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Testes de Software • Caso de teste – Especificação de uma entrada para o programa e a correspondente saída esperada – Entrada: conjunto de dados necessários para uma – execução do programa – Saída esperada: resultado de uma execução do programa (oráculo) – Um bom caso de teste tem alta probabilidade de revelar um erro ainda não descoberto Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Processo de Teste • Objetivo – Criar testes para revelar a presença de erros. • Define – Como os testes serão planejados e executados através de atividades e passos, e quando serão executados. • O teste pode ser visto como “destrutivo” ao invés do desenvolvimento que é “construtivo” • O “engenheiro de testes” tenta elaborar casos de teste que têm a intenção de “demolir” o software (descobrir erros) Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Processo de Teste • Quando bem planejado e controlado – Exige menor esforço e tem maior eficácia. • Objetos testados – Módulos de código – Estrutura de dados – ... • É impossível provar a ausência total de erros Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Processo de Teste - Atividades • planejamento dos testes – requisitos a serem testados e priorização – estratégias de testes – cronograma, esforço e recursos exigidos • projeto dos testes – casos e procedimentos de testes • implementação dos testes – scripts e componentes de teste Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Processo de Testes - Atividades • execução dos testes – manual e/ou automática • avaliação dos testes – cobertura – tendência dos defeitos – critérios de sucesso Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Processo de Testes Test cases Design test cases Test data Prepare test data Test results Run program with test data Test reports Compare results to test cases Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Processo de Testes • Quando se acaba de testar? Quando parar? Quando podemos considerar o sistema como testado? • Nunca termina • Critérios de parada – Funcionalidade – Expectativa do usuário – Mercado • Quando o tempo ou o dinheiro acaba • Técnicas estatísticas • Comparação com experiências anteriores Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Abordagens de Teste • Abordagem funcional (“caixa preta”) – Os testes são gerados a partir de uma análise dos relacionamentos entre os dados de entrada e saída, com base nos requisitos levantados com os usuários. – É muito aplicado durante as últimas etapas do processo de teste. – Objetivo • Erros de interface • Erros nas estruturas de dados ou acesso ao banco • Erros de desempenho Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Abordagens de Teste • Abordagem estrutural (“caixa branca”) – Os testes são gerados a partir de uma análise dos caminhos lógicos possíveis de serem executados, de modo a conhecer o funcionamento interno dos componentes do software. – Objetivo • Garantir que todos os caminhos independentes dentro de um módulo tenham sido exercitados pelo menos uma vez • Realizar todas as decisões lógicas para valores falsos e verdadeiros • Executar laços dentro dos valores limites • Executar as estruturas de dados internas Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Estágios de Teste • Teste de unidade – Componentes individuais (ex: classes, métodos) são testados para assegurar que os mesmos operam de forma correta • Teste de integração – A interface entre as unidades integradas é testada • Teste de sistema – Os elementos de software integrados com o ambiente operacional (hardware, pessoas, etc.) são testados como um todo • Teste de aceitação (homologação) – O software é testado pelo usuário final – Envolve treinamento, documentação e empacotamento Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Teste de Unidade • Testar cada método de cada uma das classes • Teste realizado, em geral, pelo próprio programador • Pode ser automatizado (ex: JUnit) Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Conceitos • Driver – programa principal, que aceita dados do caso de teste, passa estes dados para o módulo a ser testado e visualiza os dados relevantes. • Stubs – módulos que substituem outros módulos subordinados. Utiliza a interface do módulo subordinado, manipula os dados e retorna um resultado esperado. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Teste de Integração • A integração dos módulos pode ser feitas através das abordagens top-down e bottom-up: • Top-down – Os módulos são integrados de cima para baixo. O teste usa driver e stubs. O driver é utilizado como módulo de controle principal, e os módulos reais são substituídos por stubs. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Teste de Integração • Bottom-up – a integração é feita a partir do nível mais básico da hierarquia. Os stubs nem sempre são necessários. – Os módulos do nível inferior são combinados. – Para cada combinação é criado um driver que coordena a entrada e a saída dos casos de teste. – O módulo é testado. – O driver é substituído pela combinação de módulos correspondente, que passam a interagir com os módulos do nível superior. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Teste de Sistema • Verifica se a aplicação está funcionando como um todo • A integração dos componentes de software com o ambiente operacional similar ao de produção (hardware, software, pessoas e outros sistemas) é testada • Geralmente é um teste “caixa-preta”, executado por um testador de sistemas (idealmente membro de um grupo independente de testes) Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Teste de Aceitação • Testes de “caixa preta”, realizados pelo usuário a fim de demonstrar a conformidade com os requisitos do software • Envolve treinamento, documentação e empacotamento • Podem ser de duas categorias: – Testes alfa: feitos pelo usuário, geralmente nas instalações do desenvolvedor, que observa e registra erros e/ou problemas – Testes beta: feitos pelo usuário, geralmente em suas próprias instalações, sem a supervisão do desenvolvedor. Os problemas detectados são então relatados para o desenvolvedor Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Tipos de Teste • Teste funcional (regras de negócio) – A funcionalidade geral do sistema em termos de regras de negócio (fluxo de trabalho) é testada – Condições válidas e inválidas • Teste de recuperação de falhas – O software é forçado a falhar de diversas maneiras para que seja verificado o seu comportamento, bem como a adequação dos procedimentos de recuperação. A recuperação pode ser automática ou exigir intervenção humana Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Tipos de Teste • Teste de segurança e controle de acesso – Verifica se todos os mecanismos de proteção de acesso estão funcionando satisfatoriamente • Teste de integridade de dados – Verifica a corretude dos métodos de acesso à base de dados e a garantia das informações armazenadas Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Tipos de Teste • Teste de performance – Tempo de resposta e processamento (para diferentes configurações, número de usuários, tamanho do BD, etc.) – Exemplo • Recuperar uma conta do usuário em x segundos • Processar a transação y em x segundos – São necessários definir • Os servidores e clientes • Sistemas operacionais, servidores de aplicação • Protocolos utilizados Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Tipos de Teste • Teste de volume (carga) – Foca em transações do BD – Verifica se o sistema suporta altos volumes de dados uma única transação – Verifica o número de terminais, modems e bytes de memória que é possível gerenciar Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Tipos de Teste • Teste de estresse – Verifica a funcionalidade do sistema em situações limite – Pouca memória ou área em disco, alta competição por recursos compartilhados (ex: vários acessos/transações no BD ou rede) – Exemplo: pode-se desejar saber se um sistema de transações bancárias suporta uma carga de 100 transações por segundo ou se um sistema operacional pode manipular 200 terminais remotos Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Tipos de Teste • Teste de configuração ou portabilidade – Verifica o funcionamento adequado do sistema em diferentes configurações de hardware/software – O que testar • • • • Compatibilidade do software/hardware Configuração do servidor Tipos de conexões com a Internet Compatibilidade com o browser Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Tipos de Teste • Teste de instalação e desinstalação – Verifica a correta instalação e desinstalação do sistema para diferentes plataformas de hardware/software e opções de instalação – O que testar • Compatibilidade do hardware e software • A funcionalidade do instalador/desinstalador sob múltiplas opções e condições de instalação • A interface do programa instalador/desinstalador Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Tipos de Teste • Teste de interfaces com o usuário – – – – – – – Aparência e comportamento da interface Navegação Consistência Aderência a padrões Tempo para aprender como usar o programa Funcionalidade Algo que a aplicação é esperada fazer, mas é difícil de ser realizado, complicado ou impossível Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Tipos de Teste • Teste de documentação – Verifica se a documentação corresponde à informação correta e apropriada: • online • escrita • help sensível ao contexto • Teste de ciclo de negócios – Garante que o sistema funciona adequadamente durante um ciclo de atividades relativas ao negócio Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho Tipos de Teste • Testes de Regressão – Re-execução de testes feitos após uma manutenção corretiva ou evolutiva. – Em processos de desenvolvimento iterativos, muitos dos artefatos produzidos nas primeiras iterações, como casos e procedimentos de teste, são usados em iterações posteriores nos testes de regressão. Faculdade 7 de Setembro – Sistemas de Informação Engenharia de Software – Prof. Ciro Coelho