- testowanie zgodności przeglądarki
- sprzętu komputerowego
- sieci
- systemu operacyjnego
- wersje
16. Testowanie konfiguracji to rodzaj testów niefunkcjonalnych, które polegają na testowaniu systemu na komputerach z różnymi kombinacjami sprzętu i oprogramowania. Ze względu na ogromną liczbę możliwych konfiguracji, nie jest możliwe przetestowanie wszystkich. Dlatego kluczowe jest dokładne planowanie, które platformy będą obsługiwane. Jeśli liczba kombinacji sprzętu i oprogramowania jest zbyt duża do dokładnego przetestowania, priorytetem powinno być testowanie różnych konfiguracji na podstawie takich czynników jak wielkość bazy, ryzyko związane z nieodkrytym błędem w konkretnej konfiguracji itp.
17. Testowanie dokumentacji to rodzaj testów niefunkcjonalnych, które polegają na analizie informacji opisujących, definiujących, określających, raportujących lub zaświadczających czynności, wymagania, procedury lub wyniki. Dokumentacja jest równie ważna dla sukcesu produktu jak sam produkt. Ułatwia proces testowania, oszczędza czas i pieniądze, a także umożliwia klientom łatwe przeglądanie procesów oprogramowania. Dobrze wykonana dokumentacja może zaoszczędzić czas, wysiłek i pieniądze organizacji. Dla większych firm, takich jak Microsoft, Adobe, Oracle, Apple, produkt lub oprogramowanie jest wytwarzane z odpowiednią dokumentacją, która pomaga każdemu użytkownikowi łatwo zrozumieć produkt. Dlatego prawidłowa dokumentacja jest kluczowa dla rozwoju oprogramowania.
18. Testowanie efektywności to rodzaj testów niefunkcjonalnych, które oceniają objętość kodu i zasoby potrzebne do wykonania określonej funkcji programu. Efektywność testowania oprogramowania polega na testowaniu przypadków testowych podzielonych na jednostki czasu w procesie wykonania. W organizacji dotyczy to ilości zużytych i wykorzystanych zasobów. Skuteczność testów oprogramowania obejmuje trzy aspekty: spełnienie wymagań klienta przez system/aplikację, osiągnięcie specyfikacji klienta przez system/aplikację oraz ilość wysiłku włożonego w rozwój systemu.
19. Testowanie wytrzymałości to rodzaj testów niefunkcjonalnych, które oceniają stabilność i wydajność systemu pod obciążeniem przez dłuższy okres czasu. Celem jest sprawdzenie, jak system działa podczas trwałego użytkowania - czy przepustowość i/lub czas reakcji po długim okresie przedłużonej aktywności są dobre lub lepsze niż na początku testowania. Testy te głównie identyfikują problemy z wyciekami pamięci, które mogą doprowadzić do awarii aplikacji lub systemu operacyjnego, ale również sprawdzają wykorzystanie zasobów, np. bazy danych.
20. Podczas testowania funkcjonalności, następujące elementy powinny być sprawdzone:
- Proces instalacji i konfiguracji na lokalnych maszynach z różnymi systemami operacyjnymi,
- Wprowadzanie tekstu, w tym użycie znaków specjalnych i alfabetów innych niż łaciński,
- Główne funkcje aplikacji,
- Podstawowe funkcje menu,
- Obsługa ciągów znaków, tekstu i danych, szczególnie w kontekście interakcji z aplikacjami lub modułami nieobsługującymi Unicode,
- Domyślne ustawienia regionalne,
- Manipulacja tekstem (takie jak kopiowanie, wklejanie i edycja) zawierającym rozszerzone znaki, specjalne czcionki i alfabetów innych niż łaciński,
- Precyzyjne skróty klawiszowe bez powielania.
21. Testowanie współdziałania to rodzaj testów niefunkcjonalnych, które oceniają zdolność oprogramowania do współpracy z innymi systemami lub komponentami oprogramowania. Jest to kluczowe, ponieważ wiele technologii jest wbudowanych w architekturę i składa się z wielu różnych części, które muszą działać jednolicie. Testy te obejmują zgodność formatu składni i danych, metody połączenia fizycznego i logicznego modułów systemu oraz cechy użytkowe. Oprogramowanie nie powinno powodować problemów operacyjnych, utraty danych lub funkcjonalności. Każdy składnik oprogramowania musi rozpoznawać dane przychodzące z innych programów, radzić sobie ze stresem swojej roli w architekturze i dostarczać dostępne, użyteczne wyniki.
22. Testowanie instalacji, również znane jako "Testowanie implementacji", to rodzaj testów niefunkcjonalnych, które sprawdzają, czy oprogramowanie zostało pomyślnie zainstalowane i działa prawidłowo po instalacji. Przed przeprowadzeniem tego typu testów, należy sprawdzić szereg czynników, takich jak: możliwość instalacji w domyślnej lokalizacji i zmiany tej lokalizacji, różne metody instalacji (np. z sieci, online, z płyty CD), możliwość instalacji bez uprawnień administracyjnych, poprawne działanie instalatora, kompatybilność z różnymi platformami, prawidłowe wyświetlanie interfejsu użytkownika podczas instalacji oraz spełnienie potrzeb użytkownika po zakończeniu instalacji. Testy te obejmują również "cichą instalację", gdzie wiadomości procesu instalacji nie są wyświetlane na interfejsie użytkownika, a wszystkie wiadomości są rejestrowane w plikach logów. Po usunięciu oprogramowania, wszystkie wcześniej zainstalowane pliki i wpisy rejestru powinny zostać usunięte, a użytkownik powinien mieć możliwość łatwego usunięcia lub naprawy aplikacji.
23. Testowanie obciążenia to rodzaj testów niefunkcjonalnych, które mają na celu zrozumienie zachowania aplikacji pod określonym oczekiwanym obciążeniem. Testy te oceniają działanie systemu w warunkach normalnych i krytycznych, pomagając określić maksymalną zdolność operacyjną aplikacji lub systemu, jak również wszelkie ograniczenia i elementy powodujące degradację. Testy obciążenia mogą być przeprowadzane w kontrolowanych warunkach laboratoryjnych, aby porównać możliwości różnych systemów lub dokładnie zmierzyć możliwości jednego systemu. W przeciwieństwie do testów stresowych, które przeciążają elementy systemu do momentu awarii, testy obciążenia sprawdzają, czy dana funkcja, program lub system może obsłużyć to, co zostało zaprojektowane.
24. Testy obciążeniowe pozwalają mierzyć czas odpowiedzi, szybkość przepustowości, poziom wykorzystania zasobów i identyfikować punkt załamania w testowanej aplikacji. Testy te mogą wykryć opóźnienia systemu, problemy z ładowaniem danych i obciążeniem zasobów. Testy obciążeniowe oprogramowania są przeprowadzane pod koniec cyklu produkcyjnego, kiedy można dokładnie symulować i testować rzeczywiste zaangażowanie użytkowników i wydajność systemu. Aby być dobrym testerem obciążenia, potrzebna jest nie tylko wiedza z inżynierii oprogramowania i testowania, ale także dobre zrozumienie psychologii użytkownika, jego ograniczeń percepcyjnych i preferencji.
25. Testowanie lokalizacji i internacjonalizacji to rodzaj testów niefunkcjonalnych. Internacjonalizacja to proces projektowania oprogramowania w taki sposób, aby można było dostosować je do różnych języków i regionów bez konieczności wprowadzania znacznych zmian w kodzie systemu/aplikacji. Lokalizacja natomiast to proces dostosowywania zinternacjonalizowanego oprogramowania do konkretnego regionu lub języka poprzez dodanie specyficznych elementów lokalnych i tłumaczenie tekstu. Kluczowa różnica polega na tym, że internacjonalizacja jest procesem dostosowywania produktów do potencjalnego użycia praktycznie wszędzie, podczas gdy lokalizacja polega na dodaniu specjalnych funkcji do użytku w konkretnej lokalizacji. Internacjonalizacja odbywa się raz na produkcie, a lokalizacja jest wykonywana raz dla każdej kombinacji produktu i lokalizacji. Oba procesy są komplementarne i muszą być połączone, aby osiągnąć cel, jakim jest aplikacja/system działający na całym świecie i w różnych językach.
26. Testowanie utrzymywalności to rodzaj testów niefunkcjonalnych, które oceniają, jak łatwo jest utrzymać, analizować, modyfikować i testować aplikację lub produkt. Testy te stosują model wymagań utrzymywalności oprogramowania/systemu i są określane pod względem wysiłku potrzebnego do wprowadzenia zmian w czterech kategoriach: naprawa, ulepszenia, adaptacja do zmian w środowisku i utrzymanie prewencyjne. Testowanie utrzymywalności obejmuje sprawdzenie norm rozwojowych, podział przetwarzania danych na podtransakcje, oddzielne realizowanie wejścia, przetwarzania i wyjścia, parametryzację programów, rozpowszechnianie systemu oraz optymalizację algorytmów.
27. Testowanie utrzymywalności to rodzaj testów niefunkcjonalnych, które oceniają różne aspekty systemu lub aplikacji, takie jak:
- Kopiowanie zapasowe bazy danych: sprawdza, czy baza danych jest poprawnie kopiowana bez utraty danych.
- Odzyskiwanie danych: przeprowadza się, gdy istnieje ryzyko utraty danych, sprawdza zdolność systemu do odzyskiwania i prawidłowego przywracania danych.
- Instalacja i konfiguracja oprogramowania: sprawdza, czy oprogramowanie jest poprawnie instalowane i konfigurowane.
- Wycofywanie: przeprowadza się, gdy nowe wdrożenie aplikacji nie działa zgodnie z oczekiwaniami, sprawdza zdolność systemu do powrotu do ostatniej działającej konfiguracji.
- Praca awaryjna: weryfikuje, że aplikacja działa poprawnie, gdy zbędne komponenty nie działają.
28. Testowanie wydajnościowe to rodzaj testów niefunkcjonalnych, które oceniają szybkość wykonywania określonych aspektów systemu pod danym obciążeniem. Testy te mogą sprawdzić, czy system spełnia wymagania producenta lub dostawcy, porównać wydajność dwóch lub więcej programów lub systemów, lub zidentyfikować, które elementy systemu lub obciążenia powodują spadek wydajności. Testowanie wydajnościowe może również służyć do diagnozowania i lokalizowania wąskich gardeł w systemie. Proces ten może obejmować testowanie ilościowe, takie jak pomiar czasu reakcji lub liczby MIPS (milionów instrukcji na sekundę). Testowanie wydajnościowe jest często przeprowadzane w połączeniu z testami stresowymi.
29. Testowanie wydajnościowe to rodzaj testów niefunkcjonalnych, które oceniają szybkość działania systemu pod określonym obciążeniem. Istnieje wiele typów testów wydajnościowych, w tym:
- Testy typu baseline: badają, jak system działa pod przewidywanym lub normalnym obciążeniem i tworzą punkt odniesienia dla innych testów.
- Testy pojemnościowe: określają, ile użytkowników aplikacja może obsłużyć zanim wydajność lub stabilność zaczną się pogarszać.
- Testy obciążenia: sprawdzają, jak system zachowuje się pod większym obciążeniem.
- Testy stresu: sprawdzają, przy jakim obciążeniu system zaczyna się "załamywać".
- Testy typu soak: są przeprowadzane przez długi okres czasu i sprawdzają niestabilności systemu, które pojawiają się z czasem.
- Testy komponentów: testują konkretny, dyskretny element aplikacji lub systemu.
- Testy skalowalności: są podobne do testów obciążenia, ale zamiast zwiększać liczbę żądań do systemu, zwiększają wielkość lub złożoność wysyłanych żądań.
- Testy typu smoke: są przeprowadzane przy bardzo niskim obciążeniu i pokazują, że aplikacja działa zgodnie z oczekiwaniami.
30. Testowanie przenośności to rodzaj testów niefunkcjonalnych, które oceniają, jak łatwo komponent oprogramowania lub aplikacja może być przeniesiona z jednego środowiska do drugiego. Testy te mierzą, jak system działa pod przewidywanym obciążeniem i tworzą punkt odniesienia dla innych testów. Testy przenośności obejmują testy na instalowalność, współistnienie lub kompatybilność, zdolność adaptacji i zastępowalność. Celem tych testów jest określenie, czy system spełnia wymagania producenta lub dostawcy, identyfikacja przyczyn awarii dotyczących wymagań przenoszenia, które pomagają określić defekty, które nie są skutecznie wykryte podczas testowania integracyjnego i jednostkowego, zgłoszenie tych awarii w celu ich naprawienia oraz określenie, w jakim stopniu system jest gotowy do uruchomienia.
31. Testowanie odzyskiwania to rodzaj testów niefunkcjonalnych, które oceniają, jak szybko aplikacja lub system może odzyskać pełną funkcjonalność po awarii lub innym zdarzeniu. Testy te polegają na wymuszaniu awarii oprogramowania różnymi metodami, aby sprawdzić, czy i jak poprawnie odzyskuje ono swoje funkcje.
32. Testowanie wiarogodności i niezawodności to rodzaj testów niefunkcjonalnych, które mają na celu określenie niezawodności aplikacji/systemu i sprawdzenie, czy spełnia on wymogi wiarygodności klienta. Testowanie jest uznawane za rzetelne, jeżeli wielokrotnie uzyskuje ten sam wynik. Testowanie niezawodności ma na celu odkrycie najbardziej prawdopodobnych awarii podczas rzeczywistej eksploatacji.
Niezawodność oprogramowania, zdefiniowana przez ANSI, to prawdopodobieństwo bezawaryjnej pracy oprogramowania w określonym okresie czasu w określonym środowisku. Niezawodność oprogramowania nie jest bezpośrednią funkcją czasu, ponieważ oprogramowanie nie rdzewieje ani się nie niszczy.
Testowanie niezawodności oprogramowania można podzielić na trzy części: modelowanie, pomiar i poprawa. Modelowanie polega na zastosowaniu odpowiednich modeli do danego problemu. Pomiar niezawodności oprogramowania jest trudny, ponieważ nie można go bezpośrednio zmierzyć, więc mierzy się inne powiązane czynniki do oszacowania niezawodności oprogramowania. Poprawa niezawodności oprogramowania jest trudna z powodu ograniczeń czasowych i budżetowych.
33. Testowanie odporności to rodzaj testów niefunkcjonalnych, które mają na celu zapewnienie, że system nie posiada pojedynczych punktów awarii i pozostaje dostępny, czyli w stanie działania, nawet podczas pracy w warunkach błędu. Przykładowo, aplikacja powinna nadal funkcjonować w przypadku awarii sieci czy bazy danych. W takich sytuacjach powinny pojawiać się odpowiednie komunikaty o błędach tam, gdzie jest to wymagane.
34. Testy bezpieczeństwa to rodzaj testów niefunkcjonalnych, które mają na celu wykrycie błędów w mechanizmach bezpieczeństwa systemu informatycznego. Chociaż przeprowadzenie tych testów nie gwarantuje braku wad, pomaga w ochronie danych i utrzymaniu funkcjonalności systemu. Testy te obejmują elementy takie jak poufność, integralność, dostępność, uwierzytelnianie, autoryzację i niezaprzeczalność. Są one przeprowadzane w celu sprawdzenia, czy nie doszło do wycieku informacji, na przykład poprzez szyfrowanie aplikacji lub użycie oprogramowania i sprzętu zabezpieczającego. Testy bezpieczeństwa mogą być przeprowadzane na wiele różnych sposobów, w zależności od specyficznych wymagań bezpieczeństwa systemu.
35. Testowanie skalowalności to rodzaj testów niefunkcjonalnych, które oceniają zdolność systemu, sieci lub procesu do efektywnego działania podczas zmiany wielkości i możliwości przetwarzania w celu spełnienia rosnącego zapotrzebowania. Testy te mierzą zdolność aplikacji do skalowania w zakresie jej niefunkcjonalnych zdolności, takich jak obsługa obciążenia, liczba transakcji, ilość równoczesnych użytkowników, wielkość danych itp. Celem jest zrozumienie, w którym momencie aplikacja przestaje skalować się i zidentyfikowanie przyczyn tego zjawiska.
36. Testowanie typu Stress to rodzaj testów niefunkcjonalnych, które mają na celu sprawdzenie, jak system radzi sobie poza normalnymi warunkami operacyjnymi, często aż do punktu załamania. Testy te są wykorzystywane do określenia stabilności systemu, szczególnie pod dużym obciążeniem, a nie w normalnych warunkach. Celem jest zapewnienie, że oprogramowanie nie ulegnie awarii w warunkach niewystarczających zasobów obliczeniowych, takich jak brak pamięci czy miejsca na dysku.
Podczas testów stresowych celowo tworzy się i utrzymuje niekorzystne środowisko, które jest stopniowo pogarszane, aż poziom wydajności spadnie poniżej określonego minimum lub system całkowicie przestanie działać. Testy te pozwalają na identyfikację konkretnych słabości i luk w systemie.
Po awarii spowodowanej procesem testowania, końcowym etapem testów stresowych jest określenie, jak dobrze i jak szybko system może się odzyskać po niekorzystnym zdarzeniu. Testy stresowe są często przeprowadzane w połączeniu z bardziej ogólnym procesem testowania wydajności.
37. Testowanie typu Spike to rodzaj testów niefunkcjonalnych, które polegają na niespodziewanym obciążeniu systemu danymi, a następnie jego rozładowaniu. Celem jest obserwacja reakcji systemu na nieoczekiwane, krytyczne zmiany w aktywności, takie jak gwałtowny wzrost i spadek. Testy te są przeprowadzane w różnych okresach czasu, podczas których aplikacja jest poddawana niezwykle intensywnej, jednoczesnej aktywności użytkowników. Głównym celem testowania typu Spike jest sprawdzenie, czy system jest w stanie utrzymać dramatyczne zmiany w obciążeniu i jak wpływają one na jego wydajność.
38. Testowanie użyteczności to rodzaj testów niefunkcjonalnych, które oceniają łatwość użycia interfejsów użytkownika i sprawdzają, czy aplikacja lub system jest przyjazny dla użytkownika. Testy te skupiają się na nawigacji, układzie, szybkości i treści, a także na porównaniu z wcześniejszymi lub podobnymi aplikacjami lub systemami.
Testy użyteczności obejmują pięć kluczowych elementów:
- Przyswajanie - jak łatwo nowi użytkownicy mogą wykonać podstawowe zadania?
- Wydajność - jak szybko doświadczeni użytkownicy mogą zrealizować zadania?
- Zapamiętywalność - czy użytkownik jest w stanie po długiej przerwie efektywnie korzystać z aplikacji/systemu, czy musi na nowo uczyć się wszystkiego?
- Błędy - ile błędów użytkownicy popełniają, jak poważne są te błędy i jak łatwo można się z nich otrząsnąć?
- Satysfakcja - jak bardzo system podoba się użytkownikowi?
Celem tych testów jest zapewnienie, że system jest nie tylko funkcjonalny, ale także łatwy i przyjemny w użyciu.
39. Testy użyteczności przynoszą korzyści zarówno dla użytkowników końcowych, jak i dla procesu testowania. Dla użytkowników końcowych oznaczają one lepszą jakość oprogramowania, łatwość użycia, akceptację oprogramowania i skrócony czas nauki dla nowych użytkowników.
Z punktu widzenia procesu testowania, testy użyteczności mogą być modyfikowane do pokrycia wielu innych rodzajów testów, są ekonomiczne, skuteczne i korzystne, jeśli są odpowiednio planowane. Mogą pomóc w wykrywaniu potencjalnych błędów i luk w systemie, które mogą nie być widoczne dla twórców lub innych typów testów.
Osoby zaangażowane w testy użyteczności muszą posiadać umiejętności takie jak cierpliwość, umiejętność słuchania sugestii, otwartość na przyjęcie nowych pojęć i dobre umiejętności obserwacji, aby wykryć i naprawić problemy.
40. Testy objętości to rodzaj testów niefunkcjonalnych, które polegają na testowaniu aplikacji lub systemu z określoną ilością danych. Celem tych testów jest sprawdzenie, jak system radzi sobie z dużą ilością danych, na przykład poprzez rozszerzenie bazy danych do określonego rozmiaru i testowanie działania aplikacji na tym zbiorze danych.
Testy objętości mają na celu określenie wydajności systemu wraz ze wzrostem ilości danych w bazie danych. Sprawdzają, czy nie dochodzi do utraty danych, jak długi jest czas reakcji systemu i czy dane są przechowywane prawidłowo. W przeciwieństwie do testów obciążenia, które skupiają się na przewidywanych poziomach obciążenia, testy objętości koncentrują się na dużej ilości danych w bazie danych.
41. Testowanie strukturalne to podejście, które polega na testowaniu wewnętrznej struktury oprogramowania. Testerzy muszą mieć wiedzę o wewnętrznej implementacji kodu i sposobie działania oprogramowania.
Testy strukturalne mogą być stosowane na każdym poziomie testowania, od testowania komponentów po testowanie integracji komponentów, testowanie systemu i testowanie akceptacyjne. W zależności od poziomu, struktury testowane mogą być różne, na przykład zakres opcji menu lub główne operacje biznesowe mogą być elementem strukturalnym w testowaniu systemu i testowaniu akceptacyjnym.
42. Testowanie strukturalne obejmuje następujące techniki:
- Pokrycie wypowiedzi - polega na wykonaniu wszystkich instrukcji programowania przy minimalnej liczbie testów.
- Pokrycie gałęzi - inicjuje serię testów, aby zapewnić, że wszystkie gałęzie przetwarzania aplikacji/systemu są sprawdzane co najmniej raz.
- Pokrycie ścieżki - polega na testowaniu wszystkich możliwych ścieżek, co oznacza, że każda instrukcja i gałąź są sprawdzane podczas testu.