Actualiteit

Testen van rapporten met grafieken en diagrammen

In dit artikel leg ik uit hoe je een rapport met daarin grafieken en diagrammen kan testen als je als tester toegang hebt tot de achterliggende database. Hierbij maak ik gebruik van twee tools: Excel en SQL, in mijn geval MySQL.

Na het lezen van dit artikel weet je welke stappen je moet nemen om willekeurige grafieken en diagrammen te testen en zal je inzien dat de query’s die je hebt geschreven testscripts zijn die zich eenvoudig opnieuw laten uitvoeren als je moet her-testen.

Begrijp het datamodel

Als je een rapport wilt testen is de eerste stap het datamodel begrijpen. Wat wordt er vastgelegd per tabel en hoe liggen de relaties tussen de tabellen onderling? Wat zijn de requirements die er gelden als een regel wordt toegevoegd, gewijzigd of verwijderd in een tabel? Doe hierbij geen aannames, maar laat je voorlichten door iemand met kennis van het datamodel.

In dit artikel maken we gebruik van een datamodel dat hoort bij een inzetplanning van een consultancybureau. Dit bureau verhuurt medewerkers aan klanten. De klant doet een aanvraag en het consultancybureau kan een aanbieding doen. Als de klant de aanbieding accepteert volgt een intake. Zo niet, dan is de aanbieding verloren. Afhankelijk van het resultaat van de intake krijgt het bureau óf de opdracht, of is de aanbieding verloren.

Medewerkers van het consultancy maken onderdeel uit van teams; een medewerker kan maar in één team zitten. Teams zijn bijvoorbeeld: analyse, development, testen, beheer, sales.

Datamodel

Eenvoudig voorbeeld

Nadat je het datamodel hebt begrepen, kan je de volgende stap zetten door per grafiek/diagram een query te schrijven die informatie in de grafiek/diagram in tabel-formaat weergeeft.

Voorbeeld-aanvragen

In bovenstaand diagram zie je het aantal aanvragen per accountmanager. In tabel vorm zou dit er als volgt uit zien:

Tabel-01-Accountmanagers

Deze tabel bevat één dimensie (accountmanager) en één metriek (aantal aanvragen). Deze tabel kun je samenstellen door een query te schrijven op twee tabellen uit de database: aanvraag en medewerker. De SQL-query ziet er dan als volgt uit:

SELECT

            medewerker.voornaam,

            COUNT(aanvraag.id)

FROM medewerker

JOIN aanvraag ON aanvraag.account_mngr_id = medewerker.id

GROUP BY 1

Tenslotte vergelijk je de uitkomst van de query met de resultaten in de tabel. Als de uitkomsten niet overeenkomen dan zijn er twee mogelijkheden:

  1. Je query is niet goed à corrigeren van query
  2. Het diagram is fout à corrigeren van diagram

Een meer gecompliceerd voorbeeld

In onderstaand grafiek zie per accountmanager het aantal aanbiedingen per laatste status van de aanbieding. Je ziet ook dat er meer statussen zijn dan ‘Aangeboden’, ‘Intake’, ‘Opdracht’ en ‘Verloren’.

Aanbiedingen per AM

Ook nu moeten we de bijbehorende tabel opstellen. De tabel bevat twee dimensies: accountmanager en status, en één metriek: aantal aanbiedingen, en ziet er dan als volgt uit:

Tabel-02-Accountmanagers

Bij het opstellen van de query moet je rekening houden met het feit dat een aanbieding een ontwikkeling doormaakt die wordt vastgelegd in de tabel aanbieding_historie. Bij elke verandering van de status van de aanbieding zal er een rij aan de tabel aanbieding_historie worden toegevoegd met daarin de nieuwe status. Dat betekent dat bij een aanbieding meer dan één rij kan voorkomen in de tabel aanbieding_historie. Voor onze tabel willen we alleen de laatste wijziging hebben die heeft plaatsgevonden op een aanbieding.

Dit betekent dat de query feitelijk uit twee stappen zal bestaan:

  1. Bepalen van de laatste status van een aanbieding
  2. Het resultaat uit stap 1 koppelen aan:
    1. de tabel aanbieding_status, via tabel aanbieding_historie om de naam van de status op te halen
    2. de tabel medewerker, via tabel aanvraag, via tabel aanbieding, via tabel aanbieding_historie, om de naam van de accountmanager op te halen

Je kan controleren of de eerste stap goed is opgesteld in SQL door het aantal rijen dat je vindt te vergelijken met het aantal rijen in de tabel aanbieding: deze moeten hetzelfde aantal rijen hebben. Elke aanbieding heeft tenslotte één huidige status. De query voor stap 1 ziet er dan als volgt uit:

SELECT

            aanbieding_historie.aanbieding_id,

            MAX(aanbieding_historie.laatste_wijziging) AS LW

