Come le persone di solito sono molto veloci a sottolineare, uno dei vantaggi del software è che dovrebbe essere facile e relativamente economico da modificare rispetto all'hardware. Questo è particolarmente importante quando ti accorgi in ritardo che hai qualcosa di fondamentalmente sbagliato. Fai lo stesso con l'hardware e perdi un milione di dollari, quindi, come hai detto, usi i tuoi simulatori ecc. E ne provi il bazinga. Penso che sia qui che il paradigma fallisce un po 'quando si passa al software.
Entra nella testa dello sviluppatore di software medio e quello che hai è una persona molto impegnata con una scadenza incredibilmente stretta. Il suo manager sta dicendo che va bene lasciare alcuni bug perché puoi sempre correggerlo in seguito. I test sono spesso ripensati, ma anche in uno scenario guidato dai test, i test sono ridotti al minimo e il codice è scritto al minimo dei test, e spesso vengono prese scorciatoie in modo da perdere molti dei casi limite. Il sistema può essere accuratamente testato dall'unità, ma raramente viene rigorosamente testato rigorosamente nel suo insieme e altrettanto raramente sottoposto a stress test in misura notevole. Aggiungete a ciò che scrivete software da zero e ci sono poche opportunità di simulare il software prima di impegnarvi a scriverlo, principalmente perché raramente scriviamo software dallo stesso tipo di blocchi che si trovano nell'hardware.
Torna alla domanda del PO. Potresti definire un sistema di blocchi da cui derivare tutto il tuo software? Possibilmente. Sarebbe molto conveniente? Probabilmente no, perché quando si arriva allo sviluppo di un sistema abbastanza robusto di componenti, test e altri accessori per supportare questo idealesistema di programmazione, scopriresti che la concorrenza ti avrebbe già battuto sul mercato, e ancora peggio, dal punto di vista del programmatore medio probabilmente troverai uno stile di sistema di programmazione "cookie-cutter" molto limitante e molto probabilmente molto noioso. Lavoro personalmente su un'API, dove la maggior parte del codice del modulo è stata perfezionata e standardizzata in modo così completo, che tutto ciò che faccio ora è generare un modello di codice e riempire gli spazi vuoti. La maggior parte del mio tempo può essere impiegata per scrivere un semplice codice connettore e per far uscire i moduli il più velocemente possibile. È seriamente insensibile. Ci sono pochissime opportunità di fare qualcosa di più che semplicemente codificare lo stesso genere di cose più e più volte, quindi quando arriva un'altra opportunità di progetto, colgo l'occasione per poter fare QUALCOSA di altro.
Quindi, come puoi fornire software di alta qualità e ben ponderato, e tuttavia divertirti a farlo? Credo che ciò dipenda dalla tua scelta di strumenti e metodologia. Per me la risposta è stata quella di utilizzare una buona API BDD, perché mi ha permesso di creare un codice molto facile da leggere, ma altamente granulare. Sono in grado di creare una serie di test a partire da un numero minimo di metodi riutilizzabili e di descrivere i miei test nella lingua delle specifiche. In questo modo, mi avvicino ad un approccio di sviluppo più articolato, tranne per il fatto che sono responsabile della progettazione e del controllo degli elementi costitutivi. Inoltre, l'output del test individua la parte esatta del test in cui si verifica l'errore, in modo da non dover indovinare se i guasti si trovano nella configurazione o nell'asserzione.
Ottimizzare la tua metodologia aiuta anche. Sono un grande sostenitore dell'applicazione di principi di sviluppo snello e della loro combinazione con molte delle altre tecniche e principi su cui il movimento Agile si batte da molti anni ormai. Avere eliminato la maggior parte delle pratiche dispendiose che trovavo così frustranti ha aiutato moltissimo a rendere lo sviluppo un'attività più piacevole. Mi rimane ancora il problema che a volte - ma si spera non troppo spesso - nel mio codice compaiano bug, tuttavia ora mi ritrovo con più tempo e ancora più incentivo a dedicare più tempo a scrivere test più robusti e puntare a 100 % di copertura del test. Ancora meglio, è davvero bello vedere tutte quelle luci verdi apparire alla fine della mia giornata,