Testy regresji - Regression testing

Testowanie regresywne (rzadko testowanie nieregresyjne ) polega na ponownym przeprowadzaniu testów funkcjonalnych i niefunkcjonalnych w celu upewnienia się, że wcześniej opracowane i przetestowane oprogramowanie nadal działa po wprowadzeniu zmian. Jeśli nie, nazwalibyśmy to regresją . Zmiany, które mogą wymagać testów regresji, obejmują poprawki błędów, ulepszenia oprogramowania, zmiany konfiguracji , a nawet zastąpienie komponentów elektronicznych . Ponieważ zestawy testów regresji rosną z każdym wykrytym defektem, często w grę wchodzi automatyzacja testów. Czasami przeprowadzana jest analiza wpływu zmiany w celu określenia odpowiedniego podzbioru testów ( analiza nieregresji ).

Tło

Gdy oprogramowanie jest aktualizowane lub zmieniane, lub ponownie wykorzystywane w zmodyfikowanym celu, pojawianie się nowych i/lub ponowne pojawianie się starych jest dość powszechne. Czasami pojawia się ponownie, ponieważ poprawka zostaje utracona z powodu złych praktyk kontroli wersji (lub zwykłego błędu ludzkiego w kontroli wersji). Często rozwiązanie problemu jest „ kruche ”, ponieważ rozwiązuje problem w wąskim przypadku, w którym został zaobserwowany po raz pierwszy, ale nie w bardziej ogólnych przypadkach, które mogą pojawić się w okresie użytkowania oprogramowania. Często rozwiązanie problemu w jednym obszarze nieumyślnie powoduje błąd oprogramowania w innym obszarze. Wreszcie może się zdarzyć, że po przeprojektowaniu jakiejś funkcji, niektóre z tych samych błędów, które zostały popełnione w pierwotnej implementacji funkcji, zostaną popełnione w przeprojektowaniu. Dlatego w większości sytuacji związanych z tworzeniem oprogramowania dobrą praktyką kodowania , gdy błąd zostanie zlokalizowany i naprawiony, jest zarejestrowanie testu, który ujawnia błąd i regularne ponowne uruchamianie tego testu po kolejnych zmianach w programie. Chociaż można to zrobić za pomocą ręcznych procedur testowania przy użyciu technik programowania, często odbywa się to za pomocą automatycznych narzędzi testowych . Taki zestaw testów zawiera narzędzia programowe, które umożliwiają środowisku testowemu automatyczne wykonanie wszystkich przypadków testowych regresji ; niektóre projekty konfigurują nawet zautomatyzowane systemy, aby ponownie uruchamiać wszystkie testy regresji w określonych odstępach czasu i zgłaszać wszelkie awarie (które mogą sugerować regresję lub nieaktualny test). Popularne strategie to uruchamianie takiego systemu po każdej udanej kompilacji (dla małych projektów), co noc lub raz w tygodniu. Strategie te można zautomatyzować za pomocą zewnętrznego narzędzia.

Testy regresyjne są integralną częścią metody tworzenia oprogramowania ekstremalnego . W tej metodzie dokumenty projektowe zastępuje się obszernym, powtarzalnym i automatycznym testowaniem całego pakietu oprogramowania na każdym etapie procesu tworzenia oprogramowania . Testy regresyjne są wykonywane po zakończeniu testów funkcjonalnych, aby sprawdzić, czy inne funkcjonalności działają.

W świecie korporacyjnym testowanie regresyjne jest tradycyjnie wykonywane przez zespół ds. zapewnienia jakości oprogramowania po zakończeniu pracy zespołu programistycznego. Jednak defekty znalezione na tym etapie są najbardziej kosztowne do naprawienia. Problem ten jest rozwiązywany przez wzrost testów jednostkowych . Chociaż twórcy zawsze napisany przypadków testowych w ramach cyklu rozwoju, te przypadki testowe były na ogół albo testy funkcjonalne i testy jednostkowe , które sprawdzają tylko zakładanych rezultatów. Testowanie programistyczne zmusza programistę do skupienia się na testach jednostkowych i uwzględniania zarówno pozytywnych, jak i negatywnych przypadków testowych.

Techniki

Różne techniki testowania regresji to:

Przetestuj ponownie wszystkie

