Uno degli obiettivi principali dello sviluppo del software è concentrarsi sulla consegna di funzionalità implementate in codice di buona qualità.
Gli sviluppatori esperti dovrebbero scrivere software con buone prestazioni nella misura in cui comprendono ( nel modulo software su cui stanno lavorando). Ad esempio, dovrebbero essere in grado di utilizzare algoritmi e strutture dati appropriati durante l'implementazione di varie parti del sistema. In altre parole, la prima implementazione che hanno scritto per soddisfare un test unitario avrebbe le buone caratteristiche di prestazione che il prodotto finale dovrebbe avere.
Tuttavia, quando il sistema è ampio e complesso , costituito da molti componenti scritti da diverse persone / team e include più fornitori, è più produttivo per un'azienda separare i ruoli dell'ingegneria delle prestazioni da sviluppatori di software, in modo che gli sviluppatori di software possano concentrarsi sulle funzionalità e sulla correttezza che soddisfano le specifiche e il tecnico delle prestazioni può concentrarsi sulla misurazione e sul miglioramento delle prestazioni senza influire sulla funzionalità e sulla correttezza?
In parole povere, ci sono due diversi cappelli , che richiede due diversi mindset?
Motivazione:
Dalle risposte che ho ricevuto da un'altra domanda Un'alternativa alla richiesta di rosso in TDD: ripristino del codice? , mi rendo conto che durante il tempo di sviluppo del software principale, soddisfare i requisiti funzionali è un must-have mentre le prestazioni del software sono piacevoli da avere .
- I test sui requisiti funzionali hanno esiti deterministici, in genere Pass / Fail o Accetta / Rifiuta.
- Le caratteristiche di performance non hanno un target di accettazione / rifiuto fisso, ma hanno una metrica che può guidare lo sforzo di ottimizzazione delle prestazioni.
- I futuri cambiamenti nei requisiti funzionali potrebbero rendere necessario sacrificare / adeguare determinati obiettivi di prestazione.
- Personalmente, sono d'accordo sul fatto che dovrebbe esserci un rapido ciclo di feedback tra l'implementazione delle funzionalità e il monitoraggio delle prestazioni del software.
- In questa domanda sto discutendo se queste due sono specializzazioni separate - anche se alcune persone potrebbero essere specializzate in entrambi.
Risultati possibili
Quando l'implementazione e l'ottimizzazione delle funzioni sono eseguite da diversi sviluppatori:
- Andranno nei conflitti e non verrà fatto nulla. (contribuito da @quant_dev)
- Il software risultante ha prestazioni migliori.
- Il software risultante ha scarse prestazioni.
Related:
- link
- (Ci sarà presto una domanda a parte). È possibile che problemi di prestazioni del software possano derivare da sistemi software di grandi dimensioni che non possono essere previsti nemmeno dagli sviluppatori di software molto esperti? Sarà un ingegnere della performance dedicato a risolverlo?