Dariusz P.

Dariusz P. Wdrażanie i
zarządzanie
innowacją w
korporacjach, m.in.
R...

Temat: testy systemowe vs. UAT

Hejże.

Może to trochę głupie pytanie i ja po prostu nie chwytam obrazu ale... jasnym jest, że cechą szczególną UAT (User Acceptance Test -> testy akceptacyjne) jest to, że ich celem nie jest wykrycie błędów a jedynie uzyskanie formalnego potwierdzenia wykonania oprogramowania na odpowiednio wysokim poziomie jakościowym.

Tylko teraz pytanie za 100 punktów: jak należy do tego podchodzić? Wiem, że testuję przeciwko wymaganiom. Załóżmy, że będę posługiwał się przykładem oprogramowania pozwalającemu na przelewy bankowe (maksymalnie uproszczony). Mam wymaganie: użytkownik może przelać pieniądze ze swojego konta na dowolne konto znajdujące się w systemie. Jak powinienem do tego podejść przy testach systemowych? Loguję się do systemu, sprawdzam czy rzeczywiście moge przelać pieniądze ze swojego konta na dowolne konto znajdujące się w systemie - tak? Działa, no to fajnie, pozamiatane. Czy może rozważam podstawowy przypadek i dodatkowo testuję czy ktoś nie próbuje przelać kwoty ujemnej, czy ktoś nie próbuje dokonać przelewu w przeszłości, czy ktoś nie próbuje przelać więcej niż ma na koncie... etc.

Rozumiecie o co chodzi? Może ubiorę to w dwa konkretne pytania:

1) czego powinienem spodziewać się po testach systemowych (co w zasadzie przekłada się 'czego powinienem wymagać od testerów systemowych')

2) na ile powinienem rozwijać przypadki testowe przy testowaniu przeciwko wymaganiom (myślę, że odpowiedź na pyt. 1 odpowiada od razu na to pytanie)

Mam jakieś swoje wizje tego tematu i myślę, że każdy intuicyjnie jakoś do tego podchodzi i wydaje mu się to "oczywiste"... ale prosiłbym o opinie, chociażby po to, żeby się uspokoić, że idę w dobrym kierunku ;)

Pozdr,
DP.
Krystian K.

Krystian K. Agile Coach, Autor

Temat: testy systemowe vs. UAT

Testy Systemowe wykonuje "producent oprogramowania" i polegaja one na przetestowaniu funkcjonalnosci systemu jako calosci. Testujesz na podstawie specyfikacji, to prawda, ale na podstawie jednego wymagania tworzysz rozne przypadki, tak jak wspomniales, czy da sie przelac kwote ujemna, ustawic przelew z data w przeszlosci, a co jesli podam String jako kwote? Testami Systemowymi zajmuja sie testerzy. Sprawdzamy jak najwiecej i na rozne sposoby.

UAT jest dla klienta, ale oczywiscie logika podpowiada wykonac takie testy u siebie tez. UAT ma nam powiedziec czy wyprodukowalismy to czego klient sie spodziewa. Czyli sprawdzamy, czy mozna zrobic przelew, przy mozna ustawic przelew do wykonania z pewna data. UAT mamy alpha i beta. Alpha to te wykonywane u "producenta oprogramowania", testowac moga pomoc Ci "nie-specjalisci" w firmie, czyli na przyklad dzial HR, albo ksiegowosc (zwykli uzytkownicy/target). Beta wykonuje klient w swoim srodowisku i co najwyzej mozna zaproponowac przykladowy zestaw testow. W UAT sprawdzamy podstawowa funkcjonalnosc systemu i wykonujemy podzbior przypadkow z Testow Systemowych. Po UAT uzyskujemy sign-off, czyli potwierdzenie "ze dziala". Potem bedzie tuning ;-)
Piotr Mikołajczyk

Piotr Mikołajczyk Critical
Applications
Manager, eService
sp. z o.o.

Temat: testy systemowe vs. UAT

Generalnie dla mnie testy systemowe sa o wiele obszerniejsze niz testy UAT. Na przyklad, uzywajac Twojego przykladu systemu do przelewow, podczas UAT-a sprawdzam, czy funkcja dziala prawidlowo. Ale podczas testow systemowych sprawdzam, czy przypadkiem nie da sie jej w jakis sposob "wywalic" czyli tekst zamiast kwoty lub kwoty ujemne itd. Rowniez, jak wspomniano, wykonawcy tych etapow testowania sa rozni. Teoretycznie UAT testerzy powinni sie zapoznac ze skryptami testowymi przygotowanymi przez testerow systemowych. Niestety, roznie z tym bywa (chyba ze korzystaja z tych samych przypadkow i krokow testowych, wtedy praktycznie nie maja wyboru ;-) ) a jeszcze bardziej roznie bywa z zapoznaniem sie ze specyfikacja programu.

