Mimo że nie brałem udziału w projekcie TDD ani BDD, lub w niektórych z nich mówi się, że robią TDD, ale są dość dalekie, to są rzeczy, o których myślę i naprawdę staram się czytać jak najwięcej o.
Powrót do pytania Kiedy robisz BDD, powinieneś najpierw napisać swój „test” i sprawić, że się nie powiedzie, prawda? A następnie zaimplementuj tę funkcję lub jak ją nazwiesz. Ale jeśli podejmiesz to do końca, czy nie może to być jakiś rodzaj odgórnego rozwoju? Patrzysz na swój interfejs i mówi: „Chciałbym mieć tę funkcję / zachowanie tutaj”. Następnie naprawiasz interfejs użytkownika, aby zaimplementować tę funkcję oraz kod obsługujący interfejs użytkownika. W tym momencie nie zaimplementowałeś żadnej logiki biznesowej ani logiki dostępu do danych, właśnie zaimplementowałeś swoje zachowanie. Do czego dążę, zamiast pisać test jako pierwszy, najpierw piszesz kod interfejsu użytkownika. W niektórych przypadkach powinno to skutkować tym samym kodem dostępu do danych i warstwy biznesowej, ponieważ używasz kodu interfejsu użytkownika, aby określić, co Twoja firma musi obsługiwać.
Oczywiście powinieneś uzupełnić to testami, które służą do upewnienia się, że funkcja działa tak, jak powinna w funkcji.
jakieś pomysły?
źródło
main
. W swoim odgórnym komentarzu mówisz o testach funkcjonalnych, które wykonują cały program za jednym razemmain
.Odpowiedzi:
Mówisz o BDD z wysokiego poziomu testowania interfejsu użytkownika. Testowanie jest nieco bardziej puszyste na tym poziomie niż niżej w kodzie JavaScript / serwera.
Kilka książek, które przeczytałem na temat TDD, mówi, że powinieneś pisać kod tak, jakby istniały systemy bazowe, i po prostu napisać tyle, aby zdać test. Możesz napisać kody pośredniczące na serwerze, aby pomyślnie przejść testy behawioralne interfejsu użytkownika. Następnie zaczynasz od tego krótkiego odcinka i piszesz testy jednostkowe dla kodu po stronie serwera i przechodzisz do pełnej implementacji.
Często koduję tak, jakby istniały podstawowe warstwy, aby przejść test wysokiego poziomu, wydaje się, że zejść do króliczej dziury i wyodrębnić wiele innych klas, aby spełnić test wysokiego poziomu, a następnie napisać testy dla tych niższych poziomów. Jak już wiesz, pomaga utrzymać koncentrację, zaczynając od testów na wyższym poziomie.
Jak wie doświadczony programista, istnieje wiele warstw do tworzenia oprogramowania. Zwykle pracuję niżej niż interfejs użytkownika i myślę o danych lub zachowaniu, którego potrzebuje mój interfejs użytkownika z serwera i zaczynam od tego (być może dlatego, że w dzisiejszych czasach nie pracuję dużo).
Jeśli jestem naprawdę szczery, wyodrębnienie klasy z podstawowych warstw oznacza, że najpierw nie przeprowadzam testu, ale ... w ciągu kilku minut, a czasem godzin przeprowadzę test tego kodu. To nadal wydaje mi się korzystne, ponieważ pomagam zobaczyć, gdzie możesz potrzebować dostarczyć zależności do klasy i przestrzegać zasady pojedynczej odpowiedzialności - jeśli trudno jest przetestować, robisz za dużo w jednym miejscu itp.
źródło
Tak! W przeciwnym razie otrzymujesz testy rozwojowe .
Realistycznie rzecz biorąc, istnieją problemy, do których trudno jest podejść przy użyciu „czystego” TDD. Możesz być bardziej produktywny, pisząc trochę odkrytego kodu produkcyjnego i pokrywając go testami później (i ucząc się, jak podejść do podobnych problemów z TDD w przyszłości). Spójrz na tę technikę , którą autor nazwał TDD płukaniem i powtarzaniem z braku lepszego terminu.
źródło
Jeśli najpierw nie napiszesz testów, nie napędzasz rozwoju przez swoje testy. Ergo, nie zajmujesz się programowaniem opartym na testach!
źródło
Jeśli chcesz pracować w ten sposób, idź do niego. Ale to nie jest rozwój oparty na testach.
źródło
To, co opisujesz, brzmi bardzo podobnie do podejścia z przodu . Niestety, projekt z przodu jest satyrycznym ciosem Alexa Papadimoulisa w zwinne metody.
źródło
Osobiście uważam, że bardzo ważne jest, aby pomyśleć o testowaniu na etapie projektowania. Naprawdę świetnie jest mieć działającą implementację, ale jedynym sposobem na upewnienie się, że masz działający produkt, jest przetestowanie go kawałek po kawałku. Sposobem na pokrycie tego jest połączenie testów jednostkowych i wykwalifikowanego zespołu ds. Kontroli jakości współpracującego z partnerami.
Teraz, jak zainstalujesz tę dyscyplinę w swoim zespole, zależy od ciebie. TDD jest jedną z takich strategii - i taką, która ma swoje miejsce i istnieje wiele innych odmian. Jednak TDD nie nadaje się szczególnie do opracowywania układu interfejsu użytkownika.
źródło