I numeri mentono?

Aperto da emanuele, Giovedì - 16 Aprile 2015 - 20:33

0 Utenti e 1 Visitatore stanno visualizzando questa discussione.

emanuele

Tendenzialmente no.
A volte sì.
Certo è che di solito a mentire è chi li usa in maniera inappropriata per dimostrare qualcosa.
Personalmente cerco sempre di guardare i numeri per quel che sono, e se c'è qualcosa che non mi convince cerco di verificarlo per i fatti miei (ed ovviamente se qualcuno dovesse non essere d'accordo con assunzioni e/o calcoli, sono aperto alla discussione, è un'analisi che mi sono un po' inventato su due piedi, quindi potrebbe anche essere sbagliata).
Tengo a sottolineare che questo post non ha l'obiettivo di dimostrare qualcosa, è solo il frutto di mera curiosità suscitata da un'affermazione.

Detto questo, fuoco alle armi!

Oggi gironzolavo per sm.org e sono incappato in un post di Kindred:
Citazione di: http://www.simplemachines.org/community/index.php?topic=530687.msg3805597#msg3805597As noted: The code of the TEMPLATES changed a fair amount - in order to bring the design into modern/mobile/responsive standards.
the SOURCE (which was much separated from templates in the 2.0 release) changed - but not as much
Si parla di SMF 2.1, di come il suo codice sia cambiato e di quanto sarà necessario affinché i mod vengano aggiornati.
Traduzione veloce del testo:
CitazioneIl codice dei template (temi) è cambiato parecchio per poter modernizzare il design.
Il codice "source" (n.d.e quello che sta nella directory Sources) è cambiato, ma non così tanto.

Beh, la domanda che mi è sorta spontanea è: ma quanto sarà questo "non così tanto"?
Vediamo.

Prima cosa da fare è "misurare" quante linee di codice consta la directory Sources, siccome al momento sono in ambiente Linux ed ho dei tool a disposizione, il comando:
find . -name '*.php' | xargs wc -l
trova tutti i file con estensione "php", ricorsivamente in una directory e ne conta le linee, ed alla fine stampa la somma.
SMF 2.0: 105'535
SMF 2.1: 125'638
20'000 righe di codice in più in 2.1 rispetto a 2.0... azz.
Ma proseguiamo.

Piccolo inciso: qualcuno potrebbe obiettare che le linee comprendono anche i commenti, nulla di più vero, ma come possiamo apprendere dai factoids di OpenHUB:
Citazione di: https://www.openhub.net/p/smf/factoids#FactoidCommentsLowAcross all PHP projects on Open Hub, 31% of all source code lines are comments. For Simple Machines Forum, this figure is only 19%.
i commenti sono il 19% del codice sorgente, quindi possiamo pesarli via prima o poi.

Quindi, torniamo a noi, come scoprire quante righe son cambiate?
Questo è un po' difficile in verità, ma non completamente impossibile.
Il modo più rapido è usare il comando "diff" che genera un file con l'indicazione di cosa è stato aggiuntto e cosa è stato rimosso da due file, e si può fare per l'intera directory.

Piccola nota prima dei numeri: per come imposterò i calcoli, il comando diff è comunque una sottostima del numero di linee cambiate, perché, per esempio, se un certo blocco di codice viene spostato in un nuovo file, il nuovo file conterà per una linea. Ma non è un problema, il codice spostato in nuovi file non è moltissimo, quindi suppongo si possa ignorare.
Bene:
diff -r /path/to/smf/2.1/Sources/ /path/to/smf/2.0/Sources/ > test_diff
eseguito questo comando ho aperto il file test_diff ed ho scoperto che consta di 67'522 righe.

Come detto il file diff contiene sia le righe aggiunte, sia quelle rimosse, quindi non sarebbe corretto confrontarlo o solo con le righe di codice di SMF 2.0 o solo quelle di 2.1, così faremo la somma:
righe di codice totale: 105'535 + 125'638 = 231'173
Percentuale righe modificate = righe aggiunte-rimosse / righe totali = 67'522 / 231'173 * 100 = 29,2 %

Poco meno del 30% del codice differisce nelle due versioni.

Facendo gli stessi conti che i file del tema di default il risultato è ~37'000 righe di codice sia per SMF 2.0, sia per 2.1, e un file diff di ~34'000 righe, quindi parliamo di circa il 50% di cambiamento (qualcosa di meno: 34 / (37+37)).

