Herramientas de Análisis Estático de Código
Las herramientas de análisis estático de código analizan el código fuente sin ejecutarlo para encontrar automáticamente errores, vulnerabilidades de seguridad y code smells.
De un Vistazo
El análisis estático de código (SCA) examina el código sin ejecutarlo. Herramientas como ESLint (JS), Pylint (Python) y SonarQube (multi-lenguaje) detectan automáticamente bugs, problemas de seguridad y code smells. La integración en CI/CD funciona como quality gate.
Descripción Técnica Completa
Análisis Estático de Código es el examen automatizado del código fuente sin ejecución. Las herramientas verifican sintaxis, semántica, estándares de codificación, vulnerabilidades de seguridad y métricas de calidad. El análisis se realiza mediante coincidencia de patrones, análisis de flujo de datos e interpretación abstracta. Las herramientas SCA se integran típicamente en pipelines CI/CD y pueden funcionar como quality gate, impidiendo que código de mala calidad se fusione.
Por Qué Análisis Estático de Código
- Automatización: Encuentra errores más rápido que revisiones manuales
- Consistencia: Mantiene estándares de codificación uniformes en el equipo
- Seguridad: Detecta vulnerabilidades antes de producción
- Curva de Aprendizaje: Los desarrolladores nuevos aprenden a través del feedback de la herramienta
- Métricas: Calidad de código medible a lo largo del tiempo
Herramientas Principales
| Herramienta | Lenguaje | Tipo | Característica |
|---|---|---|---|
| ESLint | JavaScript/TS | Linter | Altamente configurable, sistema de plugins |
| Prettier | JavaScript/TS | Formatter | Opinado, formatea código |
| Pylint | Python | Linter | Conforme a PEP-8, exhaustivo |
| Black | Python | Formatter | Sin compromiso, PEP-8 |
| SonarQube | Multi | Plataforma | Dashboard de calidad de código |
| SpotBugs | Java | Linter | Encuentra bugs en Java |
| Checkstyle | Java | Linter | Estándares de codificación |
| RuboCop | Ruby | Linter | Ruby Style Guide |
ESLint (JavaScript/TypeScript)
Instalación
npm install --save-dev eslint
npx eslint --init
Configuración
// .eslintrc.js
module.exports = {
env: {
browser: true,
es2021: true,
node: true,
},
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/recommended',
'plugin:prettier/recommended',
],
parser: '@typescript-eslint/parser',
plugins: ['@typescript-eslint'],
rules: {
'no-unused-vars': 'error',
'no-console': 'warn',
'@typescript-eslint/no-explicit-any': 'warn',
},
};
Errores de Ejemplo
// Error ESLint: no-unused-vars
const unused = 42;
// Error ESLint: no-console
console.log('Debug output');
// Error ESLint: prefer-const
var x = 5;
Pylint (Python)
Instalación
pip install pylint
Configuración
# .pylintrc
[MASTER]
disable=C0111,C0103
[FORMAT]
max-line-length=100
[BASIC]
good-names=i,j,k,ex,Run,_
Ejecución
pylint mymodule.py
SonarQube (Multi-Lenguaje)
Instalación (Docker)
docker run -d --name sonarqube -p 9000:9000 sonarqube
Configuración
# SonarQube Scanner
sonar-scanner \
-Dsonar.projectKey=my-project \
-Dsonar.sources=src \
-Dsonar.host.url=http://localhost:9000
Quality Gate
- Coverage: > 80%
- Duplications: < 3%
- Security Rating: A
- Reliability Rating: A
Integración en CI/CD
GitHub Actions
name: Code Quality
on: [push, pull_request]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
- run: npm ci
- run: npm run lint
- run: npm run test:coverage
GitLab CI
code_quality:
image: sonarsource/sonar-scanner-cli
script:
- sonar-scanner
only:
- merge_requests
- main
Mejores Prácticas
- Integración Temprana: Implementa SCA desde el inicio del proceso de desarrollo
- Reglas Personalizadas: Adapta las reglas al proyecto en lugar de usar los estándares por defecto
- Auto-Fix: Aprovecha la corrección automática para problemas simples
- Quality Gates: Bloquea la construcción ante errores críticos
- Actualizaciones Regulares: Mantén las herramientas y reglas actualizadas
Puntos Clave para Exámenes
- El análisis estático de código examina el código sin ejecutarlo
- Herramientas principales: ESLint (JS), Pylint (Python), SonarQube (Multi-lenguaje)
- Linter vs Formatter: El linter verifica, el formatter formatea
- Integración CI/CD como quality gate
- Automatización de verificaciones de calidad de código
FAQ
1. ¿Qué es el análisis estático de código?
2. ¿Cuál es la diferencia entre linter y formatter?
3. ¿Qué es ESLint?
4. ¿Qué es Pylint?
5. ¿Qué es SonarQube?
6. ¿Cómo se integra SCA en CI/CD?
7. ¿Qué es un quality gate?
8. ¿Qué es Prettier?
9. ¿Qué es Black?
10. ¿SCA vs Tests?
11. ¿SCA vs Code Review?
12. ¿Cuándo usar SCA?
13. ¿Se pueden personalizar las reglas?
14. ¿Qué es SpotBugs?
15. ¿Cuál es el rendimiento de SCA?
Continúa en la Ruta de Aprendizaje de Calidad de Software
El siguiente artículo en la ruta de aprendizaje de calidad de software cubre Calidad de Software y Mantenibilidad, que explora cómo lograr código mantenible a través de buena arquitectura, documentación y tests.
Fuentes
Recomendaciones de Libros sobre Calidad de Software
Si deseas profundizar en análisis estático de código, herramientas y calidad de software, te recomendamos los siguientes libros:
Keine Bücher für Kategorie "software-engineering" gefunden.



