"Un sistema ben progettato è un sistema verificabile" [chiuso]

-1

Sto pensando a qualcosa che ho letto in un libro: "Un sistema ben progettato è un sistema verificabile" e mi chiedo perché sia così.

Certamente, un sistema che è molto testato è probabilmente ben progettato. Costruisci da zero su principi di test-first e assumendo competenze di base, è difficile immaginare un pessimo design.

Ma la dichiarazione ribalta l'idea: che un sistema ben progettato è testabile. Perché? È perché i test buoni sono piccoli e semplici di default, quindi fare buoni test su un cattivo design (dove il cattivo design di solito significa classi grandi e complesse) è più difficile? O che è difficile, per esempio, testare un singolo aspetto di una classe in isolamento quando la classe in questione è una classe di Dio?

    
posta Sven 26.01.2014 - 19:50
fonte

4 risposte

7

La testabilità implica un accoppiamento lento. Un sistema è significativamente più controllabile se ognuno dei suoi componenti può essere testato separatamente. Ciò è possibile solo se l'accoppiamento tra ciascun componente è mantenuto libero.

L'accoppiamento libero è un aspetto del buon design.

    
risposta data 26.01.2014 - 21:20
fonte
4

Il tuo obiettivo è quello di rilasciare software con un certo livello di qualità. Supponendo che non si possa scrivere ogni singola riga di codice esente da errori o introdurre bug nell'intervallo tra quelle righe di codice, come si verifica se si è raggiunto quel livello di qualità? Che dire degli altri membri del team, che potrebbero non essere a conoscenza di tutte le implicazioni delle loro modifiche, modificando il software che hai scritto. Oppure tu stesso stai apportando modifiche 6-12 mesi dopo che non hai visto il codice? Devi essere in grado di testare il tuo software inizialmente e con ogni modifica che apporti ad esso, e le modifiche avverranno sempre in qualsiasi cosa tranne che nei progetti più banali.

Se consideri l'atto del design come l'atto di pianificare e definire la struttura del tuo software, quindi di produrre un software verificabile, devi avere una buona esecuzione sulla pianificazione e sulla definizione di tale struttura. Quindi quel tipo di seguito è che un attributo di buona progettazione è un software che puoi testare.

Tenete a mente quando la maggior parte dice "capacità di testare", non è un binario si o no, ma una scala lineare di quanto impegno ci vuole per ottenere un certo livello di certezza (95%, 99%, quasi mai al 100%) che il tuo software funzioni. Quindi, da un lato dello spettro, si imposta un test e si ha N persone che eseguono il codice per un'intera settimana in tutti gli scenari possibili, magari eseguire test di stress per eliminare le condizioni di gara. Dall'altra parte dello spettro, esegui una serie di test unitari che hai già prodotto come parte del tuo processo TDD, e in 10 secondi ottieni 287 OK e nessun errore.

    
risposta data 26.01.2014 - 20:12
fonte
1

Penso che la frase asserisca la definizione di "ben progettato". Se lo dici come "Per essere ben progettato, il sistema deve essere testabile". allora inizia a dare un senso.

La testabilità è una buona proprietà del sistema, è molto più economico essere in grado di creare ed eseguire test automatizzati rispetto ai test manuali.

    
risposta data 26.01.2014 - 21:23
fonte
1

Un'altra prospettiva:

Una caratteristica di un sistema software "ben progettato" è che sarà generalmente costituita da parti ortogonali e componibili. Ogni parte dovrebbe essere concettualmente "pura" - dovrebbe occuparsi di una sola "preoccupazione" o aspetto del problema da risolvere.

Scrivere programmi come questo richiede un sacco di pensiero per trovare il giusto breakdown. Ma quando lo fai, ci sono molti vantaggi: la testabilità di solito è uno di questi.

    
risposta data 26.01.2014 - 21:24
fonte

Leggi altre domande sui tag