Criteri per la selezione del valore di timeout?

2

Situazione: un pezzo di software legge i frame di dati da un file in un thread separato e lo mette in coda, svuotato da un altro thread. Questo secondo thread verifica periodicamente la coda e fallisce in modo piuttosto garbato, mostrando un messaggio di errore che indica che la lettura è scaduta, se non ci sono dati disponibili entro un certo periodo di tempo. Inizialmente questo timeout era impostato su 200mSec. Non c'era un vero ragionamento dietro quella costante, però, ma ha funzionato bene. Abbiamo misurato su un paio di macchine e per frame di dati di grandi dimensioni, più grandi di quelli che sarebbero stati utilizzati dai clienti, una lettura ha preso come 20mSec con nessun altro carico sulla macchina.

Tuttavia un cliente ora riceve ora errori di timeout (al secondo tentativo va tutto bene, probabilmente il file è in cache o lo scanner antivirus lascia da solo). I programmatori sono come "beh, sì, ma quella macchina del cliente è piena di cruft, scanner antivirus, tonnellate di processi in background non necessari, ecc.". Ovviamente il cliente è come "hey dovrebbe funzionare, non dovrebbe?" Mentre i programmatori hanno un punto, dal momento che il software è abbastanza pesante da convalidare la necessità di una macchina dedicata, ciò non rende il cliente felice.

Aumentare il timeout a 2 secondi, ad esempio, risolve il problema. Ma mi piacerebbe prendere una decisione corretta ora invece di scegliere casualmente una costante magica che è probabilmente ok nel 99% dei casi. Quali criteri dovrebbero essere utilizzati per questo? Potremmo scegliere un numero elevato, ma questo sembra sbagliato. (e poi finiamo con un programma che ha l'orribile modo di appendere quando proviamo a leggere da un'unità disconnessa, per esempio, mentre preferiamo farlo mostrare subito un errore). Oppure potremmo rendere il valore di timeout come un'impostazione utente, ma poi dobbiamo documentarlo chiaramente e anche allora non tutti i clienti sono sufficientemente tecnici per capire veramente cosa fa. Oppure potremmo provare ad aspettare fino a quando un altro cliente non segnalerà i timeout e aumenterà nuovamente il valore. E di nuovo. Fino a quando non troviamo qualcosa per il 99,99% dei casi. Qualche buona pratica per questo tipo di situazione?

    
posta stijn 12.10.2012 - 08:58
fonte

2 risposte

4

È molto simile ai requisiti non funzionali delle prestazioni: come puoi dire che un processo specifico dovrebbe richiedere 100 ms., o 500 ms., o forse 10 secondi? La risposta è la stessa: spetta agli stakeholder decidere, dopo essere stati consigliati da interaction designer.

È anche il lavoro di un interaction designer per rendere l'applicazione reattiva nel tuo caso. Se il timeout viene aumentato a 2 secondi, ciò non significa che nel caso di un'unità disconnessa, l'applicazione dovrebbe bloccarsi completamente durante questo periodo. È difficile essere più dettagliato, ma ecco un esempio di esperienza utente che posso immaginare:

  1. Sto facendo qualcosa che avvia l'azione che descrivi. Questa azione ha un timeout di due secondi.

  2. Dato che in casi normali, l'azione dura ca. 20 ms., Non viene visualizzato nulla durante i primi 100 ms.

  3. Supponiamo che si verifichino problemi di connettività di rete locali. Dopo quei 100 ms., L'applicazione mostra un'animazione che indica che al momento sta facendo qualcosa. Facoltativamente, può essere mostrato anche un pulsante di annullamento.

  4. Se non è possibile accedere al file dopo due secondi, l'applicazione si scusa con l'utente, spiega perché non può funzionare come previsto e cosa l'utente può fare per aiutare l'applicazione a funzionare come previsto di nuovo.

  5. Durante la visualizzazione, l'applicazione controlla in loop se il file non è ancora disponibile. Se la connessione è tornata, l'applicazione informa l'utente che il problema è stato risolto.

risposta data 12.10.2012 - 09:16
fonte
3

Non vorrei sovraesaminare questo. Opterei per l'impostazione dell'utente. In questo modo tu o il tuo helpdesk sarete in grado di aiutare un cliente al volo senza problemi.

Se hai bisogno di aiutare i clienti a modificare questa impostazione molte volte è il momento di automatizzarla. Potresti usare un po 'di euristica come aumentare il valore di timeout ogni volta che si verifica un timeout, ricordando il valore che funziona ecc ...

    
risposta data 12.10.2012 - 12:44
fonte

Leggi altre domande sui tag