SlideShare uma empresa Scribd logo
1 de 43
Trilha – Arquitetura
     Leandro Daniel
     Systems Architect




                         Globalcode – Open4education
Globalcode – Open4education
Sob a óptica da arquitetura de software:

MÉTRICAS DE CÓDIGO


                                           Globalcode – Open4education
O que veremos?
    O que são        Conhecendo
                                   Usando métricas
    métricas de       algumas
                                      de código
     código?          métricas




      Métricas
                      Queryable    Indicadores de
     guiando o
                     source code      qualidade
       design




   Case: relação       Algumas
        entre        ferramentas
  métricas, design
      e testes
                                   Globalcode – Open4education
Não seria muito útil usar um
monóculo aqui, certo?




                               Globalcode – Open4education
O que esse código diz?




                         Globalcode – Open4education
O que (todo) esse código diz?




                                Globalcode – Open4education
Sim, a entropia em
software existe ...




     Manter as coisas como estão,
            exige trabalho!
                            Globalcode – Open4education
Globalcode – Open4education
As medições e as métricas
 ajudam a entender o processo
técnico usado para desenvolver
          um produto.


                      Globalcode – Open4education
Termos comuns

  Medida (indicação quantitativa)

    Medição (ato de medir)

    Métrica (medida quantitativa)

  Indicador (combinação)


                                    Globalcode – Open4education
Uma métrica precisa ser válida,
    confiável e barata.



                       Globalcode – Open4education
Potencial das métricas (1 de 2)


    Analisar                            Medidas
  qualidade e        Qualificar a    funcionais são
produtividade do                                             Utilizadas para
                    performance       necessárias
  processo de                                                  comparar a
                     técnica dos    para qualificar a
desenvolvimento                                              produtividade
 e manutenção
                    produtos do       performance
                                                              de diferentes
 bem como do       ponto de vista     dos produtos
                                                                técnicas e
   produto de            do               pela
                                                               tecnologias
    software       desenvolvedor     perspectiva do
   construído                           usuário




                                                        Globalcode – Open4education
Potencial das métricas (2 de 2)

                                                          No nível
                                                        técnico, as
                                                      medições são
                                                       importantes
                   Embasar
   Reduzir                        Formar uma         para determinar
                solicitações de
frustrações e                     linha básica          parâmetros
                     novas
 pressões de                           para                como
                ferramentas e
 cronograma                        estimativas        quantidade de
                 treinamentos
                                                           teste
                                                       necessário e
                                                        impacto de
                                                         mudanças



                                                 Globalcode – Open4education
GlobalcodeThom Holwerda
       by – Open4education
Globalcode – Open4education
Métricas e indicadores




        Vamos começar do básico! :)

                               Globalcode – Open4education
Ca e Ce




          Globalcode – Open4education
Cyclomatic Complexity




                        Globalcode – Open4education
Calculando CC (Complexidade Ciclomática)




                 Em linguagens como C#, as seguintes expressões
                      são desconsideradas para cálculo da CC:
                else | do | switch | try | using | throw | finally | return |
                      object creation | method call | field access
                                                     Globalcode – Open4education
Grafo de acoplamento




                       Globalcode – Open4education
Grafo de acoplamento




                       Globalcode – Open4education
Grafo de acoplamento




                       Globalcode – Open4education
Grafo de acoplamento




                       Globalcode – Open4education
Acredite, todos falam em
redução de acoplamento!

                                    Shotgun
                                    Surgery
                          Feature
       CQS                 Envy
                Tell, D
                 on't
                 Ask                           Say It
       Law of                                  Once
      Demeter                                 and Only
                                               Once
                 IoC                                          DI



                                              Globalcode – Open4education
Um código...




               Globalcode – Open4education
Uma abstração!




                        Assembly
                         Classe
                         Método




                 Globalcode – Open4education
Globalcode – Open4education
Globalcode – Open4education
Uma matriz diz muita coisa!

                                 Classes
                              mutuamente
                              dependentes?

                            Alto
                       acoplamento?


                                Quebrando
                                princípíos?


                                 Globalcode – Open4education
Uma abstração da JDK (by CodeCity)




                           Globalcode – Open4education
Visual Studio com NDepend




                            Globalcode – Open4education
Queryable source code
 SELECT                              Dead code!
     [method name]
 FROM
     [my entire solution]
 WHERE
     MethodCa == 0 AND
     !MethodIsPublic AND
     !MethodIsProtected AND
     !MethodIsEntryPoint AND
     !MethodIsExplicitInterfaceImplementation AND
     !MethodIsClassConstructor AND
     !MethodIsFinalizer


                                    Globalcode – Open4education
Relação entre testes,
  design e métricas (gist)




https://gist.github.com/2149474
                                  Globalcode – Open4education
Classe antes do refactoring




                              Globalcode – Open4education
Depois do refactoring




                        Globalcode – Open4education
Resultado do refactoring
(antes x depois)
                                        Depois




                                         Antes



                           Globalcode – Open4education
Questões levantadas

                          Se CC = N, então N
           Qual a        é o número mínimo
       relação entre     de testes necessário.
       Testes x CC?




 Testar métodos com        Existem outros pontos que
 CC=1 pode ser inútil.     aumentam a complexidade
                              ciclomática sem ela
                           aparecer nas métricas. Um
                           Math.Max, é um exemplo.
                                         Globalcode – Open4education
Questões levantadas
        Qual a relação entre
      Cobertura de testes x CC?



                  Batalha!
         Membros públicos Vs privados!!



         Em uma classe coesa, os métodos
      privados no fundo servem pra diminuir a
          CC e aumentar a legibilidade dos
                 métodos públicos.
                                        Globalcode – Open4education
