Il riutilizzo del software impedisce la ripetibilità del processo


25

Riutilizzo del codice come problema

Stavo pensando a questa domanda sulla consegna del software e ho continuato a tornare al problema della ripetibilità e / o della riproducibilità . Sono importanti, perché se non ripeti un progetto diventa più difficile migliorare il processo che hai usato per costruire il progetto. L'ingegneria comporta il costante miglioramento dei processi coinvolti nella progettazione e costruzione al fine di produrre progetti di qualità superiore.

Il software può fare molto affidamento sul riutilizzo grazie alla sua forma digitale. Invece di riscrivere un modulo, lo chiamiamo di nuovo o lo copiamo sull'altro sistema. Alcuni esempi sono l'autenticazione / login o forse una funzione di registrazione. Ci sono molti esempi ben noti per quelle categorie, e la saggezza convenzionale è quella di riutilizzare ciò che esiste invece di far rotolare la tua.


Alcuni confronti con altre discipline

Costruzione

Al contrario, la costruzione di sistemi fisici (edifici, ponti) non è affatto riutilizzabile. È vero che il progetto di una casa può essere riutilizzato più volte per costruire la stessa copia della casa, ma la costruzione deve essere eseguita ogni volta. Cut & Paste non funziona così nel mondo analogico. I progetti Bridge sono meno riutilizzabili rispetto alle case perché le condizioni del sito possono variare.

I costruttori principali sono esperti riconosciuti per aver progettato e / o costruito decine, centinaia o migliaia di cose nella loro area. Ad esempio, Frank Lloyd Wright , architetto e designer di fama mondiale designed more than 1,000 structures and completed 532 works. In contrasto con Anders Hejlsberg che ha disegnato "solo" cinque lingue (Turbo Pascal; Delphi; J ++; C #; dattiloscritto). In molti modi, è un confronto ingiusto perché i domini sono diversi. Ma a livello generale, la produzione quantificabile di due persone molto intelligenti è molto diversa.

Arti marziali

Gli artisti marziali diranno che la padronanza di una mossa proviene solo da migliaia di ripetizioni. Dopo che una buona parte di quelle ripetizioni è stata introdotta, molti artisti marziali sono sorpresi di come un kata o una forma precedentemente percepiti siano diventati semplici. Gli istruttori di quegli studenti noteranno anche come il movimento diventa più fluido e propositivo, oltre ad avere un'economia di movimento. Allo stesso modo, gli artisti marziali esperti sono in grado di raccogliere katas più complessi più rapidamente rispetto agli studenti meno esperti. L'esperienza della ripetizione ha fornito loro una struttura o un processo che consente loro di apprendere più rapidamente.

Lavorazione del legno

I falegnami sperimentano una trasformazione simile. I falegnami hobbisti fanno sempre riferimento al loro primo progetto che ha richiesto molti cassetti. Se completano il progetto, ottengono un nuovo apprezzamento per l'efficienza che le linee di assemblaggio producono. Ci sono altri vantaggi come una migliore comprensione di come disporre le parti dei cassetti sul supporto in fogli al fine di massimizzare l'uso del legno. Rispetto agli hobbisti, i falegnami professionisti sono in grado di progettare, avviare e costruire più rapidamente oggetti che hanno realizzato molte volte in precedenza. Inoltre acquisiscono la capacità di vedere i problemi inerenti al progetto di qualcun altro dopo aver commesso quell'errore nel loro lavoro.


Quindi, il riutilizzo del software impedisce agli sviluppatori di software di diventare più competenti?

In molti modi, la progettazione e la costruzione del software sono sempre nuove. Non ripetiamo i lavori passati, perché se riusciamo a riutilizzare un modulo, una libreria o un sistema, lo facciamo. Preferibilmente estenderemo un sistema esistente prima di riscrivere l'intera cosa da zero. Ma la ripetizione è ciò che ci consente di trovare efficienza nella progettazione e nella costruzione. Chiunque abbia praticato uno sport o un'attività fisica ti dirà che la ripetizione è la chiave per diventare un buon praticante.

La mia domanda: la possibilità di riutilizzare il software impedisce il necessario miglioramento del processo e l'efficienza derivanti dalla ripetizione di un progetto?


Se hai scritto un pezzo di codice, essenzialmente hai risolto un problema. Se sei bravo in questo, questo pezzo risolve una CLASSE di problemi. Se sei davvero bravo, è estensibile a una metaclasse di problemi. E poi perdi interesse: non è necessario perfezionare una bicicletta se ci sono problemi di progettazione irrisolti in giro. Il brivido della risoluzione dei problemi deriva dal brillare di nuove cose, non dalla lucidatura di vecchi problemi alla perfezione.
Deer Hunter,

2
buoni progetti software "spostano" molta ripetibilità nel controllo qualità. Quando ero un tester in un progetto della durata di 1,5 anni, eseguiamo cicli di test con rilasci settimanali di "checkpoint", circa 70 volte totali nel progetto. Era ... abbastanza ripetibile, a bassa voce (non cambiano molte cose in una settimana). Il test delle build notturne è stato, naturalmente, ancora più ripetibile - circa 500 volte nel corso del progetto (alcuni bug divertenti di showstopper erano troppo rari per fare la differenza). Ora, dimmi una società di costruzioni che ha costruito 500 ponti - tutti con lo stesso team
moscerino del

@gnat - questa è una visione eccellente e una prospettiva che non avevo ancora riflettuto. Altri aspetti dell'SDLC diventano molto più efficienti a causa di quella ripetizione.

1
@ GlenH7 lo ha ampliato nella risposta , principalmente per includere immagini di ponti :)
moscerino

