Affinché una codebase sia facilmente manutenibile, il codice deve essere il più possibile di qualità. Un buon codice è leggibile, ben documentato, poco complesso, portabile, riusabile e testabile; a questi indicatori poi si può aggiungere la "greppability", ovvero la facilità con cui è possibile cercare nomi di variabili, funzioni o altri elementi nella codebase.
Il nome dell'indicatore deriva dal comando "grep", filtro usato per cercare occorrenze di stringhe o espressioni regolari nei file di sistema. Quando si ha a che fare con del codice su cui non si ha mai lavorato oppure che non si analizza da molto tempo, è fondamentale riuscire a trovare facilmente nomi di funzioni e classi, messaggi d'errore o variabili nel caso ci sia una modifica da fare, sia per la correzione di un bug che per un refactoring.
"Se non riesco a trovare ciò che cerco, nel caso migliore è frustrante, e nel caso peggiore si arriva a situazioni pericoloso dove ipotizzo che una cosa non serve più perché non trovo riferimenti nella codebase" spiega lo sviluppatore Moriz Büsing.
Nel suo blog Büsing condivide una serie di indicazioni per rendere il codice "greppable" e migliorarne la qualità complessiva; una di queste consiste nell'evitare di creare identificatori in maniera dinamica.
Anche se questa pratica rende il codice più pulito e asciutto, la manutenibilità cala perché gli sviluppatori che si occuperanno del progetto in futuro faranno fatica a cercare variabili e campi con il loro nome.
Büsing consiglia anche di scegliere una rappresentazione "flat" per oggetti con proprietà innestate, in modo trovare facilmente i riferimenti alle chiavi a cui si sta accedendo.
Se, per esempio, si ha una struttura del genere:
{ "auth": { "login": { "title": "Login", "emailLabel": "Email", "passwordLabel": "Password", }, "register": "title": "Register", "emailLabel": "Email", "passwordLabel": "Password", } } }
è preferibile renderla in maniera flat:
{ "auth.login.title": "Login", "auth.login.emailLabel": "Email", "auth.login.passwordLabel": "Password", "auth.register.title": "Login", "auth.register.emailLabel": "Email", "auth.register.passwordLabel": "Password", }
Infine, un altro consiglio che dà Büsing è di non rinominare i campi che si riferiscono a uno stesso oggetto, per esempio quando si convertono gli identificatori snake_case in camelCase. Ciò complica la ricerca di un nome e occorre cercare due stringhe al posto di una.
Una codebase di qualità non deve essere comprensibile solo per chi la scrive, ma soprattutto per chi dovrà leggerla e modificarla senza avere la minima conoscenza del codice; in tal senso, è necessario applicare buone pratiche per rendere la codebase navigabile, facilitando la manutenzione.