review-software-architecture
정보
이 스킬은 소프트웨어 아키텍처를 결합도, 응집도, SOLID 원칙, API 설계, 확장성, 기술 부채 측면에서 검토합니다. 시스템 수준 설계를 평가하고, 아키텍처 결정 기록(ADR)을 검토하며, 개선 권고사항을 제공합니다. 제안된 아키텍처를 평가하거나, 기존 시스템의 확장성/보안성을 검토하거나, 대규모 확장을 준비할 때 활용하세요.
빠른 설치
Claude Code
추천npx skills add pjt222/agent-almanac -a claude-code/plugin add https://github.com/pjt222/agent-almanacgit clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/review-software-architectureClaude Code에서 이 명령을 복사하여 붙여넣어 스킬을 설치하세요
문서
name: review-software-architecture description: > Revisar la arquitectura de software en cuanto a acoplamiento, cohesión, principios SOLID, diseño de API, escalabilidad y deuda técnica. Cubre la evaluación a nivel de sistema, la revisión de registros de decisiones arquitectónicas y recomendaciones de mejora. Usar al evaluar una arquitectura propuesta antes de su implementación, valorar un sistema existente en cuanto a escalabilidad o seguridad, revisar ADRs, realizar una evaluación de deuda técnica, o evaluar la preparación para un escalado significativo. locale: es source_locale: en source_commit: 6f65f316 translator: claude-opus-4-6 translation_date: 2026-03-16 license: MIT allowed-tools: Read Grep Glob Bash WebFetch metadata: author: Philipp Thoss version: "1.0" domain: review complexity: advanced language: multi tags: architecture, solid, coupling, cohesion, api-design, scalability, tech-debt, adr
Revisar Arquitectura de Software
Evaluar la arquitectura de software a nivel de sistema en cuanto a atributos de calidad, adhesión a principios de diseño y mantenibilidad a largo plazo.
Cuándo Usar
- Evaluar una arquitectura propuesta antes de comenzar la implementación
- Valorar un sistema existente en cuanto a escalabilidad, mantenibilidad o seguridad
- Revisar Registros de Decisiones Arquitectónicas (ADR) de un proyecto
- Realizar una evaluación de deuda técnica
- Evaluar si un sistema está listo para un escalado significativo o una expansión de funcionalidades
- Diferenciar de la revisión de código a nivel de línea (que se enfoca en cambios a nivel de PR)
Entradas
- Obligatorio: Base de código del sistema o documentación arquitectónica (diagramas, ADRs, README)
- Obligatorio: Contexto sobre el propósito, la escala y las restricciones del sistema
- Opcional: Requisitos no funcionales (objetivos de latencia, rendimiento, disponibilidad)
- Opcional: Tamaño del equipo y composición de habilidades
- Opcional: Restricciones o preferencias tecnológicas
- Opcional: Puntos problemáticos conocidos o áreas de preocupación
Procedimiento
Paso 1: Comprender el Contexto del Sistema
Mapear los límites e interfaces del sistema:
## Contexto del Sistema
- **Nombre**: [Nombre del sistema]
- **Propósito**: [Descripción en una línea]
- **Usuarios**: [Quién lo usa y cómo]
- **Escala**: [Solicitudes/seg, volumen de datos, número de usuarios]
- **Antigüedad**: [Años en producción, versiones principales]
- **Equipo**: [Tamaño, composición]
## Dependencias Externas
| Dependencia | Tipo | Criticidad | Notas |
|------------|------|------------|-------|
| PostgreSQL | Base de datos | Crítica | Almacén de datos principal |
| Redis | Caché | Alta | Almacén de sesiones + caché |
| Stripe | API externa | Crítica | Procesamiento de pagos |
| S3 | Almacenamiento de objetos | Alta | Subida de archivos |
Esperado: Imagen clara de qué hace el sistema y de qué depende. En caso de fallo: Si falta documentación arquitectónica, derive el contexto de la estructura del código, configuraciones y archivos de despliegue.
Paso 2: Evaluar la Calidad Estructural
Evaluación del Acoplamiento
Examinar cómo dependen entre sí los módulos:
- Dirección de dependencias: ¿Fluyen las dependencias en una dirección (en capas) o son circulares?
- Límites de interfaz: ¿Los módulos están conectados a través de interfaces/contratos definidos o referencias directas a implementaciones?
- Estado compartido: ¿Se comparte estado mutable entre módulos?
- Acoplamiento de base de datos: ¿Múltiples servicios leen/escriben directamente en las mismas tablas?
- Acoplamiento temporal: ¿Las operaciones deben ocurrir en un orden específico sin orquestación explícita?
# Detectar dependencias circulares (JavaScript/TypeScript)
npx madge --circular src/
# Detectar patrones de importación (Python)
# Buscar importaciones profundas entre paquetes
grep -r "from app\." --include="*.py" | sort | uniq -c | sort -rn | head -20
Evaluación de la Cohesión
Evaluar si cada módulo tiene una responsabilidad única y clara:
- Nomenclatura del módulo: ¿El nombre describe con precisión lo que hace el módulo?
- Tamaño de archivos: ¿Son los archivos o clases excesivamente grandes (>500 líneas sugiere múltiples responsabilidades)?
- Frecuencia de cambios: ¿Requieren características no relacionadas cambios en el mismo módulo?
- Objetos dios: ¿Hay clases/módulos de los que todo depende?
| Nivel de Acoplamiento | Descripción | Ejemplo |
|---|---|---|
| Bajo (bueno) | Los módulos se comunican a través de interfaces | El Servicio A llama a la API del Servicio B |
| Medio | Los módulos comparten estructuras de datos | Biblioteca compartida de DTO/modelos |
| Alto (preocupación) | Los módulos referencian los internos del otro | Acceso directo a base de datos entre módulos |
| Patológico | Los módulos modifican el estado interno del otro | Estado mutable global |
Esperado: Acoplamiento y cohesión evaluados con ejemplos específicos de la base de código. En caso de fallo: Si la base de código es demasiado grande para revisión manual, muestree 3-5 módulos clave y los archivos con más cambios.
Paso 3: Evaluar los Principios SOLID
| Principio | Pregunta | Señales de Alerta |
|---|---|---|
| Single Responsibility (Responsabilidad Única) | ¿Tiene cada clase/módulo una razón para cambiar? | Clases con >5 métodos públicos sobre preocupaciones no relacionadas |
| Open/Closed (Abierto/Cerrado) | ¿Puede extenderse el comportamiento sin modificar el código existente? | Modificaciones frecuentes a clases principales para cada nueva característica |
| Liskov Substitution (Sustitución de Liskov) | ¿Pueden los subtipos reemplazar a sus tipos base sin romper el comportamiento? | Comprobaciones de tipo (instanceof) dispersas en el código consumidor |
| Interface Segregation (Segregación de Interfaces) | ¿Son las interfaces enfocadas y mínimas? | Interfaces "gordas" donde los consumidores implementan métodos no utilizados |
| Dependency Inversion (Inversión de Dependencias) | ¿Dependen los módulos de alto nivel de abstracciones, no de detalles? | Instanciación directa de clases de infraestructura en la lógica empresarial |
## Evaluación SOLID
| Principio | Estado | Evidencia | Impacto |
|-----------|--------|----------|---------|
| SRP | Preocupación | UserService maneja autenticación, perfil, notificaciones y facturación | Alto — cambios en facturación pueden romper la autenticación |
| OCP | Bien | Sistema de plugins para proveedores de pago | Bajo |
| LSP | Bien | No se encontraron antipatrones de comprobación de tipos | Bajo |
| ISP | Preocupación | IRepository tiene 15 métodos, la mayoría de implementadores usa 3-4 | Medio |
| DIP | Preocupación | Los controladores instancian directamente repositorios de base de datos | Medio |
Esperado: Cada principio evaluado con al menos un ejemplo específico. En caso de fallo: No todos los principios aplican igualmente a cada estilo arquitectónico. Anote cuándo un principio es menos relevante (p. ej., ISP importa menos en bases de código funcionales).
Paso 4: Revisar el Diseño de API
Para sistemas que exponen APIs (REST, GraphQL, gRPC):
- Consistencia: Convenciones de nomenclatura, formatos de error, patrones de paginación uniformes
- Versionado: Existe una estrategia y se aplica (URL, encabezado, negociación de contenido)
- Manejo de errores: Las respuestas de error son estructuradas, consistentes y no filtran datos internos
- Autenticación/Autorización: Correctamente aplicada en la capa de API
- Limitación de velocidad: Protección contra abuso
- Documentación: OpenAPI/Swagger, esquema GraphQL o definiciones protobuf mantenidas
- Idempotencia: Las operaciones de mutación (POST/PUT) gestionan los reintentos de forma segura
## Revisión del Diseño de API
| Aspecto | Estado | Notas |
|---------|--------|-------|
| Consistencia de nomenclatura | Bien | Nomenclatura de recursos RESTful en todo |
| Versionado | Preocupación | Sin estrategia de versionado — los cambios disruptivos afectan a todos los clientes |
| Formato de error | Bien | RFC 7807 Problem Details usado consistentemente |
| Autenticación | Bien | JWT con ámbitos basados en roles |
| Limitación de velocidad | Ausente | Sin limitación de velocidad en ningún endpoint |
| Documentación | Preocupación | Existe especificación OpenAPI pero con 6 meses de desactualización |
Esperado: Diseño de API revisado con respecto a estándares comunes con hallazgos específicos. En caso de fallo: Si no se expone ninguna API, omita este paso y enfóquese en las interfaces internas de los módulos.
Paso 5: Evaluar Escalabilidad y Fiabilidad
- Sin estado: ¿Puede la aplicación escalar horizontalmente (sin estado local)?
- Escalabilidad de base de datos: ¿Están las consultas indexadas? ¿Es el esquema adecuado para el volumen de datos?
- Estrategia de caché: ¿Se aplica el caché en las capas apropiadas (base de datos, aplicación, CDN)?
- Gestión de fallos: ¿Qué ocurre cuando una dependencia no está disponible (interruptor de circuito, reintento, alternativa)?
- Observabilidad: ¿Están implementados registros, métricas y trazas?
- Consistencia de datos: ¿Es aceptable la consistencia eventual o se requiere consistencia fuerte?
Esperado: Escalabilidad y fiabilidad evaluadas en relación con los requisitos no funcionales declarados. En caso de fallo: Si los requisitos no funcionales no están documentados, recomiende definirlos como primer paso.
Paso 6: Evaluar la Deuda Técnica
## Inventario de Deuda Técnica
| Elemento | Gravedad | Impacto | Esfuerzo Estimado | Recomendación |
|---------|---------|---------|-----------------|---------------|
| Sin migraciones de base de datos | Alta | Los cambios de esquema son manuales y propensos a errores | 1 sprint | Adoptar Alembic/Flyway |
| Suite de pruebas monolítica | Media | Las pruebas toman 45 min, los desarrolladores las omiten | 2 sprints | Dividir en unit/integration/e2e |
| Valores de configuración hardcodeados | Media | Valores específicos del entorno en código fuente | 1 sprint | Extraer a variables de entorno/servicio de configuración |
| Sin canalización CI/CD | Alta | Despliegue manual propenso a errores | 1 sprint | Configurar GitHub Actions |
Esperado: Deuda técnica catalogada con gravedad, impacto y estimaciones de esfuerzo. En caso de fallo: Si el inventario de deuda es abrumador, priorice los 5 elementos principales por ratio impacto/esfuerzo.
Paso 7: Revisar los Registros de Decisiones Arquitectónicas (ADRs)
Si existen ADRs, evaluar:
- Las decisiones tienen contexto claro (qué problema se estaba resolviendo)
- Las alternativas fueron consideradas y documentadas
- Los compromisos son explícitos
- Las decisiones siguen siendo actuales (no superadas sin documentación)
- Las nuevas decisiones significativas tienen ADRs
Si no existen ADRs, recomiende establecerlos para las decisiones clave.
Paso 8: Redactar la Revisión Arquitectónica
## Informe de Revisión Arquitectónica
### Resumen Ejecutivo
[2-3 oraciones: salud general, preocupaciones clave, acciones recomendadas]
### Fortalezas
1. [Fortaleza arquitectónica específica con evidencia]
2. ...
### Preocupaciones (por gravedad)
#### Críticas
1. **[Título]**: [Descripción, impacto, recomendación]
#### Mayores
1. **[Título]**: [Descripción, impacto, recomendación]
#### Menores
1. **[Título]**: [Descripción, recomendación]
### Resumen de Deuda Técnica
[Los 5 elementos de deuda principales con recomendaciones priorizadas]
### Próximos Pasos Recomendados
1. [Recomendación accionable con alcance claro]
2. ...
Esperado: El informe de revisión es accionable con recomendaciones priorizadas. En caso de fallo: Si la revisión está limitada en tiempo, indique claramente qué se cubrió y qué queda sin evaluar.
Validación
- Contexto del sistema documentado (propósito, escala, dependencias, equipo)
- Acoplamiento y cohesión evaluados con ejemplos de código específicos
- Principios SOLID evaluados donde aplica
- Diseño de API revisado (si aplica)
- Escalabilidad y fiabilidad evaluadas frente a los requisitos
- Deuda técnica catalogada y priorizada
- ADRs revisados o su ausencia anotada
- Las recomendaciones son específicas, priorizadas y accionables
Errores Comunes
- Revisar código en lugar de arquitectura: Esta habilidad trata del diseño a nivel de sistema, no de la calidad del código a nivel de línea. Use
code-reviewerpara retroalimentación a nivel de PR. - Prescribir una tecnología específica: Las revisiones arquitectónicas deben identificar problemas, no imponer herramientas específicas salvo que haya una razón técnica clara.
- Ignorar el contexto del equipo: La arquitectura "mejor" para un equipo de 3 personas difiere de la de un equipo de 30. Considere las restricciones organizacionales.
- Perfeccionismo: Todo sistema tiene deuda técnica. Enfóquese en la deuda que está causando dolor activamente o bloqueando trabajo futuro.
- Asumir escala: No recomiende sistemas distribuidos para una aplicación que sirve a 100 usuarios. Adecue la arquitectura a los requisitos reales.
Habilidades Relacionadas
security-audit-codebase— revisión de código y configuración centrada en seguridadconfigure-git-repository— estructura del repositorio y convencionesdesign-serialization-schema— diseño y evolución del esquema de datosreview-data-analysis— revisión de corrección analítica (perspectiva complementaria)
GitHub 저장소
연관 스킬
executing-plans
디자인executing-plans 스킬은 검토 체크포인트가 포함된 통제된 배치로 실행할 완전한 구현 계획이 있을 때 사용합니다. 이 스킬은 계획을 불러와 비판적으로 검토한 후, 소규모 배치(기본값 3개 작업)로 작업을 실행하면서 각 배치 사이에 진행 상황을 아키텍트 검토를 위해 보고합니다. 이를 통해 내재된 품질 관리 체크포인트를 갖춘 체계적인 구현이 보장됩니다.
requesting-code-review
디자인이 스킬은 코드 변경 사항을 요구 사항에 따라 분석하기 위해 코드 리뷰어 하위 에이전트를 호출합니다. 작업 완료 후, 주요 기능 구현 후, 또는 메인 브랜치에 병합하기 전에 사용해야 합니다. 이 리뷰는 현재 구현체와 원래 계획을 비교하여 문제를 조기에 발견하는 데 도움이 됩니다.
connect-mcp-server
디자인이 스킬은 개발자들이 HTTP, stdio 또는 SSE 전송 방식을 통해 MCP 서버를 Claude Code에 연결하는 포괄적인 가이드를 제공합니다. GitHub, Notion 및 사용자 정의 API와 같은 외부 서비스를 통합하기 위한 설치, 구성, 인증 및 보안을 다룹니다. MCP 통합 설정, 외부 도구 구성 또는 Claude의 모델 컨텍스트 프로토콜 작업 시 활용하세요.
web-cli-teleport
디자인이 스킬은 작업 분석을 기반으로 개발자가 Claude Code 웹 인터페이스와 CLI 인터페이스 중 선택할 수 있도록 돕고, 두 환경 간 원활한 세션 텔레포트를 가능하게 합니다. 웹, CLI 또는 모바일 환경 전환 시 세션 상태와 컨텍스트를 관리하여 워크플로를 최적화합니다. 다양한 단계에서 서로 다른 도구가 필요한 복잡한 프로젝트에 사용하세요.