Quanti problemi ha dovuto risolvere Frank Lloyd Wright nelle sue 1000 strutture contro Anders Hejsberg nel definire le sue sole 5 lingue? Wright doveva prendere decisioni per decreto, Anders doveva giustificare le decisioni a molte persone altrettanto intelligenti e competenti come lui. Scommetto che Anders ha dovuto risolvere molti, molti altri problemi. Quindi i tuoi numeri di lancio nel mix sono semplicemente su ciò che stai scegliendo di contare e non su numeri comparabili REAL quantificabili. Quindi mi piace la domanda, semplicemente non mi piace il ragionamento / esempi che ispirano la domanda. L'efficienza SW è migliorata enormemente nel corso degli anni.
Dunk,

Risposte:


10

La possibilità di riutilizzare il software non impedisce il miglioramento dei processi.

Se pensi ai processi che vanno alla creazione di software: sviluppo di requisiti, progettazione del sistema, implementazione del sistema, distribuzione del sistema, gestione dei requisiti, gestione delle configurazioni, verifica e convalida del prodotto di lavoro, tracciamento delle modifiche e molti altri (vedi Aree di processo CMMI per una possibile suddivisione delle attività chiave nello sviluppo del software): queste vengono ripetute su ogni progetto indipendentemente da quanto riutilizzi. Inoltre, ognuno ha una sorta di misure quantitative e qualitative che possono essere utilizzate per determinare quanto è buono quel particolare processo o attività e, di conseguenza, quanto è buono il processo di sviluppo nel suo insieme.

In una estremità dell'estremo, possiamo assumere una solida linea di prodotti software. Dall'altro, puoi assumere uno sviluppo greenfield. C'è ancora la necessità di eseguire tutti questi processi, in varia misura, sebbene possano accadere a velocità diverse o forse anche in sequenze diverse. Ad esempio, in un'elevata quantità di riutilizzo, una maggiore percentuale del tempo assegnato può essere impiegata in attività di integrazione e verifica / convalida a livello di sistema (requisiti V&V, test di integrazione, test di sistema, test di accettazione). Con i nuovi sforzi di sviluppo, potrebbe essere necessaria una percentuale maggiore di tempo durante la progettazione e l'implementazione. Finché esegui un processo almeno una volta nel corso di un progetto, puoi misurarlo (quantitativamente e qualitativamente). Dopo aver apportato le modifiche e aver verificato in che modo tali modifiche incidono su una parte dell'area di processo o sulla capacità complessiva di fornire software,

La chiave per migliorare il processo è avere una sorta di suddivisione logica delle attività e dei processi, determinare come misurarli (preferibilmente in modo coerente) e come comprendere tali misurazioni per apportare modifiche al processo verso un certo fine. Non si tratta di ripetere il progetto, ma di coerenza nel modo in cui si ripete il processo.


