Sto lavorando in un'azienda che otterrebbe 11 punti su Joel Test - almeno sulla carta.
In pratica, tuttavia, nulla funziona esattamente come previsto e il progetto è stato su DEFCON 1 da sei mesi. Ora, la maggior parte dei miei colleghi è felice se possono tornare a casa alle 18:00 - domenica.
Una delle pratiche apparentemente buone che mi hanno colpito perché non funzionante è l'uso di strumenti di analisi statica. Il progetto tiene traccia di entrambi gli avvisi di gcc -Wall e di uno strumento proprietario e molto costoso "C / C ++" .
Gli avvisi Gcc fanno spesso riferimento a bug reali (se la maggior parte delle volte inoffensivi).
Gli strumenti proprietari, tuttavia, elencano cose come i cast impliciti e le dimensioni di una stringa letterale. I cast impliciti sono anche nella lista nera sul loro libro di stile.
La pratica standard è che le persone sono sotto pressione per far tacere ogni singolo avvertimento. Si noti che ciò esclude avvertenze che sono prevalentemente falsi positivi, questo non è il problema.
Il risultato è:
- Le persone aggiungono cast di tipi ad ogni valore e ad ogni argomento nascondendo vere e proprie discrepanze di tipo problematico nel processo.
- Le persone si presentano con un bug o usano una diversa funzionalità linguistica problematica (strlen invece di sizeof, strncpy invece di strcpy, ecc.)
- Gli avvisi sono messi a tacere.
- Le segnalazioni di bug iniziano a scorrere.
Il punto principale è che il codice originale stava funzionando e scritto da persone che stavano giocando in modo sicuro nelle loro abilità linguistiche mentre le correzioni non lo erano.
Ora, non penso proprio che questa compagnia possa essere salvata. Tuttavia, vorrei sapere se esiste un modo migliore, preferibilmente funzionante, di utilizzare gli strumenti "pro" o se dovrei semplicemente evitare di usarli del tutto nel caso in cui io sia quello che prende la decisione in futuro.
Una soluzione che non presuppone che tutti i programmatori siano geni che non possono sbagliare. Perché bene, se lo sono, allora non è necessario utilizzare gli strumenti in primo luogo.