Especialista em Análise de Fluxo de Execução, Caminhos de Controle e Geração de Call Graphs Estáticos e Dinâmicos utilizando Go Callvis, Pyan3, Code2Flow, Doxygen, CodeScene, NDepend, Sourcetrail, Understand, OpenTelemetry e Jaeger.
Scanned 9/8/2026
Install to Claude Code
npx -y skills add dandgabr/skills --skill execution-flow-callgraph --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Execution Flow Callgraph?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/dandgabr-execution-flow-callgraph)More formats (shields.io, HTML) on the badges page.
---
name: "execution-flow-callgraph"
description: "Especialista em Análise de Fluxo de Execução, Caminhos de Controle e Geração de Call Graphs Estáticos e Dinâmicos utilizando Go Callvis, Pyan3, Code2Flow, Doxygen, CodeScene, NDepend, Sourcetrail, Understand, OpenTelemetry e Jaeger."
---
# 🔁 Análise de Fluxo de Execução e Call Graphs (Mapa de Chamadas)
Esta skill orienta a inteligência artificial a atuar como **Especialista em Análise de Fluxo de Execução e Call Graphs**, reconstruindo a cadeia hierárquica de chamadas entre métodos, funções, serviços e bancos de dados, combinando análise estática de chamadas e rastreamento dinâmico em tempo de execução.
---
## 🧭 1. Análise Estática vs Análise Dinâmica de Fluxo
A reconstrução de caminhos de execução envolve duas abordagens sinérgicas:
1. **Call Graph Estático (Static Call Graph)**: Analisa o código-fonte, AST e tabelas de símbolos para identificar todas as invocações de funções possíveis, lidando com chamadas polimórficas via algoritmos de análise de pontos de chamada (Class Hierarchy Analysis - CHA, Rapid Type Analysis - RTA, Pointer Analysis).
2. **Call Graph Dinâmico (Dynamic Call Graph / Tracing)**: Inspeciona chamadas reais executadas em runtime através de instrumentação de bytecode, profilers de CPU ou spans do OpenTelemetry/Jaeger, capturando a ordem exata, contagem de execuções e tempo gasto em cada nó.
```mermaid
flowchart TD
subgraph Layer1["1. Controller / Camada de Entrada"]
CTRL["OrderController.checkout(req)"]
end
subgraph Layer2["2. Service / Camada de Negócio"]
SRV["OrderService.processOrder(order)"]
VAL["ValidationService.validate(order)"]
end
subgraph Layer3["3. Gateway / Clientes Externos"]
PAY_GW["PaymentClient.chargeCreditCard(token, amount)"]
NOTIF["NotificationClient.sendEmail(user)"]
end
subgraph Layer4["4. Repository / Persistência"]
REPO["OrderRepository.save(order)"]
DB[(PostgreSQL Database)]
end
CTRL -->|"1. Chama"| SRV
SRV -->|"1.1. Valida"| VAL
SRV -->|"1.2. Processa Pagamento"| PAY_GW
SRV -->|"1.3. Persiste Estado"| REPO
REPO -->|"SQL: INSERT INTO orders"| DB
SRV -->|"1.4. Notificação Assíncrona"| NOTIF
```
---
## 🛠️ 2. Ferramentas Especialistas de Geração de Call Graphs
### 1. Code2Flow
- **Conceito**: Utilitário multilíngue (Python, JavaScript, Ruby, PHP) que gera fluxogramas executáveis visuais a partir de código-fonte, mapeando de forma direta como as funções interagem entre si.
- **Uso CLI**:
```bash
# Gerar fluxograma de execução em SVG
code2flow src/main.py src/auth.py src/database.py -o execution_flow.svg
```
### 2. Go Callvis (Go / Golang)
- **Conceito**: Gerador de grafo de chamadas interativo para Go. Utiliza análise estática avançada de ponteiros (`pointer analysis`) para resolver interfaces e despachos dinâmicos, agrupando funções por pacote de origem.
- **Uso CLI**:
```bash
# Focar no ponto de entrada main e ignorar bibliotecas padrão do Go
go-callvis -nostd -focus github.com/empresa/projeto/cmd/server .
```
### 3. Pyan3 (Python)
- **Conceito**: Analisador estático para Python 3 que analisa definições de classes, métodos e chamadas através do módulo `ast`, gerando arquivos DOT detalhados.
- **Comando**:
```bash
pyan3 $(find ./app -name "*.py") --uses --defines --colored --grouped --nested-groups --dot > app_callgraph.dot
dot -Tpng app_callgraph.dot -o app_callgraph.png
```
### 4. Doxygen + Graphviz DOT (C, C++, Java, C#)
- **Conceito**: Gera diagramas de chamadas diretas (*Call Graph*) e chamadas inversas (*Caller Graph*) para qualquer função/método do sistema.
- **Visualização**: Cada nó de função exibe hiperlinks para o código-fonte correspondente e destaca se a função faz parte de uma API pública ou é interna.
### 5. SciTools Understand & Sourcetrail
- **SciTools Understand**: Plataforma líder para análise estática em escala de milhões de linhas de código. Gera diagramas de **Butterfly Graphs** (mostra simultaneamente quem chama e quem é chamado por uma função selecionada), árvores de dependência e métricas de complexidade ciclomática.
- **Sourcetrail**: Indexador de código interativo open-source que permite navegar graficamente em nós de código (`Type`, `Function`, `Variable`) com sincronização em tempo real na tela do código-fonte.
### 6. Rastreamento Dinâmico com OpenTelemetry + Jaeger
- **Conceito**: Permite visualizar o grafo de chamadas reais em runtime com métricas de tempo distribuídas entre microsserviços e componentes locais.
- **Exemplo de DAG de Spans**:
```text
[Trace: 8a7f9b2c3d] Total: 250ms
├── HTTP POST /api/checkout (OrderController) [250ms]
│ ├── OrderService.process [210ms]
│ │ ├── PaymentClient.charge (HTTP POST api.stripe.com) [140ms]
│ │ └── OrderRepository.save (SQL INSERT) [35ms]
│ └── EventPublisher.emit [10ms]
```
---
## 📊 3. Tipos de Resolução Polimórfica em Call Graphs
Ao mapear código orientado a objetos ou funcional, o especialista deve considerar a técnica de resolução de despacho dinâmico:
| Algoritmo | Precisão | Custo Computacional | Descrição |
| :--- | :--- | :--- | :--- |
| **CHA (Class Hierarchy Analysis)** | Média | Muito Baixo | Conecta a chamada a todas as subclasses que implementam o método. |
| **RTA (Rapid Type Analysis)** | Alta | Baixo | Filtra apenas classes concretas que são efetivamente instanciadas na aplicação. |
| **Pointer Analysis (Andersen/Steensgaard)** | Muito Alta | Alto | Rastreia o fluxo de ponteiros/referências para identificar o objeto exato apontado. |
| **Dynamic Execution (Tracing)** | Exata (100%) | Overhead em runtime | Registra apenas as chamadas reais disparadas durante a execução. |
---
## 🎯 4. Boas Práticas
- [ ] **Filtragem de Bibliotecas Padrão**: Sempre filtre bibliotecas utilitárias do runtime (`java.lang.*`, `fmt.Println`, `builtins`, `lodash`) para evitar que o Call Graph fique poluído e ilegível.
- [ ] **Identificação de Métodos Folha Críticos (Critical Leaf Methods)**: Localize métodos no final da cadeia de chamadas que realizam I/O bloqueante ou operações matemáticas pesadas para otimização de performance.
- [ ] **Detecção de Código Morto (Dead Code)**: Funções privadas ou internas com grau de entrada zero ($In\text{-}Degree = 0$) no grafo completo devem ser investigadas para refatoração e remoção.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!