dipende da ciò che viene effettivamente riutilizzato, potrebbe persino rientrare nell'acquisizione CMMI, ovvero non nel lavoro di sviluppo.
imel96,

1
Ma CMMI non è riuscita in alcun modo significativo. Nessuna delle "applicazioni killer" del 21 ° secolo è stata costruita da persone interessate alla matrice di maturità CMMI. Alcune persone brillanti hanno avuto un'idea e l'hanno implementata, quindi hanno assunto persone più brillanti per aumentare la portata della soluzione. Al contrario, i progetti che probabilmente hanno pagato almeno un labbro a standard come CMMI sono falliti miseramente, ad esempio il tentativo del Dipartimento della Difesa degli Stati Uniti di creare una nuova applicazione per i salari.
Kevin Cline il

1
@kevincline Non importa che CMMI abbia o non abbia avuto successo. Seduto nell'industria aerospaziale / della difesa, vedo CMMI nella mia organizzazione e nelle aziende con cui lavoriamo, di cui siamo subappaltatori e che subappaltiamo. Tuttavia, il mio punto è che per avere un miglioramento dei processi, è necessario identificare i processi. CMMI è un singolo strumento per fare proprio questo. Ce ne sono altri là fuori e puoi definirne uno tuo. Una volta che hai dei processi, puoi definirli, misurarli e migliorarli.
Thomas Owens

1
@Kevin: "Le applicazioni killer" sono per loro natura "al di fuori del mainstream". Quindi non sarebbe una sorpresa che la maggior parte del lavoro nuovo e innovativo sia stato creato dalla sperimentazione e dall'hacking piuttosto che attraverso un processo disciplinato. Anche se "killer application" dipende dalla propria definizione. È un'applicazione che diventa una vera e propria "applicazione killer" o è il programma DoD che consente ai Jet Fighters di volare in sicurezza e impedire loro di abbattere i loro alleati più di una "applicazione killer". Le mode spesso non richiedono alcuna abilità / innovazione (ad es. Pet rock, hula-hoop) ......
Dunk

... tra cui molti programmi applicativi "di moda" molto popolari. Considerando che, i grandi progetti di tipo DoD richiedono quasi sempre un'enorme quantità di abilità e processo. Inoltre, la tua visione del fallimento di CMMI probabilmente dice di più sulla tua esperienza (o mancanza di ciò) in settori che usano CMMI piuttosto che CMMI stesso. Il CMMI non è perfetto, e probabilmente non è nemmeno buono, ma almeno fa in modo che le aziende provino almeno a scrivere e seguire un processo e persino a migliorarlo. Se questo è tutto ciò che CMMI realizza, allora è un successo.
Dunk,

5

Penso che l'idea che altre discipline ingegneristiche non facciano uso del riutilizzo sia sbagliata. Anche quando si progettano edifici / macchine, si hanno ancora componenti utilizzati da molti altri progetti. Ad esempio, disegni le tue viti? Motori? Porte o finestre? Ovviamente no. Questi sono spesso progettati da persone diverse che poi li usano in prodotti diversi. E sono abbastanza spesso standardizzati, il che promuove ancora più riutilizzo.

Penso che al problema piaccia la complessità. Semplicemente non è possibile confrontare la complessità anche degli edifici più complessi con software complessi. È un'idea generalmente accettata che la complessità del software sia ciò che rende difficile l'approccio dal punto di vista ingegneristico. Nel momento in cui è in atto un processo che consente di creare software di qualità accettabile, si scopre che la complessità del software necessaria per creare salti in ordine di grandezza. Quindi il processo non può essere utilizzato. Quindi se dovessimo ripetere più volte una parte del software fino a quando non saremo soddisfatti del risultato, non finiremmo mai quel software.

Ecco perché viene promosso il codice pulito. La capacità di cambiare il codice passato in base a nuove esperienze può essere definita come una forma di riutilizzo del design. Quindi, anziché creare più software diversi più volte, rielaboriamo e perfezioniamo un singolo software riutilizzando nuove esperienze e progettando vecchi problemi. Tutto mentre proviamo a fare in modo che il software faccia la stessa cosa.


