Come fa uno sviluppatore di software a sapere se l'hardware di destinazione è abbastanza veloce da eseguire il software? [duplicare]

3

In che modo gli sviluppatori software riescono a sapere se il loro software verrà eseguito sull'hardware di destinazione che stanno sviluppando? Molti sviluppatori oggi lavorano su macchine molto più velocemente della piattaforma prevista. Che tipo di strumenti usano per capire quando stanno andando in mare?

Sto chiedendo dal punto di vista in cui ad esempio sviluppi algoritmi su un x86 moderno in un ambiente GNU / Linux, ma la piattaforma prevista è un braccio molto più lento, ancora in GNU / Linux.

    
posta macbug 23.01.2015 - 23:57
fonte

3 risposte

5

Ideally in my world there would be a tool to benchmark the platforms and then a tool for running the program to get some figures so you could compare and understand which platform you'll be using later on.

Non esiste uno strumento di questo tipo.

Non c'è nemmeno una metodologia da seguire.

Il meglio che puoi fare è estrapolare dalle prestazioni misurate dell'applicazione in esecuzione su una piattaforma diversa. Anche quello è suscettibile di essere inaffidabile.

Fondamentalmente, le prestazioni di un'applicazione dipenderanno da un gran numero di parametri complicati della piattaforma e (in alcuni casi) da interazioni complesse tra la piattaforma e il comportamento a grana fine delle applicazioni. È troppo complicato da modellare.

