A proposito di produttività e SLOC
Il problema con SLOC
Il problema con la metrica SLOC è che misura un'approssimazione della quantità di codice scritto, senza tener conto di:
- la qualità del codice (ovvero se per ogni 100 SLOC dovessi aggiungere altri 90 SLOC a causa di bug, ma che non conosci al momento della consegna del tuo codice?)
- gli obiettivi raggiunti con il codice (ovvero lo SLOC 10K gestisce tutti i casi d'uso previsti o le storie degli utenti? o solo un piccolo sottoinsieme?)
- la manutenibilità del codice (ovvero dovrete aggiungere l'1% o il 50% in più di codice per adeguare il codice a prevedibili requisiti in evoluzione?).
In caso contrario, la produzione di un codice spaghetti non mantenibile soggetto a errori con molte parti incollate sarà considerata più produttiva del codice riutilizzabile attentamente progettato.
Quindi SLOC non è sicuramente il modo migliore per misurare la produttività.
Quale produttività stiamo considerando?
La produttività è misurata per un processo. Quindi SLOC potrebbe essere un indicatore perfettamente valido per il solo processo di codifica.
Se, ad esempio, fraintendete i requisiti scadenti, spendete cinque mesi per produrre il software, mostratelo all'utente, scoprite che è assolutamente sbagliato e impiegate altri 5 mesi per riscriverlo da zero, avreste la stessa produttività in SLOC / mese, che una squadra che scrive il codice alla prima volta, ad esempio perché ha utilizzato un processo agile che riduce i malintesi attraverso frequenti feed-back. Questa apparente uguale produttività nasconde enormi problemi.
Pertanto, la misurazione della produttività dello sviluppo software deve tenere conto dell'intero processo, compresa l'analisi dei requisiti, la progettazione di cosa codificare, la codifica, i test, il debug e la verifica del rispetto delle aspettative degli utenti. Poiché tutte queste attività sono molto diverse, la cosa migliore è misurare l'unica cosa che conta: software funzionante, ovvero cosa significa il software prodotto per l'utente .
Come misurare i prodotti software?
Esistono diversi approcci:
- L'approccio tipico nell'ingegneria del software classico è Function Points (FP). I punti funzione vengono misurati in base ai requisiti da soddisfare (ad es. Numero di moduli, numero di campi in ciascun modulo, ecc ...). La produttività viene quindi misurata in FP per unità di tempo e per persona. Alcune aziende hanno persino dati che indicano quanti punti funzione uno sviluppatore può produrre per unità di tempo in una determinata lingua per un determinato dominio. Il problema con FP è che richiede requisiti molto dettagliati e richiede tempo.
- Un approccio più moderno e pragmatico è lo story points (SP). Questi vengono utilizzati per valutare la complessità del codice da produrre e vengono abitualmente utilizzati per valutare la velocità dei team di sviluppo. Tuttavia, SP è una misura di stima per il lavoro svolto prima che tutti i dettagli siano noti. Non è una misura finale di ciò che è realmente accaduto. Pertanto, è necessario prestare attenzione quando lo si utilizza come misura di produttività perché potrebbe ritorcersi contro il processo di stima .
Informazioni sulla produttività della digitazione statica o dinamica
Devo confessare che sono personalmente un fan dei linguaggi tipicamente statici, perché nel mio io interiore so che è più affidabile (anni di programmazione mi hanno dimostrato che).
Quindi una cosa che prendo per certo è che il linguaggio tipizzato staticamente è in grado di prevenire molti più errori / bug in fase di compilazione (ad esempio errori di battitura, mancata corrispondenza nei tipi previsti, ecc ...) rispetto ai linguaggi non tipizzati staticamente. Ma in tutta l'obiettività, non oserei generalizzare abusivamente questo come una maggiore produttività.
Il tuo architetto ha ragione?
Forse sì forse no.
Ma i suoi argomenti non sembrano validi: l'aumento di produttività del linguaggio tipizzato staticamente deriva da un numero significativo di errori che vengono colti in anticipo dal compilatore.
Di conseguenza, non è possibile scoprire questo "maggiore" aumento di produttività osservando SLOC da solo senza esaminare la rilavorazione richiesta per i linguaggi tipizzati dinamicamente. Quindi il suo confronto non può essere giusto.
Nemmeno l'argomento di circostanze comparabili. Alcune lingue tipizzate dinamicamente consentono alcuni costrutti di livello superiore che richiedono meno codice rispetto a fare lo stesso in una delle classiche lingue tipizzate staticamente. Quindi potresti aver bisogno di meno tempo, scrivere meno codice, ma aggiungere lo stesso overhead di analisi, test e verifica. Quindi misurare la produttività da parte della SLOC diluirebbe i potenziali guadagni di produttività, creando così un pregiudizio contro il linguaggio tipizzato in modo dinamico.
Qualche studio a supporto di tale affermazione?
Esistono numerosi studi accademici recenti sull'argomento. Sebbene alcuni di essi vedano un vantaggio della digitazione statica, è generalmente limitato a uno scopo specifico (documentazione, riutilizzo di codice o API scarsamente documentati, ecc.). La formulazione prudente viene anche utilizzata perché i moderni IDE hanno ridotto significativamente i rischi legati alla tipizzazione dinamica: