2015-05-07 13 views
5

In una recente interrogazione (How to define (and name) the corresponding safe term comparison predicates in ISO Prolog?) @false chiesto un'implementazione del termine ordinamento predicato lt/2, una variante della norma ISO incorporato (@<)/2.Testing predicato "ordine sicura termine"

Il valore di verità di lt(T1,T2) deve essere stabile w.r.t. associazioni variabili arbitrarie in T1 e T2.

In varie risposte, sono state proposte diverse implementazioni (basate su traversal a termine implicito/esplicito). Alcuni commenti e avvertenze sono stati sollevati nei commenti, così come controesempi.

Quindi la mia domanda: come possono essere testate le implementazioni dei candidati? Qualche approccio a forza bruta? O qualcosa di più intelligente?

In ogni caso, si prega di condividere le macchine di prova automatica per lt/2! È per il bene maggiore!

+1

C'è già un 400 bounty per la domanda correlata .. – false

risposta

1

ci sono due strategie di sperimentazione: validazione e verifica.

Validazione: Il test è sempre lo stesso. Per prima cosa hai bisogno di una specifica di ciò che vuoi testare. In secondo luogo è necessaria un'implementazione di ciò che si desidera testare.

Quindi dall'implementazione vengono estratti i percorsi di esecuzione del codice. E per ogni percorso di esecuzione del codice dalla specifica, si ottiene il risultato desiderato.

E quindi si scrivono casi di test che combinano ogni percorso di esecuzione e i risultati desiderati. Non solo testare percorsi positivi, ma anche percorsi negativi.

Se il tuo codice è ricorsivo, hai teoricamente infinitamente molti percorsi di esecuzione.

Ma potreste scoprire che una sub ricorsione più o meno chiede lo stesso di quello che un altro caso di test già chiesto. Quindi puoi testare con un set finito in molti casi.

La convalida offre sicurezza.

Verifica: È necessario utilizzare alcuni metodi formali per ricavare la correttezza della propria implementazione dalle specifiche.

La verifica garantisce il 100%.

+0

Ok, quindi come potrei andare sulla validazione di qualcosa come 'lt/2'? – repeat

+1

Il documento standard core ISO, in questo documento ci sono modelli, specifiche e casi di test per ogni predicato. Prova a fare lo stesso per lt/2. Quindi costruisci un corridore di test, progetta alcuni helper per test harness e veri casi di test. Ho fatto lo stesso recentemente per il mio CLP (FD): http://www.jekejeke.ch/idatab/doclet/prod/en/docs/15_min/15_stdy/07_compliance/09_results/package.html Collegamenti tra rapporto di prova e caso di test ora dovrebbe funzionare. –

+0

Un'aggiunta più recente, un piccolo strumento di copertura del codice, che aiuta a verificare se tutti i percorsi sono controllati o meno: https://plus.google.com/+JekejekeCh/posts/4EP29tzxWp9 –