Questões levantadas




       Qual a relação
      entre Métricas x
          Design?

                         Globalcode – Open4education
Referências
 Relação entre métricas, design e testes (Github)
 https://gist.github.com/2149474


 Emergent design through metrics (by Neal Ford)
 http://goo.gl/tdyVO


 Série de posts sobre Code Metrics
 http://leandrodaniel.com/?tag=/Code+Metrics




                                               Globalcode – Open4education
Ferramentas
 Lista de ferramentas para análise de código estático
 http://goo.gl/KjLq


 FluentCodeMetrics (by Elemar Jr)
 http://goo.gl/CvnAW


 NDepend
 http://ndepend.com


 JArchitect
 http://jarchitect.com
                                      Globalcode – Open4education
Globalcode – Open4education

Mais conteúdo relacionado

Mais procurados

Automação de testes em projetos ágeis
Automação de testes em projetos ágeisAutomação de testes em projetos ágeis
Automação de testes em projetos ágeisCristiano Caetano
 
Defesa de mestrado: Como a prática de TDD influencia no projeto de classes em...
Defesa de mestrado: Como a prática de TDD influencia no projeto de classes em...Defesa de mestrado: Como a prática de TDD influencia no projeto de classes em...
Defesa de mestrado: Como a prática de TDD influencia no projeto de classes em...Maurício Aniche
 
Artigo - OS FUNDAMENTOS DE TESTE DE SOFTWARE E SUA IMPORTÂNCIA NA QUALIDADE D...
Artigo - OS FUNDAMENTOS DE TESTE DE SOFTWARE E SUA IMPORTÂNCIA NA QUALIDADE D...Artigo - OS FUNDAMENTOS DE TESTE DE SOFTWARE E SUA IMPORTÂNCIA NA QUALIDADE D...
Artigo - OS FUNDAMENTOS DE TESTE DE SOFTWARE E SUA IMPORTÂNCIA NA QUALIDADE D...Luiz Ladeira
 
IBM Rational Piores Práticas em Testes
IBM Rational Piores Práticas em TestesIBM Rational Piores Práticas em Testes
IBM Rational Piores Práticas em TestesFelipe Freire
 
O Software Livre e o Mercado de Trabalho: Certificações Profissionais - Vande...
O Software Livre e o Mercado de Trabalho: Certificações Profissionais - Vande...O Software Livre e o Mercado de Trabalho: Certificações Profissionais - Vande...
O Software Livre e o Mercado de Trabalho: Certificações Profissionais - Vande...Tchelinux
 
Minicurso sobre Evolução de Software no CBSoft 2011
Minicurso sobre Evolução de Software no CBSoft 2011Minicurso sobre Evolução de Software no CBSoft 2011
Minicurso sobre Evolução de Software no CBSoft 2011Maurício Aniche
 
Negócio Escrito em Código
Negócio Escrito em CódigoNegócio Escrito em Código
Negócio Escrito em CódigoDouglas Siviotti
 
DevQA: Como medir qualidade de código ?
DevQA: Como medir qualidade de código ?DevQA: Como medir qualidade de código ?
DevQA: Como medir qualidade de código ?Kamilla Queiroz Xavier
 
UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27Hélio Medeiros
 

Mais procurados (20)

Automação de testes em projetos ágeis
Automação de testes em projetos ágeisAutomação de testes em projetos ágeis
Automação de testes em projetos ágeis
 
Questionario CTFL - Foundation Level
Questionario CTFL - Foundation LevelQuestionario CTFL - Foundation Level
Questionario CTFL - Foundation Level
 
Defesa de mestrado: Como a prática de TDD influencia no projeto de classes em...
Defesa de mestrado: Como a prática de TDD influencia no projeto de classes em...Defesa de mestrado: Como a prática de TDD influencia no projeto de classes em...
Defesa de mestrado: Como a prática de TDD influencia no projeto de classes em...
 
clean code
clean codeclean code
clean code
 
Ctai Teste De Software Aula 2
Ctai Teste De Software Aula 2Ctai Teste De Software Aula 2
Ctai Teste De Software Aula 2
 
Cpld top dos tops
Cpld top dos topsCpld top dos tops
Cpld top dos tops
 
Ctai Teste De Software Aula 1
Ctai Teste De Software Aula 1Ctai Teste De Software Aula 1
Ctai Teste De Software Aula 1
 
Artigo - OS FUNDAMENTOS DE TESTE DE SOFTWARE E SUA IMPORTÂNCIA NA QUALIDADE D...
Artigo - OS FUNDAMENTOS DE TESTE DE SOFTWARE E SUA IMPORTÂNCIA NA QUALIDADE D...Artigo - OS FUNDAMENTOS DE TESTE DE SOFTWARE E SUA IMPORTÂNCIA NA QUALIDADE D...
Artigo - OS FUNDAMENTOS DE TESTE DE SOFTWARE E SUA IMPORTÂNCIA NA QUALIDADE D...
 
IBM Rational Piores Práticas em Testes
IBM Rational Piores Práticas em TestesIBM Rational Piores Práticas em Testes
IBM Rational Piores Práticas em Testes
 
O Software Livre e o Mercado de Trabalho: Certificações Profissionais - Vande...
O Software Livre e o Mercado de Trabalho: Certificações Profissionais - Vande...O Software Livre e o Mercado de Trabalho: Certificações Profissionais - Vande...
O Software Livre e o Mercado de Trabalho: Certificações Profissionais - Vande...
 
Complexidade Ciclomática
Complexidade CiclomáticaComplexidade Ciclomática
Complexidade Ciclomática
 
