Aikido

Come rimuovere i commenti TODO e FIXME rimasti nel codebase

Manutenibilità

Regola
Rimuovi i commenti TODO/FIXME rimasti
I commenti TODO e FIXME irrisolti indicano
un lavoro incompleto che può accumularsi nel tempo.
Traccia i problemi nel tuo sistema di tracciamento invece di lasciarli nel codice. 

Linguaggi supportati: 45+

Introduzione

I commenti TODO e FIXME nascono come promemoria utili, ma diventano rapidamente elementi fissi nel codebase. Quella che doveva essere una nota temporanea si trasforma in un segnale di avvertimento che tutti finiscono per ignorare. Questi commenti indicano lavoro non completato, decisioni rimandate o problemi noti che nessuno ha tracciato correttamente. Quando rilasci del codice con commenti TODO, stai ammettendo che qualcosa non va, senza avere alcun piano per risolverlo.

Perché è importante

Manutenibilità del codice: I commenti TODO introducono ambiguità riguardo alla prontezza e alla completezza del codice. I nuovi membri del team non sanno se questi commenti rappresentino problemi urgenti o note di anni fa di cui a nessuno importa più. Più i TODO si accumulano, meno vengono presi sul serio, creando un effetto finestre rotte che erode gli standard di qualità.

Tracciamento del debito tecnico: I problemi nascosti nei commenti non vengono prioritizzati, assegnati o tracciati. Il tuo sistema di gestione dei progetti mostra che tutto è completo, mentre il codice contiene dozzine di note del tipo "da sistemare in seguito". Senza un tracciamento adeguato, i problemi importanti vengono dimenticati finché non causano problemi in produzione.

Implicazioni di sicurezza: I commenti TODO a volte segnalano implementazioni di sicurezza incomplete o vulnerabilità note. Un commento come "TODO: aggiungi controllo di autenticazione" nel codice di produzione significa che hai rilasciato una falla di sicurezza a pieno titolo. Questi marcatori rendono più facile per gli aggressori che analizzano il codice individuare i punti deboli.

‍

Esempi di codice

❌ Non conforme:

async function processPayment(userId, amount) {
    // TODO: Add fraud detection before processing
    // FIXME: This doesn't handle concurrent payments

    const user = await db.users.findById(userId);

    if (user.balance < amount) {
        throw new Error('Insufficient funds');
    }

    // TODO: Add transaction logging
    user.balance -= amount;
    await user.save();

    return { success: true };
}
 

Perché è sbagliato: Tre problemi critici (rilevamento frodi, concorrenza, logging) sono segnalati ma non risolti, il che indica che questa funzione è stata rilasciata incompleta. Questi commenti documentano problemi noti senza alcun tracciamento o tempistica per risolverli.

✅ Conforme:

async function processPayment(userId, amount) {
    await fraudDetection.check(userId, amount);

    return await db.transaction(async (trx) => {
        const user = await trx.users
            .findById(userId)
            .forUpdate();

        if (user.balance < amount) {
            throw new Error('Insufficient funds');
        }

        user.balance -= amount;
        await user.save();

        await trx.auditLog.create({
            userId,
            action: 'payment',
            amount,
            timestamp: new Date()
        });

        return { success: true };
    });
}

Perché questo è importante: Tutti i problemi precedentemente segnalati sono stati risolti. Il rilevamento delle frodi è implementato, le transazioni del database gestiscono la concorrenza e il logging di audit traccia tutti i pagamenti. Il codice è completo, senza commenti di scusa su ciò che manca.

Conclusione

Rimuovi i commenti TODO e FIXME prima di effettuare il merge del codice in produzione. Se il lavoro è incompleto, completalo o crea ticket tracciati nel tuo sistema di gestione dei progetti con priorità e assegnazione adeguate. I commenti nel codice sono invisibili alla pianificazione del progetto e fanno sembrare il tuo codebase perennemente incompiuto.

FAQ

Hai domande?

E se ho davvero bisogno di segnalare qualcosa per dopo?

Crea un ticket nel tuo sistema di tracciamento (Jira, GitHub Issues, Linear) con contesto, priorità e assegnatario. Se proprio devi, inserisci il numero del ticket in un commento: // Vedi issue #1234 per il refactoring pianificato. In questo modo il lavoro diventa visibile alla gestione del progetto e se ne garantisce la corretta prioritizzazione.

E se ho davvero bisogno di segnalare qualcosa per dopo?

Crea un ticket nel tuo sistema di tracciamento (Jira, GitHub Issues, Linear) con contesto, priorità e assegnatario. Se proprio devi, inserisci il numero del ticket in un commento: // Vedi issue #1234 per il refactoring pianificato. In questo modo il lavoro diventa visibile alla gestione del progetto e se ne garantisce la corretta prioritizzazione.

Ci sono usi accettabili dei commenti TODO?

Nelle pull request bozza o nei branch di feature non ancora uniti, i commenti TODO aiutano a tracciare il lavoro incompiuto durante lo sviluppo. Prima di effettuare il merge su main, completa il lavoro o converti i TODO in ticket tracciati. Non effettuare mai il merge di commenti TODO nei branch di produzione.

‍

Come gestire i TODO nel codice legacy?

Verificali a blocchi. Molti vecchi TODO sono obsoleti o già risolti. Per i problemi validi, crea dei ticket e rimuovi i commenti. Stabilisci una regola secondo cui il nuovo codice non può aggiungere TODO. Questo previene l'accumulo mentre ti occupi del debito tecnico esistente.

E per quanto riguarda i commenti HACK o OPTIMIZE?

Soffrono degli stessi problemi dei commenti TODO. HACK indica del codice di cui ci si vergogna ma che è stato rilasciato comunque. OPTIMIZE suggerisce una preoccupazione prematura per le performance. Correggi il codice o accettalo così com'è, senza commenti giustificativi. Documenta i requisiti effettivi di performance nei ticket, non nei commenti del codice.

‍

Metti in sicurezza ora

Metti in sicurezza il tuo codice, il cloud e il runtime in un unico sistema centralizzato.
Trova e risolvi le vulnerabilità rapidamente e automaticamente.

Nessuna carta di credito richiesta | Risultati della scansione in 32 secondi.