Před mnoha lety Michelle Caise předložila opravu pro generování zpráv o pokrytí kódu pro kódovou základnu PostgreSQL, založenou na utilitě lcov. Ačkoli nemohu najít žádný záznam skutečného patche v archivech mailing listu, Peter Eisentraut ho spáchal o něco později a později použil další vylepšení.
Dnes oznamuji novou komunitní službu PostgreSQL:zprávy o pokrytí kódu generované automaticky a denně aktualizované pomocí této infrastruktury. Tento systém zkompiluje hlavní větev a spustí make check-world a poté vygeneruje zprávu HTML pomocí funkce vytvořit pokrytí , což je to, co vidíte.
Vzorová zpráva o pokrytí kódu v src/backend/access/brin
Pro čtenáře, kteří nejsou obeznámeni s pokrytím kódu, rychlé shrnutí:kód je „zakrytý“, když existuje nějaká testovací sada, která jej provádí. Kód, který není pokryt, se může snadno prolomit, aniž by si toho někdo všiml, což není dobré. Aby se zabránilo tichému prolomení kódu, je důležité, aby většina řádků byla pokryta testy. Pro úplnější vysvětlení je zde stránka Wikipedie na toto téma.
Naše statistiky v této oblasti byly historicky dost špatné; zatímco mnoho funkcí backendu je pokryto dobře, existuje několik funkcí, které jsou pokryty pouze částečně, a jiné, které nejsou pokryty vůbec. V posledních letech jsme se zlepšovali; nejprve jsme přidali tester izolace, který nám umožnil testovat funkce, které fungují pouze souběžně. Za druhé jsme přidali testy TAP, které měly původně pokrýt klientské nástroje, ale později byly rozšířeny i na další věci, jako je kód pro přehrávání WAL a další věci. Ale je jasné, že máme před sebou ještě dlouhou cestu.
Je třeba mít na paměti některá upozornění. Jedním z nich je, že kontrolní svět cíl (o čem tento nástroj pokrytí hlásí) není to, co provozuje buildfarm, takže se může stát, že reporty pokrytí provádějí více testů než buildfarm – což znamená, že požadujeme pokrytí, aniž bychom ho skutečně měli. Další je, že pokrytí běží na jediné platformě (Debian na AMD64), takže kód pro jiné architektury není hlášen jako pokrytý.
Tak jděte ven a prozkoumejte! Chci říct, prozkoumat zprávu, zjistit, které části našeho kódu nejsou zahrnuty, a pokusit se vytvořit test, který to opraví. Se zájmem očekáváme váš patch v pgsql-hackers.
(Také:existují nějaké jiné testy, které bychom měli spouštět, než make check-world ? Zanechte prosím zpětnou vazbu v komentářích).