10 lições aprendidas ao desenvolver um estudo na...

34
OPUS Group LES | DI |PUC-Rio - Brazil Manuele Ferreira 10 Lições Aprendidas ao Desenvolver um Estudo na Indústria OPUS Research Group – LES – PUC-Rio {manueleferreira}@inf.puc-rio.br

Upload: others

Post on 05-Aug-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 10 Lições Aprendidas ao Desenvolver um Estudo na Indústriainf2921/2013_2/docs/aulas/INF2921...(Code smell) M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts Refactoring: Improving

OPUS Group LES | DI |PUC-Rio - Brazil

Manuele Ferreira

10 Lições Aprendidas ao Desenvolver um Estudo na Indústria

OPUS Research Group – LES – PUC-Rio

{manueleferreira}@inf.puc-rio.br

Page 2: 10 Lições Aprendidas ao Desenvolver um Estudo na Indústriainf2921/2013_2/docs/aulas/INF2921...(Code smell) M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts Refactoring: Improving

Método Pesquisa-ação

Page - 2 02/12/2014

PIMENTEL, Mariano (Org.); FULKS, Hugo (Org.). Sistemas colaborativos. Rio de Janeiro: Elsevier, 2011. 375p Cap 25

Diagnosticar IntervirPlanejar

ação AvaliarSim

Não

Solução

satisfatória?

Refletir

Insider

Outsider

Page 3: 10 Lições Aprendidas ao Desenvolver um Estudo na Indústriainf2921/2013_2/docs/aulas/INF2921...(Code smell) M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts Refactoring: Improving

1º Lição: Selecione Organização/Projeto alinhado com seus objetivos

Page - 3 02/12/2014

• Selecione Organização/Projeto

• Entenda as barreiras/características

• Tenha um contato interno que acredite na idéia

Page 4: 10 Lições Aprendidas ao Desenvolver um Estudo na Indústriainf2921/2013_2/docs/aulas/INF2921...(Code smell) M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts Refactoring: Improving

2º Lição: Tenha um tema e um plano bem definido

Page - 4 02/12/2014

Page 5: 10 Lições Aprendidas ao Desenvolver um Estudo na Indústriainf2921/2013_2/docs/aulas/INF2921...(Code smell) M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts Refactoring: Improving

Anomalia de Código e Degradação Arquitetural

Page - 5 02/12/2014

Anomalia de código (Code smell)

M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts Refactoring: Improving the design of existing code

Degradação Arquitetural

Page 6: 10 Lições Aprendidas ao Desenvolver um Estudo na Indústriainf2921/2013_2/docs/aulas/INF2921...(Code smell) M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts Refactoring: Improving

var selecionaTipoTsv = function ( tipo ) { ... var param = {}

if( tipo == gTSV ) { param[“numPag”] = “1”; $( location ).attr( 'href', "TSV/gTSV.jsp"); } else if( tipo == aTSV ) { param[“numPag”] = ”2”; $( location ).attr( 'href', "TSV/aTSV.jsp"); } else if( tipo == bTSV ) { param[“numPag”] = “1”; $( location ).attr( 'href', "TSV/bTSV.jsp"); } ...

}

Exemplo de Anomalia de código

Page - 6 02/12/2014

M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts Refactoring: Improving the design of existing code

Método Longo

Page 7: 10 Lições Aprendidas ao Desenvolver um Estudo na Indústriainf2921/2013_2/docs/aulas/INF2921...(Code smell) M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts Refactoring: Improving

Anomalia de Código de Relevância Arquitetural

Page - 7 02/12/2014

Anomalia de código (Code smell)

M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts Refactoring: Improving the design of existing code

Degradação Arquitetural

“Uma anomalia de código é relevante arquiteturalmente quando representa no código uma decisão arquitetural que tem impacto negativo na qualidade do sistema”

Macia, Isela, et al. "Are automatically-detected code anomalies relevant to architectural modularity?: an

exploratory analysis of evolving systems“, 2012

Page 8: 10 Lições Aprendidas ao Desenvolver um Estudo na Indústriainf2921/2013_2/docs/aulas/INF2921...(Code smell) M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts Refactoring: Improving

Exemplo de Anomalia de Código de Relevância Arquitetural

Page - 8 02/12/2014

Garcia, Joshua, et al. "Identifying architectural bad smells." Software Maintenance and Reengineering, 2009.

CSMR'09. 13th European Conference on. IEEE, 2009.

Método Longo

Anomalia de código de relevância arquitetural

Macia, Isela, et al. "Are automatically-detected code anomalies relevant to architectural modularity?: an

