Baixe o app para aproveitar ainda mais
Prévia do material em texto
Engenharia de Software e Gerencia de Projetos Engenharia de Software e Gerencia de Projetos 2Teste de software – conceitos Teste de software é uma disciplina da Engenharia de Software aplicada para executar o software de uma maneira controlada com o objetivo de avaliar se o mesmo comporta o especificado. Considerada nos anos 60, 70 e 80 como uma disciplina do Ciclo de Desenvolvimento para provar que o software estava funcionando. Era considerada uma disciplina de alto custo e alto consumo de recursos e tempo. Na década de 90 com o aumento da produção de softwares, a disciplina de teste passou a ocupar um espaço essencial na busca da qualidade. Atualmente foi criada a função “Analista de Teste”, específica para o profissional que testa softwares, o que faz com que aumente a necessidade de estudo das técnicas e aprimore a metodologia para realizar os testes. Testar um software não é só retirar os erros de execução. Envolve a validação dos requisitos solicitados contra os resultados gerados, a constatação de que o software funciona com um tempo de resposta compatível com as funções desempenhadas e ainda possui uma usabilidade adequada aos usuários, ou seja, garantir produtos de qualidade e de alta confiabilidade. Na realidade a disciplina de teste de software representa a aprovação do software produzido, gerando a autorização de implantação. Portanto é importante conhecermos os princípios, técnicas e tipos necessários à realização de testes eficientes. ● Conhecer o objetivo, tipos e técnicas relacionados a teste de software. ● Teste de software – conceito e objetivo; ● Estratégias: Nível, técnicas e Tipos de teste de software . Introdução Objetivo Tópicos Abordados Engenharia de Software e Gerencia de Projetos 3Teste de software – conceitos Teste de software - conceito e objetivo A disciplina de teste consiste em validar e verificar os procedimentos desenvolvidos para compor um software. Verificar significa aferir se o software possui componentes corretamente desenvolvidos e, validar significa aferir se o software que está sendo desenvolvido está correto. Isso significa que o software deve não ter erros e atender aos requisitos solicitados e definidos. Os testes são realizados a partir dos requisitos estabelecidos no início do desenvolvimento. Com essa afirmação é possível imaginar que a pessoa mais indicada para realizar os testes seria o analista que levantou e trabalhou os requisitos de sistema ou, o próprio programador que desenvolveu o componente, mas na realidade o ideal é que o testador seja um profissional não envolvido no desenvolvimento. Assim os testes serão realizados de forma isenta. O profissional envolvido tende a testar os procedimentos que são conhecidos pela sua mente e conduz os testes a obter resultados corretos. Testar sistema não é uma tarefa fácil, pois é preciso avaliar os aspectos funcionais, referentes a funcionalidade do sistema, mas também os aspectos não funcionais: Operabilidade (como funciona o software), Observabilidade (facilidade na visualização dos resultados, coerência na geração das saídas, sinalizações de erros), Controlabilidade (até que ponto o processo pode ser controlado ou automatizado), Decomposabilidade (os módulos de software podem ser testados independentemente), Simplicidade (qual o nível de complexidade da estrutura do software), Estabilidade (poucas alterações durante os testes), Compreensão (a documentação do componente é clara). A atividade de teste exige conhecimento, planejamento, projeto, execução, acompanhamento, recursos e uma grande interação entre as equipes. O teste inicia pela elaboração do plano dos requisitos que serão testados, os resultados esperados e de que forma, a partir da configuração do software (requisitos de sistema) associado à configuração do teste (níveis e tipos de testes convenientes). O analista de teste de posse do planejamento realiza os testes e registra os resultados apurados. Dos resultados apurados, os erros são entregues a equipe de desenvolvimento para correção e, as demais ocorrências são avaliadas em função do nível de qualidade previamente definido na política de teste. Os que apresentarem o nível de qualidade aprovado são enviados ao analista para liberação e, os não aprovados são encaminhados a equipe de desenvolvimento para a devida correção. Não podemos esquecer que os pedidos de correção são analisados antes do efetivo ajuste. A realização do teste busca a identificação de erros, mas um teste apresenta a existência de erros e nunca a ausência deles. Um teste não mostrará a falta de um requisito, por exemplo. Importante Engenharia de Software e Gerencia de Projetos 4Teste de software – conceitos Para melhor compreensão a Figura 1 representa de forma gráfica o fluxo de atividades de teste de software. Conhecendo o fluxo de atividades, que será realizado para todos os testes, independente da metodologia de desenvolvimento de sistemas, linguagem de programação ou complexidade dos processos, serão descritos a seguir as estratégias de teste disponíveis para uso. As estratégias são definidas conceitualmente. A aplicação das mesmas acontecerá em função da natureza do teste a ser aplicado, que nesse caso dependerá do que se pretende testar. A estratégia de teste compreende a definição dos seguintes itens: A seguir os itens serão apresentados em tópicos. ● Técnica de Teste; ● Tipo de teste; ● Nível de teste; ● Figura 1 – Fluxo de atividades ● Fonte: Própria Engenharia de Software e Gerencia de Projetos 5Teste de software – conceitos Estratégias: Nível, Técnicas e Tipos de Texte de Software Técnicas de teste Técnica estrutural (caixa branca) A técnica estrutural, também conhecida por caixa branca é a técnica aplicada para descobrir falhas de construção interna das unidades ou componentes, ou seja, estruturas de condições e repetições desnecessárias ou confusas e, também verifica o uso dos padrões estabelecidos pela instalação. A técnica estrutural garante que: ● Os caminhos independentes dentro de uma unidade tenham sido exercitados pelo menos uma vez; ● Todas as decisões lógicas para valores falsos ou verdadeiros sejam contemplados nos testes; ● Executar todos os limites operacionais das estruturas de repetição Técnica baseadas em erros Técnica baseada na busca de erros freqüentes cometidos durante o desenvolvimento de sistemas. É uma técnica imediatista que é adotada pelos programadores durante o desenvolvimento, mas não deve ser desprezada na elaboração do plano completo, considerando a teoria de que o próprio autor sempre busca testar o correto. Técnica funcional (caixa preta) A técnica funcional, também conhecida por caixa preta é a técnica aplicada para validação das funcionalidades, ou seja, aferir se os resultados obtidos estão de acordo com as entradas e, se o produto desenvolvido corresponde ao solicitado e encomendado ao cliente. A técnica estrutural é muito importante, pois é preciso percorrer todos os caminhos previstos para obter a qualidade total no processo de desenvolvimento. O apelido caixa preta é devido ao descompromisso de verificar como o software foi construído. O que importa para essa técnica são os resultados produzidos. Importante Fatos Históricos Engenharia de Software e Gerencia de Projetos 6Teste de software – conceitos Os testes são usados para validar: ● A operacionalidade das funções do software; ● A qualidade dos dados de entrada (são realizadas críticas?) ● A qualidade das saídas produzidas; ● A atualização das informações nas bases de dados (restrições e correções); ● O desempenho do processo. Tipos de teste Os tipos de teste possuem características próprias. Algunstipos são específicos a um nível, mas em geral, podem ser utilizados de acordo com a necessidade do negócio apresentada durante o desenvolvimento de sistemas. São eles: ● Teste de funcionalidade: busca de erros funcionais, ou seja, erros relacionados ao funcionamento da unidade ou componente. ● Teste de interface: verifica a usabilidade do projeto de interface, assim como a ordem dos campos (deve ser o mais intuitivo para o usuário), as críticas realizadas para garantir a qualidade da informação entrada, o formato das informações de entrada/saída. ● Teste de conteúdo de informação: verifica as estruturas de dados definidas, criadas e alimentadas no banco de dados. ● Teste de desempenho: verifica se o comportamento do sistema é adequado ao nível de tarefas desenvolvidas. ● Teste de carga (stress): verifica o comportamento do sistema diante de situações anormais de recursos em quantidade, freqüência ou volumes. ● Teste de sensibilidade: verifica o comportamento do sistema a partir de informações que possam causar instabilidade ou processamento impróprio. ● Teste automático: os testes automáticos vêm se tornando uma prática na rotina de testadores de sistemas, pois agilizam o processo. Atualmente estão disponíveis alguns softwares de teste gratuitos, como: junit, mantis, testlink, selenium e jmeter. Os testes automáticos são executados a partir de uma definição prévia e geram relatórios de resultados obtidos. ● Teste de regressão – consiste em repetir testes já realizados a partir de ajustes efetivados em unidades relacionadas para garantir que novos erros não tenham sido inseridos. ● Teste alfa – teste realizado pelo usuário nas instalações do desenvolvedor. O teste ALFA favorece o desenvolvedor na medida em que todo o ambiente instalado está ao alcance para qualquer ajuste que se fizer necessário, mas dificulta o usuário, pois todo material do processo não estará disponível no momento do teste. ● Teste beta – teste realizado pelo usuário nas instalações do usuário. O teste BETA favorece o usuário na medida em que todo material do processo estará disponível no momento do teste. O usuário informa ao desenvolvedor em um intervalo de tempo combinado, as ocorrências. Engenharia de Software e Gerencia de Projetos 7Teste de software – conceitos ● Teste de aceitação – teste realizado pelo usuário final como treinamento, validação de todos os requisitos e obtenção da aprovação para em seguida obter a homologação do software. ● Teste de recuperação – teste realizado para verificar se a recuperação é adequadamente executada em função das falhas simuladas. O processo de recuperação é muito importante para um software, pois todo ambiente operacional está suscetível a falhas e, se o processo de recuperação não for validado de nada adianta os procedimentos de segurança. ● Teste de segurança – teste realizado para verificar a fragilidade do sistema quanto a invasões. Nível de teste O software, na visão da disciplina teste, é dividido em 4 níveis: Componente ou unidade, integração, validação e sistema. Os níveis definem o tipo de teste e resultados esperados, que poderão ser verificação de erro, desempenho, vulnerabilidade a falhas, requisitos, usabilidade, ...;por isso sempre que se vai iniciar um teste o primeiro critério a definir é o nível. Componente ou Unidade Concentra-se em cada unidade de software, de acordo com o que é implementado no código fonte. O componente ou unidade está inserido no sistema como um programa individual, mas na realidade apresenta ligação com outros programas e, no momento do teste de unidade não se tem desenvolvido as outras unidades. Em função disso se faz necessário criar unidades sem função para verificar essa ligação (Figura 2). ● A unidade de ligação criada para executar a unidade em teste é denominada DRIVER, que aceita dados de caso de teste, repassa os dados para a unidade a ser testada e imprime os dados relevantes. ● A unidade de ligação criada para ser chamada pela unidade em teste é denominada STUB, que faz manipulação de dados mínima, imprime verificação de entrada e retorna. ● Figura 2 – Teste unidade x ambiente ● Fonte: Própria Engenharia de Software e Gerencia de Projetos 8Teste de software – conceitos Concentra-se na integração dos módulos do sistema, no projeto e na construção da arquitetura de software. A integração das unidades pode ser realizada a partir dos métodos descritos a seguir. A escolha irá variar em função da equipe e natureza do software em teste. INTEGRAÇÃO TOP-DOWN: a integração acontece de cima para baixo, partindo da unidade de controle principal incorporando à estrutura as unidades subordinadas primeiro pela profundidade (depth-first) ou pela largura (breadth-first), a forma mais apropriada a natureza do negócio (Figura 3). Integração bottom-up: a integração acontece de baixo para cima, partindo da unidade de controle subordinada incorporando à estrutura as unidades de controle. A necessidade de stubs é eliminada, pois os módulos inferiores estarão sempre prontos para o teste (Figura 4). O processo de integração é executado numa série de 4 passos: ● 1. Definir o conjunto de unidade combinados ● para uma estratégia; ● 2. Criar o driver; ● 3. Realizar testes a cada conjunto; ● 4. Remover os drivers e combinar os conjuntos para cima na estrutura do programa. ● Figura 3 – Integração Top-down ● Fonte: Própria ● Figura 4 – Integração Botton-up ● Fonte: Própria Engenharia de Software e Gerencia de Projetos 9Teste de software – conceitos INTEGRAÇÃO INCREMENTAL: a integração acontece em partes, normalmente por eixo de execução (cadastro, movimento, consultas, relatórios,...). Torna a correção dos erros facilitada tanto na detecção do problema quanto na correção. Os testes são mais completos. INTEGRAÇÃO NÃO INCREMENTAL: a integração acontece no final do desenvolvimento e teste das unidades. Não é um método recomendado, pois o número de erros encontrados torna difícil a correção e a descobertas das causas. O processo de integração é executado numa série de 5 passos: Os requisitos estabelecidos com a parte da Análise de Requisitos de software são validados em relação ao software que foi construído. Oferece a garantia final de que o software atende a todas as exigências funcionais, comportamentais e de desempenho. O usuário aceita o sistema. O teste de validação inicia quando o sistema está completamente desenvolvido e testado. São definidos para garantir que os requisitos estejam de acordo como o solicitado pelo usuário, que a documentação esteja completa e consistente e, que outros requisitos como portabilidade, compatibilidade, remoção de erros e manutenibilidade estejam contemplados. Para desenvolvimento no nível de validação é realizada a Revisão de Configuração, que tem o propósito de garantir que os elementos da configuração de sistema tenham sido adequadamente desenvolvidos, catalogados e documentados para apoiar a fase de manutenção do ciclo de vida do software. Testes Alfa e Beta também são utilizados no nível de validação e, para finalizar acontecem os Testes de Aceitação. Importante Engenharia de Software e Gerencia de Projetos 10Teste de software – conceitos Sistema No nível de sistema são realizados os testes de RECUPERAÇÃO e SEGURANÇA. O sistema não pode parar o que justifica a existência de mecanismos de recuperação como contingência de alguma ocorrência inesperada. Uma falha do sistema deve ser corrigida dentro de um período previamente especificado; caso contrário, graves prejuízos econômicos ocorrerão. No teste de SEGURANÇA, o analista desempenha o papel de pessoa que deseja penetrar no sistema. Figura 5 – Representaçãodos níveis de teste A definição de níveis representada uma distribuição de baixo para cima, ou seja, inicia-se o teste do componente ou unidade (menor representação), depois a integração, que é a união dos componentes, seguindo da validação dos requisitos junto ao usuário e, por fim a visão completa, conforme mostra a Figura 5. Engenharia de Software e Gerencia de Projetos 11Teste de software – conceitos NÍVEL x TIPOS A tabela 1 relaciona os níveis de teste com os tipos de teste aplicados. Tabela 1 – Aplicação nível e tipo de teste de software Engenharia de Software e Gerencia de Projetos 12Teste de software – conceitos Avaliação a Distância 1 - Relacione as colunas. Respostas - 1 - (C, A, D e B),, 2 - (C, A, D e B) A - Funcional B - Alfa C - Estrutural D - Beta Qual é a técnica de teste de software que tem como objetivo identificar defeitos nas estruturas internas do software (caixa branca). Qual é a técnica de teste de software que tem como objetivo garantir que os requisitos do software construído estão sendo plenamente atendidos (caixa preta). Marque a alternativa que identifica a modalidade do tipo de teste de validação de software que realiza os testes nas instalações do usuário. Informações são extraídas do programa para compor documentação; 2 - Indique na coluna da direita o nível de teste correspondente ao foco de análise dos testes e marque a alternativa que apresenta a seqüência correta: A - Unidade B - Validação C - Sistema D - Integração Engenharia de sistemas Código Arquitetura do software Requisitos Engenharia de Software e Gerencia de Projetos 13Teste de software – conceitos 3 - Analise as sentenças abaixo e indique V para as sentenças VERDADEIRAS e F para as sentenças FALSAS. A - Os tipos de teste são aplicáveis ao conjunto de características definidas para realização dos testes em cada nível, durante o desenvolvimento de sistemas. B - Para os testes de integração é preciso definir o método: não incremental ou incremental e, top-down ou botton-up; C - Teste de carga, também chamado de stress executa o sistema de uma forma que exige recursos em quantidade, freqüência ou volumes anormais. D - Utiliza-se o conceito de driver e stub para realizar teste de integração E - Teste de funcionalidade é aplicado para a descoberta de erros funcionais. Respostas - 3 - (V, V, V, V e V) Engenharia de Software e Gerencia de Projetos 14Teste de software – conceitos Síntese Resumindo pode-se destacar desta unidade: Teste de software é uma disciplina da engenharia de software para verificar e validar sistemas; Verificar sistemas significa aferir se o sistema está correto, sem erros; Validar sistemas significa aferir e o sistema desenvolvido está correto em relação ao solicitado pelo usuário. Testar software é uma prática realizada para obter qualidade na produção de sistemas, garante a continuidade e reduz custo de manutenção. A estratégia de teste de software é concentrada em Técnicas, tipos e níveis. As técnicas são Estrutural (caixa branca), Funcional (caixa preta) e baseada em erros. Os tipos de teste são: funcionalidade, interface, conteúdo da informação, desempenho, stress/carga, recuperação, segurança, alfa, beta, regressão, aceitação, regressão e sensibilidade. Cada tipo possui uma característica própria. Os níveis são definidos em unidade/componente, integração, validação e sistema. Cada nível utiliza o tipo e técnica apropriada para a natureza do negócio e objetivo. Os testes automáticos estão sendo muito utilizados atualmente para agilizar o processo de teste. ● PRESSMAN, R.G. Engenharia de Software. Rio de Janeiro: McGraw-Hill, 2002. 935p. ● SOMMERVILLE, I.. Software Engineering, 8 ed.-São Paulo: Pearson Addison - Wesley, 2007. Bibliografia Recomendada
Compartilhar