Podobnie jest ze srodowiskiem. Testy systemowe odbywaja sie na wewnetrznym srodowisku zespolu tworzacego. Ale testy UAT powinny sie juz odbywac na sprzecie i konfiguracji klienta lub tez na urzadzeniach identycznych z konfiguracja ostateczna.

Rozne sa rowniez wnioski i uwagi plynace z danych etapow. Testy systemowe sprawdzaja czy funkcja dziala i czy nie ma jakich wyjatkow. Testy UAT, poniewaz sa przeprowadzane glownie przez docelowych uzytkownikow, obfituja w komentarze odnosnie uzytecznosci interfejsu, jasnosci komunikatow oraz wygody uzywania systemu. Sa to glownie uwagi kosmetyczne, ale maja duza wartosc dla przyjemnego korzystania z programu na co dzien. Testerzy systemowi przewaznie nie posiadaja wystarczajacej wiedzy na te tematy, poniewaz nie maja doswiadczen z pracy przy konkretnych procesach biznesowych.
Piotr T.

Piotr T. Spring/Microservices

Temat: testy systemowe vs. UAT

Powinieneś testować możliwie "złośliwie" . Bo jeśli oprogramowanie wróci z UAT to i tak będziesz musiał znowu testować.
To co opisałeś jako "przyjazne" testy załatwiają testy jednostkowe .
Dariusz P.

Dariusz P. Wdrażanie i
zarządzanie
innowacją w
korporacjach, m.in.
R...

Temat: testy systemowe vs. UAT

Piotr T.:
>
To co opisałeś jako "przyjazne" testy załatwiają testy jednostkowe .

Hę?
Krystian K.

Krystian K. Agile Coach, Autor

Temat: testy systemowe vs. UAT

Piotr T.:
To co opisałeś jako "przyjazne" testy załatwiają testy jednostkowe .

Testy jednostkowe (Unit Testy) niczego nie zalatwia z punktu widzenia UAT. Unit Testing jest wykonywany przez developera i ma na celu udowodnic, ze to co on napisal dziala tak jak zamierzal.
Unit Testy sa pierwsza z faz tesowania, nastepnie mamy Integration Testing (Testy Integracyjne), System Testing, UAT, czasem ORT i UCT w niektorych organizacjach.
To ze Unit Testy przeszly pomyslnie nie oznacza ze moduly dzialaja ze soba dobrze (integracja) a na pewno nie oznaczaja ze caly system jest stabilny i nie generuje bledow, a juz na pewno nie mowia nic na temat oczekiwan klienta (UAT).
Piotr T.:
>Bo jeśli oprogramowanie wróci z UAT to i tak będziesz musiał >znowu testować.

Zwykle nowy produkt wraca z UAT ze statusem Sign Off i lista uwag. i to jest naturalne.
Piotr T.

Piotr T. Spring/Microservices

Temat: testy systemowe vs. UAT

Dariusz P.:
Załóżmy, że będę posługiwał się przykładem oprogramowania
pozwalającemu na przelewy bankowe (maksymalnie uproszczony). Mam
wymaganie: użytkownik może przelać pieniądze ze swojego konta na >dowolne konto znajdujące się w systemie. Jak powinienem do tego >podejść przy testach systemowych? Loguję się do systemu, sprawdzam
czy rzeczywiście moge przelać pieniądze ze swojego konta na dowolne
konto znajdujące się w systemie - tak? Działa, no to fajnie,
To są właśnie "przyjazne" testy .Tak to by testował optymistyczny programista z pomocą testów jednostkowych lub klikając.
Jeśli z UAT wróci oprogramowanie z komentarzem typu "możliwe jest przelewanie ujemnych sum" albo "można przelewać pieniądze z nieswojego konta" to nie jest to normalne.
Co innego jeśli z UAT masz takie uwagi :
Piotr Mikołajczyk:
komentarze odnosnie uzytecznosci interfejsu, jasnosci
komunikatow oraz wygody uzywania systemu. Sa to glownie uwagi
kosmetyczne, ale maja duza wartosc dla przyjemnego korzystania z
programu na co dzien.
Piotr T. edytował(a) ten post dnia 01.10.08 o godzinie 16:32
Krystian K.

Krystian K. Agile Coach, Autor

Temat: testy systemowe vs. UAT

Piotr T.:

To są właśnie "przyjazne" testy .Tak to by testował optymistyczny programista z pomocą testów jednostkowych lub klikając.

Nie kolego, nie wiem skad bierzesz te okreslenia. Jesli z syllabusa, to podrzuc fragment :) Pogadam z developerami w teamie, zeby przez chwile porzucili JUnits i sprobowali "testow klikajac". :lol:
Jeśli z UAT wróci oprogramowanie z komentarzem typu "możliwe jest przelewanie ujemnych sum" albo "można przelewać pieniądze z nieswojego konta" to nie jest to normalne.
Co innego jeśli z UAT masz takie uwagi :

