Semantic Coupling
Biblioteca per analitzar relacions semàntiques entre fitxers de codi font.
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 podria 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 (coblament aferent/eferent, inestabilitat, etc.) 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 cru
- El llenguatge de programació (actualment Java)
- El context de llenguatge natural (actualment anglès)
El calculador retorna una llista d’objectes SemanticCoupling que representen les relacions detectades amb puntuacions de similitud.
Darrere de tot, analitza el contingut textual del teu 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, tot i que no estiguin coblats estructuralment.
Casos d’ús
L’anàlisi de coblament semàntic és particularment útil per a:
- Descomposició de microserveis – Identificar quines classes pertanyen juntes conceptualment, tot i que no tinguin 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 legat – Descobrir relacions implícites en codis font desconeguts
Stack tecnològic
- Llenguatge: Kotlin pur (100% del codi font)
- Sistema de construcció: Maven amb configuració pom.xml
- Distribució: Repositori JitPack per a una gestió fàcil de dependències
- Llicència: Apache 2.0
L’API proporciona interfícies tant per a Kotlin com per a Java, fent-la fàcil d’integrar en cadenes d’eines existents independentment de quin llenguatge JVM facis servir.
Què vaig aprendre
Crear aquesta biblioteca em va ensenyar que l’anàlisi semàntica és un complement potent de l’anàlisi estructural, però no un substitut. Necessites les dues per obtenir una imatge completa de les relacions del codi.
També vaig aprendre que el llenguatge importa – el mateix codi escrit en diferents llengües naturals (noms de variables en anglès vs comentaris en alemany) produeix puntuacions de coblament semàntic diferents. Això és obvi mirant enrere, però no era una cosa en la qual hagués pensat inicialment.
La biblioteca està oberta a contribucions per a llenguatges de programació i suport de llenguatge natural addicionals. Actualment només funciona amb Java i anglès, però l’arquitectura està dissenyada per ser extensible per a altres combinacions.