La performance engineering è una specializzazione diversa dallo sviluppo generale del software?

6

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:

  1. Andranno nei conflitti e non verrà fatto nulla. (contribuito da @quant_dev)
  2. Il software risultante ha prestazioni migliori.
  3. 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?
posta rwong 08.05.2011 - 18:36
fonte

4 risposte

7

No, no, no, non puoi separare qualcosa che è intrinsecamente parte del lavoro.

I programmatori possono codificare qualsiasi cacca che faccia ticchettare tutti i test in verde e poi dire all'altro team di riscrivere tutto per farlo funzionare anche velocemente? Non funziona in questo modo.

È un lavoro dello stesso programmatore che scrive il codice per pensare anche alle prestazioni. Se li liberi da quell'obbligo, cosa li motiverebbe a imparare e a migliorare le cose ogni volta?

Detto questo, c'è un percorso di carriera se si sceglie di specializzarsi nell'ottimizzazione delle prestazioni. Ma non è come un lavoro quotidiano, è piuttosto che offri i tuoi servizi di consulenza a vari clienti per aiutare con i loro problemi di prestazioni. Ovviamente, per essere in grado di farlo, devi essere già passato oltre la possibilità di scrivere solo codice funzionante e avere acquisito conoscenza di come rendere il codice funzionante un codice veloce.

    
risposta data 08.05.2011 - 18:41
fonte
5

Sì, è assolutamente utile disporre di ingegneri esperti delle prestazioni, se il tuo sistema è al di sopra della media complessità.

Il motivo è che localizzare il collo di bottiglia di un sistema in uso effettivo è molto diverso dalla programmazione generale non sprecata. Deve assolutamente essere fatto su un sistema realistico, non su una sandbox di sviluppo. Richiede competenze (analitiche piuttosto che sintetiche) e strumenti (traccianti, profiler online) che sono molto diversi dalla programmazione delle applicazioni. Persino i più grandi esperti linguistici di solito non possono prevedere quale sarà il collo di bottiglia solo dall'ispezione del codice sorgente, e in effetti questa non è una cosa utile da fare. Mai supporre; misura sempre .

Inoltre, una volta misurato, la parte di un sistema che deve essere modificata per migliorare le prestazioni è in genere molto piccola rispetto all'intero sistema. E risolvere il problema potrebbe richiedere un linguaggio di programmazione diverso da quello originale (C invece di Python, Assembler invece di C ...) Non è semplicemente utile spendere questo tipo di sforzo su ogni parte di un sistema per cominciare e non ha alcun senso dal punto di vista economico richiedere a tutti i tuoi sviluppatori di conoscere l'assemblatore solo perché potrebbe rivelarsi necessario in alcuni punti.

    
risposta data 08.05.2011 - 19:28
fonte
4

Non credo che tu possa dividere completamente questo ruolo, perché l'ottimizzazione delle prestazioni spesso porta a soluzioni progettuali diverse (struttura del codice più piatta, più ripetizione, meno indiretta, meno astrazione) che concentrarsi totalmente sulla velocità di sviluppo, sulla manutenibilità e sull'estetica del codice. Il codice veloce è spesso un codice brutto. Se hai 2 team separati, uno che lavora su miglioramenti delle prestazioni, un altro che lavora sulla funzionalità, inevitabilmente si scontreranno e discutono sui cambiamenti di progettazione, che possono essere irreversibili. In poche parole, se un software deve essere veloce e mantenibile, deve essere scritto da un singolo team che conosca ENTRAMBI le prestazioni e i principi del "bel design". E sì, una squadra del genere è più difficile da costruire. Spiacente; -)

    
risposta data 08.05.2011 - 20:05
fonte
1

Ecco un esempio di una delle mie esperienze in ottimizzazione delle prestazioni.

Ecco un altro.

Se fossi tornato nel mondo accademico, e potrei dire ai programmatori di oggi come affrontare questo problema, farei in modo che siano competenti nel tecnica di pausa casuale .

Così com'è, escono dalla scuola pensando che a) la performance sia tutta una questione di big-O, e b) i profiler siano come trovi i problemi di performance. Questo perché è tutto ciò che i loro insegnanti sanno, e i loro insegnanti non hanno mai fatto molto per ottimizzare le prestazioni su software reale (grande), come nei link sopra. Pensano ancora alla misurazione = trovare, e pensano ancora che stiano cercando "metodi in cui il tempo è trascorso", come se il significato di ciò fosse persino compreso. Ecco un elenco dei miti.

Quindi, per rispondere alla tua domanda, a) il test di qualità dovrebbe assicurarsi che siano inclusi test di stress, per rilevare problemi di prestazioni, e b) i programmatori dovrebbero essere quelli per trovare e risolvere i problemi di prestazioni, proprio come qualsiasi altro bug .

Quando i programmatori acquisiscono un'esperienza sufficiente, imparano a evitare approcci progettuali che portano a problemi di prestazioni, come la progettazione di strutture dati eccessivamente complicate, dati non normalizzati e cose che sono state insegnate come parte di OOP, come l'eccessiva dipendenza in caso di notifica, troppe "novità" e nascondigli di informazioni che portano a buchi neri che ingannano il programma.

Con l'esperienza, imparano come usare le loro abilità OOP con giudizio e con parsimonia, in modo da non causare molti problemi di prestazioni. Imparano anche come trovare e rimuovere quelli rimanenti che fanno causa.

I problemi di prestazioni sono come bug. I programmatori esperti ne fanno meno, ma se non lo fanno non funzionano. In ogni caso è compito loro trovarli e risolverli, ma nella mia esperienza, purtroppo, pochi di loro sanno davvero come, e tutti noi sperimentiamo il risultato.

    
risposta data 28.08.2011 - 19:14
fonte

Leggi altre domande sui tag