Minicurso sobre Evolução de Software no CBSoft 2011
Minicurso sobre Evolução de Software no CBSoft 2011Minicurso sobre Evolução de Software no CBSoft 2011
Minicurso sobre Evolução de Software no CBSoft 2011
 
Negócio Escrito em Código
Negócio Escrito em CódigoNegócio Escrito em Código
Negócio Escrito em Código
 
Pensando TDD
Pensando TDDPensando TDD
Pensando TDD
 
Curso emso
Curso emsoCurso emso
Curso emso
 
DevQA: Como medir qualidade de código ?
DevQA: Como medir qualidade de código ?DevQA: Como medir qualidade de código ?
DevQA: Como medir qualidade de código ?
 
Rumos do teste de software
Rumos do teste de softwareRumos do teste de software
Rumos do teste de software
 
MPS.BR
MPS.BRMPS.BR
MPS.BR
 
Projeto de Software
Projeto de SoftwareProjeto de Software
Projeto de Software
 
UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27
 

Destaque

OCCIware: extensible and standard-based XaaS platform to manage everything in...
OCCIware: extensible and standard-based XaaS platform to manage everything in...OCCIware: extensible and standard-based XaaS platform to manage everything in...
OCCIware: extensible and standard-based XaaS platform to manage everything in...OW2
 
Preparing your source code for distribution, OW2con'16, Paris.
Preparing your source code for distribution, OW2con'16, Paris. Preparing your source code for distribution, OW2con'16, Paris.
Preparing your source code for distribution, OW2con'16, Paris. OW2
 
Ow2stack, the OW2 Community Cloud Testbed, Xiaolong Kong, OW2
Ow2stack, the OW2 Community Cloud Testbed, Xiaolong Kong, OW2Ow2stack, the OW2 Community Cloud Testbed, Xiaolong Kong, OW2
Ow2stack, the OW2 Community Cloud Testbed, Xiaolong Kong, OW2OW2
 
Fossology, OW2con11, Nov 24-25, Paris
Fossology, OW2con11, Nov 24-25, ParisFossology, OW2con11, Nov 24-25, Paris
Fossology, OW2con11, Nov 24-25, ParisOW2
 
To be Open Source or not to be ? OW2con’12, Paris
To be Open Source or not to be ? OW2con’12, ParisTo be Open Source or not to be ? OW2con’12, Paris
To be Open Source or not to be ? OW2con’12, ParisOW2
 
Git, как инструмент управления веб-контентом
Git, как инструмент управления веб-контентомGit, как инструмент управления веб-контентом
Git, как инструмент управления веб-контентомAlex Musayev
 
Hurricane web quest
Hurricane web questHurricane web quest
Hurricane web questwall530
 
Why no one loves me? Using BI techniques to make my business more attractive,...
Why no one loves me? Using BI techniques to make my business more attractive,...Why no one loves me? Using BI techniques to make my business more attractive,...
Why no one loves me? Using BI techniques to make my business more attractive,...OW2
 
Boosted Framework for Web Accessible and responsvie Websites, OW2con'16, Paris.
Boosted Framework for Web Accessible and responsvie Websites, OW2con'16, Paris. Boosted Framework for Web Accessible and responsvie Websites, OW2con'16, Paris.
Boosted Framework for Web Accessible and responsvie Websites, OW2con'16, Paris. OW2
 
Dependency management and licence compliance, OW2con'16, Paris.
Dependency management and licence compliance, OW2con'16, Paris. Dependency management and licence compliance, OW2con'16, Paris.
Dependency management and licence compliance, OW2con'16, Paris. OW2
 
Wildi 2009 Resume
Wildi 2009 ResumeWildi 2009 Resume
Wildi 2009 ResumeWildi
 
Sofa2 Q-im ress-ow2-conference-nov10
Sofa2 Q-im ress-ow2-conference-nov10Sofa2 Q-im ress-ow2-conference-nov10
Sofa2 Q-im ress-ow2-conference-nov10OW2
 
Egypt Travel- Webinar Slide Show (June 2009)
Egypt Travel- Webinar Slide Show (June 2009)Egypt Travel- Webinar Slide Show (June 2009)
Egypt Travel- Webinar Slide Show (June 2009)Lindblad Expeditions
 
POSS2016Nov16-The Open Source Software Value Chain
POSS2016Nov16-The Open Source Software Value ChainPOSS2016Nov16-The Open Source Software Value Chain
POSS2016Nov16-The Open Source Software Value ChainOW2
 
Qualipso Open Maturity Model OW2 Conference Nov10
Qualipso Open Maturity Model OW2 Conference Nov10Qualipso Open Maturity Model OW2 Conference Nov10
Qualipso Open Maturity Model OW2 Conference Nov10OW2
 
Migration Novaforge OW2 Conference Nov10
Migration Novaforge OW2 Conference Nov10Migration Novaforge OW2 Conference Nov10
Migration Novaforge OW2 Conference Nov10OW2
 
Ow2 Today Solution Linux2010
Ow2 Today Solution Linux2010Ow2 Today Solution Linux2010
Ow2 Today Solution Linux2010OW2
 
European Open Source Anchors in the Supply Chain
European Open Source Anchors in the Supply ChainEuropean Open Source Anchors in the Supply Chain
European Open Source Anchors in the Supply ChainOW2
 

Destaque (20)

OCCIware: extensible and standard-based XaaS platform to manage everything in...
OCCIware: extensible and standard-based XaaS platform to manage everything in...OCCIware: extensible and standard-based XaaS platform to manage everything in...
OCCIware: extensible and standard-based XaaS platform to manage everything in...
 
