2021-04-16
slides.com/jod/pt_16b
Docent: Jo Devriendt
Assistent: Ann Philips
Coördinator: Joost Vennekens
voornaam.achternaam@kuleuven.be
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
test de onderliggende procedures
test de functionaliteit van het systeem zonder te weten wat de achterliggende implementatie is
"abstractie"
Dimensie 1: blackbox vs whitebox
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Dimensie 2: vier testniveaus
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
void quicksort(int a[], int n) {
// ...
}
int isGesorteerd(int a[], int n){
for(int i=1; i<n; ++i){
if(a[i-1]>a[i]) return 0;
}
return 1;
}
int quicksort_test(){
int a[5] = {5,3,4,2,3}; // simpel geval
quicksort(a,5);
if(!isGesorteerd(a,5)) return 0;
int b[4] = {1,2,3,4}; // randgeval
quicksort(b,4);
if(!isGesorteerd(b,4)) return 0;
// ...
return 1;
}
quicksort sorteert array van klein naar groot <- heldere functionaliteit
checkt of een array gesorteerd is
Test voor relevante arrays of quicksort inderdaad de array sorteert
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Oplossing: stubbing / mocking
Maak een versimpelde implementatie (stub) of simuleer de werking (mock) van de modules die niet getest moeten worden.
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Schrijf unit tests vooraleer de echte code geschreven wordt.
Voordelen:
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
#include <assert.h>
int isGesorteerd(int a[], int n){
for(int i=1; i<n; ++i){
if(a[i-1]>a[i]) return 0;
}
return 1;
}
void quicksort(int a[], int n) {
// ...
assert(isGesorteerd(a,n)); // postconditie
}
Via assert wordt automatisch gecheckt of de array gesorteerd is
-> postconditie
#include <assert.h>
void drukAf(Node* root){
assert(root!=NULL); // preconditie
// ...
}
Via assert wordt automatisch gecheckt of de root Node pointer niet NULL is
-> preconditie
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Extra voorbeeld: robotvoorbeeld voor backtrackingalgoritmes op pastebin.com/bh5HWEGj
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Wanneer is je code voldoende getest?
int procedure(unsigned char x, unsigned char y){
if(x!=0 && y!=0){
return x+y;
}else{
return 0;
}
}
Deze procedure heeft 256*256 mogelijke inputs. Testen of al deze inputs de juiste output genereren is doenbaar, maar lastig.
In het algemeen is het meestal ondoenbaar om een programma voor alle mogelijke scenario's te testen.
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Alternatief: schrijf voldoende testen zodat het hele programma "gecoverd" is
Steeds uitgebreider
Idealiter: 100% test coverage ;)
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
int procedure(unsigned char x, unsigned char y){
if(x!=0 && y!=0){
return x+y;
}else{
return 0;
}
}
int test_procedure(){
// 1 test is genoeg voor function coverage
assert(procedure(1,1)==2);
// met tweede test hebben we statement en branch coverage
assert(procedure(0,1)==0);
// met nog een derde test hebben we condition coverage
assert(procedure(1,0)==0);
return 1;
}
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021