Non è che altre discipline non riutilizzino il design, la differenza è la quantità di riutilizzo. Tutti gli oggetti che hai citato devono essere costruiti fisicamente per ogni istanza. Non posso semplicemente copiare e incollare una porta, per esempio. La ripetizione che deriva dalla costruzione porta all'identificazione di efficienze e miglioramenti che non sono evidenti all'inizio. Costruisci un set di mobili da cucina e avrai scoperto cose nuove tra il 1o e l'ultimo. Hai un punto con la complessità complessiva, poiché la natura virtuale del software ci consente di accumulare complessità inconsapevolmente.

1
@ GlenH7 Il fatto è che lo sviluppo del software non sta costruendo. La sua progettazione. Con la costruzione di cose, stai facendo sempre la stessa cosa. Ma con il design, hai sempre obiettivi e problemi diversi. Non dovresti confrontarlo con la costruzione di un edificio, ma con la creazione del suo progetto.
Euforico,

2
Non sono sicuro di essere pienamente d'accordo con il tuo punto sullo sviluppo del software. Lo sviluppo SW è sia progettazione che costruzione. La costruzione dovrebbe fornire un circuito di feedback al progetto. Sia nel regno analogico che in quello digitale, i bravi architetti "si sporcano le mani" e costruiscono per completare il circuito di feedback. Anche se ci concentriamo solo sul design, penso che la ripetizione del design identifichi l'efficienza che porta a un design migliore. SW non si ripete come altri campi. Ogni bridge richiede una modifica da un approccio generale adattandolo al sito in cui si trova.

SW dev non è così complesso rispetto al design che l'architetto avrebbe elaborato. È solo che pensiamo che sia difficile perché non trattiamo il software come una corretta disciplina ingegneristica e perché continuiamo a reinventare le cose. Se solo tu sapessi cosa è andato nella progettazione di altre cose
vedresti

In confronto al ponte: hai ragione, i ponti sono un problema risolto. Volete un nuovo ponte, rispolverate i vecchi disegni e apportate alcune modifiche e avete un nuovo ponte (esagerare la semplicità qui ovviamente). Quindi perché un servizio web non è costruito in modo simile nel software? Ecco perché il software non sta progettando IMHO, lo trattiamo più come un mestiere (o arte) in cui ogni progetto è un lavoro personalizzato.
gbjbaanb,

2

Il software è diverso dalla maggior parte delle altre discipline, quindi l'economia di dove trascorriamo meglio il nostro tempo è spesso diversa.

Nel settore delle costruzioni, si spende una certa quantità di tempo e denaro per un progetto (e il software è molto più simile alla produzione di un progetto che alla costruzione di un edificio), quindi, in termini approssimativi, molto di più per realizzarlo una o più volte. Quindi vale la pena dedicare parecchio lavoro per ottenere il progetto giusto. Più specificamente alla tua domanda: vale la pena ripetere lo sforzo di farlo da zero per rendere il prodotto finale un po 'migliore.

Nel software, quando hai il progetto, è molto più economico costruire il prodotto di quanto non lo fosse fare il progetto. Almeno la maggior parte delle volte - se il software verrà incorporato in un pacemaker, in qualche modo sei molto più vicino alla situazione di un costruttore di ponti. Ma in generale, il riutilizzo del software potrebbe risparmiare il 90% del costo del più grande elemento di budget, rispetto al 90% di un elemento di budget molto più piccolo per la costruzione di un bridge. Quindi, il riutilizzo vince molto più spesso.

Per quanto riguarda la produttività, quando costruisci, per esempio, un ponte, devi affrontare vincoli del mondo reale davvero significativi. Immagina se agli architetti fossero state pagate ingenti somme di denaro per progettare ponti per giochi online multiplayer di massa, in cui i costi di costruzione erano vicini allo 0 e le limitazioni erano significativamente inferiori rispetto al mondo reale. Progetterebbero ponti che sono stranamente complessi per gli standard dei ponti nel mondo reale. La fase del progetto potrebbe richiedere un po 'più di tempo.

Inoltre, ci sono un numero limitato di ponti da costruire e, poiché il design è una piccola parte del costo, puoi pagare per il meglio e alcuni dei migliori possono fare la maggior parte del design. Esistono centinaia di migliaia di sviluppatori software e praticamente tutti hanno un arretrato gigantesco di cose che farebbero se avessero tempo. Non troverai un ragazzo che fa una parte enorme di tutto ciò - è abbastanza sorprendente che ci siano persone che si avvicinano, davvero.

