Zastanawiam się nad napisaniem sterownika niskiego poziomu lub komponentów / jądra systemu operacyjnego.
Ludzie z osdev.org wydają się myśleć, że ważne fragmenty nie są w znaczący sposób testowane w ten sposób, ale przeczytałem kilka dyskusji, w których ludzie myśleli inaczej. Rozejrzałem się, ale nie znalazłem prawdziwych przykładów TDD na komponentach niskiego poziomu.
Czy to jest coś, co ludzie robią, czy tylko coś, o czym ludzie mówią w teorii, ponieważ nie ma dobrego sposobu na zrobienie tego w praktyce?
Odpowiedzi:
Jeśli wchodzisz w interakcję lub kontrolujesz sprzęt, trudno go przetestować bez niego. Możesz spróbować emulować sprzęt, ale często jest to trudniejsze niż napisanie sterownika, więc nie wiesz, czy błąd jest w twoim sterowniku, czy emulatorze.
źródło
Osobiście uważam, że można uzyskać wiele korzyści z TDD (bez faktycznego przestrzegania TDD) poprzez:
TDD wydaje się wymagać od ciebie dość jasnego zrozumienia, jaką funkcję planujesz wdrożyć lub jakie wymagania planujesz spełnić, implementując kod. W niektórych sytuacjach po prostu zbyt mało rozumie się problemu. To wymagałoby rozwiązania Spike . W ramach tego rozwiązania Spike można zastosować TDD, ponieważ problem został zawężony do możliwego do zarządzania poziomu. Po ukończeniu kilku szczytów, z których każdy obejmuje niektóre aspekty pierwotnego problemu, można rozpocząć pracę nad pełnym rozwiązaniem, a zastosowanie TDD w tym momencie może być wykonalne ze względu na lepsze zrozumienie.
Edytowane:
Po dokładniejszym przeczytaniu strony
Wyraźnie mówią, że większość części jest testowalna i że niektóre części wymagają innego rodzaju testów: testów wytrzymałościowych .
źródło
Ja nie. W kodzie wbudowanym mojego Mistrza po prostu piszę kod i spędzam czas na zastanawianiu się, co robi (a czego nie robi). W każdym razie nie jestem pewien, czy da się to zrobić. Zbliżam się niepokojąco do fizycznej granicy pamięci bez wstrzykiwania kodu testowego.
Myślę, że w przypadku systemów, które są wystarczająco duże (tj. Mają MB pamięci, a nie KB), można to zrobić w przypadku niektórych komponentów, jeśli masz wystarczająco dużo czasu i wysiłku. Testowanie kodu odczytu pinów przez wyśmiewanie pinów jest ... eee ... mało znaczące. Jeśli Twoja logika jest wystarczająco rozdzielona, możesz przetestować logikę w innym miejscu.
FWIW, nie kupuję TDD w ogólnym przypadku - działa dobrze dla stosów systemowych, które są wystarczająco duże z wystarczającymi zasobami o wystarczającym deterministycznym zachowaniu, poza tym nie wydaje się rozsądną praktyką.
źródło