Baixe o app para aproveitar ainda mais
Prévia do material em texto
Iuri Guerra de Freitas Pereira Avaliação da efetividade de uma suite de teste de sistema aplicada ao contexto do Middleware Ginga Natal-RN 2019 Iuri Guerra de Freitas Pereira Avaliação da efetividade de uma suite de teste de sistema aplicada ao contexto do Middleware Ginga Dissertação de Mestrado apresentada ao Pro- grama de Pós-graduação em Engenharia de Software da Universidade Federal do Rio Grande do Norte como requisito para a ob- tenção do grau de Mestre em Engenharia de Software. Universidade Federal do Rio Grande do Norte – UFRN Instituto Metrópole Digital – IMD Programa de Pós-Graduação em Engenharia de Software – PPgSW Orientador: Prof. Dr. Eiji Adachi Medeiros Barbosa Natal-RN 2019 Pereira, Iuri Guerra de Freitas. Avaliação da efetividade de uma suite de teste de sistema aplicada ao contexto do Middleware Ginga / Iuri Guerra de Freitas Pereira. - 2019. 124f.: il. Dissertação (Mestrado)-Universidade Federal do Rio Grande do Norte, Instituto Metrópole Digital, Programa de Pós-Graduação em Engenharia de Software, Natal, 2020. Orientador: Dr. Eiji Adachi Medeiros Barbosa. 1. Teste de Software - Dissertação. 2. Cobertura de Código - Dissertação. 3. Teste de Sistema - Dissertação. 4. Efetividade de Suite de Teste - Dissertação. I. Barbosa, Eiji Adachi Medeiros. II. Título. RN/UF/BCZM CDU 004.4 Universidade Federal do Rio Grande do Norte - UFRN Sistema de Bibliotecas - SISBI Catalogação de Publicação na Fonte. UFRN - Biblioteca Central Zila Mamede Elaborado por Raimundo Muniz de Oliveira - CRB-15/429 Dissertação de Mestrado sob o título Um processo de avaliação de efetividade de suíte de teste de sistema aplicado ao contexto do Middleware Ginga apresentada por Iuri Guerra de Freitas Pereira e aceita pelo Programa de Pós-graduação em Engenharia de Software da Universidade Federal do Rio Grande do Norte, sendo aprovada por todos os membros da banca examinadora abaixo especificada: Prof. Dr. Eiji Adachi Barbosa Presidente IMD – Instituto Metrópole Digital UFRN – Universidade Federal do Rio Grande do Norte Prof. Dr. Bruno Barbieri de Pontes Cafeo Examinador FACOM – Faculdade de Computação UFMS – Universidade Federal de Mato Grosso do Sul Prof. Dr. Uirá Kulesza Examinador DIMAP – Departamento de Informática Aplicada UFRN – Universidade Federal do Rio Grande do Norte Natal-RN, 11 de Junho de 2019. Iuri Guerra de Freitas Pereira Avaliação da efetividade de uma suite de teste de sistema aplicada ao contexto do Middleware Ginga Dissertação de Mestrado apresentada ao Pro- grama de Pós-graduação em Engenharia de Software da Universidade Federal do Rio Grande do Norte como requisito para a ob- tenção do grau de Mestre em Engenharia de Software. Trabalho aprovado. Natal-RN, 11 Junho de 2019: Prof. Dr. Eiji Adachi Medeiros Barbosa Orientador Prof. Dr. Bruno Barbieri de Pontes Cafeo Examinador Prof. Dr. Uirá Kulesza Examinador Natal-RN 2019 À minha mãe, que nunca deixou de acreditar no filho. Agradecimentos A presente dissertação de mestrado não poderia chegar até onde chegou sem o precioso apoio de várias pessoas. Em primeiro lugar, a Deus que me permitiu a oportunidade de estudar, adquirir conhecimento e usufruir dos meus sentidos para um bem que possa trazer benefícios para a sociedade. A Ele sou grato pela vida e por mais essa oportunidade de servir. Em segundo lugar, ao meu orientador, Eiji Adachi Medeiros Barbosa, por toda paciência, empenho e disciplina com que me orientou durante todo o processo desse mestrado. O seu auxílio e as suas correções foram fundamentais para que eu pudesse ter o mínimo de noção de onde estava caminhando rumo a carreira acadêmica. Agradeço aos meus colegas de trabalho da MOPA Embedded Systems, que me ajudaram muito no desenvolvimento desse trabalho de pesquisa ao entender o sistema no qual estava trabalhando. Dhiogo Boza, Enock Gomes e Cláudio Schneider foram muito pacientes e me ensinaram muito no decorrer de toda a pesquisa. Agradeço aos meus colegas do mestrado, principalmente ao Heitor Rosa Faustino dos Santos, que nos momentos mais difíceis não me deixou desistir e, por causa desse incentivo, estou aqui escrevendo esse agradecimento. Agradeço ao corpo docente do PPGTI (Programa de Pós-Graduação em Tecnologia da Informação) e aos funcionários do IMD (Instituto Metrópole Digital). Por fim, quero agradecer a minha família pelo apoio incondicional, especialmente a minha mãe que nunca deixou de acreditar em mim e que sempre soube que tudo iria dar certo. “Toda ação humana, quer se torne positiva ou negativa, precisa depender de motivação.” (Dalai Lama) Avaliação da efetividade de uma suite de teste de sistema aplicada ao contexto do Middleware Ginga Autor: Iuri Guerra de Freitas Pereira Orientador: Prof. Dr. Eiji Adachi Barbosa Resumo Qualidade de software tem se tornado um fator fundamental no processo de desenvolvimento de software atualmente. Conseguir mensurar a qualidade de tipos de testes diversos se torna hoje um desafio importante a ser atingido. A pesquisa realizada nesse estudo considerou a avaliação da efetividade de testes de sistemas realizados pela empresa MOPA Embedded Systems na utilização do middleware Ginga para TV Digital. Para realizar a avaliação da suite de teste de sistema executada pela empresa, foi proposta uma metodologia de avaliação da mesma através do critério de cobertura de código, seguida de um estudo exploratório para investigar possíveis motivos para os resultados obtidos da cobertura. Por fim foram realizados testes exploratórios com o objetivo de confirmar as descobertas provenientes da fase de estudo exploratório. Através dessas etapas, foi possível estabelecer um parecer sobre a qualidade dos testes realizados, bem como da automatização realizada pela empresa. Palavras-chave: Teste de Software, Cobertura de Código, Teste de Sistema, Efetividade de Suíte de Teste. Evaluation of test suite effectiveness of a system applied to the context of the Ginga Middleware Author: Iuri Guerra de Freitas Pereira Supervisor: Prof. Dr. Eiji Adachi Barbosa Abstract Software quality has become a key factor in the software development process nowadays. To be able to measure the quality of different types of tests is today an important challenge to be met. The research conducted in this study considered the evaluation of the effectiveness of systems tests performed by MOPA Embedded Systems in the use of Ginga middleware for Digital TV. To perform the system test suite evaluation performed by the company, it was proposed a methodology to evaluate it through the code coverage criterion, followed by an exploratory study to investigate possible reasons for the results obtained from the coverage. Finally, exploratory tests were conducted to confirm the findings from the exploratory study phase. Through these steps, it was possible to establish an opinion on the quality of the tests performed, as well as the automation performed by the company. Keywords: Software testing, code coverage, System testing, Test Suite Effectiveness, Testing Process. Lista de ilustrações Figura 1 – Resultado do teste canvas_TC-018_5 no ambiente Desktop . . . . . . . 20 Figura 2 – Posição do texto no caso de teste canvas_TC-018_5 em ambiente Desktop 21 Figura 3 – Evolução do tempo de execução dos testes manuais na MOPA . . . . . 21 Figura 4 – Evolução dos testes manuais na MOPA . . . . . . . . . . . . . . . . . . 22 Figura 5 – Processo de testes na MOPA Embedded Systems . . . . . . . . . . . . 24 Figura 6 – Relação entre níveis, tipos e técnicas de teste . . . . . . . . . . . . . . 28 Figura 7 – Arquitetura do middleware Ginga segunda a norma ABNT NBR 15606-1 33 Figura 8 – Resultado do caso de teste animation_TC-001_1 . . . . . . . . . . . . . 37 Figura 9 – Processo de comparação de imagem pelo Screen-Tester . . . . . . . . . 42 Figura 10 – Trecho do relatório do GCOVR . . . . . . . . . . . . . . . . . . . . . . 45 Figura 11 – Boxplot para a métricaLOC . . . . . . . . . . . . . . . . . . . . . . . . 47 Figura 12 – Histograma de linhas de código (LOC) . . . . . . . . . . . . . . . . . . 48 Figura 13 – Histograma de porcentagem de cobertura . . . . . . . . . . . . . . . . . 49 Figura 14 – Histograma de porcentagem de cobertura . . . . . . . . . . . . . . . . . 49 Figura 15 – Gráfico de dispersão da cobertura por LOC . . . . . . . . . . . . . . . 50 Figura 16 – Tempo de experiência dos participantes do questionário . . . . . . . . . 59 Figura 17 – Legenda de referência utilizada no questionário . . . . . . . . . . . . . 60 Figura 18 – Resultado do teste automatizado components_TC-152_1 . . . . . . . . . 68 Figura 19 – Trecho da função createTeamporalAnchor mostrando a chamada da função UTCTimeIntervalAnchor sem cobertura . . . . . . . . . . . . . 71 Figura 20 – Trecho da função createTeamporalAnchor mostrando a chamada da função UTCTimeIntervalAnchor com cobertura . . . . . . . . . . . . . 73 Figura 21 – Histograma da cobertura após teste exploratório 1 . . . . . . . . . . . . 75 Figura 22 – Histograma da cobertura após o teste exploratório 2 . . . . . . . . . . 75 Figura 23 – Boxplot comparativo para a métrica cobertura de LOC entre os testes exploratórios e a amostra inicial . . . . . . . . . . . . . . . . . . . . . . 76 Lista de tabelas Tabela 1 – Resumo da cobertura extraída dos testes do fórum SBTVD pelo GVOV/G- COVR em Junho de 2019 . . . . . . . . . . . . . . . . . . . . . . . . . 46 Tabela 2 – Estatística descritiva da métrica LOC . . . . . . . . . . . . . . . . . . 47 Tabela 3 – Estatística descritiva da métrica Cobertura . . . . . . . . . . . . . . . 48 Tabela 4 – Resumo dos participantes do estudo . . . . . . . . . . . . . . . . . . . 54 Tabela 5 – Resumo da quantidade de testes mapeados versus alterados na revisão manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 Tabela 6 – Resumo da quantidade de testes categorizados e modificados por módulo 67 Tabela 7 – Arquivos afetados pelo teste de âncora temporal UTC Time . . . . . . 73 Tabela 8 – Resumo do comparativo entre as baterias de testes . . . . . . . . . . . 74 Tabela 9 – Estatística descritiva comparativa da métrica Cobertura . . . . . . . . 76 Tabela 10 – Caso de teste canvas_TC-018_5 . . . . . . . . . . . . . . . . . . . . . . 93 Tabela 12 – Relatório de cobertura extraído pelo GCOV/GCOVR para os testes automatizados o Ginga . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 Tabela 13 – Mapeamento dos arquivos não exercitados pelos testes automatizados . 113 Tabela 14 – Arquivos afetados pela automatização de parte dos testes do fórum SBTVD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 Tabela 15 – Tabela de análise e categorização dos dados coletados nas entrevistas semiestruturadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 Glossário ABDI Agência Brasileira de Desenvolvimento Industrial ABNT Associação Brasileira de Normas Técnicas API Interface de Programação de Aplicações CSS Cascading Style Sheet DOM Modelo de Objeto de Documento GIF Graphics Interchange Format ou Formato para Intercâmbio de Gráficos HTML Hypertext Markup Language ou Linguagem de Marcação de Hipertexto IPTV Internet Protocol Television ou Televisão por IP ISDB-TB Integrated Services Digital Broadcasting Terrestrial ou Serviço Integrado de Transmissão Digital Terrestre ITU-T Telecommunication Standardization Sector ou Setor de Normatização das Teleco- municações JPEG Joint Photographic Experts Group LAViD Laboratório de Aplicações de Vídeo Digital MCTIC Ministério da Ciência, Tecnologia, Inovações e Comunicações MDIC Ministério da Indústria, Comércio Exterior e Serviços MF Ministério da Fazenda MOV Arquivo de vídeo em formato Apple Quicktime MP3 Tipo de arquivo comprimido de áudio MPEG Moving Picture Experts Group MPEG-2 Codec de vídeo formato MPEG MRE Ministério das Relações Exteriores NCL Nested Context Language PDF Portable Document Format PNG Portable Network Graphics PUC Pontifícia Universidade Católica SBTVD Sistema Brasileiro de TV Digital UFPB Universidade Federal da Paraíba VoD Video on Demand ou Vídeo sob Demanda WMA Windows Media Audio XHTML EXtensible HyperText Markup Language ou Linguagem Extensível para Marca- ção de Hipertexto XML Extensible Markup Language Sumário Capítulo 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 1.1 Contexto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 1.1.1 Execução dos testes do Fórum SBTVD . . . . . . . . . . . . . . . . . . . 19 1.1.2 Automatização dos testes . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 1.1.3 Benefícios e limitações da automatização . . . . . . . . . . . . . . . . . . 24 1.2 Problema de Pesquisa . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 1.3 Objetivo de Pesquisa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 1.4 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 1.5 Estrutura do Documento . . . . . . . . . . . . . . . . . . . . . . . . . 26 Capítulo 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 2 REFERENCIAL TEÓRICO . . . . . . . . . . . . . . . . . . . . . . . 28 2.1 Teste de Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 2.1.1 Níveis de Teste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 2.1.1.1 Teste de Unidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 2.1.1.2 Teste de Integração . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 2.1.1.3 Teste de Sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 2.1.2 Tipos de Teste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 2.1.2.1 Teste de Funcionalidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 2.1.2.2 Teste Não-Funcional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 2.1.2.3 Teste de Regressão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 2.1.3 Técnicas de Teste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 2.1.3.1 Teste funcional (caixa preta) . . . . . . . . . . . . . . . . . . . . . . . . . . 31 2.1.3.2 Teste estrutural (caixa branca) . . . . . . . . . . . . . . . . . . . . . . . . . 31 2.1.3.2.1 Critérios de Cobertura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 2.2 O Middleware Ginga . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.2.1 Arquitetura do Ginga . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.2.2 A linguagem NCL e seus elementos . . . . . . . . . . . . . . . . . . . . . 34 2.2.2.1 Sincronismo com elos e conectores . . . . . . . . . . . . . . . . . . . . . . . 35 2.2.3 O Fórum SBTVD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 2.2.3.1 Os testes do fórum SBTVD . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Capítulo 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 3 ANÁLISE DE COBERTURA DOS CASOS DE TESTE DO FÓRUM SBTVD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 3.1 Screen-Tester: Ferramenta de automatização dos testes do Fórum SBTVD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 3.1.1 O processo do Screen-Tester . . . . . . . . . . . . . . . . . . . . . . . . . 42 3.1.1.1 O oráculo de teste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 3.2 Metodologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 3.2.1 Critério de cobertura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 3.2.2 Infraestrutura de testes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 3.2.3 Sistema alvo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 3.3 Análise dos dados . . . . . . . . . . . . . . . . . . . . . . . . . . .. . 46 3.3.1 Tamanho dos arquivos do Ginga . . . . . . . . . . . . . . . . . . . . . . . 47 3.3.2 Cobertura de linhas de código do Ginga . . . . . . . . . . . . . . . . . . . 48 3.3.3 Tamanho dos arquivos versus Cobertura . . . . . . . . . . . . . . . . . . . 50 3.4 Conclusão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Capítulo 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 4 ESTUDO EXPLORATÓRIO . . . . . . . . . . . . . . . . . . . . . . 51 4.1 Contexto do estudo exploratório . . . . . . . . . . . . . . . . . . . . . 51 4.2 Definições de questões de pesquisa . . . . . . . . . . . . . . . . . . . 52 4.3 Entrevistas semiestruturadas . . . . . . . . . . . . . . . . . . . . . . . 53 4.3.1 Coleta dos dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 4.3.2 Perfil dos participantes das entrevistas . . . . . . . . . . . . . . . . . . . . 53 4.3.3 Análise dos dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 4.3.3.1 QP1: Na opinião dos desenvolvedores, por que ainda é um desafio para a empresa confiar na automatização dos casos de testes atual do fórum SBTVD? . . . . . 55 4.3.3.2 QP2: Na opinião dos desenvolvedores, qual o motivo pelo qual alguns arquivos nunca são cobertos ou são cobertos com baixa cobertura pelos testes automatizados? 56 4.3.3.3 QP3: Na opinião dos desenvolvedores, como seria possível aumentar a cobertura? 58 4.4 Survey de validação . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 4.4.1 Confiar na automatização atual dos testes do fórum SBTVD . . . . . . . . 60 4.4.2 Motivo pelo qual alguns arquivos nunca são cobertos pelos testes automatizados 61 4.4.3 Como aumentar a cobertura? . . . . . . . . . . . . . . . . . . . . . . . . . 62 4.5 Ameaças a validade do estudo . . . . . . . . . . . . . . . . . . . . . . 62 4.6 Considerações finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 Capítulo 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 5 TESTES EXPLORATÓRIOS . . . . . . . . . . . . . . . . . . . . . . 64 5.1 Teste 1 - Configuração de parte dos testes automatizados do fórum SBTVD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 5.1.1 Ameaças da viabilidade do teste exploratório 1 . . . . . . . . . . . . . . . 67 5.1.2 Análise dos resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 5.2 Teste 2 - Âncora de conteúdo temporal (UTC) . . . . . . . . . . . . 69 5.2.1 Âncoras de conteúdo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 5.2.2 Implementação do teste NCL para âncora temporal UTC . . . . . . . . . . 70 5.2.3 Análise de cobertura de código para o teste de âncora temporal . . . . . . 72 5.2.4 Registro e correção de falha de segmentação . . . . . . . . . . . . . . . . 74 5.3 Análise estatística descritiva dos resultados dos testes exploratórios 74 5.4 Ameaças a viabilidade dos testes exploratórios . . . . . . . . . . . . . 76 5.5 Considerações finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 5.5.1 Limitações da automatização . . . . . . . . . . . . . . . . . . . . . . . . . 77 5.5.2 Escopo da suíte do fórum SBTVD . . . . . . . . . . . . . . . . . . . . . . 77 5.5.3 Código Morto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Capítulo 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 6 TRABALHOS RELACIONADOS . . . . . . . . . . . . . . . . . . . . 79 6.1 Cobertura de código e efetividade da suíte de teste . . . . . . . . . 79 6.2 Trabalhos relacionados no contexto do Middleware Ginga . . . . . . 80 Capítulo 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 7 CONSIDERAÇÕES FINAIS . . . . . . . . . . . . . . . . . . . . . . . 83 7.1 O processo de teste da empresa . . . . . . . . . . . . . . . . . . . . . 83 7.1.1 Limitação do ambiente Desktop . . . . . . . . . . . . . . . . . . . . . . . 84 7.2 Limitações da automatização . . . . . . . . . . . . . . . . . . . . . . . 84 7.2.1 Código legado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 7.3 Efetividade da suíte de teste do Fórum SBTVD . . . . . . . . . . . . 85 7.4 Trabalhos Futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 7.5 Contribuições . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 7.6 Conclusão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 REFERÊNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 APÊNDICES 92 APÊNDICE A – CASO DE TESTE: CANVAS_TC-018_5 . . . . . . 93 APÊNDICE B – RELATÓRIO DE COBERTURA - GCOV/LCOV PARA O GINGA . . . . . . . . . . . . . . . . . . . 99 APÊNDICE C – MAPEAMENTO DOS ARQUIVOS NÃO EXER- CITADOS PELOS TESTES AUTOMATIZADOS . 113 APÊNDICE D – ARQUIVOS AFETADOS PELA AUTOMATIZA- ÇÃO DE PARTE DOS TESTES DO FÓRUM SBTVD117 APÊNDICE E – ANÁLISE DOS DADOS DAS ENTREVISTAS . . 119 APÊNDICE F – SURVEY SOBRE AUTOMATIZAÇÃO DOS TES- TES DO FÓRUM SBTVD . . . . . . . . . . . . . 121 APÊNDICE G – CASO DE TESTE - ÂNCORA DE TEMPO UTC TIME . . . . . . . . . . . . . . . . . . . . . . . . . 122 18 1 Introdução Produzir software de qualidade sempre foi um objetivo a ser alcançado, desde os primórdios da Engenharia de Software. Atualmente, com ambientes tecnológicos e de negócio em constante e rápida evolução, alcançar tal objetivo é uma demanda cada vez mais difícil de ser satisfeita. Desta forma, torna-se fundamental a definição, o planejamento e a realização de processos de controle de qualidade durante o processo de desenvolvimento do software. Dentre os diversos processos de controle de qualidade que podem ser realizados durante o processo de desenvolvimento de software, o Teste de Software é, possivelmente, um dos mais reconhecidos, sendo identificado em diferentes modelos de qualidade, como ISO/IEC 12207, ISO/IEC 15504 e CMMI e já amplamente adotado em empresas de desenvolvimento de software. O Teste de Software pode ser definido como a verificação dinâmica de que um programa provê comportamentos esperados, de acordo com alguma especificação, quando exercitado por um conjunto finito de casos de testes. Apesar dos potenciais benefícios de se adotar o Teste de Software no processo de desenvolvimento, esta nem sempre é uma tarefa fácil para uma empresa de software. Os motivos para esta dificuldade são diversos. Crespo et al. (2004) listam as seguintes razões que justificam a dificuldade em se adotar um processo de teste de software: há falta de profissionais especializados na área de teste; o teste de software é um processo caro; há pouco conhecimento sobre a relação do custo-benefício dos testes e há desconhecimento sobre como planejar o processo de teste de software. Neste trabalho, apresentaremos uma avaliação da efetividade de uma abordagem de automatização de testes implementada no contexto da empresa MOPA Embbedded Systems. Mais especificamente, a abordagem de automatização da suíte de testes aplicada ao middleware Ginga. No restante deste capítulo, apresentaremos na seção (1.1) o contexto no qual esse projeto de pesquisa foi desenvolvido, na seção (1.2) o problema de pesquisa, na seção (1.3) o objetivo da pesquisa, na seção (1.4) a metodologia empregada e na seção (1.5) uma breve descrição de como os próximos capítulos estão estruturados. 1.1 Contexto Este projeto de pesquisa foi realizado no contexto da equipe de desenvolvimento da empresa MOPA Embedded Systems, que trabalha há mais de dez anos no ramo de software para TV Digital. Dentre suas principais atividades, a MOPA implementa sua própria versão do Ginga, que é o Middleware de código aberto do Sistema Nipo-Brasileiro Capítulo 1. Introdução 19 de TV Digital que foi adotado pelo sistema brasileiro de TV Digital em 2007 (Sá, 2015). Visando garantir a qualidade das mais diversas implementações do middleware e suas integrações com diferentes arquiteturas de hardware e software, o Fórum do Sistema Brasileiro de TelevisãoDigital (SBTVD) prevê que o Ginga deve passar por um conjunto de testes, em conformidade com as especificações da norma ABNT NBR 15606-1 e ABNT NBR 15606-2. O resultado dos testes deve ser a base do documento de declaração de fornecedor, o qual declara a garantia do fornecedor de que o middleware Ginga embarcado na plataforma alvo está totalmente aderente aos requisitos de um dos perfis definidos na ABNT NBR 15606-1, Seção 9. Da mesma forma, as aplicações interativas enviadas ao receptor, por qualquer meio físico, devem ser ensaiadas para a validação (ABNT, 2018, p. 35). Ou seja, é tanto da responsabilidade de quem está implementando o middleware em sua plataforma quanto de quem está transmitindo aplicações para o middleware, que as aplicações estejam aderentes à norma. 1.1.1 Execução dos testes do Fórum SBTVD O fórum SBTVD define uma suíte de testes que visa garantir que uma determinada implementação do Ginga esteja conforme com a especificação da norma ABNT. Esta suíte de testes do fórum SBTVD possui atualmente 2.812 casos de teste. Cada caso de teste definido pelo fórum SBTVD é definido como uma especificação de uma aplicação de TV Digital que roda sobre o Ginga e de um estado final esperado para esta aplicação (ex.: após a execução de uma determinada aplicação, é esperado que seja exibido na tela da TV uma determinada imagem, com um determinado tamanho e numa determinada posição). Os testes podem ser executados em dois ambientes: num ambiente desktop e diretamente numa placa de TV, que é a plataforma de hardware considerada o ambiente de produção do Ginga. O ambiente desktop proporciona ferramentas que possibilitam a simulação do funcionamento do middleware Ginga no computador, enquanto que na placa de TV as entradas e saídas são realizadas diretamente com o software embutido na placa. No contexto da empresa MOPA, inicialmente, os testes do fórum SBTVD eram executados unicamente de forma manual e diretamente na placa de TV, visto que este é o ambiente final onde o produto será usado quando for lançado ao mercado. A execução manual destes testes quer dizer que um testador era responsável por implantar o Ginga numa plataforma de hardware, por carregar as aplicações de TV digital definidas em cada caso de teste, por executar essas aplicações, por verificar o resultado final da aplicação e por registrar o resultado desta verificação numa planilha de controle. Para demonstrar um exemplo prático de como os testes eram executados e veri- ficados, e de como a execução manual vinha trazendo alguns problemas de custos para Capítulo 1. Introdução 20 a empresa, iremos apresentar um exemplo de um caso de teste específico. Tal exemplo, apesar de simples, apresenta algumas características que dificultavam a tarefa de executá-lo manualmente. Tais características são comuns a maioria dos 2.812 casos de testes do fórum SBTVD. Tomemos o exemplo do caso de teste real canvas_TC-018_5. Para esse caso de teste, o engenheiro de software responsável pela execução do teste necessita ter a especificação do caso de teste para entendimento do que deve ser verificado, uma planilha para controle do resultado do teste e ter à disposição o ambiente onde realizará o teste.1 O caso de teste canvas_TC-018_5 especifica que, após a execução da sua aplicação de TV digital, deve aparecer na tela uma mídia de imagem com cor azul preenchendo todo o background da tela. Deve também ser disponibilizada uma mídia de texto com as cores RGBA (0,57,255,28) com tamanho de 36 pixels, fonte do tipo Tiresias e com o conteúdo "Testing the RGBA color of text.". Esse texto deverá aparecer numa localização situada 20 pixels à esquerda da tela e 20 pixels ao topo da tela. Como resultado da execução da aplicação de TV digital deste caso de uso, o Ginga reproduz na tela da TV a imagem apresentada na Figura 1. Figura 1 – Resultado do teste canvas_TC-018_5 no ambiente Desktop Observando a Figura 1, o leitor pode achar que o teste falhou, pois não enxerga a mídia de texto com as propriedades especificadas, mas o resultado produzido pelo Ginga está de acordo com o esperado e o teste, na verdade, obteve sim sucesso. O que se percebe neste caso é uma extrema dificuldade em distinguir o elemento de texto que a aplicação de TV digital construiu como resultado de sua execução. Note que mesmo realçando a região onde o texto aparece, como destacado na Figura 2, ainda assim é difícil identificar a mídia de texto esperada. Por possuir praticamente a mesma cor do background e ainda 1 A especificação completa deste caso de teste, conforme definido pelo fórum SBTVD, e como era usada na execução manual dos testes, é apresentada no Apêndice A deste documento. Capítulo 1. Introdução 21 ter um atributo de transparência, é difícil a identificação da mídia de texto. Esse é um exemplo de como os testes do fórum SBTVD podem gerar ambiguidades e incertezas na sua verificação quando executados manualmente. Tal característica pode levar o testador a cometer erros, além de tomar muito tempo para identificar se o teste está fazendo o que se propõe, bem como anotando o resultado na planilha, procedimento que também é realizado manualmente para cada teste. Figura 2 – Posição do texto no caso de teste canvas_TC-018_5 em ambiente Desktop Durante os testes manuais, três testadores executavam os casos de testes de forma paralela e selecionando um módulo por vez; cada caso de teste era executado apenas uma vez por um testador. Ao todo, os 2.812 testes do fórum SBTVD cobrem 16 módulos do Ginga. Na Figura 3 é mostrada a evolução do custo em horas de trabalho para a execução dos 2.812 casos de testes em cada release do Ginga que foi submetida aos testes manuais do fórum SBTVD. Figura 3 – Evolução do tempo de execução dos testes manuais na MOPA Capítulo 1. Introdução 22 Na Figura 3 percebe-se uma melhoria no tempo de execução dos testes com o passar do tempo. Enquanto na primeira versão (release 215) o tempo gasto com os testes foi de aproximadamente 116 horas, na última versão (release 584) esse total caiu para aproximadamente 20 horas. Isso pode refletir uma curva de aprendizado dos testadores, uma vez que não houve rotatividade na equipe que executava os testes nesse período. A figura 4 apresenta os resultados dessas baterias de testes manuais ao longo da evolução do Ginga. Figura 4 – Evolução dos testes manuais na MOPA Como pode ser percebido na figura 4, o resultado de cada teste manual é classificado em quatro categorias: PARCIAL, N/A, FAIL e OK. A categoria “PARCIAL” significa testes que, segundo a interpretação do testador, passaram na especificação, porém apresentaram mais algum comportamento não especificado. O testador ao se deparar com esse tipo de teste o categoriza como “PARCIAL” e abre um issue de investigação para resolver posteriormente e melhorar o processo. “N/A” é a categoria que o testador selecionava quando não conseguia, por algum motivo, reproduzir o caso de teste. Por exemplo, ainda não se pode reproduzir casos de teste que executem o protocolo Real Time Streamming Protocol (RTSP). “FAIL“ é a categoria selecionada quando o teste falha, ou seja, quando ele não atende a especificação ou quando há alguma falha fatal, como falhas de segmentação, deadlocks ou loops infinitos, por exemplo. E “OK“ é quando o testador considera que o teste executa com sucesso, ou seja, o comportamento esperado está coerente com a especificação do teste e não há necessidade de melhorias. Ao longo da evolução do Ginga, além da melhoria no tempo de execução, também é percebida uma melhoria nos resultados dos casos de testes com status de sucesso. Podemos perceber que na primeira versão (release 215), o número de casos de teste que obtiveram o status "OK" foi de 1.612 (57,32%). Esse valor foi aumentando com o passar das versões e, Capítulo 1. Introdução 23 na última, atingiu 2.455 (87,30%) casos de testes com status "OK". O que representa uma melhoria de 52,29%. Apesar da melhoria no tempo de execução do testes manuais e nos resultados obtidos, o processo detestes baseado na execução manual dos testes do fórum SBTVD ainda apresentava limitações e custo elevado. O fator humano tende a prejudicar a interpretação dos testes, que são todos de característica audiovisual, o que comprometia a reprodutibilidade dos testes. Além disso, havia um grande custo associado à reexecução dos testes manuais quando falhas eram identificadas durante o processo de testes. Este cenário em que os testes do fórum SBTVD eram executados manualmente representa o estado em que se encontrava o processo de testes na empresa MOPA anteri- ormente à realização deste trabalho de pesquisa. Concomitantemente a realização desta pesquisa, a automatização de testes mostrou-se um investimento necessário e a empresa MOPA deu início a um processo de automatização dos testes do fórum SBTVD. Na seção seguinte, será apresentado como se deu o processo de adoção de uma estratégia de automatização dos testes do fórum SBTVD no contexto da empresa MOPA. 1.1.2 Automatização dos testes Como dito anteriormente, os testes do fórum SBTVD para o Ginga podem ser exe- cutados em ambiente desktop, simulando o funcionamento do middleware, ou diretamente numa placa de TV digital, que é o ambiente onde o Ginga roda em produção. Diante da necessidade de adotar uma primeira abordagem de automatização dos testes do fórum SBTVD, a empresa optou por um processo para automatizar a execução destes testes em ambiente desktop. Dessa forma, ao realizar testes em ambiente desktop é possível utilizar ferramentas que capturem entradas do usuário e simulem interações com as aplicações de TV digital que são usadas para testar o Ginga. Por outro lado, realizar o mesmo procedimento na placa de TV digital requer instrumentação para captura de entradas e estratégias como gravação de imagem com câmeras para saídas da TV, tornando esse procedimento mais complexo e custoso do que o em ambiente desktop. Neste contexto, a abordagem de automatização dos testes do fórum SBTVD segue o processo visto na figura 5. Capítulo 1. Introdução 24 Figura 5 – Processo de testes na MOPA Embedded Systems De acordo com figura 5, após uma modificação no código fonte, que pode ser de uma nova funcionalidade ou correção de algum bug, o processo de validação dos testes de conformidade do fórum SBTVD devem ser realizados. Dessa forma, a bateria automatizada realiza os testes e caso haja alguma falha que indique regressão, um incidente é aberto e o processo é pausado até que esse incidente seja corrigido, uma nova alteração no código seja feita e o processo é reinicializado. Havendo sucesso em todo o processo automatizado em ambiente desktop, os testes devem ser novamente validados no ambiente da placa de TV, agora de forma manual. Como a placa de TV é o produto final, foi uma decisão estratégica da empresa continuar realizando os testes manuais na placa de TV digital, mesmo após a execução dos testes em ambiente desktop de forma automatizada. 1.1.3 Benefícios e limitações da automatização A bateria de testes automatizada com todos os 2.812 casos de teste do fórum SBTVD dura cerca de 30 minutos para ser concluída em média. Se compararmos essa execução com a execução da release manual com o melhor desempenho, há uma melhoria de desempenho de aproximadamente 20 horas para 30 minutos em média (40 vezes mais rápido). Essa automatização permite identificar algumas regressões de maneira mais ágil do que no processo manual empregado pela empresa anteriormente. No entanto, ainda não está claro até que ponto a abordagem de automatização dos testes do fórum SBTVD implementada pela empresa MOPA é, de fato, efetiva. Cabe ressaltar que a automatização realizada pela empresa MOPA baseia-se numa ferramenta desenvolvida por sua própria equipe de desenvolvimento e que a configuração dos testes foi realizada de maneira padrão para toda a suíte de testes do fórum SBTVD. Desta forma, há a possibilidade de que alguns testes não estejam sendo executados adequadamente. Também existem limitações no ambiente desktop que dificultam ou mesmo impossibilitam a automatização adequada dos testes, como nos casos em que os testes dependem de mídias de áudio e vídeo. Portanto, fica claro que o processo de automatização de testes da Capítulo 1. Introdução 25 empresa encontra-se em um estágio inicial, ainda em fase de amadurecimento e requer uma análise criteriosa sobre a sua efetividade. 1.2 Problema de Pesquisa É comum encontrar em pesquisas acadêmicas e na indústria a prática de usar critérios de cobertura para avaliar suítes de testes no sentido de garantir a sua qualidade, pois são de fácil compreensão e seu critério de parada de teste é bem estabelecido (GROCE; ALIPOUR; GOPINATH, 2014) (SCHWARTZ; HETZEL, 2016). A cobertura de código irá avaliar o quão bem o código cobre os elementos estruturais do sistema (SCHWARTZ; HETZEL, 2016). Irá medir qual parte do código foi executada pelos testes, porém não leva em conta se um método foi testado com uma afirmação correta ou se foi executado sem nenhuma afirmação ou com afirmações incompletas (NIEDERMAYR; JUERGENS; WAGNER, 2016). Alguns estudos já mostraram que gerar suítes de teste para satisfazer critérios de cobertura de código tiveram um efeito positivo em achar falhas (GOPINATH; JENSEN; GROCE, 2014), (NAMIN; ANDREWS, 2009), (NIEDERMAYR; JUERGENS; WAGNER, 2016), (Gay, 2017), enquanto outros estudos não (INOZEMTSEVA; HOLMES, 2014) e (Gay et al., 2015). O estudo de (INOZEMTSEVA; HOLMES, 2014) sugeriu que o critério de cobertura, enquanto útil para identificar partes não testadas de um programa, não deveria ser utilizado como indicador de efetividade para uma suíte de teste, pois a correlação entre cobertura de código e efetividade era de baixa a moderada para suítes de teste unitárias considerando um número de casos de testes controlados. Todos esses estudos, todavia, permeiam o contexto de testes unitários. Tendo em vista que existem significativos estudos com resultados divergentes quanto a efetividade de uma suíte de teste estar ou não correlacionada com a cobertura do código, é possível afirmar que esse campo de estudo na linha de suíte de testes em nível unitário já vem sendo bem explorado. Todavia quando nos deparamos com suítes de testes em nível de sistemas, existe uma maior dificuldade de se encontrar pesquisas que definam bem os critérios para avaliar a efetividade da suíte ou estudem a sua eficiência quanto a encontrar falhas. Portanto, no contexto dessa dissertação, o problema consiste em verificar se a análise de cobertura de código para suíte de teste de sistemas é suficiente para validar a efetividade dos testes realizados na empresa MOPA. 1.3 Objetivo de Pesquisa O objetivo de pesquisa geral desse trabalho é: Realizar um estudo sobre o processo automatizado de teste de sis- Capítulo 1. Introdução 26 tema implementado pela Empresa MOPA Embedded Systems com o propósito de analisar a sua efetividade. São objetivos específicos deste trabalho: • Avaliar a efetividade da suíte de teste automatizada; • Identificar e compreender limitações e melhorias potenciais no processo de automati- zação estabelecido; • Explorar possibilidades de melhorar o processo de automatização; 1.4 Metodologia Nesta seção são apresentados os procedimentos adotados para alcançar o objetivo deste trabalho. Análise de cobertura: Foi realizada a análise de cobertura de uma versão do código baseada no critério da data em que a mesma foi lançada. A partir dessa análise, é possível verificar qual é a influência dos testes automatizados no código fonte. Estudo exploratório: Foi conduzido um estudo exploratório onde foram realizadas entrevistas semiestruturadas com os desenvolvedores afim de investigar particularidades do processo de desenvolvimento e teste de software da empresa. Tais entrevistas foram fundamentais para entender a natureza dos testes realizados pela empresa e qual a real dificuldade que a automatização enfrentara para ser confiável. Afim de validar os resultados obtidos nas entrevistas foi realizado um survey de validaçãocom todos os colaboradores da empresa. Testes Exploratórios: A partir de alguns pontos levantados na fase do estudo exploratório, ficou evidente que era necessário a realização de testes que buscassem validar alguns pontos levantados na fase do estudo exploratório. Essa fase dos testes exploratórios investigou dois principais pontos que seriam cruciais para melhorar a cobertura de código e propôs testes que buscassem melhorar sua métrica. Com o resultado dos testes, era esperado que se pudesse obter uma conclusão sobre a efetividade da automatização dos testes automatizados realizados pela empresa. 1.5 Estrutura do Documento Este trabalho está dividido em 7 capítulos, ficando o restante do documento estruturado da seguinte forma: Capítulo 1. Introdução 27 • O Capítulo 2 apresenta conceitos teóricos relacionados a testes de software, middeware Ginga e o contexto dos testes do fórum SBTVD; • O Capítulo 3 apresenta a análise de cobertura extraída da automatização com os testes do fórum SBTVD; • O Capítulo 4 apresenta o estudo exploratório realizado contendo o resultado das entrevistas semiestruturadas e do survey de validação; • O Capítulo 5 discorre sobre dois testes exploratórios decorrentes das conclusões das entrevistas e seus respectivos resultados; • O Capítulo 6 apresenta os trabalhos relacionados a esta pesquisa; • Por fim, o Capítulo 7 trata das considerações finais, propostas para a empresa e trabalhos futuros. 28 2 Referencial teórico Este capítulo irá apresentar o referencial teórico que será abordado durante a pesquisa. A seção (2.1) falará dos testes de software, seus níveis, tipos e as fases em que eles são empregados. Já a seção (2.2) trata do middleware Ginga, sua arquitetura, a linguagem NCL e o fórum SBTVD. 2.1 Teste de Software Teste de Software é definido por Myers e Sandler (2004) como o processo de executar um programa com o objetivo de encontrar erros. De fato, quando se testa um programa, deseja-se adicionar algum valor a ele. Adicionar valor através de teste significa incrementar a qualidade ou confiabilidade do programa. Um aumento na confiabilidade do programa significa achar e remover erros. Todavia, não se testa um programa para provar que ele funciona, ao invés disso, é assumido que o programa contém erros e testamos o programa para encontrá-los (MYERS; SANDLER, 2004). Podemos dividir os Testes de Software em três dimensões ortogonais. A figura 6 representa estas dimensões de modo visual em um modelo adaptado do trabalho de Crespo et al. (2004). Figura 6 – Relação entre níveis, tipos e técnicas de teste Modelo adaptado do trabalho de (CRESPO et al., 2004) Como pode ser visto na figura 6, as dimensões do Teste de Software são definidas Capítulo 2. Referencial teórico 29 em termos de “Quando”, “O que” e “Como” testar o software. A dimensão “Quando testar” está associada às fases do desenvolvimento do software, definindo testes de software em diferentes níveis de abstração: Teste de Unidade, Teste de Integração e Teste de Sistema. Ortogonalmente a esses níveis, está a dimensão “Como” testar, que está relacionada a qual técnica de teste será escolhida para realizar os testes. Por fim, a dimensão “O que” testar está relacionada a qual atributo de qualidade será o foco do teste, podendo ser a funcionalidade ou a característica do software, por exemplo. O contexto dessa dissertação aborda os testes de conformidade do fórum SBTVD para TV Digital no middleware Ginga, que são testes funcionais caixa-preta e se enquadram no nível de testes de sistemas. 2.1.1 Níveis de Teste Os níveis de teste estão relacionados com as fases do desenvolvimento do software e dizem respeito mais precisamente a quando determinado teste deve ser empregado. Nas seções a seguir descrevemos estes níveis. 2.1.1.1 Teste de Unidade O teste de unidade focaliza o esforço na verificação da unidade, isto é, da menor unidade testável do projeto de software, tipicamente um componente ou módulo de software (PRESSMAN, 2009). Esse teste foca na lógica de processamento e as estruturas de dados dentro dos limites de uma unidade. Geralmente o teste de unidade é considerado um auxiliar na etapa de desenvolvimento. O projeto de teste de unidade pode ocorrer até mesmo antes da etapa de codificação começar ou após o código-fonte ter sido gerado. 2.1.1.2 Teste de Integração O teste de integração buscar verificar se as interdependências das unidades de- senvolvidas contém erros, ou seja, se duas ou mais unidades conseguem se comunicar corretamente entre si. Esse nível de teste é considerado uma fase intermediária entre os testes de unidade e de sistema. Ou seja, após verificarmos a corretude das unidades, verificamos se a comunicação entre as unidades está correta. Em seguida, verificamos propriedades de mais alto nível, que são verificadas através de testes de sistema. 2.1.1.3 Teste de Sistema O teste de sistema tem o objetivo de verificar se todas as funcionalidades e todos os atributos de qualidade especificados nos documentos de requisitos estão corretamente implementadas. Ou seja, nos testes de sistemas são verificados não apenas os requisitos funcionais, mas também os requisitos não-funcionais do sistema. Desta forma, testes de Capítulo 2. Referencial teórico 30 sistema podem focar em diferentes atributos de qualidade de software, como segurança, performance, usabilidade, portabilidade, etc. 2.1.2 Tipos de Teste Os tipos de testes estão relacionados a “O que” testar no programa. Em outras palavras, estão relacionados a qual o objetivo a ser alcançado pelos testes. Estes objetivos podem ser: uma funcionalidade que deve ser provida por um determinado módulo do sistema (Teste de Funcionalidade); um determinado atributo de qualidade que deve ser atendido num determinado grau (Teste Estrutural); ou garantir que as funcionalidades do software não regridam ao longo da evolução do sistema (Teste de Regressão). 2.1.2.1 Teste de Funcionalidade O teste de funcionalidade é o processo de teste que busca encontrar discrepâncias entre o comportamento do programa e suas especificações externas. Uma especificação externa é uma descrição precisa do comportamento do programa pela perspectiva do usuário final. É geralmente uma atividade de técnica caixa-preta (MYERS; SANDLER, 2004). 2.1.2.2 Teste Não-Funcional Teste Não-Funcional refere-se ao tipo de teste cujo objetivo é verificar se um determinado atributo de qualidade de software é atendido num determinado grau. Ou seja, neste tipo de teste, é verificado se e até que ponto um determinado software atende um requisito não-funcional relacionado a um atributo de qualidade. Este tipo de teste cobre, tipicamente, atributos de qualidade como segurança, desempenho, confiabilidade, dentre outros. 2.1.2.3 Teste de Regressão Teste de regressão é um tipo de teste que objetiva identificar se funcionalidades do software regrediram ao longo da evolução do sistema. Em outras palavras, objetiva identificar casos em que funcionalidades que antes funcionavam deixaram de funcionar devido a mudanças realizadas no sistema. O teste de regressão é realizado após mudanças no sistema, que podem ser uma melhoria funcional ou uma correção no programa ter sido realizada. Usualmente é realizado através da execução de um subconjunto de casos de teste. O teste de regressão é importante porque defeitos tendem a ser introduzidos no código durante a realização de mudanças e correções de erros. Capítulo 2. Referencial teórico 31 2.1.3 Técnicas de Teste As técnicas de teste estão relacionadas ao conceito de como testar o programa. As principais técnicas de teste são a funcional (não confundir com o teste de funcionalidade descrito anteriormente), a estrutural e a mutação. Mais detalhes sobre cada um dessas técnicas nos tópicos a seguir. 2.1.3.1 Teste funcional (caixa preta) O teste funcional é um teste baseado na especificação, os casos de teste são construídos baseados apenas no que o documento de especificação diz que ele tem que fazer e não no que está implementado.Consideram-se apenas entradas e saídas da unidade, módulo ou componente a ser testado (DELAMARO; MALDONADO; JINO, 2016). 2.1.3.2 Teste estrutural (caixa branca) A técnica de teste estrutural estabelece os requisitos de teste baseado em uma implementação, requerendo a execução de partes ou de componentes elementares do programa. Os caminhos lógicos são testados, fornecendo-se casos que põe a prova tanto um conjunto específico de condições e/ou laços bem como valores limites de suas variáveis (DELAMARO; MALDONADO; JINO, 2016). 2.1.3.2.1 Critérios de Cobertura Critérios de cobertura são métricas tipicamente associadas ao teste estrutural que expressam qual proporção de um determinado elemento de código de um software é executada quando se rodam uma suíte de testes. Os principais critérios de cobertura utilizados são: • Cobertura por função: Mede quantas funções ou sub-rotinas de um programa foram executadas. • Cobertura por statements: Também conhecida como cobertura por linhas de código, mede quantas vezes que uma linha de código foi executada pelos testes. • Cobertura por branches: Mede a quantas vezes que uma estrutura de controle foi executada. Uma estrutura de controle pode ser entendida como um if..else no código, por exemplo. • Cobertura por condição: Também conhecida com cobertura de predicado, mede se cada uma das condição de booleanas foi testada no código. Capítulo 2. Referencial teórico 32 Quando ao se avaliar suítes de teste, é importante dizer que cobertura de código é uma métrica meramente quantitativa que não deve ser utilizada para aferir qualidade do conjunto de teste por si só. Tem por objetivo demonstrar quanto do código foi exercitado pelo teste e deve ser levada em consideração para verificar em quais pontos do código o teste passou ou se nunca passou por aquele ponto. É importante frisar que aumentar os índices de cobertura de uma suíte de teste nem sempre significa que essa suíte de teste estará sendo efetiva em descobrir falhas para o sistema exercitado por ela (INOZEMTSEVA; HOLMES, 2014) (NIEDERMAYR; JUERGENS; WAGNER, 2016). Por outro lado, suites de teste que não tenham um bom nível de cobertura necessitam de atenção para melhorias tanto nos testes que estão sendo executados quanto no código que não está sendo exercitado, pois claramente levantam a suspeita de que ao não se exercitar parte do código, esse código obscuro pode esconder falhas. 2.2 O Middleware Ginga Ginga é o nome do Middleware Aberto do Sistema Nipo-Brasileiro de TV Digital (ISDB-TB) e Recomendação ITU-T para serviços IPTV (GINGA, 2008). O Ginga é fruto do desenvolvimento de projetos de pesquisa coordenados pelos laboratórios Telemídia da PUC-Rio e LAViD da UFPB (GINGA, 2008). Um middleware é uma camada de software posicionada entre o código das aplicações e a infra-estrutura de execução (plataforma de hardware e sistema operacional). Um middleware para aplicações de TV digital consiste de máquinas de execução das linguagens oferecidas e bibliotecas de funções que permitem o desenvolvimento rápido e fácil de aplicações. O ambiente de apresentação Ginga-NCL é o subsistema lógico obrigatório do Ginga, responsável pela execução de aplicações declarativas Nested Context Language (NCL). O Ginga trabalha com o conceito de perfis. Cada perfil está relacionado às ca- racterísticas dos receptores para suportarem o middleware. Atualmente existem 4 perfis, tratados como perfis A, B, C e D. Essa pesquisa de mestrado está contextualizada no perfil C do Ginga. 2.2.1 Arquitetura do Ginga Na figura 7 temos uma visão macro de toda a arquitetura do middleware Ginga. Como pode ser visto na figura 7, a arquitetura do Ginga segue um modelo em camadas. A arquitetura tem dois componentes principais: a máquina de execução ou Ginga-J e a máquina de apresentação (Ginga-NCL e Ginga-HTML5). Capítulo 2. Referencial teórico 33 Figura 7 – Arquitetura do middleware Ginga segunda a norma ABNT NBR 15606-1 Arquitetura do middleware Ginga segunda a norma ABNT NBR 15606-1 O universo das aplicações Ginga pode ser particionado em um conjunto de aplicações declarativas e um conjunto de aplicações imperativas. Uma aplicação declarativa pura é aquela na qual o conteúdo de todas as entidades é do tipo declarativo. Já uma aplicação imperativa pura é aquela na qual o conteúdo de todas as entidades é do tipo imperativo. Uma aplicação híbrida é aquela cujo conjunto de entidades possui tanto conteúdo do tipo declarativo quanto do tipo imperativo. Uma aplicação Ginga não necessita ser puramente declarativa ou imperativa. A máquina de execução ou Ginga-J é o subsistema lógico do middleware responsável pelo processamento de aplicações imperativas escritas utilizando a linguagem Java. É um item opcional da norma ABNT NBR 15606-4 (SOARES, 2009). A máquina de apresentação Ginga-NCL é o subsistema lógico do middleware responsável pelo processamento de aplicações declarativas NCL (Nested Context Language), e sua linguagem de script Lua compõem a base para o desenvolvimento de aplicações declarativas no SBTVD (SOARES, 2009). A máquina de apresentação Ginga-HTML5 é o subsistema lógico que pertence ao perfil D do Ginga, não tratado nessa dissertação de mestrado. É o subsistema responsável pelo processamento de aplicações nativas HTML5 conforme especificadas na norma ABNT NBR 15606-10. Também vemos o monitor de ciclo de vida de aplicação ou recurso do sistema operacional para controle do software. Esse componente tem a função de controlar todo o Capítulo 2. Referencial teórico 34 ciclo de vida da aplicação, incluindo início, término e controle. Cada aplicação pode ser escrita para as respectivas máquinas de apresentação, para a máquina de execução ou para ambas. O componente outras mídias é composto de streams de mídia tais como áudio e dados de monomídias como imagens estáticas e texto (ABNT-NBR-16606-1, 2018). A máquina de apresentação Ginga-NCL é o foco deste trabalho, pois é por lá que passam todos os testes do fórum SBTVD. A NCL é uma linguagem declarativa, uma aplicação XML. Baseada no modelo conceitual NCM (Nested Context Model), a NCL traz uma separação clara entre os conteúdos de mídia e a estrutura de uma aplicação. Um documento NCL apenas define como os objetos de mídia são estruturados e relacionados, no tempo e no espaço. Como uma linguagem de cola, ela não restringe nem prescreve os tipos de conteúdo dos objetos de mídia de uma aplicação (SOARES; BARBOSA, 2011). 2.2.2 A linguagem NCL e seus elementos Para que se entenda como uma aplicação de TV digital para o Ginga é criada, é importante ter algumas noções da linguagem NCL. A linguagem NCL orquestra objetos de mídia e vários tipos diferentes, relacionando-os no tempo e no espaço, criando o que se denomina de uma apresentação multimídia. O autor da apresentação deve informar à máquina de apresentação o que ela deve tocar, onde, como e quando. Um documento NCL é um aquivo XML cuja estrutura está dividida em duas partes principais: o cabeçalho (elemento <head>) e o corpo (elemento <body>). No cabeçalho ficam as bases de informação que especificam onde e como o conteúdo deve ser exibido. No corpo está descrito o que é o conteúdo e quando ele deve ser exibido. O nós de mídia (elementos <media>), definem o que tocar, ou seja, quais os conteúdos que serão exibidos. Os nós de mídia são definidos dentro de um outro tipo de nó, denominado nó de composição ou contexto (elemento <context>). Pode-se ter objetos de imagem (GIF, JPEG, etc.), de vídeo (MPEG, MOV, etc.), de áudio (MP3, WMA, etc.), de texto(TXT, PDF, etc.), de execução(Xlet, Lua, etc.), entre outros, como objeto de mídia NCL. Nós de contexto tem a função de encapsular outros nós, que podem ser tanto nós de mídia como também nós de contexto, recursivamente. Para que seja possível acessar um nó interno a um contexto, é necessário definir nesse contexto um ponto de entrada ou porta (elemento <port>) que aponte para tal nó interno. O corpo do documento (elemento <body>) também é um contexto, que é tratado pela máquinade apresentação como o contexto principal do documento. Todos os outros nós (de mídia ou de composição) estão contidos no corpo do documento. Ao encapsular outros nós, um nó de contexto também tem as funções de estruturar e permitir o reúso de partes de um documento NCL. Regiões são nós que especificam a informação de onde uma mídia deve ser exibida. Capítulo 2. Referencial teórico 35 São denominados pelo elemento <region>. Uma região define uma área na tela onde uma mídia é apresentada. São definidas através da sua posição (top, bottom, left, right), sua altura (height) e largura (width). Toda região também deve ter um atributo id, que é utilizado pelo descritor para associá-la a uma ou outras mídias. Descritor (elemento <descriptor>) são elementos utilizados para associar uma mídia a uma região. Eles definem como nós de mídia são apresentados. Por exemplo: uma mídia de áudio pode estar associada a um descritor que estabelece que sua apresentação ocorre com volume a 50% do original; uma imagem pode ser associada a um descritor que estabelece uma transparência de 80% entre outros. O descritor também possui um atributo id que é único e utilizado pelo objeto de mídia para se associar a esse descritor (SANT’ANNA CARLOS DE SALLES SOARES NETO, 2012). 2.2.2.1 Sincronismo com elos e conectores Uma aplicação multimídia elaborada requer que seja possível para o autor especificar os relacionamentos de mídias. Exemplos de relacionamentos de mídia são: quando começar a exibição da mídia X, deve terminar a exibição da mídia Y; quando terminar a exibição de X, pausa Y; quando começar X, depois de 2 segundos inicia Y. O uso desses relacionamentos é uma forma natural para um autor de uma apresentação multimídia especificar quando uma mídia deve ser exibida. Os relacionamentos são realizados através de elos (elementos <link>). Para facilitar a definição dos elos, os mesmos são escritos tendo com base relações hipermídia. Relações em NCL são escritas como restrições ou sentenças causais, onde uma ação é realizada quando uma condição é satisfeita. Isso é especificado untilizando conectores (elementos <causalConnector>). Conectores são especificados no elemento <connectorBase> dentro do cabeçalho <head>. No perfil para TV Digital, NCL define apenas os conectores causais. Um conector causal é definido como um conjunto de papeis de condição que devem ser satisfeitos para a ativação de elos que usam aquele conector, além de um conjunto de papeis de ações que são executadas caso elos usando aquele conector se tornem ativos. Em um conector é necessário que se defina pelo menos uma condição e uma ação. Cada condição ou ação está associada a um papel (role) que, posteriormente, é associado à âncora de um nó, através de ligações (elementos <bind>) nos elos. As condições e ações em NCL podem estar associadas tanto à apresentação como à seleção ou atribuição em nós de mídia (SANT’ANNA CARLOS DE SALLES SOARES NETO, 2012). Para demonstrar de forma bem simples o comportamento de uma aplicação NCL, veremos o caso de teste animation_TC-001_1 na listagem (2.1) que passa pelos conceitos descritos anteriormente. Capítulo 2. Referencial teórico 36 1 2 <?xml ve r s i on = ‘ ‘1 .0 ‘ ‘ encoding= ‘ ‘ISO−8859−1 ‘ ‘ s tanda lone = ‘ ‘no ‘ ‘ ?> 3 <nc l xmlns= ‘ ‘ h t tp : //www. nc l . org . br/NCL3.0/ EDTVProfile ‘ ‘ id = ‘ ‘NCL_0‘ ‘> 4 <head> 5 <!−−HEAD_0−−> 6 <regionBase id = ‘ ‘REGIONBASE_0‘ ‘> 7 <reg ion he ight = ‘ ‘200 ‘ ‘ id = ‘ ‘REGION_0‘ ‘ r i g h t = ‘ ‘50 ‘ ‘ top = ‘ ‘300 ‘ ‘ width = ‘ ‘200 ‘ ‘/> 8 </ reg ionBase> 9 <desc r ip to rBase id = ‘ ‘DESCRIPTORBASE_0‘ ‘> 10 <de s c r i p t o r id = ‘ ‘DESCRIPTOR_0‘ ‘ r eg i on = ‘ ‘REGION_0‘ ‘ /> 11 </ desc r ip to rBase> 12 <connectorBase id = ‘ ‘CONNECTORBASE_0‘ ‘> 13 <causalConnector id = ‘ ‘CAUSALCONNECTOR_0‘ ‘> 14 <simpleCondit ion r o l e = ‘ ‘ onBegin ‘ ‘> 15 <!−−SIMPLECONDITION_0−−> 16 </ simpleCondit ion> 17 <simpleAct ion eventType= ‘ ‘ a t t r i bu t i on ‘ ‘ r o l e = ‘ ‘ set ‘ ‘ va lue = ‘ ‘450 ‘ ‘> 18 <!−−SIMPLEACTION_0−−> 19 </ simpleAct ion> 20 </ causalConnector> 21 </connectorBase> 22 </head> 23 <body id = ‘ ‘BODY_0‘ ‘> 24 <port component= ‘ ‘MEDIA_0‘ ‘ id = ‘ ‘PORT_0‘ ‘ /> 25 <media d e s c r i p t o r = ‘ ‘DESCRIPTOR_0‘ ‘ id = ‘ ‘MEDIA_0‘ ‘ s r c = ‘ ‘medias/ images /sampleImg04 . png ‘ ‘ type= ‘ ‘ image/png ‘ ‘> 26 <property name= ‘ ‘ r i ght ‘ ‘> 27 <!−−PROPERTY_0−−> 28 </property> 29 </media> 30 <l i n k id = ‘ ‘LINK_0‘ ‘ xconnector = ‘ ‘CAUSALCONNECTOR_0‘ ‘> 31 <bind component= ‘ ‘MEDIA_0‘ ‘ r o l e = ‘ ‘ onBegin ‘ ‘> 32 <!−−BIND_0−−> 33 </bind> 34 <bind component= ‘ ‘MEDIA_0‘ ‘ i n t e r f a c e = ‘ ‘ r i ght ‘ ‘ r o l e = ‘ ‘ set ‘ ‘> 35 <!−−BIND_1−−> 36 </bind> 37 </ l i n k> 38 </body> 39 </ nc l> Listing 2.1 – Caso de teste animation_TC-001_1 Na listagem (2.1) vemos que no cabeçalho (<head>), na linha 4, é demarcada uma Capítulo 2. Referencial teórico 37 região com 200 pixel de largura por 200 pixels de altura e posicionada 50 pixels à direita e 300 pixels acima da tela. Essa região é encapsulada dentro de um container <regionBase>. Na linha 9, o container <descriptoBase> é definido e dentro dele o <descriptor> irá associar a região com a mídia através do seu identificador. Na linha 12 é definido o container <connectorBase> e dentro dele os papeis e as condições que a mídia estará sujeita. No caso do exemplo temos o container <causalConnector>, que encapsula duas condições simples que definem um papel (role) no início da apresentação (onBegin) e outro papel do tipo set para um tipo de evento de atribuição para o valor 450. Em resumo, quando a mídia inicia, alguma atribuição será setada para o valor 450. No corpo do documento <body>, primeiramente é descrita a porta para associar qual o primeiro nó de mídia a ser tocado, através do atributo <component>. Isso é feito na linha 24. Logo após a mídia que será mostrada é importada na linha 25 e associada ao descritor. Logo após na linha 26, definimos a propriedade da mídia que será alterada pela condição causal. Na linha 29 fazemos os relacionamentos entre os componentes. Dizemos que quando a mídia iniciar, imediatamente a propriedade right será atribuída o papel set que muda o valor da mesma para 450. Ou seja, A imagem terá que mudar de 50 pixels para 450 pixels à direita da tela. Como resultado da implementação acima, vemos o seguinte resultado na figura 8. Figura 8 – Resultado do caso de teste animation_TC-001_1 2.2.3 O Fórum SBTVD Para implantar o Sistema Brasileiro de TV Digital, o governo brasileiro estimulou a criação de um fórum como órgão de apoio do comitê de desenvolvimento. O Fórum Sistema Brasileiro de TV Digital (SBTVD) é composto, entre outros, por representantes Capítulo 2. Referencial teórico 38 do setor de radiodifusão, do setor industrial e da comunidade científica e tecnológica. As atividades do fórum tiveram início em 2006 e, segundo Filho (2007), tiveram a proposta de promover a definição, desenvolvimento, planejamento, implantação e imple- mentação dos padrões técnicos voluntários ou obrigatórios do Sistema Brasileiro de TV Digital por meio de: • identificação e harmonização dos requisitos; • definição das especificações técnicas; • coordenação da cooperação técnica entre as indústrias eletroeletrônica e de radiodi- fusão; • organização e divulgação das especificações técnicas referentes ao SBTVD a serem elaboradas e que incluem sistemas voltados para geração, distribuição e recepção para a televisão digital, incluindo, porém não se limitando àqueles referentes à alta definição; • desenvolvimento de soluções para questões relacionadas à propriedade intelectual no processo de implantação do SBTVD; • promoção de discussões e soluções para questões relacionadas aos recursos humanos do SBTVD. O resultado dessas definições e planejamentos resultou nas normas técnicas da ABNT que descrevem como o middleware deve se comportar para as diversas plataformas e formatos. 2.2.3.1 Os testes do fórum SBTVD A suíte de teste do fórum SBTVD é resultado de estudose reuniões do fórum que culminaram em casos de teste de conformidade para garantir que as implementações do middleware estivessem aderentes às normas ABNT, especialmente às aplicações interativas de natureza declarativa. Foram elaborados 2.812 casos de testes com formato semelhante ao apresentado no apêndice (A) desse documento. Esses documentos ficaram à disposição das entidades associadas ao fórum SBTVD e a implementação dos casos de testes era de responsabilidade de cada parte. Os casos de teste do fórum SBTVD, quando interpretados, gerariam uma aplicação declarativa NCL que seria executava pelo middleware, funcionando como entrada do sistema e, em caso de ser executada com sucesso, geram as saídas esperadas para o caso de teste na tela conforme especificadas pela especificação do fórum SBTVD. Capítulo 2. Referencial teórico 39 Haja visto que cada entidade pode ter a sua própria implementação do Ginga em linguagens de programação distintas, as mesmas têm que atender aos critérios estabelecidos pelas normas ABNT para que a sua implementação do middleware esteja conforme. A principal maneira pela qual se verifica que a implementação está conforme atualmente é executando os casos de teste do fórum SBTVD. Nada impede que entidades criem seus próprios casos de teste, porém se alguma entidade associada ao fórum SBTVD considerar que algum caso de teste da suíte de teste oficial deve ser removida ou acrescentar algum novo caso de teste, esse procedimento deve ser realizado mediante reuniões do módulo técnico e aprovação de seus membros. 40 3 Análise de Cobertura dos casos de teste do Fórum SBTVD Como já visto anteriormente, esta dissertação foi realizada no contexto da equipe de desenvolvimento da empresa MOPA Embedded Systems, mais especificamente, no contexto do processo de testes do middleware Ginga. Tal processo baseia-se fortemente na suíte de 2.812 casos de testes definidos pelo fórum do Sistema Brasileiro de TV Digital (SBTVD). Os testes do fórum SBTVD são obrigatoriamente executados pela empresa porque seus resultados servem de base ao documento de declaração do fornecedor, o qual deve garantir que o middleware Ginga esteja totalmente aderente aos requisitos de um dos perfis definidos na norma ABNT NBR 15606-1, Seção 9 (ABNT, 2018, p. 35). Os casos de testes do fórum SBTVD são definidos como especificações de aplicações NCL que exercitam o código do middleware Ginga. Estes testes visam cobrir requisitos funcionais e não-funcionais de diferentes funcionalidades do middleware e não requerem o conhecimento do seu código-fonte para serem executados e verificados. Sendo assim, os testes do fórum SBTVD podem ser categorizados como testes funcionais (caixa-preta) no nível de sistema. Inicialmente, os casos de teste do fórum SBTVD eram executados manualmente por testadores, num processo lento e tedioso. Ao longo do tempo, a equipe de desenvolvimento buscou automatizar estes testes e, para isso, desenvolveu a ferramenta de automatização para ambiente desktop chamada de screen-tester, que utiliza uma estratégia de teste denominada Record and Replay. Essa estratégia é uma maneira de automatizar os testes sem que exista necessariamente o conhecimento do código. A ferramenta screen-tester permite que ações pré-determinadas sejam configuradas em um arquivo de configuração e lidos para cada caso de teste. Dessa forma, o teste pode ser gravado e sua saída pode depois ser comparada com o estado corrente da aplicação. Essa comparação realizada pelo screen-tester é denominada na literatura de oráculo de teste (Barr et al., 2015). O oráculo de teste é um instrumento, diferente do sistema sob teste, pelo qual se decide se uma determinada saída de uma execução do sistema está de acordo com a saída esperada. Resumidamente, o screen-tester automatiza a execução do Ginga e das aplicações NCL especificadas pelos testes do fórum SBTVD e emula entradas que simulam os botões do controle remoto da TV através de uma estratégia Record and Replay. Para verificar o comportamento da versão atual do Ginga, a screen-tester registra um screen shot do estado final da aplicação NCL para cada caso de teste e compara-o a uma imagem que representa o estado final da mesma aplicação NCL numa versão anterior do Ginga. Isso é o que pode-se denominar de oráculo de teste para o sistema. Desta forma, é realizado Capítulo 3. Análise de Cobertura dos casos de teste do Fórum SBTVD 41 um tipo de teste de regressão para verificar se mudanças realizadas no código do Ginga introduziram mudanças no comportamento das aplicações NCL. É importante ressaltar que o processo de teste adotado pela empresa MOPA encontra-se em um estágio de maturidade inicial, evoluindo de um estágio em que o processo de testes baseava-se na execução manual dos testes do fórum SBTVD para um estágio em que o processo de teste passa a contar com uma suíte de testes automatizados para identificar regressões durante os ciclos de desenvolvimento. Cabe ressaltar também que, num momento posterior, os testes do fórum SBTVD são executados manualmente no ambiente da placa da TV, que é o ambiente em que o Ginga será operado em produção. Neste contexto de maturação do processo de testes da empresa MOPA, em especial da automatização dos testes do fórum SBTVD, percebeu-se a necessidade de avaliar e mensurar a efetividade da suíte de testes automatizados executada em ambiente desktop com o apoio da ferramenta screen-tester. Considerando que a suíte de testes automatizados está exercitando o código-fonte do middleware Ginga através da execução das aplicações NCL, decidimos avaliar o grau em que o código do Ginga é exercitado nesta estratégia de automatização dos testes do fórum SBTVD. Em outras palavras, usaremos um critério de cobertura como um critério de avaliação da efetividade da suíte de teste. Assim, é esperado coletarmos dados iniciais que evidenciem até que ponto a suíte de testes automatizando os casos de testes do fórum SBTVD realizada pela empresa MOPA cobre as principais partes do código do Ginga, apoiando a equipe de desenvolvimento a decidir se e até que ponto tal suíte é minimamente efetiva em detectar defeitos no código do middleware Ginga. Este capítulo está dividido da seguinte forma: Na seção (3.1) é descrita a ferramenta desenvolvida pela empresa para automatização dos testes visuais. Na seção (3.2) é descrita a metodologia utilizada para coletar e analisar os dados da cobertura dos testes do fórum SBTVD, e na seção (3.3) são mostrados o resultados obtidos com a análise da cobertura dos testes. 3.1 Screen-Tester: Ferramenta de automatização dos testes do Fó- rum SBTVD Para apoiar a automatização dos testes do fórum SBTVD, a empresa MOPA desenvolveu a ferramenta denominada screen-tester 1. Essa ferramenta é escrita em linguagem C++, encontra-se em fase de desenvolvimento contínuo dentro da empresa e foi pensada para auxiliar no processo de verificação dos testes de sistema realizados pela empresa que lidem com comparação de imagens e entradas de usuários. 1 A ferramenta screen-tester foi desenvolvida em paralelo à pesquisa, mas não configura um trabalho fruto da mesma. Capítulo 3. Análise de Cobertura dos casos de teste do Fórum SBTVD 42 Os testes do fórum SBTVD são, basicamente, simulações de aplicações para TV Digital rodando sobre o middleware Ginga. Isto é, os testes são definidos como aplicações multimídia NCL que apresentam mídias diversas, como texto, imagem, vídeo e áudio, em uma determinada sequência ao usuário final numa tela de TV. Os testes definem ainda o estado final esperado para cada aplicação NCL, especificando qual o conteúdo deve ser exibidos na tela, incluindo a especificação das propriedades deste conteúdo, como cor, tamanho ou posicionamento. Por este motivo, a screen-tester foi projetada para trabalhar com o conceito de oráculo de teste (Barr et al., 2015), onde o oráculo são imagens referentes aos estados finais das aplicações NCL gravados em um determinado momento em que o sistema está sendo executado. A ferramenta executao middleware Ginga em ambiente desktop em uma estratégia Record and Playback e, para os testes do fórum SBTVD, faz a captura e comparação de imagens para verificar o estado da aplicação com um estado previamente tido como correto. O processo macro pelo qual a ferramenta funciona pode ser visto na seção (3.1.1). 3.1.1 O processo do Screen-Tester O processo apoiado pela ferramenta é apresentado na figura a seguir. Figura 9 – Processo de comparação de imagem pelo Screen-Tester caixas cinzas são etapas automatizadas e caixas claras são etapas manuais A figura 9 mostra basicamente o funcionamento do processo da ferramenta screen- tester. Ela aguarda um determinado intervalo de tempo configurável para cada caso de teste e captura uma imagem que servirá de oráculo do teste. Esse oráculo é salvo em um diretório com o nome do caso de teste correspondente. A ferramenta é então configurada para executar cada caso de teste e comparar com o seu oráculo correspondente. O oráculo de tese é uma imagem que foi capturada uma única vez e guardada em um servidor único. Todas as versões do Ginga que irão sofrer alterações terão que ser comparadas com esse oráculo, que está salvo no servidor. Conforme o processo da figura 9, caso as duas imagens sejam iguais, o caso de teste "PASSA", caso contrário ele "FALHA". Em caso de falha uma pasta de erro com o nome do caso de teste é criada com as duas imagens que foram Capítulo 3. Análise de Cobertura dos casos de teste do Fórum SBTVD 43 consideradas diferentes pelo algoritmo de comparação. Nesse momento o testador precisa avaliar as imagens e verificar se o erro que foi registrado no teste corresponde realmente a uma falha no teste ou se houve alguma mudança no código que necessitasse de alteração no oráculo de teste. Havendo a necessidade de alterar o oráculo de teste, o mesmo é modificado manualmente no repositório. 3.1.1.1 O oráculo de teste O oráculo de teste é criado em um modo da ferramenta screen-tester que roda todos os testes com um parâmetro de configuração habilitado para, ao invés de comparar as imagens, capturar a imagem em um intervalo de tempo configurável e defini-la como sendo a representação correta para aquele caso de teste. Esse processo é realizado uma única vez como uma forma de calibrar o servidor, salvando todos os oráculos como imagens de um estado final a aplicação em um servidor. Quando há mudanças no código que impliquem a mudança de algum caso de teste esse procedimento é realizado no processo apresentado na figura 9. Por padrão, o screen-tester foi configurado para comparar o estado da aplicação com o seu oráculo no tempo de 5 segundos para todos os testes. A ferramenta utiliza um conjunto de ferramentas auxiliares: • Xvfb (X11): também conhecido como X virtual framebuffer, é um servidor de display que implementa o protocolo de servidor de display X11. O Xvfb realiza todas as operações gráficas na memória virtual sem mostrar nenhuma tela de saída. O uso primário desse servidor é para ser um servidor de testes (WIKIPEDIA, 2019) (WIGGINS, 2019). • xdotool (X11): é uma ferramenta de instruções que permite aos programadores emularem o pressionamento de teclas do teclado e mouse, além de manipular janelas. • ImageMagick: é um conjunto de aplicações para edição não interativa de imagens, ou seja, com ele é possível editar, converter, combinar imagens de diversos tipos (LLC, 2019). • ctest (CMake): o executável ctest é o programa de teste do CMake. É gerado através do CMake quando suas flags de compilação ENABLE_TESTING e ADD_TEST são suportadas no build do Ginga. Esse programa roda os testes e reporta os resultados (KITWARE; CONTRIBUTORS, 2019). O Xvfb cria um framebuffer virtual. Combinado com xdotool e o ImageMagick é possível enviar e capturar eventos da aplicação e tirar snapshots para então comparar essas imagens entre si. Os testes são parametrizados através do framework do GoogleTest, de Capítulo 3. Análise de Cobertura dos casos de teste do Fórum SBTVD 44 forma que o caso de teste é um arquivo de configuração (um para cada teste) que contém o caminho da aplicação NCL, as instruções de entrada e saída (quando necessário), o caminho para a imagem do oráculo, que vamos chamar aqui de golden sample, e o tempo de espera para o snapshot. Segue um exemplo do caso de teste animation_TC-001_1: 1 MAIN_FILE=$GINGA_TESTS_PATH/Testes−ForumSBTVD/NCL/animation /animation_TC −001_1/main . nc l 2 GOLDEN_SAMPLE=golden . png 3 INITIAL_DELAY=5 Listing 3.1 – test.sh - Caso de teste parametrizado para o animation_TC-001_1 No exemplo da listagem (3.1) acima o screen-tester irá executar a aplicação em NCL_MAIN_FILE, esperar 5 segundos e tirar um snapshot e depois comparar com a golden.png, que é a imagem congelada do tempo de execução da aplicação no tempo de 5 segundos. Isso se repete para todos os casos de teste do fórum SBTVD. Apesar da ferramenta permitir mais opções e flexibilidade de automatização, a empresa ainda não trabalhou nesse sentido e as automatizações que se tem hoje são tipicamente semelhantes as do exemplo acima. 3.2 Metodologia Esta pesquisa tem o objetivo de avaliar a efetividade da suíte de teste automatizada do fórum SBTVD com o propósito de verificar a sua capacidade de encontrar falhas através da métrica de cobertura de código. Esse objetivo visa ser alcançado do ponto de vista do desenvolvimento no contexto de uma empresa de desenvolvimento de software para TV Digital. 3.2.1 Critério de cobertura Foi considerada a análise de cobertura por linha (LOC). Essa abordagem foi escolhida por permitir maior granularidade ao se analisar o código. É possível enxergar com maior clareza quais partes do código foram atingidas ou não pelos testes. No contexto dessa pesquisa é importante identificar quais são as partes que nunca são exercitadas pelos testes, de forma clara e precisa. Também é importante observar que estamos analisando testes de sistema, onde um teste exercita várias linhas de vários arquivos do sistema. A cobertura por branch é uma opção que, aliada com a cobertura por linha, torna a análise da cobertura ideal para testes unitários, porém ao lidar com testes de sistemas, não temos um feedback tão direto relacionado ao teste que está sendo executado e aos arquivos que esse teste está atingindo. A melhor métrica, portanto, dentro das características dessa pesquisa, é a de cobertura por linha de código. Capítulo 3. Análise de Cobertura dos casos de teste do Fórum SBTVD 45 O Ginga-NCL é escrito em C++ com o compilador GCC2. O GCC possui uma ferramenta de análise de cobertura denominada GCOV que já vem distribuída no pacote do GCC. Para poder obter as métricas de cobertura de código dos arquivos é necessário compilar esse arquivos através do GCC com as flags de compilação relacionadas a cobertura como demonstrada abaixo: 1 g++ arquivo . cpp −g −O0 −−coverage − f p r o f i l e −a r c s − f t e s t −coverage Listing 3.2 – Exemplo de como habilitar a cobertura de código em um arquivo .cpp Foi utilizada a ferramenta GCOVR (AUTHORS, 2019) que é um utilitário para extrair relatórios do GCOV e permite extrair e visualizar relatórios de cobertura em formato HTML. O GCOV foi utilizado na versão 8.3.0 e o GCOVR na versão 4.2. Uma vez que o build tenha sido realizado com as flags de compilação, cada vez que uma aplicação NCL referente a um teste do fórum SBTVD for executada, serão gerados múltiplos arquivos de cobertura (no formato do GCOV) para cada arquivo pelo qual o teste foi exercitado. Já sabemos que os testes em questão são testes de sistema e, portanto, sabemos que eles irão, por definição, exercitar diversas unidades do sistema alvo. O Ginga foi preparado para ser executado gerando dados de cobertura para cada teste. O screen-tester foi configurado para rodar os 2.812 testes com o tempo de delay padrão de 5 segundos para cada teste. Após finalizado esse processo, foi utilizada a ferramenta GCOVR para gerar um relatório em html contendo todas as informações dos dados da cobertura da execução dos testes. O relatório
Compartilhar