Il tuo vero punto sembra essere che potremmo perdere qualcosa riutilizzando invece di provare a ripetere e migliorare le cose. Penso che tu abbia un punto. Il problema è che, sebbene molto probabilmente sarebbe più efficiente a livello globale riscrivere alcune delle cose di base e cercare di migliorarle, chiunque se ne accetti ottiene tutti i rischi e probabilmente non molto della ricompensa. (Esiste anche un enorme problema pratico dell'inferno delle dipendenze, che probabilmente toglie un po 'della vittoria dalla riscrittura delle cose, ma non al punto che non varrebbe la pena, almeno guardando il quadro globale. Anche il copyright e i brevetti possono forzare uno sforzo di reingegnerizzazione proposto che morde un bel po 'di lavoro di riscrittura per rifare pezzi più piccoli di codice esistente).

In termini di apprendimento da ripetizione - in tutte le discipline questo accade meno nella progettazione che nella costruzione, perché non v'è meno ripetizioni, quindi meno possibilità di imparare, e forse meno beneficio. Inoltre, il processo di progettazione probabilmente non è così ripetibile. È un po 'come avere un processo per scrivere un romanzo. Un buon processo può quasi certamente aiutare, e il software è generalmente molto più collaborativo di un romanzo, ma ripetere un processo quando l'obiettivo è quello di inventare qualcosa di nuovo è problematico. Perfino i romanzieri imparano molto dal passato, ma un processo ripetibile è un fattore secondario per gli sforzi creativi. E se qualsiasi parte dello sviluppo del software è veramente ripetibile, perché un computer non lo sta facendo?


2

La capacità del software di essere riutilizzato impedisce il necessario miglioramento del processo e l'efficienza derivanti dalla ripetizione di un progetto?

Ho lavorato come ingegnere di sistemi e software nello stesso grande progetto negli ultimi 17 anni, per inciso (pensando al riferimento Airbus A380 nel tuo primo collegamento) nel settore aeronautico, sebbene le mie responsabilità ricadano nel settore degli aerei militari. Storie come questa sono fondamentalmente pura finzione e in realtà sono davvero divertenti da guardare quando si ha una visione approfondita.

Ma per la tua breve e concisa domanda: dalla mia esperienza, direi sia sì che no.

Vorrei prima dire che sono tutto per il riciclaggio del software in tutte le forme (beh, forse non tutti ...). I vantaggi del riutilizzo di qualsiasi cosa, dai frammenti di codice e dagli algoritmi di codice, agli interi moduli di codice e alle librerie di funzioni, è nel complesso molto meglio che ricominciare sempre dall'inizio (per spingerlo un po ').

L'aspetto negativo è, come fai notare (o almeno inferire), che quando aggiungi funzionalità semplicemente mettendo insieme un determinato set di componenti (e, sì, lo sto semplificando all'estremo), non ti evolvi davvero come programmatore, ingegnere o altro.

Solo guardando gli ingegneri del software intorno a me al lavoro, so da una lunga esperienza che la maggior parte di loro non lo sa, e peggio ancora - non ha interesse per l'apprendimento, qualsiasi cosa sul prodotto che stiamo costruendo oltre al minimo indispensabile che devono produrre il documento o il pezzo di codice a cui sono assegnati.

Sto trattando un po 'fuori tema qui, ma il mio punto è che quando i programmatori non hanno bisogno di imparare per cosa verrà realmente utilizzato il codice che stanno costruendo, e non hanno bisogno di imparare il funzionamento interno del sistema poiché possono semplicemente riutilizzare componenti già scritti e testati, quindi la maggior parte di essi non si preoccuperà di farlo.