Preparing your source code for distribution, OW2con'16, Paris.
Preparing your source code for distribution, OW2con'16, Paris. Preparing your source code for distribution, OW2con'16, Paris.
Preparing your source code for distribution, OW2con'16, Paris.
 
Ow2stack, the OW2 Community Cloud Testbed, Xiaolong Kong, OW2
Ow2stack, the OW2 Community Cloud Testbed, Xiaolong Kong, OW2Ow2stack, the OW2 Community Cloud Testbed, Xiaolong Kong, OW2
Ow2stack, the OW2 Community Cloud Testbed, Xiaolong Kong, OW2
 
Fossology, OW2con11, Nov 24-25, Paris
Fossology, OW2con11, Nov 24-25, ParisFossology, OW2con11, Nov 24-25, Paris
Fossology, OW2con11, Nov 24-25, Paris
 
To be Open Source or not to be ? OW2con’12, Paris
To be Open Source or not to be ? OW2con’12, ParisTo be Open Source or not to be ? OW2con’12, Paris
To be Open Source or not to be ? OW2con’12, Paris
 
Git, как инструмент управления веб-контентом
Git, как инструмент управления веб-контентомGit, как инструмент управления веб-контентом
Git, как инструмент управления веб-контентом
 
Hurricane web quest
Hurricane web questHurricane web quest
Hurricane web quest
 
Chapter 6
Chapter 6Chapter 6
Chapter 6
 
Why no one loves me? Using BI techniques to make my business more attractive,...
Why no one loves me? Using BI techniques to make my business more attractive,...Why no one loves me? Using BI techniques to make my business more attractive,...
Why no one loves me? Using BI techniques to make my business more attractive,...
 
Boosted Framework for Web Accessible and responsvie Websites, OW2con'16, Paris.
Boosted Framework for Web Accessible and responsvie Websites, OW2con'16, Paris. Boosted Framework for Web Accessible and responsvie Websites, OW2con'16, Paris.
Boosted Framework for Web Accessible and responsvie Websites, OW2con'16, Paris.
 
Dependency management and licence compliance, OW2con'16, Paris.
Dependency management and licence compliance, OW2con'16, Paris. Dependency management and licence compliance, OW2con'16, Paris.
Dependency management and licence compliance, OW2con'16, Paris.
 
7. Por qué leer a los clásicos
7. Por qué leer a los clásicos7. Por qué leer a los clásicos
7. Por qué leer a los clásicos
 
Wildi 2009 Resume
Wildi 2009 ResumeWildi 2009 Resume
Wildi 2009 Resume
 
Sofa2 Q-im ress-ow2-conference-nov10
Sofa2 Q-im ress-ow2-conference-nov10Sofa2 Q-im ress-ow2-conference-nov10
Sofa2 Q-im ress-ow2-conference-nov10
 
Egypt Travel- Webinar Slide Show (June 2009)
Egypt Travel- Webinar Slide Show (June 2009)Egypt Travel- Webinar Slide Show (June 2009)
Egypt Travel- Webinar Slide Show (June 2009)
 
POSS2016Nov16-The Open Source Software Value Chain
POSS2016Nov16-The Open Source Software Value ChainPOSS2016Nov16-The Open Source Software Value Chain
POSS2016Nov16-The Open Source Software Value Chain
 
Qualipso Open Maturity Model OW2 Conference Nov10
Qualipso Open Maturity Model OW2 Conference Nov10Qualipso Open Maturity Model OW2 Conference Nov10
Qualipso Open Maturity Model OW2 Conference Nov10
 
Migration Novaforge OW2 Conference Nov10
Migration Novaforge OW2 Conference Nov10Migration Novaforge OW2 Conference Nov10
Migration Novaforge OW2 Conference Nov10
 
Ow2 Today Solution Linux2010
Ow2 Today Solution Linux2010Ow2 Today Solution Linux2010
Ow2 Today Solution Linux2010
 
European Open Source Anchors in the Supply Chain
European Open Source Anchors in the Supply ChainEuropean Open Source Anchors in the Supply Chain
European Open Source Anchors in the Supply Chain
 

Semelhante a TDC 2012 - Métricas de código na arquitetura

Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#tdc-globalcode
 
TDC2014 Teste móvel e seus requisitos, um foco na Usabilidade e Interação de ...
TDC2014 Teste móvel e seus requisitos, um foco na Usabilidade e Interação de ...TDC2014 Teste móvel e seus requisitos, um foco na Usabilidade e Interação de ...
TDC2014 Teste móvel e seus requisitos, um foco na Usabilidade e Interação de ...Igor Borborema Correia
 
TDC SP 2018 - Utilizando BDD para análise de negócio e desenvolvimento de pro...
TDC SP 2018 - Utilizando BDD para análise de negócio e desenvolvimento de pro...TDC SP 2018 - Utilizando BDD para análise de negócio e desenvolvimento de pro...
TDC SP 2018 - Utilizando BDD para análise de negócio e desenvolvimento de pro...Allan Ferreira
 
TDC Florianópolis 2019. Trilha Java - Arquitetura de Testes
TDC Florianópolis 2019. Trilha Java - Arquitetura de TestesTDC Florianópolis 2019. Trilha Java - Arquitetura de Testes
TDC Florianópolis 2019. Trilha Java - Arquitetura de TestesSandro Giacomozzi
 
Métricas de Aplicação - Implementando e utilizando a seu favor
Métricas de Aplicação - Implementando e utilizando a seu favorMétricas de Aplicação - Implementando e utilizando a seu favor
Métricas de Aplicação - Implementando e utilizando a seu favorDiego Silva
 
