• Nenhum resultado encontrado

Surveys Envolvendo Desenvolvedores Android

Kochhar et al (KOCHHAR et al., 2015) aplicaram um questionário para descobrir as ferramentas comumente utilizadas para o teste de aplicações mobile assim como os problemas enfrentados pelos desenvolvedores ao testarem estas aplicações. O questionário foi enviado para 3.905 e-mails de desenvolvedores Android e obteve 83 respostas (taxa de resposta de 2.13%).

No trabalho de (JOORABCHI et al., 2013) foi aplicado um questionário com o objetivo de melhor entender os principais desafios enfrentados pelos desenvolvedores ao construir apps para diferentes tipos de dispositivos. Eles entrevistaram 12 desenvolvedores mobile sênior e realizaram um questionário com 188 desenvolvedores. O questionário foi compartilhado em grupos de e-mail e mídias sociais.

O estudo apresentado por (LINARES-VÁSQUEZ et al., 2015) aplicou um questionário a 485 desenvolvedores Android para identificar as práticas utilizadas para detectar gargalos de desempenho em apps. O e-mail com o questionário foi enviado para 24.340 desenvolvedores e 628 respostas foram recebidas – o que representa uma taxa de resposta de 2.6%.

Por fim, o trabalho de (BAVOTA et al., 2015) foi avaliado o impacto que as mudanças na API e a propensão a falhas causam nas avaliações de usuário associadas as apps Android. O questionário foi aplicado aos desenvolvedores para avaliar se na perspectiva deles as baixas avaliações podia ser causada por tais problemas. A taxa de resposta deste questionário foi de 4%.

Uma característica comum destes surveys são as baixas taxas de resposta – entre 2% e 4%. Nenhum desses questionários, porém, investigou as práticas utilizadas para lidar com o tratamento de exceções neste contexto. No nosso segundo survey realizamos um questionário exploratório com objetivo de saber quais as práticas e quais os problemas, na visão dos desenvolvedores, no tratamento de exceções em aplicações Android.

100

7 Considerações Finais

Algumas características do desenvolvimento de aplicações Android - como a ambiente multitarefa, o ciclo de vida das aplicações baseados em callbacks, e os múltiplos pontos de entrada que uma aplicação Android pode ter, - podem tornar o desenvolvimento do código de tratamento de exceções destas aplicações mais complexo e propenso a falhas. Além disso, o fato da plataforma Android não fornecer oficialmente um manual/guia que explicite as boas práticas no desenvolvimento do código de tratamento de exceções para aplicações Android motivaram o presente trabalho.

O objetivo principal deste trabalho consistiu em buscar entender melhor as características tratamento de exceções (TE) em apps Android e as boas práticas e os desafios encontrados no seu desenvolvimento. Este estudo baseou-se em duas abordagens complementares: (i) na análise do código fonte dos tratadores de exceções de 15 aplicações Android populares; e (ii) na realização de dois surveys direcionados a desenvolvedores Android - visando identificar a opinião destes sobre boas e más práticas e dificuldades enfrentadas no tratamento de exceções de apps Android.

O primeiro survey, chamado neste trabalho de survey exploratório, nos apresentou resultados que indicaram que os desenvolvedores não veem diferença na dificuldade de codificar o tratamento de exceções em aplicações Java em geral e aplicações Android. Além disso, nos forneceu informações importantes sobre quais componentes do framework Android poderiam estar relacionados a dificuldades enfrentadas na implementação do tratamento de exceções. O estudo indicou, por exemplo, que a Asynctask, ContentProvider e Handler estavam associados, respectivamente, a uma maior complexidade para a realização do tratamento de exceções. O survey exploratório serviu tanto para a elaboração do segundo survey como para orientar o estudo exploratório que realizou a inspeção manual das aplicações.

Um dos objetivos deste trabalho consistiu em “Levantar características do código de tratamento de exceções de aplicações Android”. Esse objetivo foi alcançado com a análise das aplicações Android que nos permitiu identificar algumas características importantes do código de

101 tratamento de exceções. Como a predominância do tipo de tratamento log (44%) na maioria das aplicações, um índice considerável do uso do tipo vazio (12%) que é considerado uma má prática, ver Subseção 2.1.1. Outros achados é o alto índice na captura de tipos genéricos de exceções como Exception (41%), Throwable (4%) e RuntimeException (2%) e a relação desses tipos de exceções com o alto índice do uso do tipo log, acima dos 50% para todos. Além disso, foi possível relacionar o tipo de tratamento com o tipo de classe e verificamos que nas classes do tipo Activity foi encontrado o maior índice para o tipo mensagem (14%), indicando que o fato desse tipo de classe ser escutado na UI Thread tem uma maior facilidade para retornar uma mensagem para o usuário.

O segundo survey foi direcionado à especialistas Android e possibilitou que os outros objetivos do estudo fossem alcançados: “Identificar o que são consideradas boas e más práticas no tratamento de exceções de aplicações Android”, e “Identificar eventuais dificuldades enfrentadas no momento de se implementar o código de tratamento de exceções de aplicações Android e como desenvolvedores lidam com essas dificuldades – se utilizando alguma boa prática ou ferramenta”. Este segundo survey nos forneceu um conjunto melhor contextualizado com o ambiente Android de boas práticas – quando comparado com os resultados do survey exploratório. Algumas boas práticas que emergiram foram as seguintes: (i) Uso de ferramentas de

report de falhas para enviar o log de erros; notificar o usuário ao

acontecer um erro; (ii) falhar rapidamente para evitar estados inesperados na execução da aplicação; (iii) capturar apenas se puder tratar para garantir o funcionamento correto da aplicação e (iii) documentar exceções para que outros desenvolvedores saibam em que estados a aplicação pode lançar uma exceção.

Além disso, o segundo survey nos forneceu um conjunto de más práticas que podem ser complementares às boas práticas anteriores. As más práticas identificadas foram: (i) silenciar exceções pode gerar inconsistências na aplicação; (ii) capturar tipos genéricos pode capturar exceções que o desenvolvedor não estava esperando; (iii) não fornecer uma

102 nova aplicação, já que existem várias aplicações Android com o mesmo propósito; (iv) não enviar o log do erro para um servidor deixa o desenvolvedor sem informação sobre os erros que acontecem na sua aplicação no ambiente de produção; e (v) uso excessivo de try-catches para simular uma falsa estabilidade da aplicação.

Documentos relacionados