Rozdział 7. Testy

Rozdział 6. Protokoły | OpenDiag - STM32 CAN Tool | Rozdział 8. Roadmap


Tak. I tutaj proponuję podejść do tego profesjonalnie. Nie chodzi tylko o "sprawdzić czy działa", ale o to, żeby każdy etap projektu miał jasno określone kryteria zaliczenia. Dzięki temu po każdej zmianie będziemy mogli wrócić i sprawdzić, czy nic nie zepsuliśmy.


Rozdział 7. Testy

7.1 Cel

Celem testów jest potwierdzenie poprawności działania każdego modułu projektu OpenDiag.

Testy wykonywane są stopniowo – od pojedynczych modułów, poprzez integrację, aż do testów z rzeczywistym pojazdem.

Każdy etap implementacji kończy się zestawem testów zakończonych wynikiem PASS lub FAIL.


7.2 Rodzaje testów

Projekt przewiduje następujące poziomy testowania:

Testy modułów

Sprawdzają pojedynczy moduł.

Przykład:

  • USB
  • CAN
  • Logger
  • Parser

Testy integracyjne

Sprawdzają współpracę kilku modułów.

Przykład:

USB
 ↓
Parser
 ↓
ELM327

Testy systemowe

Sprawdzają cały firmware.

Przykład:

FORScan
 ↓
USB
 ↓
STM32
 ↓
CAN
 ↓
Samochód

Testy regresyjne

Po każdej większej zmianie ponownie wykonywane są wcześniej zaliczone testy.

Ich celem jest wykrycie błędów wprowadzonych podczas rozwoju projektu.


7.3 Środowisko testowe

Komputer

  • Linux (platforma główna)
  • Windows (FORScan)

Sprzęt

  • STM32 Nucleo-F767ZI
  • SN65HVD230
  • przewód OBD-II
  • Ford S-Max (główna platforma testowa)

7.4 Testy sprzętu

Pierwszym etapem jest sprawdzenie poprawności działania sprzętu.

Lista kontrolna:

  • STM32 uruchamia się poprawnie
  • ST-Link działa
  • Debug działa
  • Virtual COM działa
  • USB CDC jest wykrywany
  • Transceivery CAN działają

7.5 Testy komunikacji

UART

Sprawdzamy:

  • wysyłanie
  • odbiór
  • poprawność transmisji

USB CDC

Sprawdzamy:

  • enumerację urządzenia
  • wysyłanie danych
  • odbiór danych
  • długie ramki
  • szybkie wysyłanie wielu komend

CAN

Sprawdzamy:

inicjalizację odbiór nadawanie błędy magistrali różne prędkości


7.6 Testy parsera

Dla każdej komendy określamy:

wejście, oczekiwaną odpowiedź, wynik.

Przykład:

Polecenie Oczekiwana odpowiedź
ATI wersja urządzenia
ATZ restart
ATE0 OK

7.7 Testy ELM327

Sprawdzamy zgodność z wymaganiami FORScan.

Między innymi:

  • rozpoznawanie komend AT,
  • odpowiedzi zgodne z ELM327,
  • obsługę błędów,
  • poprawne zakończenie odpowiedzi (>).

7.8 Testy CAN

Każdy port CAN testujemy niezależnie.

Zakres:

  • CAN A
  • CAN B
  • CAN C (po jego dodaniu)

Sprawdzamy:

  • wysyłanie ramek,
  • odbiór ramek,
  • jednoczesną pracę wielu kanałów.

7.9 Testy z pojazdem

Pierwszym pojazdem testowym będzie:

Ford S-Max

Zakres:

  • wykrycie adaptera,
  • identyfikacja modułów,
  • odczyt błędów,
  • kasowanie błędów,
  • odczyt parametrów Live Data.

Później można rozszerzyć testy o inne pojazdy.


7.10 Testy wydajności

Sprawdzamy:

  • maksymalną liczbę ramek CAN/s,
  • opóźnienie odpowiedzi,
  • obciążenie procesora,
  • wykorzystanie pamięci RAM,
  • wykorzystanie pamięci Flash.

7.11 Testy stabilności

Urządzenie powinno pracować przez dłuższy czas bez:

  • zawieszeń,
  • resetów,
  • utraty ramek,
  • błędów USB.

7.12 Dokumentacja testów

Każdy test powinien zawierać:

  • identyfikator (np. USB-001),
  • opis,
  • warunki wstępne,
  • procedurę,
  • oczekiwany wynik,
  • rzeczywisty wynik,
  • status (PASS/FAIL),
  • datę wykonania.

Przykład:

ID Nazwa Wynik
USB-001 Enumeracja USB CDC PASS
CAN-001 Inicjalizacja CAN A PASS
ELM-001 Odpowiedź na ATI PASS

7.13 Narzędzia testowe

Na obecnym etapie planujemy używać:

  • STM32CubeIDE – debugowanie,
  • PuTTY / GtkTerm / Minicom – testy UART i USB CDC,
  • FORScan – testy zgodności z ELM327,
  • Wireshark (USBPcap na Windows) – analiza komunikacji USB (jeśli zajdzie potrzeba),
  • SocketCAN + can-utils (Linux) – w przyszłości do porównywania ruchu CAN z naszym interfejsem.

Moja propozycja do całego projektu

Chciałbym dodać jeszcze jedną zasadę:

Każdy nowy moduł musi mieć własny plan testów, zanim zaczniemy go implementować.

Przykład:

  • zanim napiszemy parser ELM, tworzymy listę 10–20 komend do sprawdzenia;
  • zanim napiszemy obsługę CAN, definiujemy testy nadawania, odbioru i błędów.

To może wydawać się dodatkową pracą, ale bardzo ułatwia rozwój i późniejsze refaktoryzacje. Dzięki temu zawsze wiemy, czy po zmianach projekt nadal zachowuje się zgodnie z założeniami.