Dos requisitos à implantação em uma palestra
Dos requisitos à implantação em uma palestraDos requisitos à implantação em uma palestra
Dos requisitos à implantação em uma palestraRafael Chaves
 
[TDCPOA2019] Upstream Kanban: exercitando a eficácia criativa do seu fluxo de...
[TDCPOA2019] Upstream Kanban: exercitando a eficácia criativa do seu fluxo de...[TDCPOA2019] Upstream Kanban: exercitando a eficácia criativa do seu fluxo de...
[TDCPOA2019] Upstream Kanban: exercitando a eficácia criativa do seu fluxo de...Vinicius Campos Silva
 
Monitorando serviços REST com o Application Insights
Monitorando serviços REST com o Application InsightsMonitorando serviços REST com o Application Insights
Monitorando serviços REST com o Application InsightsRenato Groff
 
Obtendo métricas com TDD utilizando build automatizado e deploy no Azure
Obtendo métricas com TDD utilizando build automatizado e deploy no AzureObtendo métricas com TDD utilizando build automatizado e deploy no Azure
Obtendo métricas com TDD utilizando build automatizado e deploy no AzureMikaeri Ohana
 
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...tdc-globalcode
 
Introdução a Engenharia de Software - Prof.ª Cristiane Fidelix
Introdução a Engenharia de Software - Prof.ª Cristiane FidelixIntrodução a Engenharia de Software - Prof.ª Cristiane Fidelix
Introdução a Engenharia de Software - Prof.ª Cristiane FidelixCris Fidelix
 
Conceitos e fundamentos sobre testes de software e garantia da qualidade
Conceitos e fundamentos sobre testes de software e garantia da qualidadeConceitos e fundamentos sobre testes de software e garantia da qualidade
Conceitos e fundamentos sobre testes de software e garantia da qualidaderzauza
 
TDC 2014 Floripa - Melhorando sua Estratégia de Testes Automatizados
TDC 2014 Floripa - Melhorando sua Estratégia de Testes AutomatizadosTDC 2014 Floripa - Melhorando sua Estratégia de Testes Automatizados
TDC 2014 Floripa - Melhorando sua Estratégia de Testes AutomatizadosStefan Teixeira
 
TDC SP 2016 - Dos requisitos à implantação em uma palestra
TDC SP 2016 - Dos requisitos à implantação em uma palestraTDC SP 2016 - Dos requisitos à implantação em uma palestra
TDC SP 2016 - Dos requisitos à implantação em uma palestraRafael Chaves
 
Testes para Android de ponta a ponta
Testes para Android de ponta a pontaTestes para Android de ponta a ponta
Testes para Android de ponta a pontaElias Nogueira
 
Utilizando a API do Roslyn, o novo compilador do C#
Utilizando a API do Roslyn, o novo compilador do C#Utilizando a API do Roslyn, o novo compilador do C#
Utilizando a API do Roslyn, o novo compilador do C#Paulo Cesar Ortins Brito
 
Através do espelho
Através do espelhoAtravés do espelho
Através do espelhoAna Coli
 

Semelhante a TDC 2012 - Métricas de código na arquitetura (20)

Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#Trilha .Net - Programacao funcional usando f#
Trilha .Net - Programacao funcional usando f#
 
Programação Funcional usando F#
Programação Funcional usando F#Programação Funcional usando F#
Programação Funcional usando F#
 
TDC2014 Teste móvel e seus requisitos, um foco na Usabilidade e Interação de ...
TDC2014 Teste móvel e seus requisitos, um foco na Usabilidade e Interação de ...TDC2014 Teste móvel e seus requisitos, um foco na Usabilidade e Interação de ...
TDC2014 Teste móvel e seus requisitos, um foco na Usabilidade e Interação de ...
 
TDC SP 2018 - Utilizando BDD para análise de negócio e desenvolvimento de pro...
TDC SP 2018 - Utilizando BDD para análise de negócio e desenvolvimento de pro...TDC SP 2018 - Utilizando BDD para análise de negócio e desenvolvimento de pro...
TDC SP 2018 - Utilizando BDD para análise de negócio e desenvolvimento de pro...
 
TDC Florianópolis 2019. Trilha Java - Arquitetura de Testes
TDC Florianópolis 2019. Trilha Java - Arquitetura de TestesTDC Florianópolis 2019. Trilha Java - Arquitetura de Testes
TDC Florianópolis 2019. Trilha Java - Arquitetura de Testes
 
Métricas de Aplicação - Implementando e utilizando a seu favor
Métricas de Aplicação - Implementando e utilizando a seu favorMétricas de Aplicação - Implementando e utilizando a seu favor
Métricas de Aplicação - Implementando e utilizando a seu favor
 
Dos requisitos à implantação em uma palestra
Dos requisitos à implantação em uma palestraDos requisitos à implantação em uma palestra
Dos requisitos à implantação em uma palestra
 
Refatorar é preciso. Palestra TDC 2014
Refatorar é preciso. Palestra TDC 2014Refatorar é preciso. Palestra TDC 2014
Refatorar é preciso. Palestra TDC 2014
 
[TDCPOA2019] Upstream Kanban: exercitando a eficácia criativa do seu fluxo de...
[TDCPOA2019] Upstream Kanban: exercitando a eficácia criativa do seu fluxo de...[TDCPOA2019] Upstream Kanban: exercitando a eficácia criativa do seu fluxo de...
[TDCPOA2019] Upstream Kanban: exercitando a eficácia criativa do seu fluxo de...
 
