Czy wprowadzenie małej zmiany, przetestowanie jej, a następnie „przepłukanie i powtórzenie” to zły nawyk?

54

Jestem programistą z wieloletnim doświadczeniem. Uświadomiłem sobie, że mam pewien nawyk. Nie jestem pewien, czy to naprawdę zły nawyk, czy nie.

Dostaję listę zadań do wykonania dla rozwiązania, nawet małych małych zadań, na przykład

  1. Zmień zasoby tej kontroli użytkownika
  2. Zmień rozmiar innego
  3. Dodaj trochę kodu HTML i kodowania do innej kontrolki użytkownika

Wszystkie te zadania są małe. Mam na myśli, że można to zrobić w ciągu 10 minut, ale mam nawyk robienia niewielkich zmian, a następnie testowania ich raz po raz w przeglądarce internetowej . Czy to dobra praktyka?

Czy powinienem wykonać je wszystkie naraz, a następnie przetestować je razem?

Jeśli to naprawdę zły nawyk, to jak to naprawić, skoro masz ochotę tracić czas na testowanie drobnych zmian w kółko?

Matematyka
źródło
3
@gnat Twoja najczęściej głosowana odpowiedź również opiera się na opiniach - programmers.stackexchange.com/questions/154733/… Każda odpowiedź, którą czytam, zawiera tam własną opinię, jakieś komentarze?
Matematyka
2
To nie to. co powiesz na twoją drugą najwyżej ocenioną odpowiedź - programmers.stackexchange.com/questions/159964/… - czy też nie jest ona oparta na opiniach?
Matematyka
7
Podejście brzmi podobnie do Test Driven Development, w którym tworzysz test, wprowadzasz zmiany niezbędne do zdania testu, a następnie uruchamiasz testy. Gdy następnie powtórzysz to dla drugiego testu, twoje drugie uruchomienie testowe będzie obejmować pierwsze; będziesz wielokrotnie testować, aby udowodnić, że nadal działa, ale jest zautomatyzowany.
Kevin Hogg
5
Powiedziałbym, że przeciwieństwo nawyku, wprowadzanie wielu zmian, a dopiero potem ich testowanie, jest złym nawykiem.
Chris B. Behrens

Odpowiedzi:

130
  • To dobra praktyka.
  • Stosujesz metodę naukową.
  • Jeśli zmienisz kilka rzeczy przed jakimkolwiek testowaniem, wówczas testowanie każdego z nich będzie trudniejsze, a być może niewiarygodne, ponieważ warunki wstępne będą trudniejsze do przygotowania, a różne zmiany mogą oddziaływać na siebie nawzajem w sposób, którego nie przewidziałeś.
  • Kiedy poczujesz, że „marnujesz” teraz, wrócisz do etapu integracji, testowania i utrzymania.
  • Tak trzymać.
Tulains Córdova
źródło
9
AFAIK, dla programowania interfejsu użytkownika jest to nie tylko dobra praktyka, to jedyna dopuszczalna praktyka. Dlatego firmy produkujące oprogramowanie stworzyły tak wiele What you see is what you getnarzędzi dla programistów pracujących z HTML, CSS, widżetem itp.
InformedA
38

Wprowadzanie wielu drobnych zmian i testowanie każdego z nich nie jest złą rzeczą. Pozwala zobaczyć efekt każdej zmiany, a następnie, gdy jedna zmiana powoduje problem, o wiele łatwiej jest wiedzieć, która zmiana spowodowała problemy - najnowsza!

Jeśli masz listę zadań z 10 elementami i wykonujesz je wszystkie jednocześnie, a następnie testujesz stronę, a następnie zauważasz, że strona wygląda nieprawidłowo, może być trudniej dowiedzieć się, która zmiana spowodowała uszkodzenie strony.

Oczywiście możliwe jest podejście do skrajności. Znalezienie równowagi jest kluczem, a to wiąże się z lepszym zrozumieniem tego , co zmieniasz i jak zmiany mogą na siebie wpływać.

FrustratedWithFormsDesigner
źródło
18

Twoje pytanie składa się z dwóch części:

  1. czy powinienem wykonać je wszystkie raz, a następnie przetestować je razem?

    Zakładam, że używasz VCS .
    Aby śledzić, jakie zadania zostały wykonane, warto rozdzielić listę zadań do listy zatwierdzeń: jedno zadanie, jedno zatwierdzenie .

    Ułatwia to zarządzanie różnymi wersjami bieżącej bazy kodu; możesz wrócić do poprzedniego stanu, wybrać zmiany, które chcesz wprowadzić do głównego pnia itp.

    Odpowiedź jest jasna:

    Nie, wprowadzaj zmiany tylko jeden po drugim - jedno zadanie jedno zatwierdzenie .

  2. ale mam zły nawyk wprowadzania małych, małych zmian, a następnie testowania ich w przeglądarce internetowej, czy to dobra praktyka?

    Jest to dobra praktyka, aby kod test / UI niezależnie , ale to nonsens, aby zrobić to w kółko w przeglądarce. Istnieją narzędzia, które zrobią to automatycznie dla Ciebie ( Selenium, PhantomJS / Casper, ZombieJS )

    Odpowiedź na ten przypadek to:

    Tak, dobrą praktyką jest testowanie oprogramowania więcej niż raz, ale korzystanie z automatyzacji

