Tools and Techniques for Energy-Efficient Mobile
Total Page:16
File Type:pdf, Size:1020Kb
Tools and Techniques for Energy-Efficient Mobile Application Development Luís Miranda da Cruz Supervisor: Rui Maranhão Abreu Doctoral Program in Computer Science MAP-i of the Universities of Minho, Aveiro, and Porto April, 2019 © Luís Cruz: April, 2019 Tools and Techniques for Energy-Efficient Mobile Application Development Luís Cruz Thesis submitted to the Faculty of Engineering of University of Porto to obtain the degree of Doctor of Philosophy in Computer Science April, 2019 The work developed in this thesis was supported by the scholarship number PD/BD/52237/2013 from Fundação para a Ciência e Tecnologia (FCT) and within the project GreenLab (POCI-01-0145-FEDER-016718). Abstract Driven by their convenience and ubiquitousness, smartphones have been widely adopted over the past ten years. As a consequence, mobile apps have rapidly become indispensable to perform everyday tasks. Users rely on mobile apps to accomplish tasks such as calling a taxi, renting a car, paying at grocery stores, ordering food, and so on. Nowadays, being unable to operate with a smartphone device, may imply being unable to carry out important tasks. This is the case when our smartphone runs out of battery. Thus, it is essential to ensure that mobile apps are energy-efficient. However, as we demonstrate in this thesis, developing energy-efficient code is not as trivial as one could imagine. Previous research has tackled this issue by proposing techniques and tools to design energy-efficient mobile apps (e.g., studying anti-patterns) and reliably assess energy improvements (e.g., software-based energy estimators). In this thesis, we extend this research problem by studying how developers address energy efficiency, pinpointing potential issues entailed by building energy-efficient code, and proposing new techniques and practices to help developers address energy-related requirements. We start by compiling the current state-of-the-art methodologies used to measure the energy consumption of mobile apps. Moreover, we study the limitations of these methodologies. In particular, we measure the energy overhead entailed by using User Interface testing frameworks during measurements. We show that popular frameworks such as Calabash and AndroidViewClient should be avoided when measuring energy consumption. Following, we collect code smells from other non-functional requirements (in par- ticular, performance) and explore their aptitude to improve energy efficiency. We find five performance-based code smells that effectively reduce energy consumption when fixed. Moreover, we study solutions typically applied to real-world energy effi- ciency issues. We collect and document a catalog of 22 energy patterns by inspecting energy-oriented changes in 1027 Android and 756 iOS apps. As a side contribution, we compare how Android and iOS developers address the energy efficiency of their apps. vii We leverage energy patterns in an automatic refactoring tool. We use this tool to fix energy-based code smells in 45 open-source Android applications. Our results emphasize the importance of using tools to help developers improve the energy efficiency of their apps. Last, we conduct an empirical study on the impact that managing the energy effi- ciency of mobile apps brings to the maintainability of the codebase. By analyzing a dataset of 539 energy efficiency-oriented changes, we show that improving en- ergy efficiency hinders software maintainability. We discuss results and provide recommendations to help developers avoid common issues and adopt development processes that foster software maintainability. viii Abstract Resumo Impulsionados pela sua conveniência e ubiquidade, os telemóveis inteligentes, vul- garmente conhecidos como smartphones, tiveram uma grande adesão por todo o mundo nos últimos dez anos. Como consequência, os smartphones tornaram-se indispensáveis para realizar tarefas do dia-a-dia das pessoas. Os seus utilizadores recorrem a aplicações móveis para tarefas tão banais como chamar um táxi, alugar um carro, pagar no supermercado, encomendar comida, entre outras. Hoje em dia, ficar sem acesso a um smartphone pode implicar a impossibilidade de realizar tarefas importantes. Isto é o que acontece quando o telemóvel fica sem bateria. Em consequência disso, é essencial garantir que as aplicações móveis fazem uma gestão eficiente da bateria – isto é, são energeticamente eficientes. No entanto, tal como demonstramos nesta tese, desenvolver código energeticamente eficiente não é tão simples como seria de imaginar. Trabalho relacionado estudou este problema propondo técnicas e ferramentas para desenhar aplicações mais eficientes (p. ex., estudando code smells) e para medir com fiabilidade melhoramentos no consumo energético (p. ex., usando estimadores de energia baseados em software). Nesta tese, alargamos o trabalho de investigação neste problema em diversas frentes: estudamos como os programadores tipicamente lidam com requisitos de eficiência energética; identificamos potenciais problemas relacionados com a criação de código energeticamente eficiente; e propomos novas técnicas e práticas para ajudar os programadores a criar software eficiente. Começamos por fazer um levantamento do estado da arte das metodologias ex- istentes para medição de energia em aplicações móveis. Estudamos também as limitações destas tecnologias. Nomeadamente, medimos o custo adicional no con- sumo de energia que advém da utilização de ferramentas de teste de interfaces de utilizador. Mostramos que ferramentas populares como Calabash e AndroidViewClient devem ser evitadas para medição de consumos de energia. De seguida, colecionamos code smells relacionados com outros requisitos não fun- cionais (nomeadamente, performance) e exploramos o seu potencial para melhorar eficiência energética. Como resultado, descobrimos cinco code smells de perfor- mance que efetivamente reduzem o consumo de energia quando devidamente ix corrigidos. Adicionalmente, estudamos soluções tipicamente aplicadas em proble- mas reais de eficiência energética. Como resultado de analisar este tipo de soluções em alterações de código de 1027 aplicações Android e 756 aplicações iOS, foi criado um catálogo com 22 padrões de energia devidamente documentados. Como con- tribuição suplementar, comparamos as diferenças entre programadores Android e programadores iOS a gerir a eficiência energética das suas aplicações. Como contribuição, também desenvolvemos uma ferramenta de refatorização au- tomática de code smells de energia – Leafactor. Recorrendo a esta ferramenta, foi possível corrigir code smells de energia em 45 aplicações open-source Android. Os resultados obtidos realçam a importância de ferramentas automáticas para ajudar programadores a melhorar a eficiência energética das suas aplicações móveis. Por último, conduzimos um estudo empírico acerca do impacto que melhorar efi- ciência energética em aplicações móveis pode ter na sua facilidade de manutenção. Analisando um conjunto de dados com 539 alterações de código relacionadas com energia, mostramos que este tipo de alterações de código reduzem significativa- mente a facilidade de manutenção dos projetos. Discutimos os resultados e tecemos recomendações para ajudar os programadores de aplicações móveis a evitarem problemas recorrentes e a adotarem processos de desenvolvimento que promovem a facilidade de manutenção do software. x Resumo Acknowledgements This thesis has only been made possible through the advice, help, and support of many people whom I would like to thank here. First and foremost, I would like to express my most sincere and deepest gratitude to my supervisor and friend, Prof. Rui Maranhão Abreu. Throughout this journey, his endless support, patience, dedication, and professionalism were crucial to making this thesis possible. He is one of my best friends and a role model, both as a scholar and as a person. I was fortunate enough to be able to collaborate with David Lo, from Singapore Management University, and with John Grundy, from Monash University. I want to thank them for all the stimulating conversations and thoughtful advice. I certainly hope to be able to work with both of them again. My internship at Palo Alto Research Center was definitely an eye-opener and im- proved my perspective on research. Thank you, Jonathan Rubin, Alexander Feldman, Ion Matei, Nora Boettcher, Danny Bobrow, Johan de Kleer, Joy Smith, Wenjing Jin, Prakhar Jaiswal, Mayur Jain, and MinKyoung Kang, for all the support, kindness, friendship, and for recognizing my potential. You showed me that doing research is actually fun. I want to thank all my Ph.D. student colleagues, particularly Alexandre Perez, Rui Pereira, Sofia Reis, and Nuno Cardoso, for all the shared frustrations, discussions, laughs, coffees, and beers. I would also like to thank the IDSS group at INESC-ID. Prof. José Borbinha, for making me feel welcome since my first day there; Prof. Ricardo Chaves, for helping me with his hardware hacking skills; and all the folks at the “Junior IDSS”, for all our happy meetings. My gratitude to the Green Software Lab, for being such an awesome group doing awesome research. To the SPeCS group, particularly Prof. João Cardoso, for letting me use his labs and equipment for my experiments. To my friends in Barcelos, Alexandre Rodrigues, Mariana Carreira, Anthony Carvalho, Cláudio Novais, Ricardo Fonseca, Ricardo Vilas Boas, Nelson Jardim, Ana Silva, and xi José Carlos Coelho. Thank you for all the breakfasts, surfed waves, trips, and dinners. I wouldn’t be able to make it without all the fun moments we shared. (Alex,