Certo, ciò è dovuto anche ad altre circostanze, come il fatto che il prodotto che stiamo costruendo è incredibilmente complesso, e sarebbe impossibile per una persona apprenderne tutto (e sto solo parlando di uno dei computer nell'aereo - il più complesso, ma comunque).

Se i nostri ingegneri del software non avessero la possibilità di riutilizzare tanto codice, sono convinto che sarebbero diventati migliori nella loro professione in generale, e risorse molto più grandi per il progetto in particolare.

Oh, e avrete notato che parlo di loro molto qui. Naturalmente sono anche incluso tra questi ingegneri del software. L'eccezione è che sembro essere molto più curioso e desideroso di imparare cose nuove rispetto alle altre :-) Quando mi trovo di fronte a un nuovo compito, mi prendo sempre su me stesso di imparare tutto ciò che posso, sia nel forma di fatti e studiando il codice sorgente (sì, mi piace anche quello).

Ah - dang, di nuovo in disparte ... La mia scusa è che non ho dormito per 32 ore, quindi la mia capacità di concentrazione è un po '... cosa stavo dicendo?

Se qualcuno sta ancora leggendo, la mia conclusione è che:

, un riutilizzo eccessivo del software rende gli ingegneri del software meno esperti, il che li rende notevolmente meno efficienti quando hanno effettivamente bisogno di sapere come funzionano le cose. L'analisi dei problemi è un buon esempio o anche solo essere in grado di dire se una soluzione di progettazione suggerita è praticabile. E, naturalmente, anche il miglioramento dei processi è più difficile da ottenere quando non sai davvero cosa stai facendo :-)

e No , il riutilizzo del software con cura , potenzialmente ti dà molto tempo libero per considerare e pianificare i miglioramenti del processo.


Il fatto che la maggior parte degli sviluppatori sw riesca a cavarsela senza conoscere il funzionamento interno del sistema è un forte indicatore di un ampio riutilizzo? Trovo anche divertente il modo in cui le storie dei progetti governativi emettono quel suono semplicemente terribile, ma se tu avessi qualche conoscenza sul lavoro del governo, allora capiresti quanto l'autore non abbia idea. I martelli da $ 1500, ecc ... diventano tutti comprensibili quando si riconosce che i processi governativi hanno richiesto a 10 persone di rivedere e ottenere preventivi competitivi prima dell'acquisto O semplicemente non si spostavano fondi tra i secchi contabili.
Dunk,

Non mi conforto nel sapere che un ingegnere informatico che lavora sul sistema "più complesso" di un aereo non ha dormito in 32 ore. =)
RubberDuck

2

Come sottolineato nella risposta accettata in un'altra domanda dei programmatori, le analogie con la costruzione devono essere prese con cura:

una lettura consigliata per questo è The Software Construction Analogy is Broken

il software è spesso paragonato alla costruzione. Sfortunatamente questa analogia è imperfetta e le lezioni apprese dall'industria delle costruzioni sono sospette ...

Quello che ho osservato è che i buoni progetti software "spostano" molta ripetibilità in garanzia di qualità.

Quando ero un tester in un progetto della durata di 1,5 anni, eseguiamo cicli di test con rilasci settimanali di "checkpoint", circa 70 volte totali nel progetto. Era ... abbastanza ripetibile, a bassa voce (non cambiano molte cose in una settimana). Il test delle build notturne è stato, naturalmente, ancora più ripetibile - circa 500 volte nel corso del progetto (alcuni bug divertenti di showstopper erano troppo rari per fare la differenza).

Ora, seguendo quell'analogia "sospetta", dimmi una società di costruzioni che ha costruito 500 ponti, tutti con lo stesso team.

  • Seguendomi ulteriormente, dimmi una società che ha utilizzato principalmente gli stessi mattoni e ferro in ciascuno dei loro nuovi ponti (qui, mi riferisco al fatto che le versioni che abbiamo testato avevano principalmente gli stessi frammenti di codice giorno per giorno, settimana da settimana - "non cambiano molte cose").
    http://upload.wikimedia.org/wikipedia/commons/thumb/0/0c/GoldenGateBridge-001.jpg/220px-GoldenGateBridge-001.jpg http://upload.wikimedia.org/wikipedia/commons/thumb/5/52/Ponte25Abril1.jpg/220px-Ponte25Abril1.jpg

I costruttori principali sono esperti riconosciuti per aver progettato e / o costruito decine, centinaia o migliaia di cose nella loro area.

Bene, seguendo la tua spiegazione della ripetibilità citata sopra, posso dire cosa? Allora, il nostro piccolo gruppo non molto speciale di tester ha verificato, vedi sopra ("circa 500") centinaia di cose nella nostra zona.

Per quanto riguarda gli sviluppatori di progetti, hanno letteralmente costruito ("build notturne") - vedi, la parola è la stessa, e il significato è giusto in questo contesto - centinaia di cose nella loro area.

