• Nenhum resultado encontrado

Na Figura 5.7 podemos ver os defeitos que foram mais recorrentes no conjunto de postagens do Stack Overflow que foram analisadas. A definição incorreta do fluxo de dados (F1.1) foi o defeito mais identificado, estando em aproximadamente 28.2% das pos- tagens. Ao analisar as postagens relacionadas com o defeito F1.1, pudemos observar que muitos desses problemas não eram identificados de forma direta pelo autor da pergunta na postagem, mas sim eram apontados por outros usuários que respondiam à pergunta e in- dicavam que havia algum problema na forma em que o fluxo de dados tinha sido definido.

3 As postagens do Stack Overflow selecionadas e classificadas podem ser encontradas em <https://docs.

35 85 2 0 25 50 75 100

F1 - Fluxo de Dados F2 - Operações F3 - Acumuladores

Figura 5.8 – Quantidade de postagens do Stack Overflow classificadas por cada grupo de defeito da taxonomia de defeitos funcionais para Apache Spark.

Isso nos dá indícios de que defeitos relacionados com a definição do fluxo de dados podem ser mais difíceis de detectar visto que desenvolvedores tendem a olhar para as operações de forma isolada e não para a sequência de operações (fluxo de dados) como um todo. O defeito de ter uma operação incorreta no fluxo de dados (F1.2) foi menos recorrente que F1.1, estando presente em aproximadamente 9,8% das postagens. Em contraste com F1.1, o defeito F1.2 considerava o fluxo de dados como um todo mas apontava o problema em apenas uma das operações, indicado que esta havia sido selecionada de forma errada. Isso foi observado nas postagens relacionadas com F1.2, em que usuários apontavam que a operação abordada em uma pergunta estava incorreta e sugeriam outra.

Problemas relacionados com a definição incorreta de operação de agregação (F2.4) foram identificados em aproximadamente 27% das postagens analisadas, sendo o segundo defeito mais abordado. Observamos que a maioria das postagens desse grupo tinham perguntas diretas sobre operações de agregação. Esse resultado indica que dúvidas e problemas relacionadas com operações de agregação são comuns em programas Spark e demandam mais interesse de usuários no Stack Overflow. Apesar de também estar relaci- onado com operações de agregação, não identificamos nenhuma postagem que abordasse o problema da operação não ser comutativa e associativa (F2.3). Esse resultado aponta que problemas em relação às propriedades de comutatividade e associatividade em ope- rações de agregação não são recorrentes ou não demandam muito interesse por parte de desenvolvedores Spark que utilizam o Stack Overflow.

Aproximadamente 17% das postagens abordavam dúvidas e problemas relacio- nados com a filtragem de dados (F2.2) e 16% tratavam sobre o mapeamento de dados (F2.1). Ambos os tipos de operações são comuns em programas no contexto de pro- cessamento de dados como programas Spark. Esses resultados apontam que defeitos e problemas com essas operações são recorrentes e geram dúvidas por parte da comunidade

de desenvolvedores Spark. Dúvidas e problemas relacionados com operações de junção (F2.7) estavam presentes em aproximadamente 8,7% das postagens analisadas. Defeitos relacionados com a ordenação de dados (F2.5) e operações binárias (F2.6) foram temas de aproximadamente 7,6% das postagens, seguidos por defeitos relacionados com o tra- tamento de dados duplicados (F2.8) que foi abordado em 5,4% das postagens. O defeito menos recorrente do grupo de operações foi o relacionado com as ações do Apache Spark (F2.9), sendo assunto de apenas duas perguntas dentre as 92. No Apache Spark, ações são chamadas para finalizar o fluxo de dados e disparar o início do processamento, muitas vezes sendo utilizadas apenas para salvar os dados. Dessa forma, a maior parte da lógica do programa se concentra nas transformações do fluxo de dados. Então, um menor nú- mero de postagens que abordam ações mostra que seu uso gera menos dúvidas por parte dos desenvolvedores.

Apenas duas postagens foram relacionadas com as variáveis compartilhadas do tipo acumulador (F3). Ambas eram relacionadas com a definição incorreta de acumula- dores personalizados (F3.2). Esse resultado indica que acumuladores são recursos menos utilizados no Apache Spark e por isso demandam menos interesse por parte da comuni- dade de usuários no Stack Overflow. O grupo de defeitos em operações (F2) foi o que teve maior número de postagens relacionadas, como pode ser visto na Figura 5.8. Esse resultado já era esperado dado que o grupo era o que tinha maior número de defeitos e o fato de que as operações desempenham papel central na lógica do programa, fazendo com que essas gerem maior interesse por parte dos desenvolvedores Spark. O número de postagens relacionadas com o fluxo de dados (F1) também foi relevante, mostrando que problemas e dúvidas relacionados ao fluxo de dados demandam interesse por parte da comunidade de desenvolvedores Spark no Stack Overflow.

