Sobes.tech
Junior

Czym jest test niefunkcjonalny?

sobes.tech AI

Odpowiedź od AI

Testy niefunkcjonalne to rodzaj testów oprogramowania, które koncentrują się na weryfikacji jego wymagań niefunkcjonalnych. Ocenią one cechy systemu, które nie są bezpośrednio związane z konkretnymi funkcjami, a raczej z tym, "jak" system działa.

Główne cele testów niefunkcjonalnych:

  • Zapewnienie, że system spełnia oczekiwania użytkownika i biznesu w zakresie wydajności, niezawodności, użyteczności i innych aspektów.
  • Wykrycie problemów, które mogą wpłynąć na stabilność, skalowalność i bezpieczeństwo systemu.
  • Potwierdzenie zgodności systemu z ustalonymi standardami i wymaganiami.

Rodzaje testów niefunkcjonalnych:

Typ testu Krótki opis Przykłady sprawdzanych cech
Testy wydajności Ocena szybkości, reaktywności, stabilności i skalowalności systemu pod obciążeniem. Czas odpowiedzi, przepustowość, obciążenie CPU/pamięci.
Testy obciążeniowe Sprawdzenie zachowania systemu przy oczekiwanym szczytowym obciążeniu. Liczba jednoczesnych użytkowników, transakcji na sekundę.
Testy stresowe Sprawdzenie zachowania systemu przy przekroczeniu oczekiwanego szczytowego obciążenia lub braku zasobów. Punkt awarii systemu, zachowanie przy przeciążeniu.
Testy stabilności (Endurance Testing) Sprawdzenie zdolności systemu do wytrzymania długotrwałej pracy pod obciążeniem. Wycieki pamięci, degradacja wydajności z czasem.
Testy bezpieczeństwa Sprawdzenie ochrony systemu przed zagrożeniami zewnętrznymi i wewnętrznymi, nieautoryzowanym dostępem. Ochrona przed SQL-iniekcjami, atakami XSS, uwierzytelnianiem, autoryzacją.
Testy użyteczności Określenie, jak łatwo i intuicyjnie użytkownicy mogą korzystać z systemu. Intuicyjny interfejs, łatwa nawigacja, dostępność.
Testy zgodności Sprawdzenie działania systemu w różnych środowiskach (przeglądarki, OS, urządzenia). Obsługa różnych wersji przeglądarek, OS.
Testy niezawodności Ocena zdolności systemu do wykonywania funkcji bez awarii przez określony czas. Średni czas między awariami (MTBF), prawdopodobieństwo awarii.
Testy dostępności Sprawdzenie, jak łatwo system jest dostępny dla osób z ograniczeniami. Zgodność ze standardami WCAG.
Testy lokalizacji/internacjonalizacji Sprawdzenie dostosowania systemu do różnych języków i ustawień regionalnych. Przetłumaczone ciągi, formaty dat/liczb.

Testy niefunkcjonalne są zwykle przeprowadzane na wcześniejszych etapach cyklu życia rozwoju oprogramowania niż testy funkcjonalne, ale ich planowanie zaczyna się od określenia wymagań. Mogą być częścią zautomatyzowanych procesów, szczególnie przy testach wydajności i bezpieczeństwa.

Narzędzia do testów niefunkcjonalnych:

  • Wydajność: JMeter, LoadRunner, Gatling, k6.
  • Bezpieczeństwo: OWASP ZAP, Burp Suite, Acunetix.
  • Zgodność: BrowserStack, Sauce Labs.
  • Użyteczność: UserTesting.com, narzędzia do śledzenia wzroku.

Przykładem automatyzacji części testów niefunkcjonalnych może być skrypt do sprawdzania czasu ładowania strony:

import time
import requests

def measure_page_load_time(url):
    """
    Mierzy czas ładowania podanego URL.
    """
    start_time = time.time()
    try:
        response = requests.get(url)
        response.raise_for_status()  # Rzuca HTTPError dla złych odpowiedzi (4xx lub 5xx)
        end_time = time.time()
        load_time = end_time - start_time
        print(f"Czas ładowania {url}: {load_time:.2f} sekund")
        return load_time
    except requests.exceptions.RequestException as e:
        print(f"Błąd podczas ładowania {url}: {e}")
        return None

# Przykład użycia
url_to_test = "https://www.example.com"
measure_page_load_time(url_to_test)

Wyniki testów niefunkcjonalnych często są prezentowane w formie raportów, wykresów i metryk, które pozwalają ocenić cechy systemu i podjąć decyzje o koniecznych ulepszeniach.