Testdata opschalen naar meerdere landen wordt meestal geprobeerd door meer landen aan dezelfde generator toe te voegen. Dat werkt een tijdje en stopt dan, omdat de verschillen tussen landen geen variaties van één sjabloon zijn; sommige ervan spreken het tegen.
De uitweg is te definiëren wat voor elk land waar is en al het andere als een expliciete uitzondering te behandelen. Dit artikel behandelt die splitsing, waarom een gegenereerde populatie reproduceerbaar moet zijn, en hoe je landen bemonstert zodat de populatie de moeilijke gevallen bevat in plaats van alleen de makkelijke.
Wat hoort in de invariantenset?
Een invariante is een eigenschap die voor elk land in de set zonder voorbehoud geldt. Ze verdient die status doordat ze waar is van het datamodel in plaats van van een bepaald land.
Typische leden zijn structureel: elk land heeft een stabiele identificatie, elke identificatie verwijst naar precies één land, elk land draagt een weergavenaam en een code, en geen veld is verplicht voor een land waarvan het systeem het niet heeft. Die uitspraken zijn kort, controleerbaar en overal waar.
De test om te bepalen of iets werkelijk invariant is, is proberen een tegenvoorbeeld te vinden. De meeste eigenschappen doorstaan dat, en de weinige die dat niet doen, zijn degene die anders over de hele populatie zouden worden afgedwongen en een stroom storingen zouden opleveren die de schuld van het model blijken te zijn in plaats van van de gegevens.
Houd de invariantenset klein. Een lange lijst invarianten is meestal een lijst uitzonderingen in vermomming, en het wordt onmogelijk om een echte regressie te onderscheiden van een normaal land dat zich normaal gedraagt.
Hoe ziet een uitzonderingenlijst eruit?
Een uitzondering is een benoemde, gedocumenteerde afwijking van een invariante, beperkt tot specifieke landen en met een reden erbij.
| Element | Waarom het nodig is |
|---|---|
| Het land of de landen die het betreft | Zodat de lijst kan worden opgevraagd in plaats van gelezen |
| De invariante waarvan wordt afgeweken | Zodat de afwijking ondubbelzinnig is |
| De reden | Zodat een latere lezer kan beoordelen of ze nog geldt |
| Wat de generator in plaats daarvan moet doen | Zodat de afwijking uitvoerbaar is in plaats van adviserend |
De laatste rij is wat een uitzonderingenlijst onderscheidt van een klaaglijst. Een uitzondering die alleen zegt dat een land ongewoon is, kan door niets worden toegepast, dus ofwel negeert de generator haar, ofwel behandelt hij het land elders als speciaal geval, en de lijst raakt uit de pas met de code.
Waar een uitzondering op een groep landen van toepassing is, schrijf die dan één keer voor de gedeelde eigenschap en verwijs vanuit die uitzondering naar de landen. Groeperen op eigenschap in plaats van op een lijst codes houdt de uitspraak betekenisvol wanneer een land aan de set wordt toegevoegd of eruit verwijderd.
Waarom moet generatie reproduceerbaar zijn?
Omdat een niet-reproduceerbare populatie niet kan worden gedebugd. Wanneer een storing opduikt, is de eerste vraag of de gegevens zijn veranderd of de code, en een generator die bij elke run een andere populatie oplevert, haalt het vermogen weg om die vraag te beantwoorden.
Reproduceerbaarheid betekent dat een gegeven invoer een identieke uitvoer oplevert, inclusief de volgorde van de records en de waarden erin. Dat vereist een vast startpunt voor de willekeurige keuzes en een regel die de keuzesequentie stabiel houdt wanneer de landenset groeit, zodat het toevoegen van één land de gegevens voor alle andere niet door elkaar gooit.
Aan de tweede eis wordt makkelijk voorbijgegaan. Een generator die waarden trekt uit één lange sequentie gekoppeld aan het totale aantal, levert een volledig andere populatie op wanneer een land wordt toegevoegd, wat het vermogen om twee runs te vergelijken vernietigt. Seeden per land, of per land en veld, houdt elke vermelding stabiel terwijl de populatie uitbreidbaar blijft.
Hoe moeten landen worden bemonsterd?
Bewust, en niet uniform. Een populatie die elk land met gelijke waarschijnlijkheid bemonstert, besteedt het grootste deel van zijn omvang aan het midden van de verdeling en bevat bijna geen van de gevallen waarvoor de suite bestaat.
Gestratificeerde steekproeven zijn de praktische vorm: verdeel de set in groepen die de eigenschappen delen die ertoe doen, en trek dan uit elke groep in plaats van uit het geheel. De groepen horen de assen te volgen waarlangs het product werkelijk varieert — of een veld bestaat, of gegevens dun of compleet zijn, of een land een afhankelijk gebied of een volledig gespecificeerde vermelding is, of de taal afwijkt van de gebruikelijke standaard.
Vul dan de moeilijke cellen met opzet in plaats van te hopen ze te raken. Een populatie die één land zonder postcodesysteem, één klein gebied en één land waarvan de naam is veranderd bevat, is nuttiger dan een populatie die meerdere keren groter is en geen van hen bevat.
| As | Wat het variëren ervan oefent |
|---|---|
| Aanwezigheid van een veld | Codepaden voor een veld dat niet van toepassing is |
| Datadikte | Onvolledige vermeldingen en onbekende toestanden |
| Entiteitstype | Afhankelijke gebieden en speciale codes |
| Taal van de weergavenaam | Sorteren en normaliseren |
Langs elke as tegelijk bemonsteren levert een onbruikbare matrix op, dus kies de assen die ertoe doen voor de suite in kwestie en vermeld welke zijn weggelaten. Een niet vermelde weglating leest als dekking.
Voor ontwikkelaars: leg de invarianten vast, leg de uitzonderingen vast
Twee lagen van asserties houden de populatie eerlijk. De ene controleert de invarianten over elk gegenereerd record, wat onbedoelde speciale behandeling vangt. De andere controleert dat elke gedocumenteerde uitzondering werkelijk wordt geproduceerd, wat een uitzonderingenlijst vangt die van de generator is weggedreven.
De tweede laag is degene die mensen overslaan, en het is degene die de stille fout detecteert waarbij een land niet meer wordt gegenereerd zoals de documentatie beweert. Leg de uitzondering vast op naam en op verwachte vorm, zodat een wijziging aan de generator gepaard moet gaan met een wijziging aan de lijst.
Voed de toestanden die in de checklist voor landendatadekking worden beschreven in de generatieregels, in plaats van ze als een rapport te behandelen, zodat een land waarvan het veld niet van toepassing is een record oplevert dat dat zegt in plaats van een record dat onaf lijkt. Voor de coderingslaag eronder is de gids over ISO-land- en onderverdelingscodes de relevante achtergrond, en de landen- en regiorgids laat zien op wat voor populatie deze generatie bedoeld is te lijken.
De invariantenlijst, uitzonderingenlijst en bemonsteringsassen in dit artikel zijn illustratieve structuur en geen specificatie. Ze beschrijven geen echte testsuite, geen echte dataset en geen verzameling landen van enige organisatie, en ze horen te worden aangepast in plaats van overgenomen.
Volgende stappen
Schrijf je invarianten op één pagina en je uitzonderingen op een andere, en controleer welke ervan de huidige generator werkelijk naleeft. Een vermelding die is verouderd, is niet hetzelfde probleem als een vermelding die nooit compleet was, en de gids over de actualiteit van landendata behandelt hoe de twee verschillend moeten worden behandeld.