Estudo De Métricas De Código Fonte No Sistema Android E Seus Aplicativos
Total Page:16
File Type:pdf, Size:1020Kb
Universidade de Brasília - UnB Faculdade UnB Gama - FGA Engenharia de Software Estudo de métricas de código fonte no sistema Android e seus aplicativos Autores: Marcos Ronaldo Pereira Júnior Orientador: Prof. Dr. Paulo Roberto Miranda Meirelles Brasília, DF 2015 Marcos Ronaldo Pereira Júnior Estudo de métricas de código fonte no sistema Android e seus aplicativos Monografia submetida ao curso de graduação em Engenharia de Softwareda Universidade de Brasília, como requisito parcial para ob- tenção do Título de Bacharel em Engenharia de Software. Universidade de Brasília - UnB Faculdade UnB Gama - FGA Orientador: Prof. Dr. Paulo Roberto Miranda Meirelles Brasília, DF 2015 Marcos Ronaldo Pereira Júnior Estudo de métricas de código fonte no sistema Android e seus aplicativos/ Marcos Ronaldo Pereira Júnior. – Brasília, DF, 2015- 113 p. : il. (algumas color.) ; 30 cm. Orientador: Prof. Dr. Paulo Roberto Miranda Meirelles Trabalho de Conclusão de Curso – Universidade de Brasília - UnB Faculdade UnB Gama - FGA , 2015. 1. Engenharia de Software. 2. Métricas de código. 3. Android. I. Prof. Dr. Paulo Roberto Miranda Meirelles. II. Universidade de Brasília. III. Faculdade UnB Gama. IV. Estudo de métricas de código fonte no sistema Android e seus aplicativos CDU Marcos Ronaldo Pereira Júnior Estudo de métricas de código fonte no sistema Android e seus aplicativos Monografia submetida ao curso de graduação em Engenharia de Softwareda Universidade de Brasília, como requisito parcial para ob- tenção do Título de Bacharel em Engenharia de Software. Trabalho aprovado. Brasília, DF, Julho de 2015: Prof. Dr. Paulo Roberto Miranda Meirelles Orientador Prof. Fabrício Braz Convidado 1 Prof. Renato Sampaio Convidado 2 Brasília, DF 2015 Agradecimentos Agradeço principalmente a Deus por me acompanhar em cada etapa da minha vida e à minha família e amigos por ajudarem a me tornar a pessoa que eu sou. Agradeço também aos professores que se empenham em ensinar, e às oportunidades que me foram oferecidas dentro da Universidade. Resumo Nos últimos anos, a utilização de dispositivos móveis inteligentes se mostra cada vez mais presente no dia a dia das pessoas, ao ponto de substituir computadores na maioria das funções básicas. Com isso, vem surgindo projetos cada vez mais inovadores que aproveitam da presença constante desses dispositivos, modificando a forma que vemos e executamos várias tarefas cotidianas. Vem crescendo também a utilização de sistemas livres e de código aberto, a exemplo da plataforma Android que atualmente detém extensa fatia do mercado de dispositivos móveis. Ocupando papel fundamental na criação dessas novas aplicações, a engenharia de software traz conceitos de engenharia ao desenvolvimento e manutenção de produtos de software, tornando o processo de desenvolvimento mais organizado e eficiente, sempre com o objetivo de melhorar a qualidade do produto. O objetivo geral deste trabalho é o monitoramento de métricas estáticas de código fonte na API do sistema operacional Android, essencialmente métricas OO, e fazer um estudo da evolução de seus valores nas diferentes versões da API, estudar as semelhanças com aplicativos do sistema e então verificar a possibilidade de utilizar os dados obtidos para auxiliar no desenvolvimento de aplicativos. Palavras-chaves: Engenharia de Software. Métricas de código. Android. Abstract In recent years, the use of smart mobile devices have increased in everyday life, to the point of replacing computers for the most basic functions. It has emerged innovative projects that leverage the constant presence of these devices by modifying the way we see and perform various daily tasks. It has also increased the use of free and open source systems, such as the Android platform which currently holds large share of the mobile device market. Occupying a key role in developing these new applications, software engineering brings engineering concepts to the development and maintenance of software products, making the development process more organized and efficient, aiming for improvement in product quality. The main objective of this study is to monitor source code metrics in the Android API, essentially object-oriented metrics, and study the evolution of its values in the different versions of the API, to verify the similarities with system applications, and then check the possibility of using the data obtained to assist in application development. Key-words: Software Engineering. Source code metrics. Android. Lista de ilustrações Figura 1 – Exemplo de estrutura de arquivos de diretório raiz do AOSP ...... 47 Figura 2 – Diretório onde foram armazenadas cada versão a ser analisada ..... 48 Figura 4 – Evolução da métrica AMLOC ao longo das versões da API ....... 55 Figura 5 – Evolução da métrica ACCM ao longo das versões da API ........ 57 Figura 6 – ACCM por AMLOC nas Tabelas 2 e 4 .................. 58 Figura 7 – Evolução da métrica RFC ao longo das versões da API ......... 61 Figura 8 – Evolução da métrica DIT ao longo das versões da API ......... 63 Figura 9 – Evolução da métrica NOC ao longo das versões da API ......... 64 Figura 10 – Evolução da métrica LCOM4 ao longo das versões da API ....... 67 Figura 11 – Evolução da métrica ACC ao longo das versões da API ......... 69 Figura 12 – Evolução da métrica COF ao longo das versões da API ......... 71 Figura 13 – Percentil 75 das métricas DIT, NOC, LCOM, ACC e ACCM ...... 76 Figura 14 – Percentil 75, 90 e 95 de RFC em função do número de classes ..... 77 Figura 15 – ACCM em função de AMLOC na API versão 5.1.0 ........... 78 Figura 16 – ACC em função de AMLOC na API versão 5.1.0 ............ 78 Figura 17 – ACC em função de AMLOC na API versão 5.1.0 com 95% dos dados . 79 Figura 18 – DIT, NOC, LCOM, ACC e ACCM em função de AMLOC ....... 79 Figura 19 – DIT, NOC, LCOM, ACC e ACCM em função de NOM ......... 80 Figura 20 – LCOM, ACC e ACCM em função do tamanho de módulo ....... 80 Figura 21 – Componentes e sua comunicação via classe Communicator .......108 Figura 22 – Principais classes dentro do módulo de exercício e suas relações . .109 Figura 23 – Principais classes dentro do módulo de biofeedback e suas relações . 110 Lista de tabelas Tabela 1 – Complexidade ciclomática nas versões da API analisadas ........ 51 Tabela 2 – Average Method Lines of Code no Android ................ 54 Tabela 3 – Average Method Lines of Code nos aplicativos nativos .......... 56 Tabela 4 – Average Cyclomatic Complexity per Method no Android ........ 57 Tabela 5 – Average Cyclomatic Complexity per Method nos aplicativos nativos .. 59 Tabela 6 – Response For a Class no Android ..................... 60 Tabela 7 – Response For a Class nos aplicativos nativos ............... 62 Tabela 8 – Depth of Inheritance Tree no Android .................. 63 Tabela 9 – Depth of Inheritance Tree nos aplicativos nativos ............ 64 Tabela 10 – Number of Children no Android ...................... 65 Tabela 11 – Number of Children nos aplicativos nativos ................ 66 Tabela 12 – Lack of Cohesion in Methods no Android ................. 67 Tabela 13 – Lack of Cohesion in Methods nos aplicativos nativos .......... 68 Tabela 14 – Afferent Connections per Class no Android ............... 69 Tabela 15 – Afferent Connections per Class nos aplicativos nativos ......... 70 Tabela 16 – Coupling Factor no Android ........................ 71 Tabela 17 – Coupling Factor nos aplicativos nativos ................. 72 Tabela 18 – Intervalos definidos para sistema Android ................ 73 Tabela 19 – Scores de similaridade ........................... 85 Tabela 20 – Percentis 75, 90 e 95 para as métricas analisadas no aplicativo e-lastic . 86 Lista de abreviaturas e siglas UnB Universidade de Brasília OO OrientadoaObjetos API Application Programming Interface JNI Java Native Interface UID User Identification DVM Dalvik Virtual Machine ART Android RunTime JVM Java Virtual Machine DEX Dalvik Executable GUI Graphic User Interface ICS Ice Cream Sandwich CSV Comma Separated Values AMLOC Average Method Lines Of Code ACCM Average Cyclomatic Complexity per Method RFC Response For a Class DIT Depth in Inheritance Tree NOC Number of Children LCOM4 Lack of Cohesion in Methods ACC Afferent Connections per Class COF Coupling Factor LOC Lines of Code NOM Number of Methods CBO Coupling Between Objects AOSP Android Open Source Project MVC Model-View-Controller AIDL Android Interface Definition Language RPC Remote Procedure Call SDK Software Development Kit ADT Android Development Tools IDE Integrated Development Environment AVD Android Virtual Devices App Application MES Manutenção e Evolução de Software Sumário 1 INTRODUÇÃO ............................. 19 1.1 Contexto ................................... 19 1.2 Objetivos .................................. 20 1.3 Estrutura do trabalho ........................... 20 2 SISTEMA OPERACIONAL ANDROID ................ 21 2.1 Descrição Geral ............................... 21 2.2 Estrutura de uma aplicação ........................ 22 2.3 Diversidade e Compatibilidade ...................... 24 2.4 Engenharia de Software aplicada ao Android .............. 25 2.4.1 Seleção de plataformas móveis ........................ 25 2.4.2 Requisitos ................................... 28 2.4.3 Desenho .................................... 29 2.4.4 Construção .................................. 30 2.4.5 Manutenção .................................. 31 3 MÉTRICAS DE CÓDIGO ........................ 33 3.1 Métricas de código fonte selecionadas ................. 33 3.1.1 Ferramenta de captura de métricas .....................