Właśnie zaimplementowałem warstwę pamięci podręcznej w mojej aplikacji internetowej i teraz zastanawiam się, jak QA powinna to przetestować, ponieważ buforowanie jest przezroczyste dla użytkownika.
Jednym z moich pomysłów jest wprowadzenie metod wywoływania kodu wypełniającego pamięć podręczną i rejestrowanie, kiedy obiekt jest pobierany z pamięci podręcznej i kiedy wymaga odtworzenia z bazy danych, a następnie testerzy mogą przeglądać dzienniki, aby zobaczyć, czy: na przykład określony obiekt jest przeładowywany z bazy danych co 10 minut, zamiast każdego wyświetlenia strony.
Ale czy ktoś może zasugerować lepsze praktyki w tej sytuacji?
Odpowiedzi:
Jedno pytanie dotyczy tego, czy sama pamięć podręczna jest rzeczywiście wymogiem, który powinien zostać przetestowany przez QA. Buforowanie poprawia wydajność, aby mogli przetestować różnicę wydajności, aby upewnić się, że spełnia pewne wymagania.
Ale dobrym pomysłem jest przetestowanie pamięci podręcznej, niezależnie od tego, kto jest za nią odpowiedzialny. Użyliśmy liczników wydajności. Jeśli system pamięci podręcznej korzysta z nich, są one proste. Jeśli jest jakiś sposób, aby uzyskać liczbę z samej pamięci podręcznej, jest to inna opcja.
Używanie twojego podejścia jest również miłe. Jeśli którykolwiek z nich jest zapakowany w zautomatyzowane testy, które sprawdzają wyniki, nikt nie musi przeglądać dzienników, aby znaleźć odpowiedzi.
źródło
Zaimplementowałeś pamięć podręczną (zakładam, że), ponieważ system nie działał wystarczająco dobrze. To jest coś, co jest istotne dla użytkownika. Oto rzeczy, które QA może sprawdzić:
Pamiętaj, że użytkownicy (a przez to QA) nie dbają o to, jak rozwiązałeś problem. Troszczą się tylko o to, że problem został rozwiązany i nie tworzą nowych problemów. Dzieje się tak niezależnie od tego, czy zaimplementowałeś buforowanie, poprawiłeś parsowanie ciągów, dokonałeś aktualizacji sprzętu, czy też posypałeś magiczny czarodziejski pył na serwerze.
źródło
Zakopanie ważnej logiki biznesowej lub stanu systemu głęboko w czarnej skrzynce utrudnia weryfikację prawidłowego zachowania systemu. Łatwiej jest wyczerpująco przetestować zachowanie pojedynczego komponentu w systemie niż całego systemu. Opowiadam się za jawnym ujawnieniem takich rzeczy za pomocą jakiegoś mechanizmu, aby można je było w znaczący sposób przetestować w jednostce / regresji / integracji / kontroli jakości.
Jedną z opcji z pamięcią podręczną byłoby odsłonięcie specjalnej strony, która podaje pewne szczegóły dotyczące pamięci podręcznej (zawartość, stan itp.). Może to pomóc w debugowaniu w fazie rozwoju i potencjalnie w produkcji. Dział kontroli jakości może również użyć tej strony do utworzenia przypadków testowych dla pamięci podręcznej, jeśli podano im szczegółowe informacje na temat oczekiwanego zachowania pamięci podręcznej. Używanie liczników wydajności i / lub plików dziennika do jawnego dokumentowania zachowania pamięci podręcznej jest kolejnym mniej widocznym, ale wykonalnym podejściem.
Należy zauważyć, że takie podejście nie zastępuje kompleksowych testów wydajności. Jest to mechanizm zapewniający prawidłowe zachowanie samej pamięci podręcznej. Testy wydajności powinny być stosowane w celu ustalenia, czy buforowanie ma zamierzony wpływ na wydajność.
Zauważ też, że zamiana komponentów systemu na nowe implementujące ten sam interfejs, jak wprowadzenie pamięci podręcznej, może być destabilizującą i zwodniczo złożoną zmianą. W przykładzie z pamięcią podręczną wprowadzasz stan, który wcześniej był bezpaństwowy, co może powodować błędy, które są trudniejsze do znalezienia lub odtworzenia. Takiej zmianie zawsze powinny towarzyszyć pełne testy regresji w celu zweryfikowania oczekiwanego zachowania systemu.
źródło
Testuj wydajność, jak wskazano w odpowiedzi Andy'ego.
Odkryłem, że największą przeszkodą we wdrożeniu buforowania (i wydajności) w wielu organizacjach jest posiadanie środowiska, w którym można przeprowadzać dobre testy wydajności i przeprowadzać testy różnych rzeczywistych testów obciążenia i wydajności.
Aby to zrobić, należy skonfigurować środowisko testowania wydajności, które, tak blisko, jak to możliwe, i uwzględniając koszty, odzwierciedla produkcję. Prawdopodobnie NIE będzie to twoje obecne środowisko programistyczne, które powinno być mniejsze i bardziej samodzielne, aby umożliwić szybki rozwój aplikacji. Środowiska programistyczne również zwykle używają mniej pamięci podręcznej, więc nie reprezentują dobrze produkcji do testowania wydajności.
W środowisku testowania wydajności aplikacja powinna działać w „produkcyjnym” trybie. Powinieneś mieć więcej niż jeden serwer, jeśli produkcja, pula połączeń z bazą danych i buforowanie powinny być ustawione dla środowiska produkcyjnego itp
Warto również rozważyć narzędzie, które pomoże w testowaniu obciążenia.
jmeter jest bardzo popularny, chociaż uważam, że jest dość nieprzyjazny i prymitywny w użyciu.
Inną drogą, którą wybrałem jest po prostu url
curl
z skryptem ruby.Żeby było jasne
Pomocne mogą być również następujące linki:
źródło
Pamiętaj, aby zachęcić testerów do ponownego uruchomienia serwerów i sprawdzić, czy wprowadzone przez nich dane nadal tam są. Widziałem system, który miał wiele ludzkich miesięcy testów, zawiodł, kiedy to zostało zrobione!
Najtrudniejsze do przetestowania jest to, że jednak dane są aktualizowane, nigdy nie są zwracane nieaktualne wyniki z pamięci podręcznej.
Częściowo można temu zaradzić, zawsze wykorzystując dane z pamięci podręcznej do wypełnienia strony z potwierdzeniem, którą widzi użytkownik po dokonaniu zmiany. Np. Nie używaj obiektu, którego użyto do aktualizacji bazy danych, ale zażądaj danych z pamięci podręcznej, a następnie z bazy danych. Trochę wolniej, ale znacznie częściej błędy pojawiają się szybciej.
źródło
Ta w rzeczywistości ma bardzo prostą odpowiedź i jest związana z poziomem buforowania. To, co zaobserwujesz, gdy buforowanie jest prawidłowe, to brak żądań w miejscu docelowym żądań. Wszystko sprowadza się więc do zhakowanej frazy „spodziewane wyniki”.
W przypadku implementacji pamięci podręcznej w warstwie sieciowej oczekiwałbym, że elementy podlegające buforowaniu pojawią się tylko raz dla każdej testowanej sesji użytkownika (w przypadku implementacji pamięci podręcznej klienta) lub raz dla wielu użytkowników (w przypadku implementacji pamięci podręcznej w stylu CDN). Jeśli implementujesz pamięć podręczną w warstwie danych dla typowych wyników, to spodziewam się, że zobaczysz wysoki współczynnik trafień w pamięci podręcznej w warstwie buforowania wraz z brakiem zapytań w dzienniku profilu dla warstwy danych.
itp...
źródło
Niektóre rzeczy są lepiej testowane przez programistę, być może tego, który napisał kod, za pomocą testów jednostkowych. Testowanie poprawności kodu pamięci podręcznej jest jedną z tych rzeczy. (Ze sposobu, w jaki zadajesz to pytanie, zakładam, że twoi pracownicy QA traktują aplikację jako „czarną skrzynkę” i testują ją przez zewnętrzny interfejs.)
źródło
Logika buforowania jest czymś, co deweloper powinien przetestować jednostkowo, ponieważ QA wykonuje głównie testy czarnej skrzynki.
Kontrola jakości będzie dbać tylko o aspekty wydajności lub jakąkolwiek poprawkę, którą zaimplementujesz, dlatego możesz zapewnić kontrolę jakości z mechanizmem włączania / wyłączania buforowania lub jakimkolwiek mechanizmem używanym do poprawy wydajności, a następnie mogą zweryfikować różnicę wydajności. Oczywiście QA może również po prostu zweryfikować starą wersję pod kątem poprawionej wydajności.
źródło
Kiedy testowałem rozwiązanie buforowania, wdrożyliśmy to, co przetestowaliśmy w zasadzie wydajność. Zrobiliśmy to rozwiązanie buforujące dla wyników XML i po buforowaniu odpowiedź zajmuje bardzo mało czasu. Sprawdziliśmy to również w dzienniku serwera, sprawdzając wpisy dziennika.
źródło