exploratory analysis of evolving systems ACM, 2012

Método Longo + Shotgun Surgery

Anomalia Arquitetural

Interface Ambígua

Page 9: 10 Lições Aprendidas ao Desenvolver um Estudo na Indústriainf2921/2013_2/docs/aulas/INF2921...(Code smell) M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts Refactoring: Improving

Estratégias baseadas em métricas

Page - 9 02/12/2014

R. Marinescu.Detection strategies: metrics-based rules for detecting design flaws. 2004

Page 10: 10 Lições Aprendidas ao Desenvolver um Estudo na Indústriainf2921/2013_2/docs/aulas/INF2921...(Code smell) M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts Refactoring: Improving

Configuração do Estudo

Page - 10 02/12/2014

Questões de pesquisa

Questões de Pes quisa Description

RQ1

Existe alguma diferença entre a eficácia das estratégias baseadas em métricas e estratégias ad hoc para detecção de anomalias de código de relevância arquitetural?

RQ2

Existe alguma diferença entre o esforço apliacado no uso das estratégias baseadas em métricas e estratégias ad hoc para detecção de anomalias de código de relevância arquitetural?

Identificar possibilidades de melhorias no uso de estratégias baseadas em métricas

Comparação com método de inspeção de software convencional “ah hoc”

Foco de mais de 400 trabalhos, uso por mais de 30 anos técnica popular para identificação de anomalias de código

Page 11: 10 Lições Aprendidas ao Desenvolver um Estudo na Indústriainf2921/2013_2/docs/aulas/INF2921...(Code smell) M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts Refactoring: Improving

Configuração do Estudo

Page - 11 02/12/2014

Métricas

Esforço

Contabiliza a quantidade de tempo usado para identificar anomalias de código de relevância arquitetural

Page 12: 10 Lições Aprendidas ao Desenvolver um Estudo na Indústriainf2921/2013_2/docs/aulas/INF2921...(Code smell) M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts Refactoring: Improving

Configuração do Estudo

Page - 12 02/12/2014

Métricas

Eficácia

Quantifica a qualidade dos resultados e indiretamente a qualidade do processo

Q1 Quais as propriedades positivas da estratégia usada? Q2 Quais as dificuldades no uso da estratégia? Q3 Quais sugestões de melhoria para a estratégia?

Page 13: 10 Lições Aprendidas ao Desenvolver um Estudo na Indústriainf2921/2013_2/docs/aulas/INF2921...(Code smell) M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts Refactoring: Improving

Configuração do Estudo

Page - 13 02/12/2014

Métricas

Precisão

Precision = | relevant ∩ retrieved | | retrieved |

Page 14: 10 Lições Aprendidas ao Desenvolver um Estudo na Indústriainf2921/2013_2/docs/aulas/INF2921...(Code smell) M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts Refactoring: Improving

Configuração do Estudo

Page - 14 02/12/2014

Métricas

Consistência

Cons = number of AD hoc indications number of Metrics indications

Page 15: 10 Lições Aprendidas ao Desenvolver um Estudo na Indústriainf2921/2013_2/docs/aulas/INF2921...(Code smell) M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts Refactoring: Improving

Configuração do Estudo

Page - 15 02/12/2014

Sistema Alvo

30K LOC

415 elementos arquiteturais

210 versões

Grande esforço de reengenharia nos últimos 3 anos

Impacto e relevância

Alta complexidade

Desenvolvimento incremental

Refatoração do TSV

Sistema V

Page 16: 10 Lições Aprendidas ao Desenvolver um Estudo na Indústriainf2921/2013_2/docs/aulas/INF2921...(Code smell) M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts Refactoring: Improving

3º Lição: Mantenha todos os envolvidos informados

Page - 16 02/12/2014

• Comunicação inicial para estabelecimento

de escopo, prazos, objetivos, etc

• Assinatura de termos de compromisso

• Reuniões para avaliação do problema,

soluções, ações, etc

• Troca de informações para manter

motivação dos participantes

• Cuidado para não alterar o

desempenho do participantes

Page 17: 10 Lições Aprendidas ao Desenvolver um Estudo na Indústriainf2921/2013_2/docs/aulas/INF2921...(Code smell) M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts Refactoring: Improving

4º Lição: Garanta acesso sempre que necessário ao sistema/ambiente

Page - 17 02/12/2014

• Diversas formas de acesso

• Flexibilidade de dia/horário para acesso

Page 18: 10 Lições Aprendidas ao Desenvolver um Estudo na Indústriainf2921/2013_2/docs/aulas/INF2921...(Code smell) M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts Refactoring: Improving