Ta technika sprawdza wszystkie przypadki testowe w bieżącym programie w celu sprawdzenia jego integralności. Chociaż jest to kosztowne, ponieważ wymaga ponownego uruchomienia wszystkich przypadków, zapewnia, że ​​nie ma błędów z powodu zmodyfikowanego kodu.

Wybór testu regresji

W przeciwieństwie do Retestu wszystkiego, technika ta uruchamia część zestawu testów (ze względu na koszt ponownego przetestowania wszystkiego), jeśli koszt wybrania części zestawu testów jest niższy niż technika Retest all.

Priorytetyzacja przypadków testowych

Nadaj priorytet przypadkom testowym, aby zwiększyć wskaźnik wykrywania błędów w zestawie testów. Techniki ustalania priorytetów przypadków testowych planują przypadki testowe w taki sposób, aby przypadki testowe o wyższym priorytecie były wykonywane przed przypadkami testowymi o niższym priorytecie.

Rodzaje priorytetyzacji przypadków testowych

  • Ogólna priorytetyzacja – Nadaj priorytety przypadkom testowym, które będą korzystne w kolejnych wersjach
  • Priorytety specyficzne dla wersji — ustalanie priorytetów przypadków testowych w odniesieniu do określonej wersji oprogramowania.

Hybrydowy

Ta technika jest hybrydą wyboru testów regresji i priorytetyzacji przypadków testowych.

Zalety i wady

Testy regresji są wykonywane, gdy wprowadzane są zmiany w istniejącej funkcjonalności oprogramowania lub jeśli w oprogramowaniu została naprawiona poprawka. Testy regresywne można osiągnąć za pomocą wielu podejść, jeśli stosuje się podejście test all , daje pewność, że zmiany wprowadzone w oprogramowaniu nie wpłynęły na istniejące funkcjonalności, które pozostają niezmienione.

W zwinnym tworzeniu oprogramowania — gdzie cykle życia oprogramowania są bardzo krótkie, zasoby są ograniczone, a zmiany w oprogramowaniu są bardzo częste — testy regresyjne mogą wprowadzać wiele niepotrzebnych kosztów ogólnych.

W środowisku programistycznym, które ma tendencję do używania komponentów czarnej skrzynki od strony trzeciej, wykonywanie testów regresji może być trudne, ponieważ każda zmiana w komponencie strony trzeciej może zakłócać resztę systemu (i przeprowadzanie testów regresji na składnik partii jest trudny, ponieważ jest to nieznany podmiot).

Zastosowania

Testy regresyjne mogą być wykorzystywane nie tylko do testowania poprawności programu, ale często również do śledzenia jakości jego wyników. Na przykład w projekcie kompilatora testowanie regresji może śledzić rozmiar kodu oraz czas potrzebny na kompilację i wykonanie przypadków z zestawu testów.

Również w konsekwencji wprowadzenia nowych błędów, konserwacja programu wymaga znacznie więcej testów systemowych na napisaną instrukcję niż jakiekolwiek inne programowanie. Teoretycznie po każdej poprawce należy uruchomić całą partię przypadków testowych, które zostały wcześniej uruchomione w systemie, aby upewnić się, że nie został uszkodzony w niejasny sposób. W praktyce takie testowanie regresji musi rzeczywiście przybliżać tę teoretyczną ideę i jest bardzo kosztowne.

Testy regresji można ogólnie podzielić na testy funkcjonalne lub testy jednostkowe . Testy funkcjonalne sprawdzają cały program z różnymi danymi wejściowymi. Testy jednostkowe wykonują poszczególne funkcje, podprogramy lub metody obiektowe. Zarówno narzędzia do testowania funkcjonalnego, jak i narzędzia do testowania jednostkowego są zwykle zautomatyzowane i często są produktami innych firm, które nie są częścią zestawu kompilatorów. Test funkcjonalny może być oskryptowaną serią danych wejściowych programu, być może nawet obejmującą zautomatyzowany mechanizm do kontrolowania ruchów myszy i kliknięć. Test jednostkowy może być zestawem oddzielnych funkcji w samym kodzie lub warstwą sterownika, która łączy się z kodem bez zmiany testowanego kodu.

Zobacz też

Bibliografia

Zewnętrzne linki