Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA
Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA
Rullo di lavaggio dei pavimenti abbinato a un potente motore da 28.000 Pa e a bracci esterni che si estendono: queste, e molte altre, le caratteristiche tecniche di Z60 Ultra Roller Complete, l'ultimo robot di Mova che pulisce secondo le nostre preferenze oppure lasciando far tutto alla ricca logica di intelligenza artificiale integrata
Renault Twingo E-Tech Electric: che prezzo!
Renault Twingo E-Tech Electric: che prezzo!
Renault annuncia la nuova vettura compatta del segmento A, che strizza l'occhio alla tradizione del modello abbinandovi una motorizzazione completamente elettrica e caratteristiche ideali per i tragitti urbani. Renault Twingo E-Tech Electric punta su abitabilità, per una lunghezza di meno di 3,8 metri, abbinata a un prezzo di lancio senza incentivi di 20.000€
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media
Nel Formula 1 Technology and Media Centre di Biggin Hill, la velocità delle monoposto si trasforma in dati, immagini e decisioni in tempo reale grazie all’infrastruttura Lenovo che gestisce centinaia di terabyte ogni weekend di gara e collega 820 milioni di spettatori nel mondo
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 03-04-2012, 11:22   #1
Kralizek
Senior Member
 
L'Avatar di Kralizek
 
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
[Vari] - Quanti test?

Salve a tutti.

Dopo un periodo di sviluppo matto e disperatissimo () ci troviamo con un'applicazione da circa 300k linee di codice senza neanche un test.
Ed ora c'é una differenza di vedute tra me ed il mio capo.

Io vorrei che lo sviluppo dei testa sia, nel tempo, quanto piú completo possibile ed eseguiti prima di ogni deploy (in stage e production).

Il mio capo dice che troppi test hanno solo l'effetto di portare lo sviluppatore a disabilitarli dopo un po'.

Capisco il suo punto di vista, ma per me avere solo una copertura parziale dei test é inutile se non dannoso per il senso di falsa sicurezza che si potrebbe avere.

Ho provato a cercare della letteratura in inglese in modo da poter analizzare insieme qualche caso di studio o almeno qualche articolo a riguardo ma non mi viene alcuna parola chiave adatta.

Ho provato con "granularity" e "coverage" ma non portano a nulla di buono.

Grazie
Kralizek è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2012, 12:02   #2
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Non ti saprei indicare qualcosa in letteratura, perché l'idea che mi sono sviluppato sui test deriva dalla pratica.

Da questo punto di vista posso soltanto dirti che i test per me sono importantissimi per dormire abbastanza tranquillo.

Per fare un esempio, una delle ultime applicazioni su cui sto lavorando da mesi ha circa mille linee di codice Python (togliendo tutte le librerie di cui fa uso; mi riferisco al solo codice di backend di un server che espone delle API da HTTP) per circa 32KB di file, a cui aggiungiamo circa 900 linee per db + stored procedure per circa 35KB di file.

Per contro, il codice di test ha più di 3200 linee di codice, su circa 128KB di di file, per un totale di più di 360 test (che eseguiti sulla mia macchina desktop impiegano circa 2 minuti e mezzo).

Il progetto sembra di piccole dimensioni, ma avendolo scritto in Python risulta estremamente compatto.

Il tuo è ovviamente un pachiderma imparagonabile, e a maggior ragione non potrei mai stare tranquillo senza test o con una batteria di scarsissime proporzioni.

Il tuo capo ha ragione quando dice che i test diventano inutili perché vengono disabilitati, ma il punto è che NON dovrebbero assolutamente esserlo.

Il tempo speso nei test è tutto tempo guadagnato perché riduce all'osso il tempo necessario ai test manuali, ma soprattutto rende molto più solida la piattaforma, in particolare per la sua manutenzione ed evoluzione (i cambiamenti futuri diventano molto più prevedibili).

Mi rendo conto che si tratta di un'esperienza personale e, quindi, che alla fine la mia rimanga soltanto un'opinione, ma in questo campo è difficile quantificare e, men che meno, formalizzare i risultati ottenibili grazie a tecniche di extreme programming / unit testing, se non a livello puramente empirico / statistico.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2012, 17:55   #3
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
300.000 righe di codice senza test sono secondo me un suicidio. In futuro, una volta messo in produzione il sistema, avrete sempre più paura di fare modifiche per il terrore di rompete qualcosa. Il progetto morira molto lentamente e fra una decina di anni sara semplicemente cestinato.