Monitorando serviços REST com o Application Insights
Monitorando serviços REST com o Application InsightsMonitorando serviços REST com o Application Insights
Monitorando serviços REST com o Application Insights
 
Obtendo métricas com TDD utilizando build automatizado e deploy no Azure
Obtendo métricas com TDD utilizando build automatizado e deploy no AzureObtendo métricas com TDD utilizando build automatizado e deploy no Azure
Obtendo métricas com TDD utilizando build automatizado e deploy no Azure
 
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
 
Introdução a Engenharia de Software - Prof.ª Cristiane Fidelix
Introdução a Engenharia de Software - Prof.ª Cristiane FidelixIntrodução a Engenharia de Software - Prof.ª Cristiane Fidelix
Introdução a Engenharia de Software - Prof.ª Cristiane Fidelix
 
Conceitos e fundamentos sobre testes de software e garantia da qualidade
Conceitos e fundamentos sobre testes de software e garantia da qualidadeConceitos e fundamentos sobre testes de software e garantia da qualidade
Conceitos e fundamentos sobre testes de software e garantia da qualidade
 
TDC 2014 Floripa - Melhorando sua Estratégia de Testes Automatizados
TDC 2014 Floripa - Melhorando sua Estratégia de Testes AutomatizadosTDC 2014 Floripa - Melhorando sua Estratégia de Testes Automatizados
TDC 2014 Floripa - Melhorando sua Estratégia de Testes Automatizados
 
TDC SP 2016 - Dos requisitos à implantação em uma palestra
TDC SP 2016 - Dos requisitos à implantação em uma palestraTDC SP 2016 - Dos requisitos à implantação em uma palestra
TDC SP 2016 - Dos requisitos à implantação em uma palestra
 
Testes para Android de ponta a ponta
Testes para Android de ponta a pontaTestes para Android de ponta a ponta
Testes para Android de ponta a ponta
 
Utilizando a API do Roslyn, o novo compilador do C#
Utilizando a API do Roslyn, o novo compilador do C#Utilizando a API do Roslyn, o novo compilador do C#
Utilizando a API do Roslyn, o novo compilador do C#
 
ALM focado em resultados
ALM focado em resultadosALM focado em resultados
ALM focado em resultados
 
Através do espelho
Através do espelhoAtravés do espelho
Através do espelho
 

Mais de Leandro Daniel

TDC 2012 - Fishbowl conversation sobre Arquitetura
TDC 2012 - Fishbowl conversation sobre ArquiteturaTDC 2012 - Fishbowl conversation sobre Arquitetura
TDC 2012 - Fishbowl conversation sobre ArquiteturaLeandro Daniel
 
FIT e IFSP - Arquitetura (evolucionária) e o papel do arquiteto
FIT e IFSP - Arquitetura (evolucionária) e o papel do arquitetoFIT e IFSP - Arquitetura (evolucionária) e o papel do arquiteto
FIT e IFSP - Arquitetura (evolucionária) e o papel do arquitetoLeandro Daniel
 
QConSP 2011 - Praticando a arquitetura evolucionária
QConSP 2011 - Praticando a arquitetura evolucionáriaQConSP 2011 - Praticando a arquitetura evolucionária
QConSP 2011 - Praticando a arquitetura evolucionáriaLeandro Daniel
 
TDC 2011 (Florianópolis) - Entendendo a Arquitetura Evolucionária
TDC 2011 (Florianópolis) - Entendendo a Arquitetura EvolucionáriaTDC 2011 (Florianópolis) - Entendendo a Arquitetura Evolucionária
TDC 2011 (Florianópolis) - Entendendo a Arquitetura EvolucionáriaLeandro Daniel
 
TDC 2011 - Arquitetura Evolucionária faz sentido?
TDC 2011 - Arquitetura Evolucionária faz sentido?TDC 2011 - Arquitetura Evolucionária faz sentido?
TDC 2011 - Arquitetura Evolucionária faz sentido?Leandro Daniel
 
DNAD 2011 - Examinando a Arquitetura Evolucionária
DNAD 2011 - Examinando a Arquitetura EvolucionáriaDNAD 2011 - Examinando a Arquitetura Evolucionária
DNAD 2011 - Examinando a Arquitetura EvolucionáriaLeandro Daniel
 