5º Lição: Cuidado na escolha do “oráculo”

Page - 18 02/12/2014

Page 19: 10 Lições Aprendidas ao Desenvolver um Estudo na Indústriainf2921/2013_2/docs/aulas/INF2921...(Code smell) M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts Refactoring: Improving

Ciclos da pesquisa-ação

Page - 19 02/12/2014

Karus, Siim, and Harald Gall. "A study of language usage evolution in open source software“ Proceedings of the 8th

Working Conference on Mining Software Repositories. ACM, 2011.

Diagnosticar IntervirPlanejar

ação AvaliarSim

Não

Solução

satisfatória?

Refletir

• Identificação/Análise • Colaboraticamente • Propor um novo ponto de vista

• Planejamento das intervenções • Alinhamento com os objetivos • Quais e quando os dados serão

coletados

• Execução das ações • Coleta de dados • É possível anotar impressões

pessoais

• Avaliação dos resultados em relação aos objetivos

• Avaliação da evolução

• Reflexão sobre as informações coletadas

• Decisão se um novo ciclo deve ser realizado

Page 20: 10 Lições Aprendidas ao Desenvolver um Estudo na Indústriainf2921/2013_2/docs/aulas/INF2921...(Code smell) M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts Refactoring: Improving

Configuração do Estudo

Page - 20 02/12/2014

Procedimentos

Procedimentos iniciais

Estudo de Caso

Page 21: 10 Lições Aprendidas ao Desenvolver um Estudo na Indústriainf2921/2013_2/docs/aulas/INF2921...(Code smell) M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts Refactoring: Improving

Configuração do Estudo

Page - 21 02/12/2014

Procedimentos iniciais

Coleta de dados iniciais e do ambiente do sistema

Avaliação da refatoração TSV do ponto de vista do oráculo

V12 V13.1 V14.5 V15.1 V15.2 VR 1.0 1 3 1 2 3 1

V15.5 V15.6 V15.7 V16.0 V16.1 V17.0 1 1 1 6 1 1

FC8 VR21 VR22 VR28.2.1 VR28.2.4 1 1 1 1 1

198 referências

26 referências

Page 22: 10 Lições Aprendidas ao Desenvolver um Estudo na Indústriainf2921/2013_2/docs/aulas/INF2921...(Code smell) M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts Refactoring: Improving

Configuração do Estudo

Page - 22 02/12/2014

Procedimentos

Procedimentos iniciais

Estudo de Caso

Page 23: 10 Lições Aprendidas ao Desenvolver um Estudo na Indústriainf2921/2013_2/docs/aulas/INF2921...(Code smell) M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts Refactoring: Improving

Configuração do Estudo

Page - 23 02/12/2014

Procedimentos

Avaliou as duas estratégias

Comparação das estratégias do ponto de vista do pesquisador

Geração dos

resultados com a

ferramenta

Calculo das métricas

Discussão com o

oráculo sobre os

resultados

Geração de demais

métricas

Page 24: 10 Lições Aprendidas ao Desenvolver um Estudo na Indústriainf2921/2013_2/docs/aulas/INF2921...(Code smell) M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts Refactoring: Improving

6º Lição: Imparcialidade

Page - 24 02/12/2014

• Cuidado com as intervenções

• Usufrua dos aspectos qualitativos

• É esperada uma melhoria no

ambiente avaliado

• Diminuir as limitações do trabalho

Page 25: 10 Lições Aprendidas ao Desenvolver um Estudo na Indústriainf2921/2013_2/docs/aulas/INF2921...(Code smell) M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts Refactoring: Improving

Resultados

Page - 25 02/12/2014

Esforço e eficácia

Category precision relevant identified

Shotgun Surgery 1 16 16

Divergent Change 0,93 14 15

Long Method 0,94 15 16

God Class 1 3 3

Anomalias de código relacionadas a refatoração TSV

Category consistency ad hoc

(relevant) metrics-based

strategies (relevant)

Shotgun Surgery

1 16 16

Divergent Change

1 14 14

Long Method 1 15 15

God Class 1 3 3

Page 26: 10 Lições Aprendidas ao Desenvolver um Estudo na Indústriainf2921/2013_2/docs/aulas/INF2921...(Code smell) M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts Refactoring: Improving

Resultados

Page - 26 02/12/2014

Esforço e eficácia

RQ1

Existe alguma diferença entre a eficácia das estratégias baseadas em métricas e estratégias ad hoc para detecção de anomalias de código de relevância arquitetural?

Q1 Quais as propriedades positivas da estratégia usada?