Quella del 100% di coverage è un po' un mito. Non è fondamentale e comunque non dimostra che il programma sia corretto. Cercare di arrivarci ora a cose fatte su un progetto così grande è forse anche impossibile. Penso che dovreste concetrarvi sulle parti più importanti del programma e testare almeno quelle.

Uno consiglio che ti posso dare è quello di non buttare tutto quanto in una sola Suite. Cerca di creare piccole suite di file che siano collegati tra di loro. Se fai una modifica ad una Classe che si occupa di fare il parsing di un file X è molto importante sapere subito (un paio di secpondi massimo) se hai spaccato qualcosa in quella parte di codice. Stessa cosa per le classi di test. Non c'è scritto da nessuna parte che si debba una relazione 1-a-1 tra le classi ed i test.

La mega suite con tutti i test del sistema che magari impiega 20 minuti a terminare è importante ma non si deve costringere il programmatore a lanciarla sempre prima di un commit. Perché come dice giustamente il tuo capo dopo un po' non lo farà più. Prendete in considerazione invece di mettere su un server per la continuos integration come jenkins da collegare al server svn/git che ad ogni commit lancia tutti i test e crea dei report sullo stato della build e quanti test sono passati/falliti.
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2012, 18:27   #4
Kralizek
Senior Member
 
L'Avatar di Kralizek
 
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
Quote:
Originariamente inviato da VICIUS Guarda i messaggi
300.000 righe di codice senza test sono secondo me un suicidio.
concordo. il mio capo una volta disse che loro sono molto "result oriented". io risposi che la parola esatta é "amatorial".

Se non mi ha licenziato quella volta (e quando gli ho detto che ha la fidanzata bona) non mi licenzia piú.

(il resto lo commento comodamente da casa ché sto ancora a lavoro)
Kralizek è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2012, 18:30   #5
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da Kralizek Guarda i messaggi
concordo. il mio capo una volta disse che loro sono molto "result oriented". io risposi che la parola esatta é "amatorial".
voglio un video su youtube
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 03-04-2012, 18:57   #6
Kralizek
Senior Member
 
L'Avatar di Kralizek
 
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
voglio un video su youtube
conosco un sito che, se usi "amatorial" come parola chiave, ti dá un sacco di risultati
Kralizek è offline   Rispondi citando il messaggio o parte di esso
Old 04-04-2012, 20:02   #7
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da Kralizek Guarda i messaggi
Ho provato a cercare della letteratura in inglese in modo da poter analizzare insieme qualche caso di studio o almeno qualche articolo a riguardo ma non mi viene alcuna parola chiave adatta.

Ho provato con "granularity" e "coverage" ma non portano a nulla di buono.

Grazie
La quantita' di test piu' opportuna dovrebbe essere il miglior compromesso tra tempo speso per scrivere (e riscrivere) i test, e il tempo speso per cercare i bug che i test non fanno saltare fuori. Naturale quindi che il numero adatto sia molto dipendente dalle caratteristiche del progetto, in primis il linguaggio usato. Ad esempio con un controllo a compilazione dei tipi un certo numero di test non sono necessari, mentre d'altro canto aggiungere un singolo test in C++ ha un costo maggiore (tempo sviluppatore, tempo compilazione etc.) che non in Python.
Inoltre alcuni progetti sono piu' portati allo sviluppo di test automatici di altri: se devi sviluppare il software per far aprire e chiudere un cancello automatico, alcuni tipi di test non ti servono perche' vai a testare il modello, che puo' essere diverso dall'oggetto reale (e gli stessi test possono darti risultati diversi).

Direi quindi che la risposta e' difficilmente quantificabile ma dipende dall'esperienza, sia del linguaggio/piattaforma che del dominio in cui si lavora.
Come esperienza personale, se senti di avere bisogno di tanti test hai fatto un cattivo design .