Thomas Junk
źródło
2
+1, ale nie zgadzam się na korzystanie z automatyzacji. Gdy opracowuję nową funkcję, testuję zarówno ręcznie, jak i przy użyciu automatyzacji. Testy ręczne pozwalają mi być bardzo pewnym, że wszystko działa tak, jak się tego spodziewam. Możliwe jest niepoprawne napisanie automatycznego testu, obejrzenie go pozytywnie i pomyślenie, że wszystko jest dobrze, a następnie przetestowanie ręczne i sprawdzenie, czy coś jest nie tak.
Kevin - Przywróć Monikę
Jedno zadanie, które się popełnia, może sprawić, że dziennik VCS stanie się niezrozumiałym bałaganem dla różnych definicji „pojedynczego zadania”
whatsisname
zależy od tego, jak precyzyjnie zdefiniujesz zadanie;) lub jeśli chcesz: jeden „bilet”, jeden zatwierdzenie / gałąź. Korzystanie z git ułatwia to
Thomas Junk
1
Aby rozwinąć to, co powiedział Kevin, uważam, że jeśli dodajesz nową funkcję, która jest frontonem, zawsze musisz ją ręcznie sprawdzić (jeszcze nie znalazłem odpowiednika TTD do pracy z interfejsem), ale potrzebujesz również swojej automatyzacji pakiet, aby upewnić się, że nie zepsułeś istniejących funkcji.
scragar
@scragar tak. Automatyzacja służy do testowania regresji.
Thomas Junk
6

W przypadku każdego nawyku, który ma deweloper, istnieją 2 główne pytania:

  1. Jak wpływa to na jakość tworzonego kodu?
  2. Jak to wpływa na twoją produktywność?

Jeśli odpowiedź na oba pytania brzmi „To czyni to lepszym”, nawyk nawyk, naucz go innych!
Jeśli odpowiedź na jedno z nich brzmi „Lepiej”, a druga „Gorzej” - jest to styl i musisz być tego świadomy. Nie zawsze ma to zastosowanie i od czasu do czasu może być konieczne staranie się go stłumić.
Jeśli odpowiedź na oba pytania brzmi „Negatywne” - masz poważny problem.

Oczywiście w pierwszych 2 przypadkach należy również pomyśleć o „Czy pozytywny efekt może być w jakiś sposób zautomatyzowany lub zinstytucjonalizowany?”. Może lepiej napisać test niż za każdym razem wypróbowywać różne przeglądarki? (Uwaga: wiem, że nie jest łatwo przetestować odpowiedni układ w tworzeniu stron internetowych, nie twierdzę, że jest to zawsze możliwe lub warte czasu).

W tym konkretnym przypadku wydaje mi się, że jakość jest podwyższona, wydajność może zostać zmniejszona. W przypadku małych zmian jest to prawdopodobnie trochę złe (szczególnie jeśli zmiany są ze sobą powiązane), w przypadku większych - jest to trochę dobre. Tak długo, jak testujesz również wynik końcowy (unikaj „każdy moduł został przetestowany i działa, więc wszystko działa również, nie trzeba go testować!”).

Dlatego - o ile 90% dnia pracy nie robi naprawdę drobnych zmian - to doskonały nawyk. Jeśli taki jest twój dzień pracy, być może warto przejrzeć swój styl pracy (lub miejsce pracy).

Ordous
źródło
4

To zależy od domeny. Układ strony internetowej będzie działał dobrze i możesz uzyskać natychmiastową informację zwrotną (możesz to zrobić nawet bezpośrednio w przeglądarce!). Podobnie działałoby dobrze w przypadku wszystkiego, co nie wymaga długiego czasu inicjalizacji. Jest to preferowane, ponieważ utrzymuje niskie obciążenie psychiczne i zmniejsza prawdopodobieństwo błędów.

Jednak w przypadku naprawdę dużych projektów, w których konieczne jest skompilowanie kodu, a czas potrzebny na wykonanie zadania nie jest trywialny (kilka minut), może to spowodować wiele przestojów, dlatego często musisz uciekać się do:

  • „równoległe” wykonywanie pracy (np. praca nad wieloma kompilacjami jednocześnie), lub
  • zrób jak najwięcej rzeczy za jednym razem, lub
  • utwórz małą niezależną część do pracy i włącz ją później do większego projektu.

(Prawdopodobnie są też inne sposoby.)

Rufflewind
źródło
+1 za zrobienie tego bezpośrednio w przeglądarce. Często wprowadzam poprawki CSS w przeglądarce jako wyrzucenie prototypu prawdziwej pracy, którą zamierzam wykonać.
RubberDuck
0

Jak stwierdzili inni, zdecydowanie nie jest to zły nawyk. Generalnie wolę wprowadzić tylko kilka modyfikacji na raz. Jedynym wyjątkiem jest sytuacja, gdy mam dużą listę zmian, które nie wpływają na siebie nawzajem (np. Zmiany w mniejszych stylach lub kopiowaniu, zmiany na różnych stronach itp.). Jeśli modyfikujesz układy, staraj się wprowadzać zmiany pojedynczo, abyś mógł sprawdzić, czy wszystko jest w 100% we wszystkich obsługiwanych przeglądarkach, zanim przejdziesz do następnego problemu.

FreeAsInBeer
źródło