Dove verificare che una funzione abbia effettivamente fatto ciò che gli ho detto?

1

Considera questa funzione pensata per uccidere tutte le istanze in esecuzione di un sottoprocesso:

killAllFoobars()
{
    pids = getRunningFoobars();

    foreach ( pids as p ) {
        killOneFoobar(p);
    }

    return TRUE;
}

Dove dovrei controllare che in realtà tutti i Foobar siano stati uccisi? Dovrebbe killOneFoobar () controllare che il suo Foobar sia ora ucciso? Dovrebbe killAllFoobars () controllare che non ci siano più Foobars in esecuzione prima di ritornare TRUE (sembra un po 'ingenuo restituire VERO senza controllo). La funzione che chiama killAllFoobars () dovrebbe controllare?

Considera che il controllo è un'operazione costosa, quindi non dovrebbe essere fatto "solo ogni volta" ma piuttosto solo quando necessario.

    
posta dotancohen 20.01.2013 - 10:46
fonte

3 risposte

4

Non sarai mai sicuro che tutti i Foobar vengano uccisi (e se un nuovo foobar viene creato dopo il controllo, ma prima di tornare dalla funzione?). Assicurati che le funzioni di uccisione funzionino come previsto. Se vuoi fare di più, puoi fare un ciclo per sempre, uccidendo nuovi processi man mano che vengono creati.

    
risposta data 24.01.2013 - 16:03
fonte
3

Esegui un conteggio su $pids = getRunningFoobars(); dopo che foreach è terminato per vedere se ce ne sono ancora in esecuzione. Non puoi restituire un 'vero' assumendo semplicemente. Potrebbe essere un controllo costoso, ma il controllo è necessario prima di confermare all'utente della funzione che ha avuto successo.

    
risposta data 20.01.2013 - 11:11
fonte
1

Se la spesa per controllare l'uccisione di ogni foobar sommato equivale a controllarli tutti, vorrei controllare la funzione più profonda, kill-one. Se dovessi riutilizzare altrove la funzione kill-one, sarebbe più preciso e utile. Inoltre consolida la tua logica di processo specifica in un'unica funzione.

    
risposta data 20.01.2013 - 21:24
fonte

Leggi altre domande sui tag