5.5

Considerações Finais

Este capítulo apresentou como contribuição uma taxonomia de defeitos funcionais para Apache Spark. A taxonomia foi dividida em três grupos principais que agregam defeitos em diferentes aspectos e recursos de um programa Spark, que são o fluxo de dados, operações e acumuladores. A taxonomia pode ser utilizada como um modelo de defeitos que podem aparecer em programas Spark e servir como um guia para que estratégias de teste sejam tomadas e casos de teste sejam projetados de modo a mitigar esses defeitos.

Os defeitos apresentados na taxonomia foram exemplificados e analisados através de um estudo em postagens no Stack Overflow. Esse estudo teve como objetivo identificar quais defeitos eram mais abordados em postagens por parte da comunidade de desenvolve- dores Spark que utilizam o Stack Overflow como uma plataforma para tirar dúvidas sobre a tecnologia. Os resultados dessa análise deram indícios de que defeitos relacionados com

a definição do fluxo de dados (F1.1), operações de agregação (F2.4) e com operações de filtragem e mapeamento de dados (F2.1 e F2.2) são mais frequentes e geram mais dúvidas para os desenvolvedores Spark. Esse resultado pode ser utilizado para dar suporte na tomada de decisões sobre quais aspectos e partes do programa precisam ser priorizados em testes.

Os defeitos descritos na taxonomia foram identificados a partir de uma análise da documentação do Apache Spark (SPARK, 2019), fontes na literatura, como (ZAHARIA et al., 2015), (GANELIN et al., 2016) e (KARAU; WARREN, 2017), e de programas desenvolvidos pelo autor. Então, a taxonomia se limita aos defeitos funcionais que foram identificados no nosso estudo. Isso significa que um novo estudo e a análise de outras fontes podem fazer com que novos tipos de defeitos funcionais sejam identificados e pos- sam ser acrescentados na taxonomia. Nosso estudo sobre a ocorrência dos defeitos da taxonomia em postagens no Stack Overflow também foi limitado à quantidade de posta- gens selecionadas e analisadas. Um estudo mais abrangente e que considere um número maior de postagens no Stack Overflow, assim como mais tópicos considerando os resulta- dos apresentados em (ALBUQUERQUE, 2019), pode indicar que outros tipos de defeitos são mais frequentes ou mostrar uma distribuição maior para os defeitos que foram pouco abordados segundo a nossa análise.

6 Operadores de Mutação para Programas

de Processamento de Dados

Este capítulo apresenta um conjunto de operadores de mutação que foram proje- tados para a aplicação do teste de mutação em programas de processamento de grandes volumes de dados. Os operadores de mutação foram divididos em dois grupos, os ope- radores de mutação para fluxo de dados, que definem alterações no fluxo de dados que representa o programa, e operadores de mutação para transformações, que definem alte- rações em transformações específicas.

Os operadores de mutação propostos nesse trabalho foram baseados nos defeitos da taxonomia de defeitos funcionais para Apache Spark que foi apresentada no Capítulo 5. Além disso, esses operadores foram definidos em termos do modelo para programas de pro- cessamento de dados que foi apresentado no Capítulo 3. Ao utilizar como referências a taxonomia de defeitos funcionais e o modelo, nosso trabalho seguiu com os requisitos básicos para se projetar operadores de mutação, que, segundo (DELAMARO; OFFUTT; AMMANN, 2014), deve se basear (i) em uma caracterização bem fundamentada de de- feitos e (ii) na estrutura dos programas no contexto.

Este capítulo está organizado da seguinte forma: a Seção 6.1 apresenta como os operadores de mutação foram projetados e como são classificados; a Seção 6.2 apresenta os operadores de mutação para fluxo de dados; a Seção 6.3 apresenta os operadores de mutação para transformações específicas; a Seção 6.4 apresenta exemplos de aplicação dos operadores de mutação em programas Spark; a Seção 6.5 apresenta discussões sobre como os operadores de mutação propostos são relacionados com os defeitos apresentados na taxonomia de defeitos funcionais de Apache Spark, além da sua relação com outros tipos de operadores de mutação existentes na literatura e aplicação em outros sistemas; e, por último, a Seção 6.6 apresenta considerações finais sobre as contribuições deste capítulo.