Se si vuole continuare quell'analogia "sospetta" fino a "migliaia di cose", queste quantità non sono, di nuovo, nulla di spettacolare nello sviluppo del software quando si guardano le cose giuste.

  • Ad esempio, l'ennesimo dei miei progetti passati (ancora una volta, niente di spettacolare, piuttosto regolare), questa volta nel ruolo di sviluppatore, è andato avanti per più di 5 anni (8 versioni principali, diverse decine di minori). C'erano checkpoint settimanali simili ( 5x52~=250di loro), rilasci notturni simili ( 5x365~=1800di loro) e allo stesso modo, stessi team di sviluppo / controllo qualità che lavoravano su questi. Giorno per giorno, settimana per settimana, mese per mese, roba per lo più ripetitiva (non molto cambiamento tra due build notturne) - come promesso, nel range di migliaia di volte (1800).

I progetti più longevi come Windows o Java o AutoCAD possono durare 10, 20, 30 anni, il che spiega facilmente la ripetizione di quante "migliaia" build notturne e test notturni.


Il concetto di spostamento della ripetibilità al QA diventa ancora più evidente con l' integrazione continua ...

la pratica ... di unire tutte le copie di lavoro degli sviluppatori con una linea principale condivisa più volte al giorno ... L'IC può essere vista come un'intensificazione delle pratiche di integrazione periodica.

Oltre ai test unitari automatizzati, le organizzazioni che utilizzano CI utilizzano in genere un server di build per implementare processi continui di applicazione del controllo di qualità in generale - piccoli sforzi, applicati frequentemente. Oltre all'esecuzione dell'unità e ai test di integrazione, tali processi eseguono ulteriori test statici e dinamici, misurano e profilano le prestazioni, estraggono e formattano la documentazione dal codice sorgente e facilitano i processi di controllo qualità manuale. Questa continua applicazione del controllo di qualità mira a migliorare la qualità del software e a ridurre i tempi di consegna, sostituendo la pratica tradizionale di applicare il controllo di qualità dopocompletando tutto lo sviluppo. Questo è molto simile all'idea originale di integrare più frequentemente per facilitare l'integrazione, applicata solo ai processi di controllo della qualità ...

Ripetibilità? è proprio lì, tanto quanto si può pensare.

Con il QA frequente / continuo, le cose che vanno male tornano rapidamente agli sviluppatori che sono costretti a ripetere i tentativi di farlo correttamente fino a quando i test falliti passano con successo. In un certo senso, quel ciclo di ripetizione fino a quando non assomiglia al codice cata ,

un esercizio di programmazione che aiuta un programmatore ad affinare le proprie abilità attraverso la pratica e la ripetizione ...


1
Punti eccellenti e penso che le fughe che sono state poi riportate nella suite di test automatizzata catturino parte dell'esperienza a cui sto alludendo. Per quanto riguarda le affermazioni della "stessa squadra", rimando all'esperienza di Wright. Con oltre 500 edifici costruiti, era un elemento comune per tutti quelli. Ma il punto è chiaro e concordo con alcune premesse.

@ GlenH7 sì, l'impatto della ripetizione è stato davvero profondo ed è andato ben oltre le suite di test. Conoscenza accumulata ovunque dove si è verificata la ripetizione - sai, tutto tende a stabilizzarsi in modo ottimale dopo 20 ... 30 ... 50 volte. Checkpoint / preparazioni notturne, invio di bug (e l'intera "vita di bug"), comunicazione dev / QA / mgmt / sysadmins, documentazione di cose, ecc. Ecc. Mi sono concentrato solo sulla ripetibilità, perché tuffarsi in questioni di accumulo di conoscenze che seguivano naturalmente avrebbe avere un effetto di tagliafuoco nel presentare il mio punto
moscerino del

-1

Parte di ciò che dici è vero: ad esempio le biblioteche risolvono funzioni non risolte da linguaggi di alto livello che risolvono problemi non risolti dall'assemblaggio che risolvono problemi non risolti dal codice macchina. Quando chiami System.out.println () in Java stai perdendo di vista il modo in cui una CPU emette su un dispositivo.

