Domanda

Sto lavorando ad una tesi sulla meassuring qualità di un prodotto. Il prodotto, in questo caso è un sito web. Ho individuato diversi attributi di qualità e tecniche di meassurement.

Un attributo di qualità è "robustezza". Voglio meassure che in qualche modo, ma non riesco a trovare tutte le informazioni utili come fare questo in maniera oggettiva.

C'è qualche metrica statico o dinamico che potrebbe meassure robustezza? Vale a dire, come la copertura di test di unità, c'è un modo per meassure robustezza del genere? Se è così, c'è qualche (gratuito) strumento che può fare una cosa simile?

Qualcuno ha qualche esperienza con quali attrezzature?

Ultimo ma non meno importante, forse ci sono altri modi per determinare la robustezza, se avete qualche idea su che io sono tutto orecchi.

Grazie mille in anticipo.

È stato utile?

Soluzione

Bene, la risposta è "no". Robusto può significare molte cose, ma la migliore definizione che può venire in mente è "eseguendo correttamente in ogni situazione." Se si invia un'intestazione HTTP male a un server web robusto, non dovrebbe bloccarsi. Esso dovrebbe restituire esattamente il giusto tipo di errore, e dovrebbe registrare l'evento da qualche parte, forse in modo configurabile. Se un server web robusto corre per un tempo molto lungo, la sua impronta di memoria dovrebbe rimanere lo stesso.

Un sacco di ciò che rende un sistema robusto è la sua gestione della casi limite. Buone unit test sono una parte di questo, ma è molto probabile che non ci saranno test di unità per nessuno dei problemi che un sistema ha (se erano noti questi problemi, gli sviluppatori probabilmente li avrebbe fisso e solo allora ha aggiunto un test) .

Purtroppo, è quasi impossibile misurare la robustezza di un programma arbitrario perché per fare questo è necessario sapere che cosa si suppone che il programma di fare. Se tu avessi una specifica, si potrebbe scrivere un gran numero di test e poi correre contro qualsiasi client come un test. Ad esempio, guardate il test del browser Acid2. Esso misura con attenzione quanto bene qualsiasi browser web conforme ad una norma in un facile, della moda ripetibile. Questo è quanto di più vicino si può ottenere, e le persone hanno fatto notare molti difetti con un simile approccio (ad esempio, è un programma che va in crash più spesso, ma fa una cosa in più in base alle specifiche più robusto?)

Ci sono, però, vari controlli che è possibile utilizzare come un ruvido, stima numerica della salute di un sistema. copertura di test Unità è un piuttosto standard, come lo sono i suoi fratelli, copertura ramo, copertura funzione, copertura delle istruzioni, ecc Un'altra buona scelta è programmi di "pelucchi" come FindBugs. Questi possono indicare il rischio di problemi. progetti open source sono spesso giudicati da quanto frequentemente e recentemente commit sono fatti o versioni rilasciate. Se un progetto ha un sistema di bug, è possibile misurare il numero di bug sono stati corretti e la percentuale. Se c'è una specifica istanza del programma che si sta misurando, in particolare uno con un sacco di attività, MTBF (Mean Time Between Failures) è una buona misura della robustezza (Vedere di Philip risposta )

Queste misure, però, in realtà non vi dicono la robustezza di un programma è. Sono solo modi di indovinare a questo. Se fosse facile capire se un programma è stata robusta, avremmo probabilmente solo fare il check-compilatore per esso.

Buona fortuna con la tua tesi! Spero si arriva con alcune nuove misure divertenti!

Altri suggerimenti

Si potrebbe guardare in Mean Time Between Failures come misura robustezza. Il problema è che si tratta di una quantità teorica, che è difficile da misurare, in particolare prima è stato distribuito il prodotto a una situazione del mondo reale con carichi del mondo reale. Parte della ragione di questo è che il test spesso non copre i problemi di scalabilità del mondo reale.

Nel nostro libro Fuzzing (da Takanen, DeMott, Miller) abbiamo diversi capitoli dedicati per le metriche e la copertura in fase di test negativo (robustezza, affidabilità, test di grammatica, fuzzing, molti nomi per la stessa cosa). Inoltre ho cercato di riassumere gli aspetti più importanti della nostra società whitepaper qui:

http://www.codenomicon.com/products/coverage.shtml

Snippet da lì:


La copertura può essere visto come la somma di due funzioni, precisione e accuratezza. La precisione è interessata con una copertura di protocollo. La precisione del test è determinato da quanto bene i test riguardano i diversi messaggi di protocollo, le strutture dei messaggi, tag e definizioni di dati. Accuratezza, d'altra parte, misura quanto con precisione le prove possono trovare bug all'interno di diverse aree di protocollo. Pertanto, la precisione può essere considerata come una forma di copertura anomalia. Tuttavia, la precisione e l'accuratezza sono abbastanza termini astratti, in tal modo, avremo bisogno di guardare metriche più specifici per valutare la copertura.

Il primo aspetto l'analisi di copertura è legato alla superficie di attacco. Test di analisi dei requisiti inizia sempre fuori, individuando le interfacce che necessitano di un controllo. Il numero di differenti interfacce e protocolli che implementano vari strati di impostare i requisiti per le fuzzer. Ogni protocollo, formato di file, o API potrebbe richiedere un proprio tipo di fuzzer, a seconda delle esigenze di sicurezza.

Secondo metrica di copertura è legata alla specifica che un fuzzer supporta. Questo tipo di metrica è facile da usare con fuzzer basati su modelli, come la base dello strumento è costituito dalle specifiche utilizzati per creare il fuzzer, e quindi sono facili da elencare. Un fuzzer model-based dovrebbe coprire l'intera specifica. Considerando che, fuzzer mutazione-based non necessariamente coprono interamente la specifica, come attuazione o comprendente un unico messaggio di cambio di esempio da una specifica non garantisce che l'intera specifica è coperto. In genere quando un fuzzer mutazione a base di richieste di supporto specifica, significa che è interoperabile con gli obiettivi di prova di attuazione della specifica.

In particolare per quanto riguarda fuzzing protocollo, la metrica terza più critico è il livello di statefulness dell'approccio Fuzzing selezionato. Un fuzzer del tutto casuale in genere testare solo i primi messaggi di protocolli stateful complessi. L'approccio del fuzzing più stato a conoscenza che si sta utilizzando è, il più profondo il fuzzer può andare in protocolli complessi scambi. Lo statefulness è un requisito difficile da definire per strumenti fuzzing, quanto è più una metrica per definire la qualità del modello protocollo utilizzato, e può, quindi, essere verificata soltanto eseguendo i test.


Spero che questo è stato utile. Abbiamo anche studi in altre metriche, come guardare la copertura del codice e altri dati più o meno inutili. ;) Metrics è un grande argomento per una tesi. email me a ari.takanen@codenomicon.com se siete interessati per avere accesso a una vasta ricerca su questo argomento.

La robustezza è molto soggettiva, ma si potrebbe avere uno sguardo a FingBugs , Cobertura e Hudson che se correttamente combinati insieme potrebbero dare un senso di sicurezza nel corso del tempo che il software è robusto.

  

Si potrebbe guardare in tempo medio tra   fallimenti come una misura di robustezza.

Il problema con "MTBF" è che è di solito misurata in traffico positiva, mentre i guasti si verificano spesso in situazioni inaspettate. Esso non fornisce alcuna indicazione di robustezza e affidabilità. Non importa se un sito web rimane sempre attiva in ambiente di laboratorio, sarà ancora essere violato in un secondo in internet se ha un punto debole.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top