To nie sa uwagi, tylko lista bledow i UAT Failed.Krystian K. edytował(a) ten post dnia 01.10.08 o godzinie 16:48
Dariusz P.

Dariusz P. Wdrażanie i
zarządzanie
innowacją w
korporacjach, m.in.
R...

Temat: testy systemowe vs. UAT

Piotr T.:
>
To są właśnie "przyjazne" testy .Tak to by testował
optymistyczny programista z pomocą testów jednostkowych
lub klikając.

Hejże Piotrze.

Zajrzyj tutaj. Kilka słów o testach jednostkowych. Możesz tam znaleźć sformułowanie: In procedural programming a unit may be an individual program, function, procedure, etc., while in object-oriented programming, the smallest unit is a method, which may belong to a base/super class, abstract class or derived/child class.

Przenosząc na nasz piękny język: testy jednostkowe dotyczą testów poszczególnych funkcji bądź metod. Programista może (powinien) je przeprowadzać aby potwierdzić, że ten wyrywek kodu działa zgodnie z jego założeniami. Zaletą tych testów jest to, że możesz je przeprowadzać kiedy cały system jest jeszcze w powijakach. My mówimy o czymś innym...
Jeśli z UAT wróci oprogramowanie z komentarzem typu
"możliwe jest przelewanie ujemnych sum" albo "można
przelewać pieniądze z nieswojego konta" to nie jest
to normalne.

To nie jest do końca prawda. Wróćmy tu do testów jednostkowych. Programista ma za zadanie napisać funkcję: przelejPieniądze(kontoŻródłowe, kontoDocelowe, kwota). Załóżmy, że programista robi coś takiego:

przelejPieniądze(kontoŻródłowe, kontoDocelowe, kwota) {
kontoDocelowe.dodaj(kwota);
kontoŻródłowe.odejmij(kwota);
}

Odpala swoją funkcję i sprawdza jej działanie z różnymi argumentami. To są właśnie testy jednostkowe. Programista nie wie (o ile nie powie mu tego specyfikacja) jak będzie, z biznesowego punktu widzenia, wykorzystywana ta funkcja. A z biznesowego punktu widzenia ktoś wymyślił sobie, że jeżeli masz konto debetowe to możesz przelać kwoty do -20% swoich miesięcznych wpłat na konto (czyli możesz zrobić przelew mając ujemne środki na koncie).

Tak więc podsumowując: testy jednostkowe = testy elementów kodu (funkcji, metod) przeciwko założeniom postawionym na początku ich tworzenia. Testy akceptacyjne: testy całego oprogramowania przeciwko specyfikacji wymagań.

Oczywiście to tylko mój punkt widzenia.

Pozdr,
DP.
Dariusz P.

Dariusz P. Wdrażanie i
zarządzanie
innowacją w
korporacjach, m.in.
R...

Temat: testy systemowe vs. UAT

To nad czym ja się zastanawiam to kwestia na ile głębokie powinny być moje testy akceptacyjne biorąc pod uwagę, że nie mam dostępu do testów (i wyników testów) przeprowadzonych przez dostawcę oprogramowania. A samo oprogramowanie, po oddaniu do nas i przed testami akceptacyjnymi, jest jeszcze integrowane z innymi modułami, poddawane testom integracyjnym i pobieżnym testom, które chyba można podciągnąć pod smoke i sanity testy.

Tak czy siak - wydaje mi się, że mam jakąś koncepcję jak do tego podejść a reszta wyjdzie w praniu ;)

Pozdr,
DP.
Marcin Izdebski

Marcin Izdebski Project Manager /
Transition Manager

Temat: testy systemowe vs. UAT

Dariusz P.:
Tak czy siak - wydaje mi się, że mam jakąś koncepcję jak do tego podejść a reszta wyjdzie w praniu ;)

Często wykonuje się to dwoma strumieniami :
-testy UAT w oparciu o przygotowane scenariusze sprawdzają, czy biznes dostaje w określonych funkcjonalnościach to co zamówił
- testy regresyjne przechodzące przez wszystkie powiązane funkcjonalności - sprawdzają, czy nie zostało popsute to co działało.
Można je łączyć, ale można i rozdzielać, mogą być wykonywane nawet przez różne ekipy specjalistów.
Dariusz P.

Dariusz P. Wdrażanie i
zarządzanie
innowacją w
korporacjach, m.in.
R...

Temat: testy systemowe vs. UAT

Marcin Izdebski:

