Seminário

Análise estática e
métricas de código-fonte

 
12 de Novembro de 2024

Joenio Marques da Costa

http://joenio.me/sobre


  • Engenheiro de Software para Pesquisa
  • Trabalha na Plataforma Cortext.net
  • Embaixador Software Heritage
  • Embaixador Data Univ Eiffel
  • Desenvolvedor Debian
  • Artista Computacional

Análise estática

É um ramo que possui muitas das suas abordagens em comum com os estudos da área de análise de programas (program analysis), especialmente na área de compiladores, onde atua especialmente nas primeiras etapas do processo de compilação.

Análise de programas

A analise de programas trata, de modo geral, da descoberta de problemas e fatos sobre programas, ela pode ser realizada sem a necessidade de executar o programa (análise estática) ou com informações provenientes de sua execução (análise dinâmica).

Análise dinâmica com Devel::NYTProf

Powerful fast feature-rich Perl source code profiler.
metacpan.org/pod/Devel::NYTProf

Análise estática de código-fonte

Análise estática de código-fonte tem como objetivo prover informações acerca de um programa a partir do seu código-fonte sem necessidade de execução, e sem requerer qualquer outro artefato do programa além do próprio código.

Exemplos de uso de análise estática de código-fonte:

  • Verificação de tipos
  • Verificação de estilo
  • Localização de bugs
  • Cálculo de Métricas

Métricas de software

Uma função cujas entradas são dados de software e cuja saı́da é um valor numérico, que pode ser interpretado como o grau em que um software possui um determinado atributo que afeta sua qualidade.

COMMITTEE, S. . S. E. S. et al. Ieee std 1061-1998 — IEEE standard for a software quality metrics methodology. IEEE Computer Society, Tech. Rep, 1998.

Métricas de código-fonte

Métricas de código-fonte cobrem aspectos de tamanho, complexidade e qualidade, e podem indicar aspectos relevantes à manutenibilidade de um programa.

Categorias de métricas de código-fonte

Categoria Métrica
Code Quality Lines of Code
Code Design Empty Interfaces
Code Performance Prefer Literals over Evaluation
Object Oriented Lack of Cohesion in Methods

Bhutani, V., Toosi, F.G. & Buckley, J. Analysing the Analysers: An Investigation of Source Code Analysis Tools. Applied Computer Systems, 2024, Riga Technical University, vol. 29 no. 1, pp. 98-111. https://doi.org/10.2478/acss-2024-0013

CBO
acoplamento entre objetos

mede o número classes acessadas pela classe analisada

indica acesso à atributos ou métodos

LCOM4
ausência da coesão em métodos

mede os métodos e atributos acessados dentro de uma mesma classe

calculado através dos componentes fracamente conectados de um grafo não-orientado

Complexidade estrutural

Uma medida da complexidade de software calculada em termos do acoplamento (CBO) e coesão (LCOM4).

Mede a complexidade estrutural de uma classe.

Complexidade

Quanto maior a complexidade de um sistema de software, maior é o esforço para compreendê-lo, modificá-lo e evoluí-lo.

Darcy, D. P. et al. The structural complexity of software: An experimental test. IEEE Transactions on Software Engineering, v. 31, n. 11, p. 982–995, Nov. 2005. ISSN 0098- 5589.

A ideia de que programas de computador podem ser utilizados para analisar código-fonte de outros programas tem uma história de mais de 50 anos…

Histórico da área de estudo sobre métricas de software

  • 1976, First book on software metrics (Gilb, 1976)
  • 1971, First publication using KLOC to measure complexity (Akiyama, 1971)

Software metrics: successes, failures and new directions
1999, doi.org/10.1016/S0164-1212(99)00035-7

Ainda vale a pena?

Sim.

Mas:

Context is King

Revisiting the debate: Are code metrics useful for measuring maintenance effort?
2022, doi.org/10.1007/s10664-022-10193-8

Ferramentas

Ferramentas de análise estática de código-fonte estão organizadas em partes ou componentes, responsáveis por implementar três funções básicas:

  • 1) Extração de dados
  • 2) Geração de representação intermediária
  • 3) Análise

Anatomia da análise estática de código-fonte

Ferrramentas para cálculo de número de linhas de código

Nome URL
sloccount dwheeler.com/sloccount
cloc github.com/AlDanial/cloc
linguist github.com/github-linguist/linguist
scc github.com/boyter/scc
tokei github.com/XAMPPRocky/tokei

Uma ferramenta livre e extensível para análise estática de código-fonte.

www.analizo.org

Métricas calculadas pelo Analizo

Analizo module metrics:

  • Afferent Connections per Class (ACC)
  • Average Cyclomatic Complexity per Method (ACCM)
  • Average Method Lines of Code (AMLOC)
  • Coupling Between Objects (CBO) analizo doc
  • Lack of Cohesion of Methods (LCOM4)
  • Structural Complexity (SC)
  • etc…

Analizo global metrics:

  • Change Cost analizo doc
  • Total Abstract Classes
  • Total Coupling Factor
  • Total Lines of Code
  • Methods per Abstract Class
  • etc…

Analizo graph

Analizo static analysis Extractor:

Doxyparse

Doxyparse modifies the default output of Doxygen and dumps the dependencies among code elements in a YAML format.

github.com/doxygen/doxygen

Instalação do Analizo

 

apt install analizo

 

Ou:
https://github.com/analizo/analizo/blob/dev/INSTALL.md

Demonstração

  • analizo metrics <input>
  • analizo graph <input>

Analizo para código-fonte Python?

  • Analizo dev branch não lançado ainda, adicionou um extrator (análise estática) para Python usando Pyan-Analizo, um fork do Pyan.
  • Uma nova versão do analizo incluindo suporte a Python será lançada assim que o fork Pyan-Analizo for incorporado no upstream Pyan.
  • Trabalho de merge sendo feito na issue #189

🗣

Bate-papo

Métricas Open Source e Comunidade

Black Duck - Open Hub

openhub.net

open source community health on a global scale

chaoss.community

  • Metric: Code Changes Lines
  • Metric: Clones
  • Metric: Time to Close

Bitergia Analytics

chaoss.biterg.io

oss-compass.org

Working Group

Scientific Open Source Software

(SciOSS)

YouTube playlist videos

Research Software

Software para Pesquisa
(Research Software)

É qualquer software criado para apoiar pesquisas, usado para coletar, processar ou analisar dados.

Podem ser protótipos escritos pelos cientistas, ou produtos completos desenvolvidos profissionalmente.

M. Gruenpeter, “Defining Research Software: a controversial discussion”.
Zenodo, sept. 13, 2021. doi: 10.5281/zenodo.5504016.

Metadados e Métricas FAIR

Findable, Accessible, Interoperable and Reusable (FAIR).

Analizo software paper citations

Incentivos de reputação e práticas de Software para Pesquisa

HOWISON, J.; HERBSLEB, J. D. “Scientific software production: incentives and collaboration”.
In: Proceedings of the ACM 2011 conference., 2011. doi: 10.1145/1958824.1958904

Making Software FAIR

sofair.org

Automated Software Metadata Publication

software-metadata.pub

FAIRsFAIR Research Data Object Assessment Service

www.f-uji.net

Obrigado!

joenio@joenio.me


Esta apresentação está disponível em:

http://joenio.me/seminario-analise-estatica-e-metricas-de-codigo

(código-fonte: http://github.com/joenio/joenio.me)

Licença Creative Commons

Histórico de apresentações

Onde e quando esta apresentação foi realizada

  • 12 de Nov 2024, Online, USP seminários engenharia de software