Prévia do material em texto
Processo do teste de software e seus princípios Você vai compreender a importância dos testes de software, sua evolução histórica, os principais tipos e técnicas, além de aprender a planejar, aplicar e diferenciar testes estruturais, funcionais, estáticos e dinâmicos. Prof. Carlos Alberto de Farias 1. Itens iniciais Propósito O conhecimento sobre testes de software é essencial para profissionais de TI garantirem a qualidade, segurança e eficiência dos sistemas desenvolvidos. Compreender os tipos de teste e seu planejamento impacta diretamente na entrega de soluções mais robustas e confiáveis ao mercado. Objetivos Justificar a importância da qualidade nos testes, identificando as características dos softwares e os critérios de entrega para o cliente. Avaliar os critérios de seleção e encerramento de testes, reconhecendo os processos e princípios do teste de software para um planejamento eficaz. Diferenciar os tipos de testes de software, reconhecendo o modelo V, as técnicas estáticas e dinâmicas, e os testes estruturais e funcionais. Introdução Os testes de software desempenham um papel fundamental no desenvolvimento de sistemas de qualidade, seguros e confiáveis. Para compreender sua real importância, é essencial olhar para sua trajetória histórica, desde as décadas de 1950 e 1960, quando surgiram as primeiras linguagens de programação modernas — algumas ainda utilizadas atualmente, como o Cobol. A partir desse contexto, é possível entender como os testes se tornaram parte indispensável dos processos de controle de qualidade em projetos de software. Ao longo deste conteúdo, você será convidado a refletir sobre questões fundamentais: o que significa testar? O que, de fato, é um teste de software? Como é possível melhorar os testes realizados? E, ainda, quando saber o momento certo de encerrar o processo de testes? Além disso, será apresentada a estrutura do processo de teste de software, incluindo seus princípios, papéis e responsabilidades. Você também irá explorar o planejamento de testes e compreender por que ele é tão importante para o sucesso dos projetos de desenvolvimento. Outro ponto relevante será o modelo V de desenvolvimento de software, que permite visualizar claramente a relação paralela entre as etapas de desenvolvimento e as de verificação e validação. Esse modelo ajuda a entender como os testes podem ser integrados desde as fases iniciais de um projeto. Por fim, o conteúdo abordará a distinção entre testes estáticos e dinâmicos, apresentando técnicas específicas para cada tipo, além de diferenciar testes estruturais dos funcionais. Essa base teórica e prática fornecerá subsídios essenciais para que você atue com mais segurança e eficiência no planejamento e na execução de testes em projetos reais. • • • 1. Qualidade de teste de software Histórico No início do desenvolvimento dos softwares, quando só existia a função de programador, que era exercida por poucos, não havia atividades de testes no processo do seu desenvolvimento. Na verdade, antes dos anos 1970, não havia nem processo definido de desenvolvimento de software. Comentário O que ocorria nessa época? Tendo em vista que os erros ocorriam, após o software estar pronto, o próprio programador percorria o código para solucionar possíveis erros; Os testes eram feitos pelo próprio usuário. Já no final dos 1960 e início dos 1970, surgiu a "programação estruturada", que recomendava, basicamente, evitar o uso de goto, ou seja, desvio incondicional. Há um consenso entre os programadores que o desvio incondicional é um mau estilo de programação, que gera códigos com baixa qualidade. Nessa época, surgiram, então, os primeiros conceitos de engenharia de software, adotados, principalmente, como modelo nos cursos de Exatas nas universidades em todo o mundo. Assim, os primeiros procedimentos de testes passaram a ser usados, porém de forma bastante tímida. Em 1979, Genford J. Myers, autor do livro The Art of Software Testing, apresentou um trabalho pioneiro e profundo sobre um processo de teste de software. Foi criador de termos muito usados como “caixa branca”, “caixa preta" e "caso de teste". Myers também ficou conhecido pela Regra de 10 de Myers, que mostra que “quanto mais tarde os defeitos forem encontrados, tanto mais caro será corrigi-los”. Entenda graficamente a regra de 10 de Myers: Conteúdo interativo Acesse a versão digital para ver mais detalhes da imagem abaixo. Regra de 10 de Myers. Qualidade de software Nos anos 1980, surgiu o conceito de qualidade de software, processo fortemente relacionado à conformidade com requisitos e à satisfação do cliente, que envolve a delimitação do escopo de um sistema e a volatilidade dos requisitos, lugar-comum no desenvolvimento de software. Alguns fatores afetam o desenvolvimento do software e influenciam na avaliação do usuário, como: Tamanho e complexidade do software. Número de pessoas envolvidas no projeto. Métodos, técnicas e ferramentas utilizadas. Relação custo x benefício do sistema. Custos referentes à correção e remoção de erros. Os testes aconteciam desde a fase inicial do projeto de software até a fase de encerramento e entrega do produto final. Alguns padrões foram criados para a medição e avaliação do processo de desenvolvimento, e o modelo que ganhou maior credibilidade e importância para as empresas desenvolvedoras foi o Capability Maturity Model (CMM), apresentado pelo SEI. Nos anos 1990, surgiram algumas ferramentas de teste que proporcionaram alta produtividade e qualidade no processo. • • • • • Assim, determinados tipos de testes, que antes não eram possíveis de serem executados, tornaram-se de fato uma realidade, proporcionando alta produtividade e qualidade no processo de teste e, consequentemente, na qualidade do software. Assista o vídeo e entenda a importância da qualidade do software. Capability Maturity Model (CMM) Capability Maturity Model (ou Modelo de Maturidade em Capacitação) para Software é um conjunto de processos desenvolvido pela SEI - Software Engineering Institute em 1986 para melhorar o desenvolvimento de aplicações em organizações que trabalham com tecnologias de software. O processo é divido em cinco níveis de desenvolvimento: inicial, repetível, definido, gerenciado com métricas e otimizado. Conteúdo interativo Acesse a versão digital para assistir ao vídeo. Cenário atual do desenvolvimento de software A era digital exigiu que os softwares fossem se adaptando à realidade. Hoje eles fazem parte do nosso cotidiano, estando presentes, por exemplo, nos aplicativos das mais diversas áreas das atividades humanas, como alimentação, transações bancárias, compra e aquisição de produtos, contratação de serviços etc. A Globalização é o processo que proporciona a integração entre diversas sociedades, países e comunidades em todo o mundo, aproximando pessoas, empresas e seus departamentos, clientes, fornecedores etc., seja no âmbito político, cultural, financeiro ou comercial. O destaque maior da Globalização está na integração de mercado existente entre os países. Assim, a exigência pela qualidade, funcionalidade, portabilidade e tantas outras características fizeram com que esses aplicativos atingissem um grau elevado de complexidade e integridade. Por outro lado, provavelmente você já teve experiência com algum software ou aplicativo que não funcionasse a contento. O que pode acontecer se: Bancos perderem milhões? Clientes virem saldos de suas contas sumirem de repente? • • Telefones pararem de funcionar? Aviões tiverem suas rotas desviadas? Vários trens do metrô forem colocados no mesmo trilho? Atenção Softwares que apresentam bugs podem acarretar diversos problemas, como supressão de negócio, prejuízos financeiros, além de perda de tempo e, principalmente, queda na reputação das empresas. Assim sendo, os processos de gerenciamento de testes ganham cada vez mais importância no contextoresposta A afirmação está errada. Segundo Myers, o custo de correção de defeitos tende a aumentar quanto mais tarde o defeito é detectado. Os defeitos encontrados durante a produção tendem a custar muito mais que os encontrados em modelos de dados e em outros documentos do projeto do software. Questão 3 No modelo V, que integra o ciclo de vida de desenvolvimento de software ao ciclo de teste, a validação refere- se ao desenvolvimento, enquanto a verificação se refere ao teste. Identifique se essa afirmação está certa ou errada. Chave de resposta A afirmação está errada. O conceito está invertido: o teste é parte tanto da verificação quanto da validação. Questão 4 _______________ geralmente são executados após a correção de algum defeito ou após a adição de uma nova funcionalidade. Seu objetivo é garantir que nenhum defeito foi acrescentado ao sistema após sua modificação. Assinale a alternativa que preenche a sentença corretamente: A Testes de regressão. B Testes de estresse. C Testes fumaça. D Testes alfa. E Testes integração. A alternativa A está correta. Os objetivos desse teste são garantir que nenhum defeito foi acrescentado ao sistema após sua modificação e também que as mudanças realizadas nessa nova versão não gerarão erros em componentes prontos e testados. O teste de regressão é uma técnica aplicável a cada alteração realizada no software. Consiste em aplicar, antes e depois da alteração, todos os testes que já foram aplicados nas versões anteriores. Por ter essa natureza de repetição, torna-se imprescindível que seja adotada uma ferramenta de automação de testes. Esta técnica pode ser bem aplicada nas fases de testes de unidade, de integração e de sistema. 4. Conclusão Considerações finais Neste conteúdo, estudamos a importância dos testes de software no desenvolvimento de sistemas confiáveis e com alto padrão de qualidade. Iniciamos com uma contextualização histórica, abordando o surgimento das linguagens de programação modernas nas décadas de 1950 e 1960, como o Cobol, e como esse marco influenciou a consolidação dos testes como parte essencial do controle de qualidade em projetos de software. Exploramos as definições fundamentais sobre o que é testar, o que são testes de software e como aprimorar sua aplicação prática, além de refletir sobre o momento ideal para encerrar o processo de testes. Também aprofundamos o entendimento sobre os princípios que norteiam o teste de software, seus papéis e responsabilidades, bem como a importância do planejamento adequado para garantir a eficácia e a eficiência dos testes. Avançamos na compreensão do modelo V de desenvolvimento de software, que estabelece um paralelismo entre as etapas de desenvolvimento e as atividades de verificação e validação. Esse modelo reforça a integração dos testes desde o início dos projetos, promovendo maior alinhamento e qualidade no processo. Por fim, abordamos os diferentes tipos de teste — estáticos e dinâmicos —, além das técnicas associadas a cada um, diferenciando ainda os testes estruturais dos funcionais. Com isso, construímos uma base teórica e prática sólida, essencial para a atuação segura e estratégica na área de testes, contribuindo diretamente para a entrega de soluções tecnológicas mais robustas e eficazes. Explore + Leia os textos: Engenharia de Software - Introdução à Inspeção de Software. Capability Maturity Model for Software. Entenda as diferenças entre testes de aplicações dinâmicos e estáticos no blog da Conviso App Sec. Estudo da qualidade de software na Metodologia V-model e sua interação com metodologias ágeis (SCRUM). Planejar o gerenciamento da qualidade – Escritório de projeto na página do Escritorio de Projetos Qualidade de Software. • • • • • • https://cdn-conteudo.ensineme.com.br/Artigo_Engenharia_de_Software_e0bc2cef01.pdf https://cdn-conteudo.ensineme.com.br/Capability_Maturity_Model_48afddc04c.pdf https://cdn-conteudo.ensineme.com.br/Capability_Maturity_Model_48afddc04c.pdf https://cdn-conteudo.ensineme.com.br/Estudo_da_qualidade_de_software_na_Metodologia_V_2551223c09.pdf https://cdn-conteudo.ensineme.com.br/Estudo_da_qualidade_de_software_na_Metodologia_V_2551223c09.pdf https://cdn-conteudo.ensineme.com.br/qualidade_em_software_f906e420e2.pdf Leia o livro Engenharia de Software, de Roger Pressman. Editora McGraw Hill (6ª edição). Você poderá aprofundar seus conhecimentos sobre o tema Qualidade de software, acessando os seguintes websites: Associação Latino Americana de Testes de Software (ALATS). BSTQB. Centro de Informática - UFPE. Referências AGUIAR, E. P. Didática da história: uma ciência da aprendizagem histórica? XXIII Simpósio Nacional de História. Florianópolis, 2015. Consultado na internet em: 10 mai. 2019. BARTIÉ, Alexandre. Garantia de qualidade de software. 1. ed. Campus, 2002. BEIZER, Boris. Black-Box Testing: techniques for functional testing of software and systems. New York: Wiley, 1995. CROSBY, Philip. Quality is free: the art of making quality certain. Nova York: McGraw-Hill, 1979. DELAMARO, M.E.; MALDONADO, J.C.; JINO, M. Introdução ao teste de software. 1. ed. Rio de Janeiro: Campus, 2007. HETZEL, W. C. The Complete Guide to Software Testing, 1988. HOWDEN, W. E. Theoretical and Empirical Studies of Program Testing, 1987. MYERS, Glenford J. The Art of Software Testing. New York: Wiley, 1979. PEZZÉ, Mauro; YOUNG, Michal. Teste e análise de software. 1. ed. Porto Alegre: Bookman, 2008. PRESSMAN, R. S. Engenharia de Software. 6. ed. Makron Books, 1995. • • • • • • • • • • • • • PRESSMAN, R. S. Engenharia de software: uma abordagem profissional. 8. ed. Rio de Janeiro: Campus, 2016. SOMMERVILLE, Ian. Engenharia de software. 9. ed. São Paulo: Pearson, 2011. SPILLNER, Andreas. From V-model to W-model: establishing the whole test process conquest 2000. In: Workshop on testing non-functional software requirements. Nuremberg, Germany, 2000. • • • Processo do teste de software e seus princípios 1. Itens iniciais Propósito Objetivos Introdução 1. Qualidade de teste de software Histórico Comentário Conteúdo interativo Qualidade de software Conteúdo interativo Cenário atual do desenvolvimento de software Atenção Qual a realidade dos softwares atuais? A necessidade de testes no desenvolvimento de softwares Conteúdo interativo Atenção Definição sobre qualidade de software Fatores externos Fatores internos Garantia de qualidade Conteúdo interativo Garantia de qualidade de software (SQA) Conteúdo interativo Qualidade do processo Verificando o aprendizado 2. Principais Conceitos do processo de teste de software O que é testar? Conteúdo interativo Estratégia de teste Teste de baixo nível Teste de alto nível Processo de teste de software Conteúdo interativo Fases iniciais Fases internas do ciclo Como se dá a interação entre os ciclos de vida? Conteúdo interativo Teste de verificação Testes unitários Testes de integração Testes de sistema Teste de aceitação Conteúdo interativo Atenção Princípios de teste de software Princípios de teste de software 1º Princípio: teste demonstra a presença de defeitos 2º Princípio: teste exaustivo é impossível 3º Princípio: teste antecipado 4º Princípio: agrupamento de defeitos 5º Princípio: paradoxo do pesticida 6º Princípio: teste é dependente do contexto 7º Princípio: a ilusão da ausência de defeitos Características das estratégias de teste Diretrizes que devem ser levadas em conta para o teste A importância dos testes Conteúdo interativo Conteúdo interativo Exemplo - Projetos de controle de voo Conteúdo interativo Quando terminar os testes? Conteúdo interativo Papéis e responsabilidades de teste de software Desenvolvedor Grupo independente de teste (independent group test – ITG) Verificando o aprendizado 3. Ciclo de vida do processo de testes de software Modelo V Conteúdo interativoConteúdo interativo Verificação Validação Conteúdo interativo Vantagens Desvantagens Paralelismo entre as atividades de desenvolvimento e teste de software Exemplo Processo de teste Atenção Teste de migração de dados Teste de unidade Teste de validação Verificação e validação Verificação Validação Conteúdo interativo Conteúdo interativo Testes de verificação e validação Teste de verificação Teste de validação Conteúdo interativo Testes estáticos X testes dinâmicos Testes estáticos e dinâmicos Testes estáticos Testes dinâmicos Exemplo Técnicas de teste Reflexão Teste estrutural X testes funcionais Estrutural Teste estrutural (caixa branca) Teste de regressão Teste de carga Teste de estresse Teste de usabilidade Teste de segurança Conteúdo interativo Funcional Requisitos Regressão Tratamento de erros Manual Interfaces de integração Controle Paralelismo Fases de testes (validação) Testes de unidade Testes de integração Testes de sistema Testes de aceitação Verificando o aprendizado 4. Conclusão Considerações finais Explore + Referênciasdo desenvolvimento do software, uma vez que vulnerabilidades ou falhas podem gerar riscos e causar perdas, em muitos casos, irrecuperáveis. Apesar disso, algumas empresas ainda resistem em investir na área de segurança e testes, por considerar seu custo alto e desnecessário. Essas empresas precisaram quebrar paradigmas e considerar que a implantação de um processo que garanta a qualidade do software é estratégico e vital para a continuidade dos negócios, em um mercado cada vez mais exigente e competitivo. Confira na tabela a seguir as principais demandas de software atuais e a evolução do processo de qualidade e de teste, segundo Bartié (2002). Características 1960 1980 2000 Tamanho do software Pequeno Médio Muito grande Complexidade do software Baixa Média Alta Tamanho da equipe de desenvolvimento Pequeno Médio Grande Padrões de metodologia de desenvolvimento Interno Moderado Sofisticado Padrões e metodologias de qualidade e testes Interno Emergente Sofisticado Organização de qualidade e testes Bem poucas Algumas Muitas Reconhecimento da importância da qualidade Pequeno Algum Significante Tamanho da equipe de qualidade e testes Pequeno Pequeno Grande Tabela. Evolução das empresas desenvolvedoras de softwares. Carlos Alberto de Farias. • • • Qual a realidade dos softwares atuais? Você deve ter percebido que toda a sociedade tornou-se dependente de sistemas de software, que hoje são parte integrante do nosso dia a dia. As empresas desenvolvedoras estão percebendo que os processos de desenvolvimento são estratégicos e agregam valor aos seus negócios, valorizando seus produtos e serviços. Na realidade, a indústria de software não está preparada para atender às exigências do mercado em constante evolução porque não investe em seus processos internos. Um estudo feito recentemente nos EUA mostra o quanto a indústria de softwares está deficitária: 30% dos projetos são cancelados. 70% dos projetos falham nas funcionalidades. Os custos extrapolam em 180% a previsão. Os orçamentos e prazos extrapolam em 200% os cronogramas iniciais. A necessidade de testes no desenvolvimento de softwares Assista ao vídeo e saiba mais sobre os testes de desenvolvimento de software. Conteúdo interativo Acesse a versão digital para assistir ao vídeo. A necessidade e a importância dos testes vão depender do tipo de uso que o software terá. São mais críticos aqueles que podem causar danos à vida humana ou levar a grandes perdas financeiras. Como vimos com Myers, quanto mais precoce a detecção de falhas ocorre, menores os gastos do projeto com reparos e replanejamento. Por esse motivo, a utilização de ferramentas de suporte a testes tem se tornado uma regra no desenvolvimento de softwares. Atenção A qualidade de um produto ou artefato reúne um conjunto de características e propriedades que devem ser satisfeitas segundo as exigências do usuário, de modo a atender a uma medida de conformidade com as especificações, como defeito zero nos componentes e no produto final, obtendo benefício com o alcance da qualidade. Definição sobre qualidade de software • • • • Segundo Pressman (2016), em seu livro Engenharia de Software: "Qualidade de software é a conformidade a requisitos funcionais e de desempenho que foram explicitamente declarados, a padrões de desenvolvimento claramente documentados e a características implícitas que são esperadas de todo software desenvolvido por profissionais." Pressman, 2016. Esse processo visa garantir a uniformidade dos processos e produtos, eliminando defeitos e melhorando o desempenho de suas funcionalidades. Para desenvolver softwares de qualidade, é necessário investir em processos de gestão de qualidade, atuando em todas as fases do ciclo de vida. Alguns fatores internos e externos podem afetar a qualidade do software. Vejamos alguns exemplos: Fatores externos São percebidos tanto pelas pessoas que desenvolvem softwares quanto pelos usuários. Fatores internos São percebidos apenas pelas pessoas que desenvolvem softwares. São exemplos de: Fatores externos: confiabilidade, eficiência e facilidade de uso. Fatores internos: modularidade (conceito no qual o sistema ou software é divido em partes distintas) e legibilidade. É importante notar que a garantia de qualidade de software (Software Quality Assurance) não é algo com que começamos a nos preocupar depois que o código foi gerado, e sim “ao longo de todo o processo de engenharia de software”. Legibilidade Facilidade de leitura em: simplicidade; ortogonalidade; instruções de controle e estruturas e tipos de dados. Todos os métodos, ferramentas e procedimentos definidos pela Engenharia de Software buscam um único objetivo: produzir softwares de alta qualidade. • • Segundo Philip Crosby (Quality is Free): “O problema do gerenciamento da qualidade não é o que as pessoas não sabem. O problema é o que as pessoas acham que sabem”. Garantia de qualidade Os testes também fazem parte dos procedimentos seguidos para garantir a qualidade do processo de desenvolvimento de softwares, assegurada por certificações concedidas por organizações que avaliam o processo, considerando modelos de qualidade, como o CMMI (Capability Maturity Model Integration) e a ISO-12207. Assista o vídeo e entenda como a qualidade do software pode ser medida. Conteúdo interativo Acesse a versão digital para assistir ao vídeo. Garantia de qualidade de software (SQA) Um grande desafio para qualquer programa de qualidade, considerado crítico, é possibilitar que qualquer pessoa faça revisões no trabalho de profissionais experientes. Os gerentes sempre querem os melhores profissionais para projetar o produto, mas geralmente o SQA não pode tê-los. É necessário concentrar esforços em métodos de SQA que permitam um desenvolvimento que possa ser revisado também por pessoas que não são desenvolvedores. Nesse caso, qual o papel do SQA? Monitorar os métodos e os padrões que os engenheiros de software usam e verificar se eles estão usando apropriadamente seus conhecimentos. É importante compreender que as pessoas podem ser experientes em SQA sem, no entanto, serem experientes em projetos de software. Software com qualidade → Investimentos em qualidade em todas as frases do processo de desenvolvimento. Conteúdo interativo Acesse a versão digital para ver mais detalhes da imagem abaixo. Incidência de defeitos: 56% - requisitos; 27% - análise e modelagem; 10% - outros; 7% - implementação. É impossível obter um software com qualidade com processos de desenvolvimento ineficientes. Nos processos de gestão de qualidade, o software deverá atender a todas as exigências do cliente/ usuário. Softwares mal testados causam prejuízos às empresas, como retrabalho, aumento de custo do projeto e informações inconsistentes que podem acarretar decisões equivocadas, além da insatisfação dos usuários. Temos a aplicação de qualidade em duas dimensões: Qualidade do Processo. Qualidade do Produto. Qualidade do processo A preocupação com a qualidade deve estar presente em todas as fases do ciclo de desenvolvimento, inclusive no início e na fase de análise de requisitos do sistema. Quanto mais cedo os problemas forem detectados e corrigidos, mais rápido será o desenvolvimento e com menor custo. Como medir? • • Métricas de software são usadas para ajudar os desenvolvedores a criar softwares com qualidade reconhecida. Alguns garantem que o software é incomensurável, porém desconhecem que existem técnicas que colocam as métricas e medições como práticas fundamentais para a determinação do grau de maturidade dos processos de desenvolvimento, conforme definido nas plataformas CMMI e MPS-BR (melhoria do processo de software brasileiro). O software pode ser medido aplicando-se testes na documentação gerada em cada fase do ciclo de vida. São chamados testes de verificação. Além disso, existem outras técnicas de medição, como a Análise de Pontos deFunção - APF, usada para a medição de projetos de software, seguindo alguns parâmetros de medida de tamanho, em pontos de função - PF, considerando a funcionalidade implementada, sob o ponto de vista do usuário. Verificando o aprendizado Questão 1 O teste do software deve acontecer: (assinale a única opção correta). A No início do processo de desenvolvimento. B No final do processo de desenvolvimento. C No meio do processo de desenvolvimento. D No início e no final do processo de desenvolvimento. E Em todo o processo de desenvolvimento. A alternativa E está correta. A garantia de qualidade de software (Software Quality Assurance) não é algo com que começamos a nos preocupar depois que o código foi gerado, e sim, ao longo de todo o processo de engenharia de software. Questão 2 Com relação ao tamanho e complexidade de software, assinale a opção correta, considerando tais características nos anos 1960, 1980 e 2000. A Em 1980, o tamanho era pequeno e a complexidade alta. B Em 1960, o tamanho era mínimo e, em 1980, a complexidade era relativa. C Em 1960, o tamanho era mínimo e, em 2000, a complexidade era média. D Em 1980, a complexidade era média e, em 2000, a complexidade era alta. E Em 1960, o tamanho era mínimo e, em 2000, o tamanho é o mesmo. A alternativa D está correta. No cenário atual do desenvolvimento de softwares, o conceito de teste ganha complexidade, pois o risco de os softwares não funcionarem a contento cresce de forma exponencial. Myers concluiu que zero-defeito é algo inatingível, ou seja, pela complexidade envolvida e pelo número altíssimo de situações existentes, torna-se impossível imaginar um produto de software “livre de erros”. Sempre existirão erros a serem descobertos. Questão 3 O que estabelece a regra de 10 de Myers? A Quanto mais tardiamente descobrimos os erros, mais caros eles ficam. B Os testes tornam-se mais complexos, pois os riscos de os softwares não funcionarem a contento cresce de forma exponencial. C Não existe garantia de que a solução tecnológica contratada será entregue no prazo e nos custos negociados. D A partir de processos uniformes e consistentes, a tendência é que o produto final gerado, ou seja, o software seja eficiente. E Todas as decisões tomadas durante o processo de desenvolvimento do software podem comprometer a sua qualidade final. A alternativa D está correta. Por volta de 1979, Myers produziu um dos primeiros trabalhos mais completos e profundos sobre um processo de teste de software. Myers é o autor do livro The Art of Software Testing (Glenford J. Myers, Corey Sandler, Tom Badgett), considerado por muitos a primeira obra de real valor sobre teste de software e a criadora de termos muito usados como “caixa branca”, caixa preta" e "caso de teste". Questão 4 Podemos conceituar qualidade de software como: AUm processo sistemático que focaliza todas as etapas e artefatos gerados com o objetivo de garantir a conformidade e uniformidade de processos e produtos, prevenindo e eliminado defeitos. B Um processo que foca em todos os produtos de software gerados pela equipe de desenvolvimento. C Um processo que demonstra que algo funciona corretamente. D Um processo para provar que determinadas funções fazem o que devem fazer. E Um processo para demonstrar que os defeitos não estão presentes. A alternativa A está correta. O conceito de teste ganha complexidade, pois os riscos de os softwares não funcionarem a contento cresce de forma exponencial. Ainda assim, poucas empresas percebem que a implantação de um processo de garantia de qualidade de software é uma questão de estratégia de sobrevivência em um mercado cada vez mais exigente e competitivo. Teste é o processo de demonstrar que os defeitos não estão presentes, que algo funciona corretamente e que determinadas funções fazem o que devem fazer. Seu objetivo real é mostrar que um software está de acordo com suas especificações e que ele atende às expectativas do cliente. Questão 5 Myers concluiu que “zero defeito” é algo inatingível, porém a qualidade de software trabalha com o conceito de zero defeito. O que isto quer dizer? Chave de resposta Representa a não tolerância a erros. O objetivo da qualidade é definir um processo que contenha mecanismos de inibição de defeitos, impedimento de que falhas sejam criadas e propagadas para as fases seguintes. 2. Principais Conceitos do processo de teste de software O que é testar? O teste de software visa garantir a qualidade, minimizando as incertezas e sistematizando os critérios de aceitação. Por meio dele, pode-se avaliar se o software está fazendo o que deveria fazer, de acordo com os seus requisitos, e se não está fazendo o que não deveria fazer. Ele ajuda a validar se: As expectativas de todas as pessoas envolvidas estão sendo atendidas (e se estão alinhadas); O software apresenta um bom funcionamento (parte disso está relacionada às expectativas implícitas – aquilo que é inerente ao produto). Algumas definições: • • "Teste é uma parte inevitável de qualquer esforço necessário para desenvolver um sistema de software." Howden, 1987. "O teste de software é um conjunto de atividades que podem ser planejadas com antecedência e executadas sistematicamente." PRESSMAN, 1985. "Qualquer atividade que, a partir da avaliação de um atributo ou capacidade de um programa ou sistema, seja possível determinar se alcança os resultados desejados." Hetzel, 1988. "Processo de executar um programa ou sistema com a intenção de encontrar defeitos." Myers, 1979. Assista ao vídeo e aprenda sobre teste de software. Conteúdo interativo Acesse a versão digital para assistir ao vídeo. O teste deve ser utilizado para confirmar a qualidade oriunda de aplicação de um processo de Engenharia de Software. Estratégia de teste Por que precisamos de uma estratégia de teste de software? O que ela deve incorporar? Essas perguntas são facilmente respondidas assim: A Engenharia de Software nos auxilia em muitas situações. Uma delas é a atividade de teste, que é um passo do processo de que visa encontrar ou corrigir erros durante toda a construção do software. Devemos incorporar dois tipos de testes: Teste de baixo nível Utilizado para verificar um pequeno fragmento de código-fonte. Nesse caso, saberemos se ele foi implementado corretamente. Teste de alto nível Tem a característica de validar as principais funções do sistema com base nos requisitos definidos pelo cliente. Os testes podem ser usados para descobrir a presença de erros nos softwares, mas infelizmente não mostram a sua ausência. Assim, conseguimos chegar à conclusão que “o teste de software é o processo de executar o software de uma maneira controlada, com o objetivo de descobrir diferenças entre o comportamento previsto e o comportamento observado”. Processo de teste de software Não podemos ter um teste de software sem uma metodologia que seja favorável a esse processo de desenvolvimento, utilizando pessoal técnico qualificado, ambiente e, quando possível, todas as ferramentas adequadas. O documento básico para organizar a atividade de testar, aplicada no contexto da empresa, tem que ser uma metodologia de teste. Tanto o processo de desenvolvimento de software quanto o teste de software tem um ciclo de vida. Vejamos a seguir um exemplo de ciclo de vida para teste de software e a especificação de cada um deles. Conteúdo interativo Acesse a versão digital para ver mais detalhes da imagem abaixo. Ciclo de vida para teste de software. Fases iniciais Planejamento: é a parte inicial. Sem planejamento, não se deve realizar o teste. Nesta fase, é feita a elaboração e revisão da estratégia de teste e do plano de teste; Preparação: paralelamente ao planejamento, precisamos fazer a preparação do ambiente de teste. Para tanto, precisamos incluir equipamentos, rede, pessoal, software e ferramentas. Fases internas do ciclo Procedimentos iniciais: é nesta fase que efetivamente se faz a elaboração do documento. Nela,estabelece-se um acordo entre as partes envolvidas no projeto de teste (as partes envolvidas são usuários e técnicos). Esse acordo deve conter: Objetivo do projeto de teste; Pessoal a ser envolvido; As responsabilidades de cada um; O plano preliminar de trabalho; A avaliação dos riscos; Os níveis de serviços acordados. Especificação: nessa fase, realizamos a elaboração e revisão dos seguintes itens: casos de teste, scripts (para o caso de ferramentas de automação de testes), roteiros de teste e execução dos testes de verificação da documentação do sistema (testes estáticos). • • • • • • Execução: aqui executamos os testes planejados conforme os casos de teste; scripts; roteiros de teste com os correspondentes registros dos resultados obtidos. Entrega: chegamos à última fase do processo. É aqui que fazemos a entrega do sistema para o ambiente de produção. Testes estáticos São testes realizados pela análise do código fonte. O tipo de análise é visual, podendo haver um questionário para acompanhar os testes, inspecionando o código desenvolvido pela equipe de programação. Como se dá a interação entre os ciclos de vida? No nosso exemplo, ficaria assim: Conteúdo interativo Acesse a versão digital para ver mais detalhes da imagem abaixo. Interação entre os ciclos de vida. 1. Teste das unidades individuais de programa. 2. Testes destinados a facilitar a integração de unidades. 3. Testes que usam o sistema concluído. Vejamos algumas estratégias de teste. Teste de verificação Deve garantir a qualidade de todas as etapas do desenvolvimento de sistemas. Nesta etapa, são realizadas inspeções (auditorias com foco nas atividades) e revisões (com foco nas documentações) sobre os produtos gerados. Testes unitários Cada programa ou componente é testado isoladamente para testar sua resposta aos requisitos definidos. Esses testes são realizados no estágio mais baixo da escala de testes e são aplicados nas menores componentes de códigos criados. Componentes de códigos criados Componentes são pedaços de código, módulos, aplicações distintas ou ainda clientes servidores. Assim, é possível garantir que estes atendam às especificações, tanto de garantia quanto de funcionalidade. Por terem que verificar o funcionamento de um pedaço do sistema ou software isoladamente, normalmente são feitos pelos desenvolvedores. Testes de integração Os programas e componentes são integrados pouco a pouco para testar suas interfaces. São executados em uma combinação de componentes para verificar se eles funcionam corretamente juntos, conforme foram especificados, e também normalmente podem ser feitos pelos desenvolvedores. Testes de sistema Nesse momento, todos os programas e componentes estão totalmente integrados, formando um sistema. Esses testes visam à execução do sistema como um todo ou um subsistema (parte de um sistema), dentro de um ambiente operacional controlado, o mais próximo possível do ambiente de produção, para validar a exatidão e perfeição na execução de suas funções. Nesta fase, o teste deve simular a operação normal do sistema, pois serão testadas todas as suas funções da forma mais próxima possível do que irá ocorrer no ambiente de produção. Esses testes são de responsabilidade e feitos pela equipe de teste de software. Teste de aceitação O ambiente é o mesmo ou muito semelhante ao utilizado nos testes de sistema. São os testes finais de execução do sistema, realizados pelos usuários. Nesses testes é verificado se a solução atende aos objetivos do negócio e aos seus requisitos definidos inicialmente, no que diz respeito à funcionalidade e dentro da característica de usabilidade, preocupando-se também com a interação humano/ computador, antes da sua utilização no ambiente de produção. Assista o vídeo e conheça as estratégias de testes de software. Conteúdo interativo Acesse a versão digital para assistir ao vídeo. Quando a organização trata os testes como um processo bem estruturado e muitas vezes paralelo e integrado ao processo de desenvolvimento, os custos de manutenção com certeza são reduzidos. Atenção É importante lembrar que, segundo Myers, o custo de correção de defeitos tende a aumentar quanto mais tarde o defeito é detectado. Defeitos encontrados durante a produção tendem a custar muito mais que defeitos encontrados em modelos de dados e em outros documentos do projeto do software. Quais os benefícios que cada um desses testes pode trazer? Testes unitários Podem remover entre 30% e 50% dos defeitos dos programas. Testes de sistemas Podem remover entre 30% e 50% dos defeitos remanescentes, mas mesmo assim, os sistemas podem ir para a produção ainda com aproximadamente 49% de defeitos. Revisões de códigos Podem reduzir entre 20% e 30% desses defeitos. Tabela. Benefícios dos testes. Carlos Alberto de Farias. Princípios de teste de software Pensando no teste como parte fundamental do ciclo de vida de um software, vamos mostrar os sete princípios fundamentais que envolvem o processo de teste que devem servir como um guia geral, tanto para testadores quanto para desenvolvedores. Veremos mais adiante que ambos participam efetivamente do processo de amadurecimento do sistema. Princípios de teste de software 1º Princípio: teste demonstra a presença de defeitos Os testes conseguem identificar a existência de falhas, mas não podem garantir a ausência delas. Mesmo se nenhum erro for identificado em uma bateria de testes, não é possível afirmar que o software está livre de falhas. 2º Princípio: teste exaustivo é impossível Deve-se calcular o esforço dos testes baseando-se nos riscos e prioridades. 3º Princípio: teste antecipado Ao desenvolver um software, as atividades de teste devem começar o mais cedo possível no ciclo de vida do desenvolvimento do software. Assim diminuímos o custo das correções e possibilitamos que erros de design, requisitos e arquitetura sejam encontrados no momento ideal. Logo que os requisitos ou modelagem do sistema estiverem prontos, é possível começar o trabalho de modelagem do plano de testes. Quanto antes uma falha for identificada no ciclo de vida de um sistema, mais barata e mais simples será a correção. 4º Princípio: agrupamento de defeitos A maioria das falhas encontradas durante a execução dos testes está concentrada em um número pequeno de módulos. Sempre existe uma área do software que é responsável pelo maior número de erros. 5º Princípio: paradoxo do pesticida Um conjunto de testes, se executado várias vezes, pode não mais detectar novas falhas. Para contornar esse problema, os casos de teste devem ser frequentemente revisados e atualizados. Eles devem ser reformulados para abordar novas áreas do sistema e assim aumentar a chance de detectar novas falhas. Os testes precisam ser revisitados com frequência. 6º Princípio: teste é dependente do contexto Diferentes tipos de aplicações exigem a aplicação de técnicas diferentes de teste. Por exemplo: um sistema bancário deve ser testado de maneira diferente de uma rede social. Há questões de segurança que devem ser mais precisamente abordadas no primeiro caso. Da mesma forma, testes web são elaborados com foco diferente dos testes de aplicações desktop. 7º Princípio: a ilusão da ausência de defeitos Identificar e corrigir os problemas de um software não garante que ele está pronto. Questões a serem respondidas: Os testes foram elaborados para identificar todas as possíveis falhas? O sistema atende às necessidades e expectativas dos usuários? Ou seja, existem outros fatores que devem ser considerados para garantir a qualidade do sistema. Não adianta o sistema ser correto funcionalmente, mas não atender à real necessidade do usuário. Todos os princípios são importantes, porém entre os princípios listados, podemos citar que os números 3 e 7 representam os principais aspectos da atividade de teste. A busca por antecipar cada vez mais as possíveis falhas da aplicação e assegurar que osistema entregue atenda as reais necessidades do cliente, agregando valor ao seu negócio, é constante. • • Características das estratégias de teste Para executar um teste eficaz, devem-se proceder revisões técnicas eficazes. Isto é necessário porque assim muitos erros são eliminados antes do começo do teste; É importante que se usem diferentes técnicas de teste para diferentes abordagens e em diferentes momentos; O teste deve ser feito pelo desenvolvedor e por um grupo independente de teste (se for um grande projeto); Saiba que tanto o teste quanto a depuração são atividades diferentes, mas a depuração só acontece em consequência da existência de um teste. Com a atividade de teste, conseguimos executar um programa com a intenção principal de descobrir um erro. Para que um caso de teste seja considerado bom ou ótimo, ou seja, bem-sucedido, ele deve ter uma grande probabilidade de revelar um erro ainda não descoberto. Diretrizes que devem ser levadas em conta para o teste Quando o teste deve ser interrompido? - Deve ser determinado no planejamento; Atribuir a responsabilidade do teste a um testador? - Deve ser atribuído também no planejamento; Quais os resultados esperados para cada caso de teste? - Devem ser descritos antecipadamente; Quais os resultados esperados para cada caso de teste? - Devem ser descritos antecipadamente; Qual o resultado de cada teste por completo? - Cada um deles deve ser inspecionado depois de testado; Quais programadores devem ser alocados para o teste? - Sempre os mais criativos. • • • • • • • • • • A importância dos testes O processo de desenvolvimento de sistemas (PDS) requer uma série de atividades em que as oportunidades de inserção de falhas são muito grandes. Se os objetivos foram especificados erradamente, os erros podem começar a aparecer logo no início do processo, podendo também aparecer erros em fases de projeto e desenvolvimento posteriores. Como as informações para o projeto são determinadas pelo usuário/cliente, e o desenvolvimento é feito por técnicos especializados (programadores, analistas, gerentes etc.), muitas vezes pode haver falhas na comunicação. Assista ao vídeo e conheça os papéis no teste de software. Conteúdo interativo Acesse a versão digital para assistir ao vídeo. Nesse momento, é importante que o desenvolvimento seja acompanhado de garantia de qualidade, em função de não haver essa habilidade de realizar e de se comunicar com perfeição. Vemos então que a atividade de teste de software passa a ser um elemento crítico da garantia de qualidade. Esta passa a ser a última revisão de especificação, projeto e codificação. Conteúdo interativo Acesse a versão digital para ver mais detalhes da imagem abaixo. Relação entre o custo do software e as fases do desenvolvimento. Exemplo - Projetos de controle de voo Como vimos, é possível que os gastos fiquem entre 30% e 40% do esforço total do projeto no teste de software. Considere, por exemplo, os projetos de controle de voo, monitoramento de reatores nucleares etc. Esses projetos são considerados críticos para testes, pois sua falha pode resultar em significativos prejuízos econômicos, humanos ou ambientais, e por isso podem custar de três a cinco vezes mais do que todos os outros passos de engenharia de software combinados. Conteúdo interativo Acesse a versão digital para ver mais detalhes da imagem abaixo. Relação ente o tempo e o índice de falhas. Devem-se utilizar as principais estratégias de teste de software, de forma a promover uma abordagem de teste personalizada e de diferentes níveis, visando atingir todas as fases do ciclo de desenvolvimento do software. O uso de uma equipe independente no processo de teste de software cria um ambiente de teste e torna a aplicação de teste unitário pelo desenvolvedor. A aplicação de estratégias que integrem técnicas de projeto de casos de teste, numa série bem definida de passos, produz um mapa que descreve os passos a serem dados como parte da atividade de teste. Essa estratégia deve incorporar o planejamento de teste, o projeto de casos de testes, a execução e a resultante coleta e avaliação. Deve-se também responder às seguintes perguntas: Como conduzir os testes de software? Devemos estabelecer um plano formal para os testes? Devemos testar o programa como um todo ou executar testes somente em uma parte dele Devemos refazer os testes quando acrescentamos novos componentes ao sistema Quando devemos envolver o cliente? Quando terminar os testes? • • • • • Em geral, os testes devem ser terminados quando a maioria das necessidades é atendida, permanecendo poucos erros importantes. Pode-se alguma vez ter certeza de que não existem mais falhas? Conteúdo interativo Acesse a versão digital para ver mais detalhes da imagem abaixo. Relação entre o número de falhas encontradas e a possibilidade de existirem mais falhas. Quando o teste é terminado, como saber se ele foi suficiente? Não há uma resposta única. Algumas respostas pragmáticas: Você jamais terá completado a atividade de teste; A carga simplesmente transfere-se do projetista para o cliente; O teste para quando não há mais erros “visíveis”; O teste acaba quando o tempo acaba ou o dinheiro acaba: Por restrição de tempo (nesse caso, deve-se negociar esse tempo); Por restrição financeira (nesse caso, deve-se evitar). A atividade de teste jamais termina. Ela passa do projetista para o usuário. • • • • • Então, quando terminar o teste? Basta pensar que: O objetivo do teste é encontrar erros, e se eles não forem detectados, o teste não pode afirmar sua ausência; Testar tudo é impossível; As técnicas de teste são complementares, devendo ser aplicadas em conjunto. Para testar com eficiência, é preciso conhecer bem o software. Papéis e responsabilidades de teste de software Vamos ver dois grupos: Desenvolvedor É sempre responsável por testar unidades individuais (componentes). Em muitos casos, também conduz testes de integração, um passo que leva à construção (e teste) da arquitetura completa do software. Grupo independente de teste (independent group test – ITG) Normalmente, para que o processo de teste transcorra de forma íntegra, é comum a utilização de um grupo independente de teste, já que as pessoas que criaram o software não devem ser as mesmas que irão realizar os testes. Seria um conflito de interesses, pois foram elas que o “criaram”. Eles se envolvem no projeto após a arquitetura do software estar completada. O engenheiro de software e o ITG trabalham juntos para garantir a execução de testes rigorosos. Existem testes que somente serão conduzidos pelos desenvolvedores, como o teste de unidade, que iremos estudar mais adiante. O desenvolvedor deve estar disponível para corrigir eventuais erros descobertos. • • • "O primeiro erro que o pessoal comete é pensar que a equipe de teste é responsável pela garantia de qualidade." Bryan Marich. Existem várias responsabilidades e papéis dentro da equipe. Confira na tabela a seguir. Gerente de teste Gerente de vários projetos de teste ou responsável pela área de teste da empresa Líder do projeto de testes Responsável pela liderança de um projeto de teste, geralmente relacionado a um sistema em desenvolvimento, seja um projeto novo ou manutenção. Arquiteto Responsável pela montagem da infraestrutura de teste, monta o ambiente de teste, escolhe as ferramentas e capacita a equipe para executar seu trabalho nesse ambiente. Analista do teste Responsável pela modelagem e elaboração dos casos de teste e pelos scripts. Em alguns casos, estes podem ser elaborados pelos testadores. Testador Responsável pela execução dos casos de teste e scripts. Tabela. Papéis e responsabilidades da equipe. Carlos Alberto de Farias. Verificando o aprendizado Questão 1 Assinale a única alternativa correta. O que é necessário para obter resultados positivos emum projeto de testes? I. Que o projeto se inicie desde a especificação dos requisitos do sistema a ser implementado. II. Que o projeto se inicie quando a programação estiver sendo desenvolvida. III. Que o projeto se inicie quando a programação estiver sendo desenvolvida. A Apenas o item I está correto. B Apenas o item II está correto. C Apenas o item III está correto. D Apenas os itens I e II estão corretos. E Apenas os itens II e III estão corretos. A alternativa A está correta. Para obter resultados positivos em um projeto de testes, é necessário que ele se inicie desde a especificação dos requisitos do sistema a ser implementado, ou seja, tão logo comece o projeto de desenvolvimento do software, inicia-se também em conjunto o projeto de testes de software. Questão 2 Assinale a única alternativa correta. O processo de testes de software representa uma estrutura das etapas, atividades, artefatos, papéis e responsabilidades. Sendo assim, o que busca esse processo? I. Padronizar os trabalhos para um melhor controle dos projetos de testes. II. Minimizar os riscos causados por defeitos provenientes do processo de desenvolvimento, assim como a redução de custos de correção de defeitos. III. Redução de custos de correção de defeitos. A Apenas os itens I e II estão corretos. B Apenas os itens II e III estão corretos. C Apenas o item II está correto. D Apenas o item III está correto. E Todos os itens estão corretos. A alternativa E está correta. O processo de testes de software representa uma estrutura das etapas, atividades, artefatos, papéis e responsabilidades, buscando padronizar os trabalhos para um melhor controle dos projetos de testes. O objetivo desse processo (com metodologia própria, ciclo de vida etc.) é minimizar os riscos causados por defeitos provenientes do processo de desenvolvimento, assim como a redução de custos de correção de defeitos, pois o custo do software (desenvolvimento + manutenção) tende a ser menor quando ele é bem testado. Questão 3 Como a equipe de teste deve ser formada? A Apenas com os clientes e seus usuários. B Apenas com uma equipe de testes independentes. C Apenas com os desenvolvedores dos programas. D Apenas com uma equipe de teste independente e os desenvolvedores. E Apenas com os usuários e os desenvolvedores. A alternativa D está correta. Por conta da definição de teste, é importante ressaltar que a equipe deve ser “o mais independente possível da equipe de desenvolvimento”, de forma a não estar envolvida emocionalmente nem politicamente com o projeto, tendo um comportamento mais objetivo e direto. Essa equipe terá mais facilidade em focar nos pontos que inicialmente o projeto deveria atender e por motivos desconhecidos foram abandonados ou não atendidos corretamente. Questão 4 Quando devemos terminar os testes? I. Nunca; o projetista está sempre testando. II. Quando o dinheiro ou o tempo acabar. III. O teste termina quando não há mais erros. Assinale a única alternativa correta: A Apenas os itens I e II estão corretos. B Apenas os itens II e III estão corretos. C Apenas o item II está correto. D Apenas o item III está correto. E Todos os itens estão corretos. A alternativa C está correta. Você jamais terá completado a atividade de teste. A carga simplesmente transfere-se do projetista para o cliente. O teste para quando não há mais erros “visíveis”, quando o tempo ou o dinheiro acaba: Por restrição de tempo (neste caso, deve-se negociar esse tempo); Por restrição financeira (nesse caso, deve-se evitar). • • 3. Ciclo de vida do processo de testes de software Modelo V Você se lembra do modelo cascata no processo de desenvolvimento de software? O modelo V é uma melhoria do cascata do desenvolvimento de produto, pois esse modelo tinha um problema de reatividade. Ele permite que, durante a integração de um sistema, os testes sejam feitos contra os próprios requisitos do componente ou interface que está sendo testado, em contraste com modelos anteriores, nos quais o componente era testado contra a especificação do componente/ interface. Nesse modelo, cada etapa deve ser concluída antes que a próxima inicie, e o teste é planejado em paralelo com a atividade correspondente no desenvolvimento, ou seja, o modelo considera o teste como uma atividade paralela, e não como uma atividade isolada que ocorre no final do desenvolvimento. Conteúdo interativo Acesse a versão digital para ver mais detalhes da imagem abaixo. Como o modelo V se configura? Vejamos uma representação simples na imagem a seguir. Conteúdo interativo Acesse a versão digital para ver mais detalhes da imagem abaixo. Representação do modelo V. Em muitos casos, as organizações criam seus próprios modelos usando isso como base. Contudo, o modelo pode se tornar tão complexo quanto você quiser. É importante ressaltar que devemos utilizar esse modelo para pequenos e médios projetos, com requisitos bem definidos e profissionais experientes. Os objetivos do modelo V são: Minimizar os riscos do projeto; Melhorar e garantir a qualidade do projeto; Reduzir os custos totais ao longo do ciclo de vida do projeto; Melhorar a comunicação entre as partes interessadas. É um modelo mais robusto e completo do que o cascata, podendo produzir softwares de maior qualidade do que com ele. Esse modelo acrescenta duas partes importantes, que são: Verificação Que está relacionado com a questão: O produto está sendo feito corretamente? Validação Está relacionado com a questão: O produto está sendo feito, ou seja, o software atende ao objetivo pretendido com precisão? Assista ao vídeo e entenda sobre verificação e validação. Conteúdo interativo Acesse a versão digital para assistir ao vídeo. No modelo V, podemos ver as mesmas fases do cascata, mas com uma melhor relação entre elas. Vejamos as vantagens e desvantagens desse modelo. • • • • Vantagens • A relação entre os estágios de desenvolvimento e os diferentes tipos de testes facilita a localização de falhas; • É um modelo simples e fácil de aprender; • Especifica os papéis dos diferentes tipos de testes para ser executada; • Envolve o usuário no teste. Desvantagens • É difícil para o cliente expor explicitamente todos os requisitos; • O cliente deve ter paciência, pois receberá o produto no fim do ciclo de vida; • O teste pode ser caro e às vezes não ser suficientemente eficaz; • O produto final pode não refletir todas as necessidades dos utilizadores. Paralelismo entre as atividades de desenvolvimento e teste de software Além do paralelismo entre as atividades, o teste paralelo também serve para comparar os resultados do teste do sistema atual com a versão anterior. Essa comparação é importante para determinar se os resultados do novo sistema são consistentes com o processamento do antigo sistema ou da antiga versão. Temos que executar no teste paralelo os mesmos dados de entrada utilizados nas duas versões da mesma aplicação. Exemplo Se os requisitos não forem alterados na nova versão, os resultados com os dados de saída das duas versões (atual e nova) devem ser iguais. Processo de teste Com relação aos custos, ao tratar os testes como um processo organizado e muitas vezes paralelo e integrado ao processo de desenvolvimento, os custos de manutenção ficarão bem reduzidos. Segundo Myers, o custo de correção tende a aumentar quanto mais tarde o defeito for detectado. "Defeitos encontrados durante a produção tendem a custar muito mais que aqueles encontrados em modelos de dados e em outros documentos do projeto do software." Atenção Verificação da migração de dados Com relação aos dados, após o carregamento para o novo sistema, os resultados são submetidos a uma etapa de verificação dos dados para determinar se estes foram corretamente migrados, se ocorreu de forma completa. Durante essa verificação, pode ser necessário um processo de execução em paralelo de ambos os sistemas para identificaráreas de disparidade e evitar erros de perda de dados. Veja alguns processos de teste: Teste de migração de dados O paralelismo pode ser usado também pelas equipes de teste de aceitação e operacional, que irão realizar o teste de concepção e execução em paralelo em duas plataformas completamente diferentes e com objetivos e propósitos diferentes. Já a equipe de teste de legado irá trabalhar com cada um dos outros grupos separadamente. Equipe de teste operacional É composta de usuários que irão utilizar o sistema. O grupo operacional realiza testes em paralelo com a equipe de aceitação, mas com um objetivo completamente diferente. Esse grupo trabalha na futura plataforma e no ambiente sob todos os aspectos que não sejam sob o ponto de vista do negócio, ou seja, de conectividade e interoperabilidade. Esse grupo também testa interfaces, desempenho, sistema de back-ups e demais elementos da nova plataforma. Simulação do novo sistema em substituição ao antigo Nesta etapa do processo, deverá ser realizado um simulado do novo sistema em condições reais de funcionamento em paralelo ao antigo sistema, para que o usuário gestor possa avaliar possíveis necessidades de ajustes do fluxo operacional e computacional de forma a trazer benefícios com a instalação do novo sistema. Scripts estruturados ou scripts compartilhados Esta técnica aciona mais de um comando, simulando a execução em paralelo de diversas ações. Teste de unidade O teste de unidade enfoca o esforço de verificação da menor unidade do projeto de software, que é o módulo. Usa-se como guia para a execução deste tipo de teste uma descrição detalhada do projeto. Importantes caminhos de controle são testados para descobrir erros nas interfaces dos módulos. O teste de unidade é do tipo caixa branca (veremos esse tipo de teste mais tarde). Pode ser conduzido em paralelo para vários módulos. Teste de validação Os testes são baseados no comportamento do software por meio das mais diversas condições baseadas e comparadas com as especificações levantadas pela área de negócio. Durante o desenvolvimento do software, deverão ser aplicadas diferentes categorias de testes empregando ferramentas, técnicas e abordagens diferentes. As atividades de teste (conforme o modelo V, planejamento, modelagem, execução e conferência) deverão ocorrer em paralelo às atividades de construção de componentes executáveis e respeitando os estágios de desenvolvimento. Verificação e validação A atividade de teste de software é elemento de um tema mais amplo chamado verificação e validação. Verificação Refere-se ao conjunto de atividades que garante que o software implemente corretamente uma função específica. Validação Refere-se ao conjunto de atividades que garante que o software que foi construído segue as exigências do cliente. A definição de verificação e validação abrange muitas das atividades às quais está diretamente ligada a garantia da qualidade de software (SQA). Vamos ver de outra forma o modelo V como um U. Conteúdo interativo Acesse a versão digital para ver mais detalhes da imagem abaixo. Formato de "U". Conteúdo interativo Acesse a versão digital para ver mais detalhes da imagem abaixo. Representação do modelo U. Os testes de verificação e validação são complementares, não devendo ser encarados como atividades redundantes. Cada um possui natureza e objetivo distinto, fortalecendo desta forma o processo de detecção de erros e aumentando a qualidade final do produto. Testes de verificação e validação Teste de verificação • É a coleta de informações de negócios e o planejamento da arquitetura do software. • A principal preocupação é o entendimento e a coerência entre o negócio a ser atendido e o software a ser construído. • Nesta fase não existem componentes tecnológicos, mas documentos que especificam o comportamento a ser seguido pelo software a ser desenvolvido. • É um processo de auditoria de atividades e avaliação de documentos gerados em todas as fases do processo de desenvolvimento do software (PDS). Esses testes não envolvem o processamento de softwares, pois eles ainda não nasceram. Vejamos cada um dos processos de verificação: Verificação dos negócios - seu objetivo é garantir que os diversos documentos produzidos tenham total aderência às necessidades apontadas pelos clientes. Verificação dos requisitos - seu objetivo é fazer a verificação das especificações do levantamento dos requisitos: funcionais e Funcionais Descrevem as funcionalidades do sistema. Estão diretamente ligados às especificações da tecnologia envolvida, do perfil do usuário e do tipo do sistema. Ex.: O sistema deve permitir incluir e excluir fornecedores. não funcionais do software a ser desenvolvido. Verificação da implementação - seu objetivo é garantir a qualidade do código-fonte gerado pela equipe de desenvolvimento. Como se garante essa qualidade? • Pela prática das regras da boa programação; • Pelo processo formal de verificação do código produzido. Não funcionais Restrições sobre os serviços ou funções oferecidos pelo sistema. Ex.: A impressão do boleto deve ser em no máximo 10 segundos. A consulta ao banco de dados financeiro não deve ultrapassar 3 segundos. Teste de validação É um processo formal de avaliação de produtos tecnológicos que podem ser aplicados em componentes isolados, módulos existentes ou mesmo a totalidade do sistema. Qual é o seu objetivo? Avaliar a conformidade do software com os requisitos e especificações analisadas e revisadas nas etapas iniciais do projeto. Como ele se caracteriza? Pela presença física do software e de seu processamento em um ambiente tecnicamente preparado. Vejamos cada um dos processos de validação. 1. Validação de unidade - é a primeira etapa do processo de validação. Seu objetivo é testar os componentes individuais de uma aplicação. 2. Validação da integração - é uma continuação natural dos testes unitários. Seu objetivo é validar a compatibilidade entre componentes de um software. • • 3. Validação do sistema - seu objetivo é validar a solução como um todo. Quando este estágio é atingido, a maior parte das falhas de funcionalidade deve ter sido detectada pelos testes unitários e pelos de integrações. 4. Validação do aceite - é o último estágio do processo de validação, sendo o último processo formal de detecção de erros no sistema, antes de sua disponibilização no ambiente de produção. Nessa etapa, o software é disponibilizado para clientes e usuários com o objetivo que eles mesmos validarem todas as funcionalidades requisitadas no início do projeto. Exemplo de testes de validação: Validação: testes que demonstram conformidade com os requisitos. Plano de teste: descreve classes de testes + procedimento de teste + casos de teste. Após a execução de cada caso de teste de validação ser conduzido: 1) Ou a característica testada está de acordo com a especificação – é aceita; 2) Ou descobre-se um desvio da especificação – lista de deficiências. Objetivo: verificar o produto nas referências e padrões de usabilidade e de desempenho estabelecidos no planejamento da qualidade. O teste de validação verifica também a interação entre os componentes do produto, como por exemplo a relação entre formulários e os bancos que recebem os dados coletados, o suporte e a ajuda oferecidos aos usuários. Assista ao vídeo e aprenda sobre classificação dos testes. Conteúdo interativo Acesse a versão digital para assistir ao vídeo. Testes estáticos X testes dinâmicos Falhas de software são uma constante para quem trabalha com desenvolvimento. Falhas menores podem representar apenas pequenos problemas na execução de um sistema. Já em casos mais graves, um bug ou vulnerabilidade pode levar à exposição de dados de usuários e informações privadas de empresas. • • Algumas divisões podem ser estabelecidas em relação ao teste de software. Uma delas corresponde à forma de utilização do código obtido na etapafase eles devem ser realizados? Por todos esses motivos, eles devem ser efetuados na fase de testes de aceitação. Teste de segurança O que devem ser validados nessa técnica? Precisamos validar os requisitos de segurança, visando identificar as vulnerabilidades do sistema. Seus objetivos são: prevenir ataques, detectar vulnerabilidades e preparar medidas de contingência para casos de falhas. É indicado durante as fases de testes de integração e de sistema. Assista ao vídeo e aprenda sobre tipos de testes. Conteúdo interativo Acesse a versão digital para assistir ao vídeo. Funcional Testa os requisitos funcionais do software, as funções e os casos de uso. Responde a seguinte questão: A aplicação faz o que deveria fazer? Sendo um teste do tipo caixa preta, garante que os requisitos funcionem conforme o especificado. Ele não se preocupa com a forma como foi implementado, ou seja, com o comportamento interno do sistema, mas sim com a saída gerada após a entrada dos dados especificados. Desta forma, indicamos essa técnica para detectar erros de interface, de comportamento e/ou de desempenho. Essa técnica também pode ser aplicada em todas as fases de testes (como vimos no modelo U: unidade, integração, sistema e aceitação, que definiremos a seguir). Uma dificuldade dessa técnica, por questões de tempo e recurso, é testar todas as entradas possíveis. São inseridos alguns dados e espera-se na saída o resultado de como foram projetados os requisitos. Essa técnica de teste é imprescindível durante o desenvolvimento de um sistema, porém, mostra-se insuficiente para identificar certos riscos num projeto de software. Os testes funcionais também são classificados conforme segue: Requisitos Serve para saber se o sistema é efetuado de acordo com suas especificações iniciais. Regressão Verifica se o sistema, ou alguma parte dele, foi afetado por alguma alteração efetuada nele. Tratamento de erros Utilizado para verificar se os possíveis erros que por ventura aconteçam têm tratamento antes de acontecerem as derradeiras falhas. Manual Efetuado para verificar a interação entre homem e máquina. Interfaces de integração Utilizado para verificar se o sistema faz alguma troca de informações com algum outro sistema. Controle Muito utilizado para verificar se o sistema tem algum controle de dados, logs de auditoria e validações e integridade. Paralelismo Importante para verificar se a versão atual e a antiga geram os mesmos resultados. Fases de testes (validação) É importante que o processo de teste esteja presente durante todo o desenvolvimento do software. Porém, esses testes podem ser divididos em diferentes fases, as quais se diferenciam pela abstração e complexidade dos testes produzidos e executados em cada uma delas. Geralmente esse processo de teste é dividido em quatro fases, são elas: Testes de unidade Testa um componente isolado ou classe do sistema. Nesta fase, os esforços dos testes estão concentrados nas menores unidades do software produzido. O objetivo é detectar erros de lógica e/ou de implementação em pequenas partes do sistema, independentemente do restante. Consequentemente, cada unidade do sistema é testada isoladamente. Isso contribui para assegurar a correção dos componentes individuais, “mas não garante que a integração dessas partes funcione como o esperado”. Exemplo: dividir (x int, y int ) = z int. Caso tenhamos x=1 e y=0, z será um valor com erro e deverá retornar uma mensagem ao usuário, avisando que a operação é inválida. Caso a expressão seja um dado comum do sistema, para fazer essa validação a autorização deverá ser do usuário, pois faz parte do conjunto de regras de negócio. Testes de integração Testa se um ou mais componentes combinados funcionam de maneira satisfatória. Pode-se dizer que é composto por vários testes de unidade. O ponto central dos testes está voltado para a detecção de falhas provenientes da integração interna dos componentes do sistema. Para isso, os módulos são combinados e testados em conjunto. Essa fase vem logo após os testes de unidade e antecede os testes de sistema, tendo como resultado o sistema integrado e preparado para os testes. Não faz parte do escopo dessa fase testar a interação do sistema produzido com outros sistemas, que por ventura venham a se comunicar. Testes de sistema Objetivo dos testes de sistema: Realizar a execução do sistema como um todo, dentro de um ambiente operacional controlado, para validar a perfeição e requinte na execução de suas funções, acompanhando cenários sistêmicos elaborados pelo profissional de requisitos do projeto. Devem retratar os requisitos funcionais e não funcionais do sistema; Este tipo de teste é realizado por uma equipe de teste independente, e o analista de teste elabora os casos de testes, normalmente em conjunto com os desenvolvedores e atuando em um ambiente controlado, no caso o ambiente de teste; O comportamento de todo o sistema/ produto é definido pelo escopo de um projeto ou programa de desenvolvimento; O ambiente de teste deve corresponder o máximo possível ao objetivo final, ou ao ambiente de produção. Esta é a fase na qual o software já está completamente integrado. Assim sendo, os testes apontam falhas em relação aos requisitos do sistema, no que diz respeito à comunicação com outros sistemas. Os testes são realizados em condições bastante semelhantes (de ambiente, massa de dados etc.) com as que o usuário utilizará em produção. Os testes de sistema não se limitam aos requisitos funcionais, mas também objetivam testar os requisitos não funcionais. Testes de aceitação Os testes de aceitação são, em geral, uma extensão dos testes de sistema. Nessa fase, o objetivo é verificar se o software está pronto e pode ser usado pelo usuário final. Para isso, verifica-se se o sistema realiza as funções para as quais foi criado, satisfazendo as necessidades do cliente. Os testes são planejados e projetados com o mesmo cuidado e nível de detalhe do teste do sistema. Durante essa fase, os critérios de aceitação são conhecidos, o que permite a automação dos testes de aceitação, além da monitoração e medição. Verificando o aprendizado Questão 1 Um processo de desenvolvimento de software em geral tem como entrada os requisitos do sistema e como saída um produto fornecido. Analise as afirmativas sobre este tema: I. O desenvolvimento de software envolve os estágios: análise e definição de requisitos, projeto do sistema, codificação, testes e entrega do sistema. Assim, o ciclo de vida do software descreve a vida do produto de software desde sua concepção até a implementação e entrega. II. Um dos primeiros modelos propostos foi o cascata, no qual o desenvolvimento de um estágio deve terminar antes do próximo começar. O modelo V é uma variação do cascata, que mostra como as atividades de teste estão relacionadas com a análise e com o projeto. III. O modelo cascata pode ser incrementado com atividades de prototipação, que é um modelo de processo efetivo em que partes do sistema são construídas rapidamente com o objetivo de validar os requisitos. Caso novas alternativas sejam discutidas, deve-se começar o ciclo em cascata novamente, abandonando-se o protótipo. Assinale a única alternativa correta: A Apenas os itens I e II estão corretos. B Apenas os itens II e III estão corretos. C Apenas o item I está correto. D Apenas o item II está correto. E Apenas o item III está correto. A alternativa D está correta. Feedback: A afirmativa II está correta ao descrever com precisão o modelo cascata e sua variação em V. Já os itens I e III contêm imprecisões sobre o ciclo de vida do software e o uso do protótipo, que não precisa ser descartado ao reiniciar o ciclo. Questão 2 A utilização do modelo V minimiza os custos da qualidade do software; assim, segundo a regra de 10 de Myers, os testes devem ser iniciados nas inspeções/ revisões de código até os testes de software. Identifique se essa afirmação está certa ou errada. Chave deConteúdo interativo Verificação Validação Conteúdo interativo Vantagens Desvantagens Paralelismo entre as atividades de desenvolvimento e teste de software Exemplo Processo de teste Atenção Teste de migração de dados Teste de unidade Teste de validação Verificação e validação Verificação Validação Conteúdo interativo Conteúdo interativo Testes de verificação e validação Teste de verificação Teste de validação Conteúdo interativo Testes estáticos X testes dinâmicos Testes estáticos e dinâmicos Testes estáticos Testes dinâmicos Exemplo Técnicas de teste Reflexão Teste estrutural X testes funcionais Estrutural Teste estrutural (caixa branca) Teste de regressão Teste de carga Teste de estresse Teste de usabilidade Teste de segurança Conteúdo interativo Funcional Requisitos Regressão Tratamento de erros Manual Interfaces de integração Controle Paralelismo Fases de testes (validação) Testes de unidade Testes de integração Testes de sistema Testes de aceitação Verificando o aprendizado 4. Conclusão Considerações finais Explore + Referências