sql >> Database teknologi >  >> RDS >> PostgreSQL

Kodedækningsstatistikker

For mange år siden indsendte Michelle Caise en patch til at generere kodedækningsrapporter til PostgreSQL-kodebasen baseret på LCOV-værktøjet. Selvom jeg ikke kan finde nogen registrering af en egentlig patch i postlistearkiverne, begåede Peter Eisentraut det noget tid senere og anvendte yderligere justeringer senere.

I dag annoncerer jeg en ny PostgreSQL-fællesskabstjeneste:kodedækningsrapporter genereret automatisk og opdateret dagligt ved hjælp af denne infrastruktur. Dette system kompilerer mastergrenen, kører make check-world , og genererer derefter HTML-rapporten med make coverage , hvilket er hvad du ser.

Eksempel på kodedækningsrapport i src/backend/access/brin

For læsere, der ikke er bekendt med kodedækning, en hurtig oversigt:kode er "dækket", når der er en testsuite, der udøver den. Kode, der ikke er dækket, kan nemt blive brudt, uden at nogen bemærker det, hvilket ikke er godt. For at undgå, at kode knækker lydløst, er det vigtigt, at et flertal af linjer er dækket af test. For en mere fuldstændig forklaring, her er Wikipedia-siden om emnet.

Vores statistikker på dette område har historisk set været ret dårlige; mens mange backend-funktioner er godt dækket, er der flere funktioner, der kun er delvist dækket, og andre, der slet ikke er dækket. Vi har forbedret os de seneste år; først tilføjede vi isolationstesteren, som gjorde det muligt for os at teste funktioner, der kun fungerer under samtidighed. For det andet tilføjede vi TAP-tests, som oprindeligt skulle dække klientværktøjerne, men senere blev udvidet til også at dække andre ting såsom WAL-genafspilningskoden og andre ting. Men det er klart, at vi har lang vej endnu.

Der er nogle forbehold at huske på. Den ene er, at make check-world target (hvad dette dækningsværktøj rapporterer om) er ikke det, buildfarmen kører, så det kan godt være tilfældet, at dækningsrapporterne kører flere tests end buildfarmen - hvilket betyder, at vi kræver dækning uden faktisk at have det. En anden er, at dækning køres på en enkelt platform (Debian på AMD64), så kode for andre arkitekturer rapporteres ikke som dækket.

Så gå ud og gå på opdagelse! Jeg mener, udforsk rapporten, find ud af, hvilke dele af vores kode, der ikke er dækket, og prøv at lave en test for at rette det. Vi afventer din patch i pgsql-hackere med interesse.

(Også:er der nogen test, som vi burde køre udover make check-world ? Giv venligst feedback i kommentarerne).


  1. MySQL ACOS() Funktion – Returner Arc Cosinus for et tal

  2. PostgreSQL accent + ufølsom søgning

  3. Ydelsesmyter:Truncate kan ikke rulles tilbage

  4. Hvordan ROWNUM fungerer i pagineringsforespørgsel?