Semantic Coupling
Biblioteca per analitzar relacions semàntiques entre fitxers de codi font.
2 min de lectura
Què és?
semantic-coupling és una biblioteca que vaig crear per analitzar relacions entre fitxers de codi font examinant la seva similitud semàntica. En lloc de confiar únicament en dependències estructurals (imports, herència), utilitza el processament de llenguatge natural per identificar com d’estretament relacionats estan els fitxers, basant-se en el seu contingut i conceptes.
Això revela connexions implícites que l’anàlisi estàtica tradicional pot no detectar – com dues classes que tracten conceptes relacionats però que no s’importen directament l’una a l’altra.
GitHub: https://github.com/loehnertz/semantic-coupling
Per què el vaig crear
Les mètriques de coblament tradicionals (estàtic, dinàmic) només capturen relacions estructurals explícites. Però els codis font també tenen relacions semàntiques – classes que probablement haurien d’estar al mateix mòdul perquè tracten conceptes relacionats, tot i que no depenen directament l’una de l’altra.
Vaig crear aquesta biblioteca per explorar si les tècniques de PLN podien identificar aquestes relacions ocultes. Resulta que sí que poden, i és bastant útil per a coses com la descomposició de microserveis o la validació de fronteres de mòduls.
Com funciona
La biblioteca utilitza el SemanticCouplingCalculator com a punt d’entrada principal. Has de proporcionar:
- Un mapa de noms de fitxers al seu contingut de codi font
- El llenguatge de programació (ara mateix només Java)
- El context de llengua natural (ara mateix només anglès)
El calculador retorna una llista d’objectes SemanticCoupling que representen les relacions detectades amb puntuacions de similitud.
Per darrere, analitza el contingut textual del codi (noms de variables, noms de mètodes, comentaris, cadenes de text) i calcula la similitud semàntica usant tècniques de PLN. Els fitxers que utilitzen terminologia i conceptes similars puntuen més alt, fins i tot si no estan coblats estructuralment.
flowchart LR
A[Source Files] --> B[Token Extraction]
B --> C[NLP Processing]
C --> D[Similarity Scoring]
D --> E[Coupling Results] Casos d’ús
L’anàlisi de coblament semàntic és especialment útil per a:
- Descomposició de microserveis: Identificar quines classes pertanyen juntes conceptualment, fins i tot sense dependències directes
- Revisió de codi: Detectar fitxers que s’haurien de revisar junts perquè tracten conceptes relacionats
- Validació d’arquitectura: Comprovar si les fronteres dels mòduls s’alineen amb els agrupaments semàntics
- Comprensió de codi antic: Descobrir relacions implícites en codis font desconeguts
Stack tecnològic
- Llenguatge: Kotlin
L’API proporciona interfícies tant per a Kotlin com per a Java, fent-la fàcil d’integrar en eines existents independentment de quin llenguatge JVM facis servir.