FROM aanbieding_historie

GROUP BY 1

Deze query (oranje kleur) integreer je dan in een tweede query om de hele tabel te krijgen.

SELECT

            medewerker.voornaam,

            aanbieding_status.naam,

            COUNT(aanbieding.id)

FROM medewerker

JOIN aanvraag ON aanvraag.account_mngr_id = medewerker.id

JOIN aanbieding ON aanbieding.aanvraag_id = aanvraag.id

JOIN aanbieding_historie ON aanbieding_historie.aanbieding_id = aanbieding.id

JOIN aanbieding_status ON aanbieding_status.id = aanbieding_historie.aanbieding_status_id

JOIN (

            SELECT

                        aanbieding_historie.aanbieding_id,

                        MAX(aanbieding_historie.laatste_wijziging) AS LW

            FROM aanbieding_historie

            GROUP BY 1

) AS X ON

            X.aanbieding_id = aanbieding_historie.aanbieding_id AND

            X.LW = aanbieding_historie.laatste_wijziging

GROUP BY 1, 2

ORDER BY 1

Tenslotte vergelijk je de uitkomst van de query met de resultaten in de tabel.

Voorbeeld dat gebruik maakt van Excel-draaitabellen

In onderstaande grafiek zie het aantal aanbieding per accountmanager per klant. Als je één klant zou selecteren met behulp van het filter aan de rechterkant dan zie je de aantallen van de geselecteerde klant. Hetzelfde geldt als je een accountmanager selecteert met het bijbehorende filter. Op deze manier kan je veel combinaties krijgen; als je uitgaat van bijvoorbeeld zes accountmanagers, 50 klanten en vijf statussen, dan heb je 6 x 50 x 5= 1500 combinaties die je moet testen.

De tabel die bij deze grafiek bevat de volgende kolommen:
• Dimensie: accountmanager
• Dimensie: klant
• Dimensie: status
• Metriek: aantal aanbiedingen

De query waarmee je deze tabel maakt ziet er als volgt uit (en lijkt veel op de query uit het vorige voorbeeld). Merk op dat de drie dimensies en de metriek die we nodig hebben allemaal zijn opgenomen in de field list van de query (oranje).

SELECT

            klant.naam,

            medewerker.voornaam,

            aanbieding_status.naam,

            COUNT(aanbieding.id)

FROM aanvraag

JOIN aanbieding ON aanbieding.aanvraag_id = aanvraag.id

JOIN aanbieding_historie ON aanbieding_historie.aanbieding_id = aanbieding.id

JOIN aanbieding_status ON aanbieding_status.id = aanbieding_historie.aanbieding_status_id

JOIN medewerker ON medewerker.id = aanvraag.account_mngr_id

JOIN klant ON klant.id = aanvraag.klant_id

JOIN (

            SELECT

                        aanbieding_historie.aanbieding_id,

                        MAX(aanbieding_historie.laatste_wijziging) AS LW

            FROM aanbieding_historie

            GROUP BY 1

) AS X ON

            X.aanbieding_id = aanbieding.id AND

            X.LW = aanbieding_historie.laatste_wijziging

GROUP BY 1, 2, 3

ORDER BY 1, 2, 3;

Het resultaat van de query kopieer je vervolgens naar Excel, om de gegevens vervolgens in een draaitabel te presenteren. Het resultaat ziet er dan als volgt uit.

De reden dat ik dit graag met behulp van een draaitabel test, is dat een draaitabel je dezelfde flexibiliteit geeft als de grafiek die je moet testen. Als je bijvoorbeeld niet alleen de gegevens wilt controleren voor Rebecca, dan selecteer je Rebecca in het filter.

Tabel-05-Accountmanagers

Als per klant zou willen testen, dan selecteer je een klant:

Tabel-06-Accountmanagers

Samenvatting

Bij het testen van grafieken en diagrammen doorloop je de volgende stappen:

  • Begrijpen van het datamodel
  • Per grafiek/diagram:
    • Onderzoek welke dimensies worden gebruikt
    • Onderzoek welke metrieken worden gebruikt
    • Opstellen van de bijbehorende query met de dimensies en metrieken in de field list van de query
    • Resultaat van de query gebruiken om de grafiek of het diagram te testen. Als de grafiek of diagram flexibiliteit bieden door bijvoorbeeld filters of drill down/up functies, dan is het makkelijk als je het resultaat van de query overzet naar een Excel-draaitabel.

Als tijdens het testen bevindingen zijn geconstateerd, dan kan je de grafiek of diagram eenvoudig her-testen met de query’s de je al hebt geschreven.

Meer weten over Data & Analytics?

Lees alles over waar wij goed in zijn met Data & Analytics.

Lees meer

Meer weten over Data & Analytics?

Lees alles over waar wij goed in zijn met Data & Analytics.

Lees meer

Relevante ontwikkelingen