Lavoro in un'azienda che segnerà 11 su Joel Test, almeno sulla carta.
In pratica, tuttavia, niente funziona abbastanza bene come previsto, e il progetto è stato su DEFCON 1 per sei mesi. Ora, la maggior parte dei miei colleghi è felice di poter tornare a casa alle 18:00 di domenica.
Una delle pratiche apparentemente buone che mi ha colpito come non funziona è l'uso di strumenti di analisi statica. Il progetto tiene traccia sia degli avvisi gcc -Wall che di uno strumento "C / C ++" proprietario e molto costoso.
Gli avvisi di Gcc fanno più spesso che puntare a bug reali (se la maggior parte del tempo inoffensivi).
Gli strumenti proprietari, tuttavia, elencano cose come i cast impliciti e la dimensione di una stringa letterale. Anche i cast impliciti sono nella lista nera sul loro stylebook.
La pratica standard è che le persone sono costrette a far tacere ogni singolo avvertimento. Nota che questo esclude gli avvisi che sono prevalentemente falsi positivi, non è questo il problema.
Il risultato è:
- Le persone aggiungono cast di tipo ad ogni rvalue e ad ogni argomento nascondendo le disallineamenti di tipo problematico reale nel processo.
- Le persone si presentano con un bug, o usano una caratteristica linguistica problematica diversa (strlen invece di sizeof, strncpy invece di strcpy, ecc.)
- Gli avvisi sono disattivati.
- I rapporti sui bug iniziano a rollare.
Il punto principale è che il codice originale era funzionante e scritto da persone che stavano giocando al sicuro con le loro abilità linguistiche mentre le correzioni non lo erano.
Ora, non penso davvero che questa compagnia possa essere salvata. Tuttavia, vorrei sapere se c'è un modo migliore, preferibilmente funzionante, per utilizzare gli strumenti "pro" o se dovrei semplicemente evitare di usarli del tutto nel caso in cui io sia colui che prende la decisione in il futuro.
Una soluzione che non presuppone che tutti i programmatori siano dei geni che non possono sbagliare. Perché bene, se lo sono, quindi non è necessario utilizzare gli strumenti in primo luogo.