Prévia do material em texto
TESTES EM APLICATIVOS MÓVEIS AULA 1 Prof. Felipe Pedroti Raymundo 2 CONVERSA INICIAL Figura 1 – Teste de software Crédito: Photon Photo/Shutterstock. Aqui, vamos tratar de um assunto que, para muitos educadores e profissionais na área, é um certo tabu, ou algo ainda visto como desnecessário na maioria dos projetos e produtos que estão aí no mercado, principalmente o mercado de aplicativos: testes. Essencialmente o que é testar algo, ou submeter algum produto a teste? Segundo o dicionário Michaelis (S.d.): atestar significa “Provar com raciocínio convincente, demonstrar, evidenciar, revelar”. Isso significa que, por meio de testes e validações, conseguimos demonstrar a eficácia e a validade do trabalho executado e/ou produto criado. Neste módulo, abordaremos desde o conceito de testes de software, sua origem e aplicações iniciais, bem como a evolução desse modelo para outras áreas de desenvolvimento e suas vertentes, além de aplicação desses modelos no processo de desenvolvimento de aplicativos móveis. 3 TEMA 1 – TESTES DE SOFTWARE Para muita gente testar um software nada mais é do que pegar o objeto em questão (software) e submetê-lo a uma bateria de validações predeterminadas, ou verificar se o que ele faz está de acordo com o que foi descrito. Mas não é bem assim: realizar um teste é um procedimento que demanda planejamento, precisão e validações minuciosas de todas as partes que compõem um software. Ele faz (ou pelo menos deveria fazer) parte do processo de desenvolvimento de software de uma equipe. Imagine a seguinte situação: uma equipe de desenvolvimento de 10 pessoas, trabalhando ativamente no artefato de software a ser entregue, cada uma fazendo uma coisa diferente, de um jeito diferente e que, inevitavelmente, vai afetar uma outra funcionalidade ou faceta do software que outro membro dessa equipe trabalhou ou está trabalhando. Como é possível verificar se o que foi feito pelo outro não quebrou ou não fez surgir um bug no código-fonte? Esse é o papel dos testes de software: garantir que cada integração, interação e modificação desse software não tenha nada que faça com que o software tenha um comportamento diferente do esperado. Figura 2 – Grandes equipes de trabalho escrevendo código junto podem gerar problemas inesperados Crédito: Balance Form Creative/Shutterstock. 4 1.1 Conceito de testes O conceito de testes de software não é atual, nem tampouco de apenas 10 ou 20 anos atrás. Desde os princípios da criação de software, os testes estão presentes no dia a dia dos programadores, porém eles começaram a ser considerados relevantes a partir da década de 50, quando essa se tornou não mais uma forma de ver se funciona, mas sim um processo de detecção e correção de falhas. Segundo Batista (2020), em 79 Glenford Myers produziu os primeiros trabalhos sobre processos de teste, sendo considerado como a Bíblia dos testes. Ainda de acordo com Batista (2020): “mais de 30% dos projetos são cancelados antes mesmos de serem finalizados. Além disso, conforme o especialista: mais de 70% dos projetos falham nas entregas das funcionalidades, gerando um cenário totalmente problemático para as empresas”. Vale lembrar que, nas décadas indicadas, os softwares não têm a complexidade nem a gama de funcionalidades que temos em um projeto atual de software. Figura 3 – Código-fonte: do céu ao inferno em apenas uma linha de código Crédito: Best Backgrounds/Shutterstock. 5 1.2 Processos de desenvolvimento de software Geralmente, os testes de software estão alinhados a um processo de desenvolvimento de software, sendo esta uma das fases do projeto mais importante. Seja nos processos baseados em prototipação, seja nos processos iterativos, o processo de teste está sempre presente assim que uma atividade do processo gere um artefato concreto (ou não como veremos mais à frente) do software. Porém, esse processo de teste de software não é somente mais uma atividade onde um dos usuários vai sentar e utilizá-lo, validando se o que foi proposto foi feito. O processo é muito mais complexo e deve ser estruturado de acordo, para que os resultados possam ser aproveitados pela equipe e pelo processo de desenvolvimento. 1.3 Processo de teste Tanto o processo de desenvolvimento quanto o processo de teste de software podem (e devem) ocorrer em paralelo, porém esse é um dos primeiros desafios que devem ser enfrentados e executados desde o início do ciclo de vida do software, mesmo ainda desde o projeto. O processo de teste, segundo Eliza e Lagares (S.d.), “tem como objetivo estruturar as etapas, as atividades, os artefatos, os papéis e as responsabilidades do teste, permitindo organização e controle de todo o ciclo do teste, minimizando os riscos e agregando valor ao software”. Toda essa estrutura vem com o objetivo de não somente minimizar e mitigar os problemas futuros no projeto, o que somente é possível se as melhores técnicas forem selecionadas, e o pessoal responsável pelos testes deve ser qualificado e treinado para o desempenho do processo. Isso nos remete a um dos tópicos mais tratados hoje nos processos de software, relativo à qualidade de software. 6 Figura 4 – Modelo de smartphone atual Crédito: Megaflopp/Adobe Stock. TEMA 2 – QUALIDADE DE SOFTWARE Qualidade de software pode ser definida como uma área de conhecimento da engenharia de software, cuja principal meta é garantir que a qualidade do objeto desenvolvido seja mantida por meio de definições e padronizações dos processos de desenvolvimento. Mas esse conceito é muito subjetivo, pois a ideia de qualidade é diferente para um indivíduo “x” e um indivíduo “y”. No que diz respeito a software, qualidade é quando um software é produzido seguindo padrões e técnicas adequadas, atendendo às expectativas do cliente, sejam quaisquer as ferramentas, linguagens e outras técnicas utilizadas. Com essa gama de definições, vimos que o processo de manter a qualidade no desenvolvimento de software é importante para o processo como um todo, pois segundo Lucania (2019): “sua função é garantir que o software que será entregue ao cliente no fim do projeto, atenderá a todas as suas expectativas e que mesmo sem saber, o cliente receberá um produto desenvolvido com a utilização de boas práticas e técnicas de desenvolvimento adequadas”. 7 Figura 5 – Processo de desenvolvimento de software Crédito: Andrey Suslov/Shutterstock. 2.1 Onde o processo de teste está inserido no contexto de um projeto de software? Assim como todo projeto, a fase de teste de software está incluída em uma das atividades desse processo. Geralmente o teste ocorre sempre em seguida ao fim do ciclo de desenvolvimento de uma parte do software (no caso de modelos ágeis ou incrementais de desenvolvimento de software), de forma automatizada (que veremos em outro momento) ou manual, sendo executado pelo próprio responsável por esses testes. 2.2 Processo de testes versus Processo de desenvolvimento Como já vimos, o processo de testes deve andar em paralelo com o processo de desenvolvimento do software. Vamos observar a Figura 6, detalhando um pouco desse processo: 8 Figura 6 – Processo de testes versus processo de desenvolvimento Todo o processo do teste anda em paralelo com o desenvolvimento. Ao planejar e capturar os requisitos, devemos estar planejando os testes mais abrangentes do software. Durante a análise e definição do projeto, os testes também estão sendo projetados já de maneira mais concisa e direcionada. E finalmente na implementação e liberação de versões temos a execução desses testes planejados e projetados, colhendo seus resultados para que possamos analisar e validar todo o modelo planejado. 2.3 Modelo V Baseado nomodelo acima, desde 1980 que se é utilizado um modelo conhecido como Modelo V, ou no seu termo original em inglês V-model. Como Rocha (2011) parafraseia: “Os benefícios advindos da adoção do modelo em ‘V’ no âmbito de testes é detectar os defeitos precocemente, maior envolvimento do time de testes no início do projeto e aumento da qualidade do software”. Vamos entender isso observando uma imagem do modelo abaixo: Planejamento do projeto e captura de requisitos •Planejamento de testes Análise e Projeto •Projeto de testes Implementação e liberação de versões •Implementação de testes •Execução e avaliação dos Testes 9 Figura 7 – Modelo V de testes Fonte: Rocha, 2011. O que observamos é que, desde a análise de requisitos, já temos um tipo de teste correspondente a esses requisitos (testes de aceitação): para o projeto do sistema em si, temos um teste equivalente a ele no mesmo nível, assim executando os testes de integração, quando desenhamos a arquitetura do software, e os testes unitários quando já estamos tratando do projeto de módulos do sistema. Essa é a ideia do modelo V: sempre testar a mesma coisa, porém com outros focos, mas sempre garantindo que os resultados sejam satisfatórios, convergindo durante todo o processo de desenvolvimento (lado esquerdo), juntamente com o processo de testes (lado direito) 10 TEMA 3 – ONZE PASSOS DO PROCESSO DE TESTE Seguindo a ideia do modelo em V, Bastos (2006) em sua obra exemplifica os 11 passos dos testes de software, seguidos até hoje pelos projetistas e executores de testes. Figura 8 – Software, uma junção de processos Crédito: Wright Studio/Shutterstock. 1. Acesso ao plano de desenvolvimento: pré-requisito para construção do plano de testes, em que a equipe responsável verifica se o plano de desenvolvimento está correto, e já é determinada a quantidade de recursos de testes necessário. 2. Desenvolvimento do plano de teste: os riscos da aplicação são levantados, procurando minimizar estes erros. Geralmente aqui os cenários de teste são descritos. 3. Inspeção ou teste de requisitos: avaliação feita de todos os requisitos por meio de verificação, em que problemas aqui têm boas chances de gerar problemas futuros. 4. Inspeção ou teste do desenho de software: teste parecido com o anterior, porém no qual o desenho do software é validado de acordo com os requisitos. 11 5. Inspeção ou teste da construção do software: passo que valida a extensão que o teste terá baseado na construção do software comparado com seu design. 6. Execução dos testes: aqui realmente executamos os testes de código, utilizando as especificações do plano de testes e os tipos seguintes para cada fase. 7. Teste de aceitação: avaliada usabilidade e aplicabilidade do software. Aqui que é verificada a expectativa do cliente sobre o produto, além de erros referentes ao levantamento de requisitos. Essa etapa é a que diz que o software está certo ou errado. 8. Informação dos resultados dos testes: os resultados dos testes são direcionados aos responsáveis pelos testes e equipes envolvidas. 9. Teste da instalação do software: verifica se o ambiente de execução do software está correto e coerente. 10. Teste das mudanças no software: verifica as mudanças durante implantação e pós-implantação. 11. Avaliação da eficácia dos testes: último passo, onde se verifica a eficácia dos testes executados envolvendo não somente o pessoal responsável, mas o cliente e outras áreas do projeto. TEMA 4 – MODELO 3P X 3E Rocha (2011) comenta que “o ciclo de vida do processo de teste é composto por diversas fases e etapas, sendo quatro delas em cascata e duas em paralelo”. As paralelas são as fases de planejamento e preparação, que se estendem durante todo o processo, sendo duas fases mais de suporte do que de execução para o processo. As outras são atividades em que mais o processo vai gastar tempo entregando artefatos. A Figura 9 representa esse modelo de ciclo de vida: 12 Figura 9 – Modelo 3P X 3E 4.1 Atividades do modelo 3P x 3E Resume-se às atividades do modelo da seguinte forma: • Procedimentos iniciais, em que é elaborada toda a abordagem do trabalho, o que será feito; • Planejamento, em que se elabora a estratégia e o plano do teste, sempre procurando mitigar e minimizar os riscos, olhando principalmente para os requisitos; • Preparação, em que se configura e se prepara o terreno para que os testes possam ser executados; • Especificação, em que a meta é validar os casos de teste, conforme os artefatos vão sendo liberados pela equipe; • Execução, momento em que, como o próprio nome sugere, se executam realmente os testes, colhem-se os resultados e realiza-se qualquer procedimento necessário para poder criar condições para a realização dos testes; • Entrega, em que se finaliza todo o processo. Essas atividades têm de ser executadas em todo o processo de teste do modelo V. Planejamento Procedimen tos iniciais Especificação Execução Entrega Planejamento 13 Figura 10 – Testes devem fazer parte de todo o contexto do software Crédito: Andrey Suslov/Shutterstock. TEMA 5 – TIPOS E TÉCNICAS DE TESTE Acredito que você deve estar se fazendo a seguinte pergunta: como eu deveria fazer esses testes, e quais tipos de teste são eficazes e efetivos em cada uma das situações? Se olharmos novamente para o modelo V, vamos entender que consiste sempre em realizar os mesmos testes, mas sempre com um objetivo diferente. E isso é essencial para que o processo de teste tenha sucesso no seu objetivo, que é testar todos os níveis da aplicação, além de certificar que determinado teste tenha sido executado em sua etapa correta. Para cada uma dessas fases, existe um tipo de teste, que vamos tratar nos tópicos em seguida. 5.1 Tipos de testes Rocha (2011, p. 30) nos explica os seguintes tipos de teste. 1. Teste unitário ou componente: são testes que geralmente são escritos e projetados por desenvolvedores, onde existem algumas ferramentas e frameworks que auxiliam nesse teste. Como o nome diz, ele testa uma unidade do software, que seria um método ou uma função de uma classe. 2. Teste de integração: são testes que geralmente são executados pelo analista de testes, cujo principal objetivo é validar se o que foi modificado 14 e/ou criado está de acordo com o todo do software, não afetando outros módulos e rotinas do software já existentes, porém ainda a nível de código do software, não de funcionalidade. 3. Teste de performance e desempenho: caracterizado por avaliar o desempenho e tempo de execução das rotinas e funcionalidades do software, bem como determinar os limites dessa execução. 4. Teste de aceitação: teste que fecha o V-model, no qual os usuários validam os requerimentos olhando para a funcionalidade pronta e em execução no software. Os resultados desses ensaios dentro do processo devem ser colhidos e sempre analisados visando a melhoria desses tipos de teste, porém devemos sempre considerar algumas técnicas para que isso aconteça. 5.2 Técnicas de teste Aqui Rocha (2011) nos mostra que temos dois tipos de técnicas de teste, com suas características: os testes estruturais e os funcionais. As técnicas estruturais determinaram se o que foi escolhido e desenhado para a solução apresentada funciona corretamente e de forma normatizada, sendo aplicadas nos testes unitários e de integração. Rocha (2011, p. 31-32) indica as seguintes técnicas para esses tipos de teste. • Teste de estresse: aqui a meta é avaliar se o software, sob condições extremas e volumes de dados além dos normais, irá funcionar como planejado, determinando seu limite operacional. • Teste de execução: valida os critérios de desempenho do software, verificando consumo de recursos de hardware,tempos de resposta e performance no geral. • Teste de recuperação (contingência): teste realizado quando existe uma situação de parada total e perda de dados, onde valida-se a operação de recuperação do desastre para funcionamento contínuo do software. • Teste de operação: valida se o sistema está operacional durante sua execução normal e validar a integração com o ambiente de execução. • Teste de conformidade: garante a conformidade do produto com as metodologias e processos utilizados. 15 • Teste de segurança: um dos mais importantes, em que a confiabilidade e confidencialidade dos dados é posta à prova, garantindo a proteção dos dados. As técnicas de teste funcional são utilizadas para validar o desenho da aplicação, garantindo que os requisitos da aplicação estejam implementados dentro do software, sendo utilizadas mais nos tipos de teste de produto, performance e de aceitação. Rocha (2011, p. 32-33) indica as seguintes técnicas para estes tipos de teste. • Testes de requisitos: testes feitos sob os requisitos do software, validando se o que foi desenvolvido condiz com o sistema e se, principalmente, vai conseguir ser melhorado e/ou corrigido conforme necessidade. • Teste de tratamento de erros: testes que validam a capacidade do software de responder corretamente a erros, garantindo que todos possam ser tratados e manter um controle sobre esses erros. • Teste de interconexão: valida a integração de um software com outros recursos, sendo por meio de envio e/ou recepção de dados, garantindo que essa integração funcione corretamente e da maneira esperada. 5.2 Outras técnicas O processo de teste não se resume a essas técnicas somente, uma vez que existem inúmeras outras que podem ser agregadas ao fluxo do teste para que aumente ainda mais a confiabilidade e assertividade do processo, as quais devemos também tomar conhecimento. Rocha (2011, p. 33) nos traz as técnicas a seguir como de suma importância para conhecermos. • Teste caixa preta: técnica que usa vários tipos de entradas de dados, sempre verificando sua saída. Neste teste, conhecemos as entradas e saídas, mas o que faz esse procedimento é desconhecido, garantindo a funcionalidade, e não o código. • Teste caixa branca: o oposto do teste caixa preta, no qual usamos o conhecimento do código da aplicação para aplicar os testes, porém exige que o testador tenha conhecimento deste código. • Teste positivo e negativo: sendo os dois opostos, o teste positivo foca em certificar resultados positivos, ou o que deveria funcionar e o que não 16 deveria, podendo dizer que seria o caminho feliz da funcionalidade; já o negativo é o teste para quebrar o software, validando os erros do aplicativo, geralmente imputando dados totalmente quebrados, forçando um erro no software. • Teste estático e dinâmico: novamente opostos, o teste estático testa o código da aplicação, sendo executado dentro dele; já no dinâmico, utiliza- se valores de entrada e saída para validar a funcionalidade. FINALIZANDO Testar um software é validar que este foi construído da maneira correta, utilizando os recursos de modelagem para garantir que as informações, além de protegidas, foram construídas da maneira que foram desenhadas e validadas. Imagine a situação em que várias peças de um quebra-cabeça devem ser unidas para formar um todo, e somente uma dessas pecinhas tem uma falha, que impede esta construção. O papel do teste é de suma importância nesse processo, e por isso deve ser levado muito a sério. Figura 11 – Testes de software devem ser realizados por muitos Crédito: Sfio Cracho/Shutterstock. Para que possamos ter um processo de teste coerente com o que está sendo desenvolvido, torna-se necessário esse processo ocorrer em paralelo com o processo de desenvolvimento de software, criando assim um ambiente em que 17 a qualidade do produto será garantida, seja pelos processos detalhados e artefatos bem projetados, seja pelas validações, asserções e garantias definidas pelo processo de teste, criando um ambiente em que a qualidade de software diz muito sobre o produto de todo o processo. Podemos também avaliar e verificar que o modelo V, amplamente utilizado pelas equipes faz com que o teste de software não somente comece quando já houver algum artefato executável do projeto, mas sim desde os seus desenhos iniciais e fases estruturais. Figura 12 – Software, uma junção de partes para um todo Crédito: Chaosamran Studio/Shutterstock. Também podemos conhecer um pouco sobre os onze passos para que um processo de teste possa acontecer de maneira correta e precisa. Cada um dos passos, por mais simples que seja, constrói e reforça a ideia do modelo V como base para os processos de teste, pois cada um desses passos está inserido nos tipos de testes propostos pelo modelo, sendo que esses passos determinam a rota de sucesso de todo o processo e servem de norte para a equipe. Também baseado nesses passos podemos entender como o modelo V e como o modelo 3P x 3E trabalha, garantindo e fechando o ciclo dos processos de software, fazendo com que os testes estejam inseridos no desenvolvimento. 18 Figura 11 – Uma equipe compromissada com a qualidade é uma equipe eficiente Crédito: Balance Form Creative/Shutterstock. Conhecemos em seguida alguns tipos de teste de software e pudemos observar esses tipos de teste aplicados ao modelo V. Cada tipo de teste deve ser aplicado na sua fase correta dentro do processo de desenvolvimento e de testes para que os resultados possam ser satisfatórios e possam também trazer resultados para a equipe. Além disso, pudemos aprender que os tipos de teste sozinhos não trazem os resultados ou a garantia que desejamos, porém cada um desses tipos tem uma gama de técnicas que podem ser aplicadas, como testes de estresse ou teste de conformidade para os tipos de teste estruturais, bem como testes de requisitos e de tratamento de erros para os tipos funcionais, cada um desses validando uma parte do processo do software, selecionando produtos de cada uma dessas fases e aplicando de maneira correta e acertada. Também podemos ver algumas outras técnicas mais comuns de testes entre as equipes. No próximo tópico, iremos nos aprofundar um pouco em alguns tipos de testes aplicados nas metodologias de desenvolvimento, antes de entrarmos propriamente dito no mundo das ferramentas de testes aplicadas. 19 REFERÊNCIAS BASTOS, A. et al. Base de conhecimento em teste de software. Belo Horizonte: Traço & Photo, 2006. BATISTA, H. Surgimento dos testes de software. Cria, 18 jun. 2020. Disponível em <https://criainovacao.com.br/surgimento-dos-testes-de-software/>. Acesso em: 19 out. 2022. ELIZA, R.; LAGARES, V. Processo de teste de software. DevMedia, s.d. Disponível em <https://www.devmedia.com.br/processo-de-teste-de- software/23795>. Acesso em: 19 out. 2022. LUCANIA, I. O que é qualidade de software? Konia, 2019. Disponível em <https://bit.ly/3D5HFKH>. Acesso em 08 ago. 2022. MICHAELIS. Disponível em: <https://michaelis.uol.com.br/>. Acesso em: 19 out. 2022. ROCHA, C. Estudo da qualidade de software na Metodologia V-model e sua interação com metodologias ágeis (SCRUM). Monografia (Graduação em Tecnólogo em Processamento de Dados) – Faculdade de Tecnologia de São Paulo, São Paulo, 2011. SOUSA, A. Origem do teste de software. Disponível em <https://www.linkedin.com/pulse/origem-do-teste-de-software-e-porque-testar- alexandre-sousa/>. Acesso em 06 ago. 2022. Conversa inicial REFERÊNCIAS