Aby narysować aspekty kilku odpowiedzi razem i dodać mój 2p ...
Uwaga: moje komentarze dotyczą w szczególności testowania bazy danych , a nie testowania interfejsu użytkownika (choć oczywiście dotyczy to podobnych).
Bazy danych wymagają tyle samo testowania, co aplikacje typu front-end, ale zwykle są testowane na podstawie „czy to działa z front-endem?” lub „czy raporty dają poprawny wynik?”, który moim zdaniem testuje bardzo późno w procesie tworzenia bazy danych i nie jest zbyt solidny.
Mamy wielu klientów, którzy używają testów jednostkowych / integracyjnych / systemowych w swojej bazie danych hurtowni danych oprócz zwykłego UAT / performance / et al. testy. Odkryli, że dzięki ciągłej integracji i automatycznym testom wychwytują wiele problemów przed przejściem do tradycyjnego UAT, oszczędzając w ten sposób czas i zwiększając szansę na sukces UAT.
Jestem pewien, że większość zgodzi się, że do testowania bazy danych należy zastosować podobny rygor, jak w przypadku testów interfejsu użytkownika lub raportów.
Kluczową rzeczą w testowaniu jest testowanie małych prostych bytów, zapewniając ich poprawność, przed przystąpieniem do złożonych kombinacji bytów, zapewniając ich poprawność przed rozszerzeniem na szerszy system.
Dając kontekst dla mojej odpowiedzi ...
Testów jednostkowych
- koncentruje się na testowaniu, aby udowodnić, że jednostka działa, np. tabela, widok, funkcja, procedura składowana
- powinien „zepchnąć” interfejsy w celu usunięcia zewnętrznych zależności
- dostarczy własne dane. Potrzebujesz znanego stanu początkowego danych, więc jeśli istnieje szansa, że dane istnieją przed testem, to przed zapełnianiem powinny wystąpić obcięcia / usunięcia
- będzie działać idealnie we własnym kontekście wykonywania
- po sobie wyczyści i usunie użyte dane; jest to ważne tylko wtedy, gdy nie są używane kody pośredniczące.
Zaletą tego jest to, że usuwasz wszystkie zewnętrzne zależności od testu i wykonujesz najmniejszą liczbę testów w celu udowodnienia poprawności. Oczywiście tych testów nie można uruchomić w produkcyjnej bazie danych. Może się zdarzyć, że wykonasz wiele rodzajów testów, w zależności od rodzaju jednostki, w tym:
- sprawdzanie schematu, niektórzy mogą nazwać to testem „kontraktu danych”
- przechodzące wartości kolumn
- ćwiczenie ścieżek logicznych z różnymi wartościami danych dla funkcji, procedur, widoków, kolumn obliczeniowych
- testowanie krawędzi - NULL, złe dane, liczby ujemne, wartości, które są zbyt duże
(Unit) Testy integracyjne
Uważam, że ten post SE jest pomocny w mówieniu o różnych typach testów.
- koncentruje się na testach, aby udowodnić, że jednostki integrują się ze sobą
- wykonywane na kilku jednostkach razem
- powinien „zepchnąć” interfejsy w celu usunięcia zewnętrznych zależności
- dostarczy własne dane, aby usunąć skutki wpływów danych zewnętrznych
- będzie działać idealnie we własnym kontekście wykonywania
- wyczyści się po sobie i usunie utworzone dane; jest to ważne tylko wtedy, gdy nie są używane kody pośredniczące.
Przechodząc od testów jednostkowych do tych testów integracyjnych, często będzie nieco więcej danych, aby przetestować szerszą gamę przypadków testowych. Oczywiście tych testów nie można uruchomić w produkcyjnej bazie danych.
To z kolei zachodzi na testowanie systemu , system kontrolny integracji (czyli testu końcowego 2-koniec), wraz ze wzrostem ilości danych oraz zwiększenie zakresu. Wszystkie te testy powinny stać się częścią ramowych testów regresji. Niektóre z tych testów mogą zostać wybrane przez użytkowników do wykonania w ramach UAT, ale UAT to testy zdefiniowane przez użytkowników , a nie takie, jak zdefiniowane przez IT - częsty problem!
Teraz, gdy podałem kontekst, aby odpowiedzieć na wasze aktualne pytania
- wstępne wypełnianie danych do testów jednostkowych i integracyjnych może powodować fałszywe błędy testowe i należy tego unikać.
- Jedynym sposobem na zapewnienie spójnych testów jest brak jakichkolwiek założeń dotyczących danych źródłowych i rygorystyczna kontrola.
- ważny jest osobny kontekst wykonywania testu, aby upewnić się, że jeden tester nie jest w konflikcie z innym testerem wykonującym te same testy w innej gałęzi kodu bazy danych kontrolowanej przez źródło.