DNAD 2010 - Lightning Talk - O design emergente pelas métricas (por Leandro D...
DNAD 2010 - Lightning Talk - O design emergente pelas métricas (por Leandro D...DNAD 2010 - Lightning Talk - O design emergente pelas métricas (por Leandro D...
DNAD 2010 - Lightning Talk - O design emergente pelas métricas (por Leandro D...Leandro Daniel
 
Community Launch 2010 - Visual Studio 2010 (por Leandro Daniel)
Community Launch 2010 - Visual Studio 2010 (por Leandro Daniel)Community Launch 2010 - Visual Studio 2010 (por Leandro Daniel)
Community Launch 2010 - Visual Studio 2010 (por Leandro Daniel)Leandro Daniel
 
DNAD 2009 - Injeção de Dependência (por Leandro Daniel)
DNAD 2009 - Injeção de Dependência (por Leandro Daniel)DNAD 2009 - Injeção de Dependência (por Leandro Daniel)
DNAD 2009 - Injeção de Dependência (por Leandro Daniel)Leandro Daniel
 

Mais de Leandro Daniel (9)

TDC 2012 - Fishbowl conversation sobre Arquitetura
TDC 2012 - Fishbowl conversation sobre ArquiteturaTDC 2012 - Fishbowl conversation sobre Arquitetura
TDC 2012 - Fishbowl conversation sobre Arquitetura
 
FIT e IFSP - Arquitetura (evolucionária) e o papel do arquiteto
FIT e IFSP - Arquitetura (evolucionária) e o papel do arquitetoFIT e IFSP - Arquitetura (evolucionária) e o papel do arquiteto
FIT e IFSP - Arquitetura (evolucionária) e o papel do arquiteto
 
QConSP 2011 - Praticando a arquitetura evolucionária
QConSP 2011 - Praticando a arquitetura evolucionáriaQConSP 2011 - Praticando a arquitetura evolucionária
QConSP 2011 - Praticando a arquitetura evolucionária
 
TDC 2011 (Florianópolis) - Entendendo a Arquitetura Evolucionária
TDC 2011 (Florianópolis) - Entendendo a Arquitetura EvolucionáriaTDC 2011 (Florianópolis) - Entendendo a Arquitetura Evolucionária
TDC 2011 (Florianópolis) - Entendendo a Arquitetura Evolucionária
 
TDC 2011 - Arquitetura Evolucionária faz sentido?
TDC 2011 - Arquitetura Evolucionária faz sentido?TDC 2011 - Arquitetura Evolucionária faz sentido?
TDC 2011 - Arquitetura Evolucionária faz sentido?
 
DNAD 2011 - Examinando a Arquitetura Evolucionária
DNAD 2011 - Examinando a Arquitetura EvolucionáriaDNAD 2011 - Examinando a Arquitetura Evolucionária
DNAD 2011 - Examinando a Arquitetura Evolucionária
 
DNAD 2010 - Lightning Talk - O design emergente pelas métricas (por Leandro D...
DNAD 2010 - Lightning Talk - O design emergente pelas métricas (por Leandro D...DNAD 2010 - Lightning Talk - O design emergente pelas métricas (por Leandro D...
DNAD 2010 - Lightning Talk - O design emergente pelas métricas (por Leandro D...
 
Community Launch 2010 - Visual Studio 2010 (por Leandro Daniel)
Community Launch 2010 - Visual Studio 2010 (por Leandro Daniel)Community Launch 2010 - Visual Studio 2010 (por Leandro Daniel)
Community Launch 2010 - Visual Studio 2010 (por Leandro Daniel)
 
DNAD 2009 - Injeção de Dependência (por Leandro Daniel)
DNAD 2009 - Injeção de Dependência (por Leandro Daniel)DNAD 2009 - Injeção de Dependência (por Leandro Daniel)
DNAD 2009 - Injeção de Dependência (por Leandro Daniel)
 

TDC 2012 - Métricas de código na arquitetura

  • 1. Trilha – Arquitetura Leandro Daniel Systems Architect Globalcode – Open4education
  • 3. Sob a óptica da arquitetura de software: MÉTRICAS DE CÓDIGO Globalcode – Open4education
  • 4. O que veremos? O que são Conhecendo Usando métricas métricas de algumas de código código? métricas Métricas Queryable Indicadores de guiando o source code qualidade design Case: relação Algumas entre ferramentas métricas, design e testes Globalcode – Open4education
  • 5. Não seria muito útil usar um monóculo aqui, certo? Globalcode – Open4education
  • 6. O que esse código diz? Globalcode – Open4education
  • 7. O que (todo) esse código diz? Globalcode – Open4education
  • 8. Sim, a entropia em software existe ... Manter as coisas como estão, exige trabalho! Globalcode – Open4education
  • 10. As medições e as métricas ajudam a entender o processo técnico usado para desenvolver um produto. Globalcode – Open4education
  • 11. Termos comuns Medida (indicação quantitativa) Medição (ato de medir) Métrica (medida quantitativa) Indicador (combinação) Globalcode – Open4education
  • 12. Uma métrica precisa ser válida, confiável e barata. Globalcode – Open4education
  • 13. Potencial das métricas (1 de 2) Analisar Medidas qualidade e Qualificar a funcionais são produtividade do Utilizadas para performance necessárias processo de comparar a técnica dos para qualificar a desenvolvimento produtividade e manutenção produtos do performance de diferentes bem como do ponto de vista dos produtos técnicas e produto de do pela tecnologias software desenvolvedor perspectiva do construído usuário Globalcode – Open4education
  • 14. Potencial das métricas (2 de 2) No nível técnico, as medições são importantes Embasar Reduzir Formar uma para determinar solicitações de frustrações e linha básica parâmetros novas pressões de para como ferramentas e cronograma estimativas quantidade de treinamentos teste necessário e impacto de mudanças Globalcode – Open4education
  • 15. GlobalcodeThom Holwerda by – Open4education
  • 17. Métricas e indicadores Vamos começar do básico! :) Globalcode – Open4education
  • 18. Ca e Ce Globalcode – Open4education
  • 19. Cyclomatic Complexity Globalcode – Open4education
  • 20. Calculando CC (Complexidade Ciclomática) Em linguagens como C#, as seguintes expressões são desconsideradas para cálculo da CC: else | do | switch | try | using | throw | finally | return | object creation | method call | field access Globalcode – Open4education
  • 21. Grafo de acoplamento Globalcode – Open4education
  • 22. Grafo de acoplamento Globalcode – Open4education
  • 23. Grafo de acoplamento Globalcode – Open4education
  • 24. Grafo de acoplamento Globalcode – Open4education
  • 25. Acredite, todos falam em redução de acoplamento! Shotgun Surgery Feature CQS Envy Tell, D on't Ask Say It Law of Once Demeter and Only Once IoC DI Globalcode – Open4education
  • 26. Um código... Globalcode – Open4education
  • 27. Uma abstração! Assembly Classe Método Globalcode – Open4education
  • 30. Uma matriz diz muita coisa! Classes mutuamente dependentes? Alto acoplamento? Quebrando princípíos? Globalcode – Open4education
  • 31. Uma abstração da JDK (by CodeCity) Globalcode – Open4education
  • 32. Visual Studio com NDepend Globalcode – Open4education
  • 33. Queryable source code SELECT Dead code! [method name] FROM [my entire solution] WHERE MethodCa == 0 AND !MethodIsPublic AND !MethodIsProtected AND !MethodIsEntryPoint AND !MethodIsExplicitInterfaceImplementation AND !MethodIsClassConstructor AND !MethodIsFinalizer Globalcode – Open4education
  • 34. Relação entre testes, design e métricas (gist) https://gist.github.com/2149474 Globalcode – Open4education
  • 35. Classe antes do refactoring Globalcode – Open4education
  • 36. Depois do refactoring Globalcode – Open4education
  • 37. Resultado do refactoring (antes x depois) Depois Antes Globalcode – Open4education
  • 38. Questões levantadas Se CC = N, então N Qual a é o número mínimo relação entre de testes necessário. Testes x CC? Testar métodos com Existem outros pontos que CC=1 pode ser inútil. aumentam a complexidade ciclomática sem ela aparecer nas métricas. Um Math.Max, é um exemplo. Globalcode – Open4education
  • 39. Questões levantadas Qual a relação entre Cobertura de testes x CC? Batalha! Membros públicos Vs privados!! Em uma classe coesa, os métodos privados no fundo servem pra diminuir a CC e aumentar a legibilidade dos métodos públicos. Globalcode – Open4education
  • 40. Questões levantadas Qual a relação entre Métricas x Design? Globalcode – Open4education
  • 41. Referências Relação entre métricas, design e testes (Github) https://gist.github.com/2149474 Emergent design through metrics (by Neal Ford) http://goo.gl/tdyVO Série de posts sobre Code Metrics http://leandrodaniel.com/?tag=/Code+Metrics Globalcode – Open4education
  • 42. Ferramentas Lista de ferramentas para análise de código estático http://goo.gl/KjLq FluentCodeMetrics (by Elemar Jr) http://goo.gl/CvnAW NDepend http://ndepend.com JArchitect http://jarchitect.com Globalcode – Open4education

Notas do Editor

  1. Sendo o arquiteto de software (tanto no exercício de um cargo ou papel) o indivíduo responsável pela estrutura e design de um produto e também o canal de comunicação entre time de desenvolvimento e arquiteto corporativo (cargo ou papel), podemos aferir que:As medições e as métricas ajudam a entender o processo técnico usado para desenvolver um produto. O processo é medido num esforço para melhorá-lo, assim como o produto é medido num esforço para aumentar sua qualidade. Também são necessárias para analisar a qualidade e a produtividade do processo de desenvolvimento; bem como a manutenção do produto de software construído.
  2. Medida: Fornece uma indicação quantitativa da extensão, quantidade, dimensão, capacidade ou tamanho de algum atributo de um produto ou processo. Medida é uma função de mapeamento;Medição: Ato de determinação de uma medida;Métrica: Medida quantitativa do grau em que um sistema se encontra em relação a um determinado atributo;Indicadores: Métrica ou combinação de métricas que fornece uma compreensão de um processo/projeto/produto.
  3. Uma métrica deve ser válida, o que significa que ela deve quantificar o que queremos medir. Ela também precisa ser confiável, produzindo os mesmos resultados dadas as mesmas condições. Por fim, métricas precisam ser produzidas facilmente, ou seja, devem ser baratas.
  4. É importante deixar claro que as métricas de código não estão relacionadas apenas com o software em si, mas também com os processos de desenvolvimento e manutenção. Consegue-se, a partir das métricas, dados quantitativos que oferecem uma boa informação sobre o andamento da construção sendo possível estimar custos, avaliar tendências, melhorar o design, ou até mesmo ter noção sobre a qualidade do sistema produzido.
  5. A genial figura abaixo, criada por ThomHolwerda, apresenta a medida WTFs/minute (algo como“Que_Porra_é_Essa / minuto”) como um indicador da qualidade de um software.
  6. LOC: Lines of CodeLOCM: Lack of cohesion of methods (falta de coesão dos métodos)NOC: Number of ChildrenILCC: IL cyclomatic complexityABC: Association between methodsDIT: Depth of Inheritance Tree
  7. Abstração da JDK
  8. Chamamos de "código morto" qualquer linha ou trecho de código não acessível por nenhum caminho de execução de um programa. Por ser (quase sempre) desnecessário, deadcode eleva a complexidade de um software - em suma, faz o código feder.Note que deadcode pode ser:- um código (por exemplo, um método, um membro de classe ou uma classe) não utilizado(a) por nenhum outro(a);- um código redundante (implorando por refactoring);- um código inacessível (o famoso unreachablecode, às vezes de difícil detecção).Porém, nem sempre um código inacessível é um deadcode. Ele pode simplesmente ter sido "morto" por um IF mal codificado.
  9. .
  10. .
  11. Chamamos de "código morto" qualquer linha ou trecho de código não acessível por nenhum caminho de execução de um programa. Por ser (quase sempre) desnecessário, deadcode eleva a complexidade de um software - em suma, faz o código feder.Note que deadcode pode ser:- um código (por exemplo, um método, um membro de classe ou uma classe) não utilizado(a) por nenhum outro(a);- um código redundante (implorando por refactoring);- um código inacessível (o famoso unreachablecode, às vezes de difícil detecção).Porém, nem sempre um código inacessível é um deadcode. Ele pode simplesmente ter sido "morto" por um IF mal codificado.