(A seconda della natura dell'applicazione, i parametri possono includere velocità di clock della CPU, chipset della CPU, numero di core, dimensioni della memoria, architettura della memoria, velocità di memoria, larghezza di banda del sistema I / O, interfaccia di rete, scheda grafica, disco rigido controller e dispositivo, eccetera, eccetera. Centinaia di diverse caratteristiche hardware e software potrebbero essere rilevanti ...)

Il miglior consiglio pratico sarebbe semplicemente provarlo. Se non puoi permetterti di acquistare un esempio di ciascuna piattaforma candidata, controlla se il venditore ti consente di provare l'applicazione sul loro kit prima di firmare il contratto per l'acquisto. Se non puoi farlo, lancia una moneta ...

    
risposta data 24.01.2015 - 06:53
fonte
3

Se intendi come vengono trovati i requisiti minimi / consigliati del sistema, l'applicazione viene semplicemente provata su macchine diverse.

Nella maggior parte dei casi, c'è no hard limit : se l'applicazione funziona con 512 MB di memoria, probabilmente funzionerà anche con 511 MB di RAM (a meno che non controlli esplicitamente la memoria) . Ciò significa che potresti avere un numero limitato di macchine da utilizzare per il benchmarking e dedurre i limiti da lì. Ad esempio, se la macchina con 1 GB di RAM riesce a eseguire a malapena l'app, mentre una macchina con 4 GB di RAM lo esegue abbastanza bene e mantiene in media da 1 a 2 GB gratuiti, i requisiti minimi di sistema possono includere 2 GB di memoria.

Precisione

Nota che il benchmarking e la profilazione sono precisi. Un requisito di prestazione non funzionale, ad esempio, specificherà in dettaglio l'hardware di test e il carico, il numero di millisecondi che rappresentano la soglia e la percentuale di soglia. È quindi possibile eseguire un test automatico che passa o non riesce, a ogni commit, che indica quando l'app è diventata più lenta del previsto. Parlare di sentimenti ("questa parte dell'app sembra rallentare per me") è inaccettabile, perché l'avvocato del tuo cliente può affermare che l'app non si sente ancora abbastanza veloce, mentre hai speso negli ultimi due mesi, ottimizzandolo e trovandolo estremamente veloce.

Quando si tratta di requisiti minimi / consigliati del sistema, tale precisione è raramente richiesta. La persona che annota i requisiti di sistema può infatti semplicemente testare l'app su più macchine e utilizzare il suo sentimento di veloce / lento come unico criterio. Se invece il contratto prevede che l'app debba essere eseguita su una macchina con 2 GB di memoria, dovrebbe essere nella specifica dei requisiti del software, scritta in termini non ambigui (vedi sopra).

Ambiente di test

Nota anche che:

  • Dovresti testare il software su hardware diverso comunque (a meno che, ovviamente, il software non sia distribuito in un ambiente controllato, come un singolo data center), quindi ci sono possibilità che tu hai già l'infrastruttura di cui hai bisogno.

  • Le macchine virtuali rendono tali test meno costosi rispetto all'acquisto di dozzine di macchine reali e reali.

    Tuttavia, il testing su macchine virtuali potrebbe non essere semplice come lanciare una VM nel pool: mentre molti hypervisor (o sistemi operativi stessi) svolgono un ottimo lavoro consentendo di limitare alcuni aspetti (come la larghezza di banda della rete), richiede ancora una configurazione aggiuntiva.

Complessità

Ho usato la RAM come illustrazione, ma la stessa logica si applica a qualsiasi altro aspetto: velocità della CPU, spazio libero su disco rigido, velocità di tali dischi rigidi, larghezza di banda della rete, ecc. Senza contare che lo stesso hardware potrebbe non funzionare esattamente lo stesso ogni volta.

Ad esempio, uno dei miei prodotti software ha avuto un bug che ho speso un sacco di tempo per eseguire il debug. Sembra che quando Windows mette i dischi rigidi in stand-by quando non vengono utilizzati per alcuni minuti e hanno dormito a lungo, svegliarli richiede un po 'di tempo, che a volte ha attivato un timeout nella mia app.

Ciò rende questo test un compito difficile, anche con macchine virtuali. Questa è una delle due maggiori complessità del software desktop, l'altra è il fatto che il prodotto software deve sopravvivere in natura, vale a dire andare d'accordo con migliaia di altri prodotti software (incluso il malware) che possono essere installati, gestire diverse configurazioni , opzioni di accessibilità, cose rotte, ecc.

    
risposta data 24.01.2015 - 00:10
fonte
-2

Visto come è possibile configurare l'hardware e la memoria che la VM è consentita, è possibile testare una vasta gamma di configurazioni sul proprio PC. Ciò consente anche di eseguire test su più sistemi operativi.

Beh, per esempio la CPU di un PC potrebbe essere 6 Ghz. Quando installi il PC virtuale puoi effettivamente impostare il computer in modo che ne usi una certa quantità. Ad esempio, è possibile impostare il PC virtuale per l'esecuzione a 2,5 Ghz e testare il gioco per vedere se funziona. Quando trovi il punto in cui il gioco non funziona correttamente, dì 2ghz. Dovresti fare un passo avanti fino a 2,2 Ghz e se funziona bene sarebbe la tua specifica minima per quel pezzo di hardware.

Ho trovato le informazioni qui sotto da Justin Cave su stackexchange. L'URL web di una domanda simile è Come vengono determinati i requisiti minimi di sistema? Tutte le informazioni di seguito sono arrivate direttamente da Justin Cave 2011 e non sono state modificate.

Spesso, i requisiti minimi sono stabiliti osservando i tipi di sistemi che i clienti del mercato di destinazione effettivamente utilizzerebbero per il prodotto in questione e scegliendo un taglio ragionevole che non alienasse il cliente target ed è qualcosa che il dipartimento QA può testare con una minima seccatura aggiuntiva.

Se ti aspetti che la maggior parte dei tuoi clienti installerà il tuo prodotto su computer desktop relativamente recenti, ad esempio, probabilmente ti guarderai intorno e vedrai che quasi tutti i computer desktop di fascia bassa per la casa verranno distribuiti con 2 GB di RAM. Quindi è probabile che un computer recente abbia almeno 1 GB di RAM anche se ha un paio di anni. Se solo pochi dei tuoi clienti vorranno utilizzare una macchina con solo 512 MB di RAM, è probabile che le entrate di queste vendite siano più che compensate dalle richieste di supporto (è probabile che le macchine più vecchie abbiano molti altri problemi e incompatibilità che causeranno problemi e genereranno più chiamate all'help desk rispetto ad altri clienti). Quindi potrebbe essere più redditizio evitare di fare vendite a quei clienti.

    
risposta data 24.01.2015 - 02:25
fonte

Leggi altre domande sui tag