Strategy Effectiveness (score)

ad hoc strategy 8,5

metrics-based strategies 8,5

Q2 Quais as dificuldades no uso da estratégia? Q3 Quais sugestões de melhoria para a estratégia?

Ad hoc: Longo tempo para identificação das anomalias e

Alta complexidade

Page 27: 10 Lições Aprendidas ao Desenvolver um Estudo na Indústriainf2921/2013_2/docs/aulas/INF2921...(Code smell) M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts Refactoring: Improving

Resultados

Page - 27 02/12/2014

RQ2

Existe alguma diferença entre o esforço apliacado no uso das estratégias baseadas em métricas e estratégias ad hoc para detecção de anomalias de código de relevância arquitetural?

Strategy Auxiliary Files

(hour) Detection

(hour) Total

(hour) ad hoc strategy 0 16 16

metrics-based strategies

20 2 22

Strategy

Project Representat

ion (hour)

Concern mapping

(hour)

architecture-code traces

(hour) Total (hour)

metrics-based strategies

2 12 6 20

Ad hoc: revisão do código fonte, filtro e identificação Metricas: Filtro

37,5%

Page 28: 10 Lições Aprendidas ao Desenvolver um Estudo na Indústriainf2921/2013_2/docs/aulas/INF2921...(Code smell) M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts Refactoring: Improving

Resultados

Page - 28 02/12/2014

Como melhorar a eficácia das estratégias baseadas em métricas?

Melhor investigação da relação com interesses arquiteturais

if($('#tab1').hasClass('selected')){ $( location ).attr( 'href', "TSV/gTSV.jsp"); } else if ($( '#tab2' ).hasClass( 'selected' ) ) { $( location ).attr( 'href', "TSV/gTSV.jsp"); } else if ( $( '#tab3' ).hasClass( 'selected' ) ) { $( location ).attr( 'href', "TSV/gTSV.jsp" ); } else if ( $( '#tab4' ).hasClass( 'selected' ) ) { $( location ).attr( 'href', "TSV/gTSV.jsp" ); }

Category Consistency

ad hoc strategy

(relevant)

metrics-based strategies (relevant)

Shotgun Surgery

1,13 18 16

Long Method 1,13 17 15

God Class 1,67 5 3

Multiple-Anomaly

Syndrome

1,14 16 14 identificação de anomalias de código nas “fronteiras” de diferentes linguagens

Page 29: 10 Lições Aprendidas ao Desenvolver um Estudo na Indústriainf2921/2013_2/docs/aulas/INF2921...(Code smell) M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts Refactoring: Improving

Resultados

Page - 29 02/12/2014

Como reduzir o esforço das estratégias baseadas em métricas?

Melhor suporte a geração e manutenção do mapeamento de interesses arquiteturais

Confirmação do quanto é menos custoso trabalhar com padrões de anomalias arquiteturais

Page 30: 10 Lições Aprendidas ao Desenvolver um Estudo na Indústriainf2921/2013_2/docs/aulas/INF2921...(Code smell) M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts Refactoring: Improving

7º Lição: Se beneficie dos seus conhecimentos prévios

Page - 30 02/12/2014

Page 31: 10 Lições Aprendidas ao Desenvolver um Estudo na Indústriainf2921/2013_2/docs/aulas/INF2921...(Code smell) M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts Refactoring: Improving

8º Lição: Aprendizado contínuo

Page - 31 02/12/2014

Diagnosticar IntervirPlanejar

ação AvaliarSim

Não

Solução

satisfatória?

Refletir

Oportunidades?

Riscos?

Page 32: 10 Lições Aprendidas ao Desenvolver um Estudo na Indústriainf2921/2013_2/docs/aulas/INF2921...(Code smell) M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts Refactoring: Improving

9º Lição: Anote tudo!

Page - 32 02/12/2014

Page 33: 10 Lições Aprendidas ao Desenvolver um Estudo na Indústriainf2921/2013_2/docs/aulas/INF2921...(Code smell) M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts Refactoring: Improving

10º Lição: Pense simples!

Page - 33 02/12/2014

Page 34: 10 Lições Aprendidas ao Desenvolver um Estudo na Indústriainf2921/2013_2/docs/aulas/INF2921...(Code smell) M. Fowler, K. Beck, J. Brant, W. Opdyke, D. Roberts Refactoring: Improving

OPUS Group LES | DI |PUC-Rio - Brazil

Manuele Ferreira

10 Lições Aprendidas ao Desenvolver um Estudo na Indústria

OPUS Research Group – LES – PUC-Rio

{manueleferreira}@inf.puc-rio.br