Często wykonuje się to dwoma strumieniami :
-testy UAT w oparciu o przygotowane scenariusze sprawdzają,
czy biznes dostaje w określonych funkcjonalnościach to co
zamówił
>
- testy regresyjne przechodzące przez wszystkie powiązane funkcjonalności - sprawdzają, czy nie zostało popsute to co działało.

To była odpowiedź, na którą czekałem i do której w zasadzie doszedłem sam w międzyczasie ;) Tzn. być może są jakieś inne pomysły jak ten problem rozwiązać ale ja zamierzam zrobić to w ten sposób.

Dzięki,
pozdr,
DP.
Adam Frelak

Adam Frelak Analyst, IT Quality
Assurance

Temat: testy systemowe vs. UAT

Zastanowiłbym się o jakich testach systemowych/UAT rozmawiamy, bo jeśli mowa o nowej aplikacji to zgadzam się we wszystkim z przedmówcami.
Inaczej sprawa ma się dla aplikacji i systemów już istniejących...

Jeśli mamy systemy zależne (np skala idąca w dziesiątki zależnych aplikacji i modułów) niejako niemozliwoscia staje sie przeprowadzenie testow regresji w opisany wcześniej sposób. Nawet jeśli tak postępujemy, to tylko dlatego ze każdy boi się powiedzieć, ze to nie ma sensu w większej skali. (A już szczególnie dobrze to widać przy testach, które muszą być prowadzone w cyklach czasowych - scenariusz obejmujący swoim zakresem ROK Czasu, a znajdziemy w aplikacji jakiś błąd pod koniec :|)
Kolejny problem to testy UAT dla aplikacji rozwijanych.
Tak jak pisał Marcin opłaca się tu połączyć obie sprawy (UAT i regresję) bo dla testera oznacza to właściwie regresje: Nie dość że musi sprawdzić nową funkcjonalność, to obowiązkowo musi ją sprawdzić w połączeniu z istniejącymi funkcjonalnościami i procesami.
No chyba, że ktoś ma inne doświadczenia z większymi systemami?
Krystian K.

Krystian K. Agile Coach, Autor

Temat: testy systemowe vs. UAT

Moim zdaniem testy regresyjne to w dalszym ciagu czesc testow sytemowych biorac pod uwage cel i to przez kogo sa wykonywne jest to dla mnie jasne. W projektach ze znanym z gory terminarzem (jakie jest plskie slowko na schedule? :) ) mozna bez problemu wprowadzic calkiem porzadna regresje. W kazdej nastepnej rundzie testowej na nowej wersji "przemycamy" czesc poprzednio wykonanych testow, a miedzy wiekszymi release'ami (na przyklad sa planowane release'y z bug-fixami) robimy sobie pelna runde testowa z zestawem testow, ktore poprzednio wykryly bledy i kilka takich, ktore przeszly pozytywnie. Testy regresyjne sprawdza nam 2 rodzaje problemow: re-introducing bugs, czyli ktos wrzucil do release buga, ktory byl juz naprawiony (na przyklad developer nie zrobil updatu CVS, dopisal kod i zrobil merge), a takze nowe bledy bedace side effect fixow. Przyklad: developer naprawil funkcje wyciagajaca dane z XML, ale teraz dwie inne zalezne od niej zwracaja inne wartosci niz poprzednio i generuja bugi. Bardziej trywialny przyklad: zmieniamy design strony WWW, zeby wprowadzic zawijanie tekstu w interesujacym nas obszarze, jako efekt uboczny okazuje sie, ze przy zmianie rozmiaru okna menu przechodzi pod kontent, zamiast zostac w nienaruszonym stanie z lewej strony (test na resize okna failed a wczesniej przeszedl). Mowiac o regresji nie mozna nie wspomnic o automatyzacji. Regresja jest jednym z korzysci tego procesu. Jezeli testujemy aplikacje WEB i wykonujac testy nagrywamy je w Selenium, to uruchomienie wczesniej nagranych testow z kazdym buildem nic nas nie kosztuje i mamy regresje za darmo (nie liczac czasu poswieconego na nagranie i tuning).
Stojac po drugiej stronie muru, jako strona wykonujaca testy UAT nalezaloby zweryfikowac wplyw (impact) nowych funkcjonalnosci na obszary, z ktorymi sa zintegrowane, zeby ograniczyc ilosc przypadkow do regresji. Z kolei w przypadku aplikacji z wysokim ryzykiem chyba nie ma innej metody jak pelna regresja.
Nie ktore firmy sa na tyle "upierdliwe", czy tez mozna powiedziec klada na tyle duzy nacisk na jakosc systemow wdrazanych, ze UAT wyglada u nich jak black box System Testing. Nie moge tutaj rzucic nazwa z wiadomych powodow ;)

Następna dyskusja:

automatyczne testy flasha/f...




Wyślij zaproszenie do