Costo Indiretto di una Chiamata di Funzione

Costo indiretto di una chiamata di funzione: Recentemente, vorrei applicare il metodo unit test al mio programma R. La prima cosa che devo fare è tagliare ogni poche righe di codice in funzioni in modo da poterle testare ciascuna.

Viene in mente una domanda: qual è il costo generale di una chiamata di funzione? Per rispondere a questa domanda, ho scritto quanto segue:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
library(rbenchmark)
library(compiler)
f<-function(x,y){
x+y
}
g<-function(x,y){
f(x,y)
}
cmpf<-cmpfun(f)
cmpg<-cmpfun(g)
benchmark(1+2,f(1,2),g(1,2),cmpf(1,2),cmpg(1,2),cmpg2(1,2), replications =1000000, columns = c("test", "replications", "elapsed", "relative"),order='relative')
test replications elapsed relative
1 1 + 2 1000000 4.00 1.000
4 cmpf(1, 2) 1000000 4.34 1.085
2 f(1, 2) 1000000 4.82 1.205
5 cmpg(1, 2) 1000000 5.44 1.360
3 g(1, 2) 1000000 5.68 1.420

Il risultato suggerisce diverse cose.

Il costo complessivo è di circa 0,82 secondi per una chiamata di funzione 1.000.000 di volte.
Se compiliamo la funzione, il costo indiretto è di circa 0,34 secondi per ogni 1.000.000 di chiamate di funzione.

Non so se sia un costo enorme, ma penso che il vantaggio di scrivere un codice più pulito con i test unitari dovrebbe valere di più!

TszKin Julian Chan

Leave a Reply