Battute a parte, dovendo adottare un approccio a posteriori ha poco senso andare a cercare di coprire il piu' possibile; meglio concentrarsi sulle parti piu' pericolose. Quelle sulle quali hai il timore di mettere mano sono un buon candidato, oppure quelle su cui statisticamente devi mettere piu' spesso mano.

Quote:
concordo. il mio capo una volta disse che loro sono molto "result oriented". io risposi che la parola esatta é "amatorial".
Spezzo una lancia a favore del tuo capo. La manutenibilita' del software e' solo uno degli aspetti che vanno considerati. Se scrivi software per banche conta parecchio perche' hai contratti che ti legano per anni. Se sei una startup non te ne frega niente di mettere mano al codice tra tre anni, perche' a quella data sarai gia' stata acquisita da una azienda piu' grande, oppure avrai gia' chiuso i battenti. Se sei una azienda giovane e in crescita puo' essere piu' economicamente conveniente arrivare prima degli altri col prodotto, conquistarsi una fetta di mercato, e con i guadagni andare poi a rimediare alle malefatte.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 05-04-2012, 11:31   #8
shinya
Senior Member
 
L'Avatar di shinya
 
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
Fate come faccio io: scrivete codice senza bug!
shinya è offline   Rispondi citando il messaggio o parte di esso
Old 05-04-2012, 11:38   #9
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da shinya Guarda i messaggi
Fate come faccio io: scrivete codice senza bug!
Sì bravo, sei come il mio pasticcere: riesce a fare le ciambelle senza il buco
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 05-04-2012, 12:10   #10
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da shinya Guarda i messaggi
Fate come faccio io: scrivete codice senza bug!
Piu' semplice ancora: non scrivere codice :P
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 05-04-2012, 12:21   #11
shinya
Senior Member
 
L'Avatar di shinya
 
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
Quote:
Originariamente inviato da marco.r Guarda i messaggi
Piu' semplice ancora: non scrivere codice :P
Già! Questa è una di quelle frasi zen che quando le senti la prima volta pensi "Che stronzata!" e poi un giorno invece ricevi l'illuminazione e sussurri "Ohhhh!".
shinya è offline   Rispondi citando il messaggio o parte di esso
Old 05-04-2012, 13:04   #12
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da shinya Guarda i messaggi
Già! Questa è una di quelle frasi zen che quando le senti la prima volta pensi "Che stronzata!" e poi un giorno invece ricevi l'illuminazione e sussurri "Ohhhh!".
La produttivita' di un programmatore non si misura nel numero di linee di codice che scrive, ma in quelle che cancella
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Mova Z60 Ultra Roller Complete: pulisce bene grazie anche all'IA Mova Z60 Ultra Roller Complete: pulisce bene gra...
Renault Twingo E-Tech Electric: che prezzo! Renault Twingo E-Tech Electric: che prezzo!
Il cuore digitale di F1 a Biggin Hill: l'infrastruttura Lenovo dietro la produzione media Il cuore digitale di F1 a Biggin Hill: l'infrast...
DJI Osmo Mobile 8: lo stabilizzatore per smartphone con tracking multiplo e asta telescopica DJI Osmo Mobile 8: lo stabilizzatore per smartph...
Recensione Pura 80 Pro: HUAWEI torna a stupire con foto spettacolari e ricarica superveloce Recensione Pura 80 Pro: HUAWEI torna a stupire c...
Rilasciate le specifiche di Bluetooth 6....
L'obiettivo che mette tutto a fuoco: la ...
Meta avrebbe raccolto fino al 10% dei ri...
NVIDIA DGX Spark e videogiochi? Una pess...
Serie Oppo Reno15 confermata: arriva il ...
UPDF 2025: l'editor PDF che fa (quasi) t...
Partono altri sconti pesanti su Amazon, ...
OpenAI senza freni: centinaia di miliard...
Blink Mini 2 da 34,99€ 15,90€ (-55%) su ...
Altro che AGI, la superintelligenza di M...
Il nuovo ECOVACS DEEBOT T30C OMNI GEN2 s...
GeForce RTX 50 SUPER in ritardo o persin...
HYTE X50: il case dalle linee arrotondat...
Sony ULT WEAR in super offerta: le cuffi...
Sconti record su smartwatch top: Apple W...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 12:53.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v