To pytanie o pracę w zespołach.
Ostatnio pracowałem nad moim pierwszym większym (~ 80 klas, Java) projektem programistycznym z zespołem 6 osób, chociaż tylko 4 z nas pracowało nieprzerwanie nad kodem. Rozdaliśmy pracę do wykonania wcześnie i w pewnym momencie musiałem wywołać metodę, która nie została jeszcze zaimplementowana przez jednego z moich współprogramistów. Jak zalecany sposób poradzić sobie z tym?
Opcje, które widziałem, choć tak naprawdę nie lubię żadnej z nich:
Piszę sobie
//TODO
i przeglądam ten wiersz kodu później, aby sprawdzić, czy metoda została zaimplementowana w międzyczasie.Poprosienie odpowiedniego członka zespołu o wdrożenie go teraz .
Zgłaszanie niestandardowego środowiska wykonawczegoException z jasnym opisem tego, co jeszcze nie zostało zaimplementowane. (Przynajmniej nie musimy długo szukać, aby dowiedzieć się, czego brakuje)
Dodając potrzebną metodę do ich klasy i zapisując je
//TODO
w treści wiadomości, być może również wyślesz im szybką wiadomość o tej zmianie. (Teraz nie jest to już mój problem, ale może to powodować irytujące konflikty scalania, jeśli w międzyczasie pracowali nad tą metodą)Definiowanie abstrakcyjnych klas lub interfejsów dla wszystkiego przed napisaniem kodu, który działa. (Nie działało zbyt dobrze, ponieważ te interfejsy były często zmieniane)
Odpowiedzi:
To interesujące pytanie, a odpowiedź może być łatwiejsza niż myślisz.
Mówiąc prosto, napisz testy, które potwierdzą twoje założenia. Nie ma znaczenia, czy wykonasz implementację, czy twoi koledzy programiści
Długa odpowiedź.
Każda z opcji, że liście są nieco pasywne i wymagają Państwo wrócić i ponownie kod (jeśli istnieje) prędzej czy później.
Aby osiągnąć wystarczający poziom testowania, sugeruję przyjrzeć się dwóm dyscyplinom.
TDD - rozwój oparty na testach - upewni się, że opisałeś swoje zamiary i wystarczająco je przetestowałeś. Daje także możliwość kpienia lub fałszowania metod i klas (również przy użyciu interfejsów), które nie zostały jeszcze zaimplementowane. Kod i testy nadal będą się kompilować i pozwolą na przetestowanie własnego kodu w oderwaniu od kodu innych programistów. (patrz: https://en.wikipedia.org/wiki/Test-driven_development )
ATDD - rozwój oparty na testach akceptacyjnych - stworzy to zewnętrzną pętlę (wokół pętli TDD), która pomoże przetestować tę funkcję jako całość. Testy te zmienią kolor na zielony, gdy cała funkcja zostanie zaimplementowana, dając w ten sposób automatyczny wskaźnik, kiedy twoi towarzysze zakończą swoją pracę. Całkiem fajnie, jeśli mnie zapytasz.
Zastrzeżenie: W twoim przypadku pisałbym tylko proste testy akceptacyjne i nie próbowałbym wnieść zbyt dużej części strony biznesowej, ponieważ byłoby to po prostu zbyt wiele na początek. Napisz proste testy integracyjne, które składają się na wszystkie części systemu, których wymaga ta funkcja. To wszystko, co jest wymagane
Umożliwi to umieszczenie kodu w potoku ciągłej integracji i uzyskanie wysoce niezawodnej implementacji.
Jeśli chcesz przejść dalej w tym temacie, sprawdź następujące linki:
źródło
Poproś o odcinki.
Lub napisz je sam. Tak czy inaczej, ty i twoi współpracownicy musicie uzgodnić interfejsy i sposób ich użycia. Porozumienie to musi być stosunkowo solidne, abyś mógł opracować go przeciwko skrótom - nie wspominając o tym, abyś mógł stworzyć własne symulacje do testów jednostkowych ...
źródło
W twojej sytuacji rozmawiałbym z członkiem zespołu odpowiedzialnym za tę funkcję. Możliwe, że są w stanie ustalić priorytet rozwoju tej funkcji, abyś mógł zacząć z niej korzystać wcześniej.
Uniknę twojej czwartej opcji. Napisałeś cały swój kod i, jak mówisz, nie uważasz już, że to twój problem. Twój kolega pisze następnie implementację funkcji i nie uważa już jej za problem. Kto faktycznie przetestuje poprawność kodu, który napisałeś?
źródło