Mój obieg pracy zawsze polegał na napisaniu jednego logicznego kroku, a następnie uruchomieniu programu i sprawdzeniu wyniku. Ten proces bardzo mi pomógł w przypadku zadań na uniwersytecie. Jednak wraz z dalszym rozwojem często zdarza się, że skompilowanie i uruchomienie kodu zajmuje od 1 do 2 minut. Przykłady obejmują przesyłanie programu do mikrokontrolera, wymagające interakcji z zewnętrznym serwerem i niemożności wdrożenia automatyzacji z powodu uwierzytelnienia, architektury oprogramowania lub złożoności.
Tego typu zadania są bardzo nieodpowiednie do tego, jak zwykle programuję, i mam trudności z efektywnym kodowaniem. Zwykle popełniam wiele błędów składniowych i błędów logicznych, z których większość łatwo wychwytuję testując. Jednak przy tak długim czasie oczekiwania ta metoda jest zbyt czasochłonna.
źródło
Odpowiedzi:
Po pierwsze, wszelkiego rodzaju interaktywne debugowanie jest świetne. Chcesz tego w swoim zestawie narzędzi, ponieważ jeśli nie, to pewnego dnia naprawdę skorzystasz z niego. (Szczegóły różnią się w zależności od języka, platformy i IDE).
Chciałbym przyjrzeć się niektórym ramom do używania próbnych obiektów . Pozwalają one otoczyć testowany komponent fałszywym ekosystemem innych komponentów, dzięki czemu testy są bardziej ukierunkowane i można uniknąć testowania wszystkiego jako całości.
Ponadto same obiekty pozorne mogą być programowane za pomocą asercji, dzięki czemu można sprawdzić, czy testowany komponent naprawdę wykonał określone wywołanie.
źródło
Ciężko pracowałbym, aby skrócić czas testu. Pracowałem w kilku firmach opracowujących kod wbudowany, a testowanie było bolesne, wymagało podróży do serwerowni oraz ręcznych FTP i restartów oraz wielu poleceń na sprzęt testowy. Potem dołączyłem do naprawdę dobrej grupy, w której mogłem po prostu wpisać „wykonaj test” na biurku i uzyskać wyniki w niecałą minutę. W tej minucie:
Zajęło to trochę czasu, aby wszystko to działało, ale wysiłek automatyzacji wszystkich tych kroków został odzyskany stukrotnie, w miarę wzrostu personelu programistycznego.
źródło
Zautomatyzowane testy nie zastępują przeglądu i zrozumienia.
Być może używasz testów jako kuli. Jeśli to zrobisz, utrudnisz naukę. Nie zalecam, żebyś nie testował. Zamiast tego polecam, aby przed uruchomieniem testu sprawdzić, co napisałeś. Zrozum, co napisałeś, upewnij się, że ma to sens i upewnij się, że składnia wygląda poprawnie.
źródło
Już dałeś odpowiedź:
I usually make a lot of syntax errors and logic errors
Dlatego ciężko pracując nad poprawą tego, powinieneś być w stanie skrócić czas testowania. Błędy składniowe powinny być pierwszymi, które należy zmniejszyć. Nigdy nie studiowałeś testu programistycznego z papierem i ołówkiem?
Miałem to samo, kiedy przestawiłem się z PHP na Javę. Musiałem nauczyć się debugować zamiast tylko drukować niektóre zmienne i naciskać F5 w przeglądarce ...
źródło
make a lot of
, że to brzmi jak powinien zainwestować swoją energię, aby to poprawićPotrzebujesz dobrej platformy testowej Unit lub Functional, która może automatycznie uruchamiać testy, najlepiej w tle. Będzie to wymagało użycia Mocków, jak wspomniano powyżej, i w zależności od języka, w którym używasz jakiegoś zastrzyku zależności.
Dzięki uczynieniu obiektów możliwie najbardziej niezależnymi, a następnie zastosowaniu metod wstrzykiwania w celu dodania zewnętrznych ograniczeń, nie jest trudno stworzyć platformę testową dla swojego kodu.
źródło
Prawdziwa zabawa przychodzi, gdy po prostu nie możesz przetestować swojego kodu, chyba że używasz go w gniewie. Zdarza się to dość często w przypadku systemów transakcyjnych, ponieważ dostępne symulatory wymiany są często albo słabe, nie istnieją, albo nawet nie są zgodne z tym, co mówią dostawcy oprogramowania do wymiany. Obawiam się, że to część bogatej tkaniny życia. Moje podejście polega na upewnieniu się, że przynajmniej moja strona transakcji jest dobrze napisana i dobrze udokumentowana, dzięki czemu można ją łatwo zmienić szybko.
źródło
Testów jednostkowych; Fikcyjne aplikacje / symulatory.
To zabierze trochę czasu, oczywiście, i może być konieczne zebranie i masowanie przykładowych danych w celu stworzenia odpowiednich makiet, ale w końcu się to opłaci: Zaoszczędzisz sobie cały czas i problemy, które napotkasz, próbując przetestować na zewnętrznym systemy.
Użyte prawidłowo, narzędzia te zapewnią, że zanim przejdziesz gdziekolwiek w pobliżu systemów zewnętrznych, będziesz w 99,9% pewien, że jeśli twój kod zawiedzie, to coś w systemie zewnętrznym / zmiana środowiska, które go spowodowało, a nie błąd w twoim własnym kodzie.
Przez pewien czas pracowałem zawodowo tak jak ty w szkole, aw wielu przypadkach było to bardzo skuteczne. W końcu pracowałem u niektórych osób, które zmusiły mnie do porzucenia tej metodologii i zamiast tego skorzystałem z testów jednostkowych i makiet.
Teraz nie rozpoczynam żadnego projektu bez wcześniejszego przemyślenia wdrożenia faz testowania - testowanie jednostkowe, makiety, symulatory, przykładowe dane itp.
źródło
Może użycie Lintera może ci trochę pomóc.
Byłem w podobnej sytuacji z moim poprzednim pracodawcą. Nasza baza kodu była naprawdę ogromna i aby wprowadzić wszelkie zmiany, które musiałem kodować, skompiluj, a następnie zamień
.class
pliki na serwerze deweloperskim, a następnie zrestartuj dev-sever za pomocą skryptu restartu. Ku mojemu przerażeniu ponowne uruchomienie serwera deweloperskiego zajmie około pół godziny.Później dowiedziałem się, że zdalne debugowanie serwera deweloperskiego było również możliwe.
Oto co zrobiłem, aby zoptymalizować mój proces
Pierwsza wstępna runda zdalnego debugowania pozwoliła mi zobaczyć dokładny przepływ kodu i dokładne wartości / stany zmiennych.
Planowanie, jak i jakie zmiany wprowadzę.
Wprowadzanie zmian, a następnie porównywanie różnic
Błędy buforowania przy użyciu linijki lub kompilacji.
Przekazywanie poprawki przez zastąpienie
.class
plików i ponowne uruchomienie.Czasami dołączałbym też bardzo dużo instrukcji dziennika, aby ponownie sprawdzić przepływ kodu i sprawdzić wartości / stany. To bardzo mi pomogło.
Również użycie IDE z dobrą automatyczną komplikacją może znacznie pomóc w zmniejszeniu literówek.
Mam nadzieję że to pomoże.
źródło