Inżynieria oprogramowania - Testowanie, weryfikacja i atestowanie oprogramowania

1. Weryfikacja - testowanie zgodności systemu z wymaganiami zdefiniowanymi w fazie określenia wymagań. Weryfikacja włącza następujące czynności: 
  • przeglądy techniczne oraz inspekcje oprogramowania
  • sprawdzanie czy wymagania na oprogramowanie są zgodne z wymaganiami użytkownika
  • sprawdzanie czy komponenty projektu są zgodne z wymaganiami na oprogramowanie
  • testowanie jednostek oprogramowania
  • testowanie integracji oprogramowania, testowanie systemy
  • testowanie akceptacji systemu przez użytkowników
  • audyt
2. Atestowanie (walidacja) - ocena systemu lub komponentu podczas lub na końcu procesu jego rozwoju na zgodności z wyspecjalizowanymi wymaganiami. 

3. Cele testowania:
  • wykrycie i usunięcie błędów w systemie
  • ocena niezawodności systemu
4. Inspekcja to formalna technika oceny, w której wymagania na oprogramowanie, projekt lub kod są szczegółowo badane przez osobę lub grupę osób nie będących autorami, w celu identyfikacji błędów, naruszenia standardów i innych problemów.

Cechy inspekcji:
  • są zaplanowane i przygotowane
  • błędy i problemy są notowane
  • dane nie są wykorzystywane do oceny pracowników
  • wykonywana przez techników dla techników, bez udziału kierownictwa
  • proces inspekcji jest mierzony
  • proces inspekcji jest poprawiany
  • błędy są wykorzystywane w poprawie procesu programowego
  • dane nie są wykorzystywane do oceny pracowników
5. Testy można klasyfikować z różnych punktów widzenia:
  • wykrywane błędów - testy, których głównym celem jest wykrycie jak największej liczby błędów w programie
  • testy statystyczne - celem jest wykrycie najczęstszych błędnych wykonań oraz ocena niezawodności systemu
Z punktu techniki wykonywania testów można je podzielić na:
  • testy dynamiczne - polegają na wykonywaniu programu lub jego fragmentów i porównywaniu uzyskanych wyników z wynikami poprawnymi
  • testy statyczne - oparte na analizie kody
6. Błąd - niepoprawna konstrukcja znajdująca się w programie, która może doprowadzić do niewłaściwego działania.

7. Błędne wykonanie - niepoprawne działanie systemu w trakcie jego pracy.

8. Typowe fazy testowania systemu:
  • testy modułów - wykonywane bezpośrednio po zakończeniu realizacji poszczególnych modułów
  • testy systemu - w fazie integrowane są poszczególne moduły i testowane są szczególne podsystemy oraz system jako całość
  • testy akceptacji - testy alpha; oprogramowanie jest przekazywane do przetestowania przyszłemu użytkownikami
9. Testowaniu podlega:
  • wydajność systemu
  • interfejsy systemu
  • własności operacyjne systemu
  • testy zużycia zasobów
  • zabezpieczenie systemu
  • przenaszalność oprogramowania
  • niezawodność oprogramowania
  • odtwarzalność oprogramowania
  • bezpieczeństwo oprogramowania
  • kompletność i jakość założonych funkcji systemu
  • nie przekraczanie ograniczeń
  • modyfikowalność oprogramowania
  • obciążalność oprogramowania
  • skalowalność systemu
  • akceptowalność systemu
  • jakość dokumentacji
10. Miary niezawodności:
  • prawdopodobieństwo błędnego wykonania
  • częstotliwość występowania błędnych wykonań
  • średni czas między błędnymi wykonaniami
  • dostępność
11. Dynamiczne testy zorientowane na wykrywanie błędów dzieli się na:
  • Testy funkcjonalne, które zakładają znajomość jedynie wymagań wobec testowanej funkcji. System jest traktowany jako czarna skrzynka, która w nieznany sposób realizuje wykonywane funkcje. Testy powinny wykonywać osoby, które nie były zaangażowane w realizację testowanych fragmentów systemu.
  • Testy strukturalne, które zakładają znajomość sposobu implementacji testowanych funkcji. 
12. Testy obciążeniowe - celem jest zbadanie wydajności i niezawodności systemu podczas pracy pod pełnym lub nawet nadmiernym obciążeniem

13. Testy odporności - celem jest sprawdzenie działania w przypadku zajścia niepożądanych zdarzeń, np.
  • zaniku zasilania
  • awarii sprzętowej
  • wprowadzenia niepoprawnych danych
  • wydania sekwencji niepoprawnych poleceń