Quindi sì, stai perdendo qualcosa. Ciò che ottieni è la capacità di concentrarti su problemi irrisolti. Ora potrebbe essere necessario immergersi in alcuni altri aspetti della tecnologia (ad esempio come funzionano le reti) per risolvere un problema. Ma non devi diventare un esperto nella lettura del linguaggio macchina quando tutto ciò che vuoi fare è costruire una pagina web.

Allo stesso modo, i costruttori di ponti risolvono ogni volta un problema leggermente diverso (è un fiume diverso). Non si preoccupano di come creare travi di acciaio con una certa resistenza alla trazione o di come lavorare i bulloni con una certa tolleranza. Lo lasciano agli specialisti che hanno risolto quel problema.

Osserva attentamente e vedrai che l'intera nostra società e infrastruttura sono costruite sul riutilizzo del 99% e solo sull'1% di progressi reali. La maggior parte delle cose nuove sono solo cose vecchie con qualcosa in più aggiunto o rimosso. È l'accumulo di conoscenza umana. Puoi scrivere codice in un linguaggio di alto livello con librerie decenti perché qualcuno ha capito tutte le cose incredibilmente complicate necessarie per arrivare a questo punto. Ti consente di risolvere problemi nuovi e interessanti.

Per legare tutto insieme e rispondere ai commenti: non è necessario risolvere i problemi che sono già stati risolti per sviluppare competenza. Inoltre, molto di ciò che fai reinventerà la ruota. Quindi, in breve, la risposta è no: non è necessario implementare nuovamente le funzioni delle biblioteche per diventare competenti. Ci sono molte opportunità, alcune delle quali sono vere, altre sono creative per affinare il tuo mestiere.


1
Penso che tocchi alcuni punti potenzialmente validi, ma non li vedo legare insieme per rispondere alla domanda. E non sono d'accordo con il rapporto 99: 1 per il riutilizzo. Penso che sopravvaluti gravemente la quantità di riutilizzo. Anche all'interno dello sviluppo software, le percentuali di riutilizzo non sono affatto così alte.

-2

Si tratta di risorse. Anni fa, se sviluppaste progetti software per computer mainframe di grandi dimensioni, potrebbero essere in circolazione per circa 15 anni con un ambiente di sviluppo in gran parte statico. Il programma FORTRAN scritto per calcolare il libro paga o il programma COBOL è stato perfezionato nel corso di decenni perché è stato costantemente utilizzato. C'erano risorse per vedere come questo potesse essere migliorato. Non abbiamo più quel tipo di ambiente lento per mettere a punto e perfezionare le competenze per un progetto specifico. Ma prendiamo le competenze e le adattiamo alle risorse del prossimo progetto permettendo. Ma alla fine diventa una scelta di denaro speso per il nuovo progetto per fare il lavoro, o per fare il nuovo lavoro con una grande quantità di dorature. Placcare in oro un progetto significa migliorarlo all'ennesima potenza e aggiungere un sacco di campane e fischietti anche se l'utente non lo ha fatto

Il meglio che possiamo fare è guardare alla progettazione complessiva di un nuovo progetto e vedere come può essere migliorato sulla base dell'esperienza passata del team. Ma ci vuole una vera esperienza architetto del software per avere una visione di ciò che è effettivamente considerato migliorare il design per migliorare le competenze vs semplicemente racchiudere l'ultima parola d'ordine in sviluppo come Agile, OOP, ecc.


3
Comprendo alcuni dei punti che stai cercando di chiarire, ma sono basati sulla presunzione e sulla non familiarità. In passato sviluppavo per i mainframe e posso assicurarvi che il tasso di sviluppo è stato rapido come sui sistemi aperti. Il processo era diverso, ma il ritmo era lo stesso. La tua risposta sarebbe più forte concentrandoti sulla componente delle competenze trasferibili e spiegando le potenziali efficienze ottenute in quel modo.

Devi guardare la storia, non c'erano nuove tecnologie che uscivano ogni anno nei sistemi mainframe per CDC 6600 Kronos, per esempio. È stato sostanzialmente statico per 15 anni. Ora le cose si muovono molto più rapidamente e non c'è tempo per acquisire la profonda conoscenza acquisita in 15 anni. Per esempio, non ci sono programmatori Flash con 15 anni di esperienza nella realizzazione di Flash. Dopo aver riletto il mio post, rimango al mio post originale.
Edward,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.