Lo Zombie Code (codice zombie) è codice che dovrebbe essere morto (non più necessario) ma continua a essere eseguito, causando problemi o comportamenti inaspettati. A differenza del Dead Code, lo Zombie Code è ancora attivo.
È quello che succede quando codice vecchio o deprecato continua a funzionare e interferisce con il nuovo codice, creando bug o comportamenti strani.
Conoscere il termine "Zombie Code" ti aiuta a:
- Riconoscere codice deprecato che continua a essere eseguito
- Comunicare meglio con il team: "Abbiamo zombie code che interferisce"
- Identificare codice legacy che dovrebbe essere rimosso
- Prevenire problemi rimuovendo codice obsoleto
Lo Zombie Code si verifica quando:
- Codice deprecato: Codice marcato come deprecato ma ancora attivo
- Legacy code: Codice vecchio che non dovrebbe essere usato
- Backward compatibility: Codice mantenuto per compatibilità ma problematico
- Feature flag: Codice vecchio ancora attivo tramite flag
- Codice nascosto: Codice che non si sa sia ancora attivo
// Zombie code: funzione deprecata ma ancora chiamata
/**
* @deprecated Use calculateNewTotal() instead
*/
public function calculateTotal($items) {
// Logica vecchia ancora eseguita
return array_sum(array_column($items, 'price'));
}
// Nuova funzione
public function calculateNewTotal($items) {
// Logica nuova
}
// Ma la vecchia è ancora chiamata da qualche parte
calculateTotal($items); // Zombie code!Problema: Codice deprecato ancora in uso.
// Zombie code: feature flag vecchio ancora attivo
if (config('features.old_payment_method')) {
// Codice vecchio che non dovrebbe essere usato
$this->processOldPayment($order);
} else {
// Codice nuovo
$this->processNewPayment($order);
}
// Il flag è ancora true da qualche parte!Problema: Feature flag vecchio ancora attivo.
// Zombie code: codice legacy che interferisce
class OrderProcessor {
public function process($order) {
// Nuovo codice
$this->processNewWay($order);
}
// Zombie code: metodo privato ancora chiamato da qualche parte
private function processOldWay($order) {
// Logica vecchia che interferisce
}
}Problema: Codice vecchio ancora attivo.
Se il codice è deprecato, rimuovilo dopo un periodo di transizione:
// Rimuovi dopo aver migrato tutti i chiamanti
// public function calculateTotal($items) { } // RimossoDisabilita feature flag vecchi:
// Rimuovi il flag o impostalo a false
// 'old_payment_method' => false,Usa strumenti per trovare tutti i chiamanti:
# Cerca tutti i riferimenti
grep -r "calculateTotal" app/Migra gradualmente dal vecchio al nuovo:
// Fase 1: Depreca
@deprecated
// Fase 2: Logga uso
Log::warning('Deprecated function called');
// Fase 3: Rimuovi- Deprecazione chiara: Marca codice deprecato chiaramente
- Periodo di transizione: Dà tempo per migrare
- Monitoring: Monitora uso di codice deprecato
- Documentazione: Documenta quando rimuovere
- Code review: Identifica zombie code durante le review
Il termine Zombie Code deriva dall'analogia con gli zombie: così come gli zombie sono morti ma ancora attivi, zombie code è codice che dovrebbe essere morto ma continua a essere eseguito.
- Dead Code - Codice che non viene mai eseguito (opposto)
- Legacy Code - Codice vecchio da mantenere
- Technical Debt - Debito tecnico accumulato
- PHP Deprecation - Gestione deprecazioni
- Laravel Deprecations - Gestione deprecazioni Laravel