SLIDE 15 Shrinking
Shrinking
Flaw of random testing: failed cases may be too complex → hard to debug ✞
:- check pred quicksort(Xs,Ys): (list(Xs,int), var(Ys)) + is_det. ... partition([],_,[],[]). partition([X|Xs],P,[X|L],R) :- X =< P, partition(Xs,P,L,R). partition([X|Xs],P,L,[X|R]) :- X >= P, partition(Xs,P,L,R). % should be >
✝ ✆ Assertion failed for quicksort([5,9,-2,12,-4,9,3],Ys) Solution (QuickCheck): shrinking
◮ Generate simpler test cases from found counter-examples
Testing quicksort([9,-2,12,-4,9,3],Ys) (fails too) Testing quicksort([-2,12,-4,9,3],Ys) (does not fail) Testing quicksort([9,12,-4,9,3],Ys) (fails too) ... Assertion failed for quicksort([9,9],Ys) Our tool → Automatic shrinking based on sizes (related to resource analysis/domains [SizedTypes]).
De Casso et al. (IMDEA Software/UPM/CSIC) Assertion-Based Random Testing MFoC – November 26, 2019 14 / 19