Ora, i commenti.
Per eliminarne l'effetto abbiamo un paio di strade estreme, le intermedie richiederebbero la stima di un ulteriore parametro, allora tanto varrebbe scrivere del codice per verificare effettivamente quante righe tra quelle cambiate sono commenti oppure no.

Per non complicarci la vita, possiamo assumere che la percentuale di commenti sia la stessa in SMF 2.0 e SMF 2.1. Ed è un'assunzione abbastanza realistica.

Prima possibilità: ricordiamo che parlando di mod, anche i commenti hanno il loro peso, perché se un mod che modifica il codice si "aggancia" ad un commento, se tale commento cambia il mod non funzionerà più, quindi da questo punto di vista anche i commenti sono codice e quindi non andrebbe fatto niente.

Seconda possibilità: possiamo valutare il "caso migliore" (dal punto di vista dei modder poiché implica meno problemi per loro), cioè quello in cui il codice cambiato sono prevalentemente commenti.
Commenti in :
SMF 2.0: 105'535 * 19 / 100 = 20'051
SMF 2.1: 125'638 * 19 / 100 = 23'871
Codice in:
SMF 2.0: 105'535 - 20'051 = 85'484
SMF 2.1: 125'638 - 23'871 = 101'767

Commenti totali: 20'051 + 23'871 = 43'922
Come detto assumiamo che il codice cambiato di prevalenza sono commenti, quindi:
67'522 - 43'922 = 23'600
sono (in base alle assunzioni di cui sopra) il numero minimo di righe di codice aggiunte e rimosse (quindi cambiate) tra SMF 2.0 ed SMF 2.1.

Da cui possiamo calcolare che la percentuale di differenza tra SMF 2.0 e 2.1 è:
23'600 / (85'484 + 101'767) = 12.6%

Quel che possiamo quindi concludere è che nella directory Sources di SMF, tra SMF 2.0 e SMF 2.1 c'è stato un cambiamento di codice che varia tra il 12.6% (assumendo che durante lo sviluppo ci si sia concentrati a cambiare i commenti al codice) ed il 30% (assumendo che i commenti valgono quanto il codice).

Non vale la pensa fare le stesse estrapolazioni sui commenti per quanto riguarda i temi, perché questi hanno una percentuale di commenti probabilmente inferiore al 2%, quindi sostanzialmente irrilevante.

Ad ogni modo, l'affermazione di Kindred pare non essere scorretta.

* emanuele ritorna a cercare di far funzionare il suo codice. O:-)

Flavio93Zena

Citazione di: emanuele il Giovedì - 16 Aprile 2015 - 20:33
Ad ogni modo, l'affermazione di Kindred pare non essere scorretta.
Meno male, una volta tanto passagliela dai ;D

Citazione di: emanuele il Giovedì - 16 Aprile 2015 - 20:33
* emanuele ritorna a cercare di far funzionare il suo codice. O:-)
Ecco bravo, perchè questo post è un delirio assurdo xD Fossi stato cattivo avrei potuto dirti "TL;DR: Summarize plz" :P

Scherzi a parte è una spiegazione con le palle davvero, direi apposta per gli appassionati di statistiche.

Filippo

Emanuele, la sera, mangia leggero che poi ti vengono sti topic così  >:D

emanuele

A dire il vero questo m'è venuto prima di cena, ma l'ho postato dopo perché ho "sforato i tempi". LOL

Il TL;DR può essere l'ultima riga, come può non esserci, alla fine è un post che mi è venuto "così". O:-)

emanuele

Rileggendo velocemente, mi son reso conto che manca un anello (probabilmente l'ho dato per scontato e non l'ho spiegato): come ho fatto notare, tra SMF 2.0 ed SMF 2.1 ci sono 20k righe di differenza (in più per 2.1), queste potrebbero (e dovrebbero) essere tirate via dal computo delle differenze, perché la maggior parte saranno state aggiunte in nuove funzioni, quindi non andranno ad interferire con mod. Ma è lecito assumere che queste nuove righe siano state aggiunte in nuovi file. Come detto, però, il comando diff conta i nuovi file come una singola riga, perciò, questa differenza diventa irrilevante ai fini del calcolo, perché di fatto già sottratta.

Discussioni simili (1)