What Do the Asserts in a Unit Test Tell Us About Code Quality? (CSMR2013)
Minicurso sobre Evolução de Software no CBSoft 2011
1. Evolução de SoftwareFerramentas, técnicas e métricas[versão 1.1] Gustavo Oliva, Mauricio Aniche, Marco Gerosa{goliva, aniche, gerosa}@ime.usp.br
Versão atualizada do curso apresentado em: CBSoft2011 –São Paulo –SP –Brasil
IME-USP
2. Instrutores
Gustavo Oliva
Mestre em Ciência da Computação pelo IME/USP
Evolução e manutenção de software
Gerência de dependências em sistemas OO
Atuou como desenvolvedor na IBM Brasil por ~3 anos
Mauricio Aniche
Mestre em Ciência da Computação pelo IME/USP
Test-DrivenDevelopmente Design de Sistemas OO
Instrutor dos cursos de Java e Métodos Ágeis da Caelum
2
3. Objetivos do Curso
Objetivo Geral
Discutir evolução de software e técnicas para extração e visualização de dados
Objetivos Específicos
Discutir ferramentas
Discutir técnicas
Discutir métricas
3
8. Motivação
8
A evoluçãodo software é difícilde compreender
Grande quantidadede dados históricos
A interaçãoentre aspectostécnicose sociaisdo processode desenvolvimentode software é difícilde desvendar
Uma análisecompreensivada evoluçãorequermecânismossofisticados, comovisualizaçõessob váriasperspectivase cálculode métricas
9. Evoluçãode Software
9
Evoluçãode software se preocupaprincipalmentecom as mudançasdo sistemaemrelaçãoa diferentesversõesoureleases do mesmo
EmMaiode 2010, o Google Scholar reportouque, em2009, 70 publicaçõescontinham“software evolution” no título, e maisde 900 tinham“software evolution” emalgumlugardo texto
22. Issue Trackers
Descriçãodo bug, severidade
Data de criaçãodo ticket, data de fechamentodo ticket
Desenvolvedorquefechou, desenvolvedoresqueinteragiramnadiscussão
…
22
23. Benefícios
Uma base de dados grandesobrebugs e suascaracterísticas
As informaçõesde data possibilitama criaçãode links entre o repositóriode códigoe o repositóriode bugs
23
24. Dificuldades
Cadaferramentaarmazena/exportadados de umamaneiradiferente
Muitasequipesnãousam
O link entre repositóriode códigoe repositóriode bugs é fraco
Uma soluçãocomumé procurarporreferênciasa bugs nasmensagensdos commits
24
39. Prediçãode Mudanças
Com base emmétricasaplicadassobredependênciaslógicas, é possívelfazerprediçõessobremudanças
Ideiabásica: “ClientesquecompraramX, tambémcompraramY”
A granularidadepodevariar: classes, métodos, etc.
É possívelaindaprevinirerrosdecorrentesde mudançasincompletas
39
40. Clones de código
Com o históricoda base de códigoemmãos, é possívelprocurarporclones de código
É possível, inclusive, descobrirquandoosclones foramcriados
40
42. Truck Factor
A análisede desenvolvedorese artefatosmodificadospodempassarinformaçõesinteressantes, como:
Artefatosquesósãomodificadosporum desenvolvedoraolongodo tempo (truck factor)
Artefatosquesãomodificadosporváriosdesenvolvedorese a relaçãodisso com a complexidadedo códigogerado
42
43. Ferramentasde métricas
Existemvárias, como:
JDepend/NDepend
JavaNCSS
Eclipse Metrics
KalibroMetrics
Byecycle
iPlasma
Neste caso, o desenvolvedor fica responsável por analisar as várias releases (ou versões) do código para chegar a conclusões acerca da evolução do sistema em questão
43
49. iPlasma-Avaliando Design
Além de investigar dependências, há outros métodos mais automatizados
Lanza e Marinescupropõem um conjunto de estratégias de detecção de problemas de design com base em composição de métricas e limiares
49
55. Reengenharia
Apósa análisedos dados, osproblemasidentificadossãotratadospormeiode técnicasde reengenharia
Reengenharia (…) é o exame e alteração de um sistema para reconstituí-lo em uma nova forma e a subsequente implementação da nova forma [Chikofsky1990]
No escopo de sistemas orientados a objetos, há um enorme corpo de conhecimento acerca de técnicas de reengenharia
Padrõesde reengenharia
Object-Oriented ReengineringPatterns[Demeyeret al. 2009]
Refatoração
Refactoring to Patterns [Kerievsky2004]
Refactoring: Improving the Design of Existing Code [Fowler et al. 1999]
55
56. Como implantarnaindústria?
No PASED 2011, Ahmed Hassan comentousobreo problemado “ovoe da galinha”
Para mostraro valor das técnicasde MSR, precisamosexecutá-lasnaindústria
Mas paraquea indústriacomprea ideia, é precisoprimeiromostraro valor
56
63. Visualizaçãode software
A área de “Visualização de Software” estuda a representação visual estática ou animada da informaçãosobre um sistema de software baseado em sua estrutura, comportamento ou evolução [Diehl 2010]
O objetivo central da visualização de software é apoiar a compreensão e análise de sistemas e algoritmos
Pode ser encarada como uma atividade de Engenharia Reversa
63
64. O queéumamétrica?
O mapeamentode umacaracterísticaparticular de umaentidademedidaparaum valor numérico
Porquemedir?
Auxilianaadministraçãoda complexidade!
64
65. Vantagense Desvantagens
Vantagens
Capacidadede quantificaraspectosde qualidade
Possibilidadede automatizaras mediçõesde um sistema
Desvantagens
Númerossãoapenasnúmeros: nãoconfiecegamenteneles!
Emgeral, capturamsomentesintomasde altagranularidade, e nãocausasde problemasde design
Difícilparadesenvolvedoreslidaremcom elas
Inflaçãode medições
65
77. Legenda: MetricsPyramid
NOP: Número de pacotes
NOC: Número de classes
NOM: Número de métodos
LOC: Linhas de Código
CYCLO: Complexidade ciclomática
CALLS: Número de invocações de métodos distintos
FANOUT: Número de tipos “de fora” referenciados
ANDC: Número médio de classes que foram derivadas
AHH: Número médio da árvore de hierarquia
77
91. Princípiosde Funcionamento
91
Processamento de Dados
Persistência
Coleta de Dados
Métricas
Visualizações
Parse dos logs do sistema de controle de versão
Identificação de dependências lógicas e requisitos de coordenação
Cálculo de métricas de projeto, commitse de arquivo
Oferecimento das visualizações interativas
92. Design Rationale
Foco no apoio à pesquisa empírica
Extensibilidade como chave para alcançar completude
Faça apenas uma vez
Filtre e personalize
92
93. Visualizações da XFlow
“Overview primeiro, zoom e filtragem, e entãodetalhessob demanda” [Shneiderman1996]
Alcançadapormeiode filtrose controles
Cincovisualizaçõesinterativas
Gráficode Linhas
Scatterplot
TreeMap
Grafo
Atividade
93
94. Mecanismosde Interação
94
(a)Abas para visualizações
(b)Painel de desenvolvedores
(c)Barra de informações da análise
(d)Controles específicos
95.
96. CenárioIlustrativo#1
EvoluçãoSociotécnicade Software
Como times de desenvolvimentolidamcom a saídade desenvolvedoresprincípios?
A saídade líderescomprometeuo projetoGIMP inteiro(hiatode 20 mesesno desenvolvimento) [Ye & Kishida2003]
Visualizaçõesde Atividadee TreeMapforamempregadasparaanalisaro Megamek(BattleTechboard game)
96
101. CenárioIlustrativo#3
Compreendendopapelde desenvolvedores
Estudo exploratório do projeto jEdit
Coleta: 10895 commits
6 anos e meio de desenvolvimento
Apenas arquivos com extensão Java
Análise da contribuição de 3 desenvolvedores
k_satoda, jgellenee orutherfurd
101