Mój zespół używa Team Foundation Server do kontroli źródła, a dziś naprawiłem kilka błędów i aplikacji do testowania dymu, zanim go zameldowałem, ale zapomniałem skomentować jakiś kod. (Ten kod spowodował, że interfejs użytkownika był nieco dziwny.)
Chcę sprawdzić, jakie są dobre praktyki przed wpisaniem kodu - nie chcę ponownie popełniać tego rodzaju błędu.
Nigdy nie należy zameldować skomentowanego kodu. Jeśli masz kod, który wymaga komentarza przed zameldowaniem, robisz to źle.
Co do zasad:
Budować
3.1 Napraw błędy kompilacji
Uruchom testy
4.1 Napraw zepsute testy
Idź do 1 (dopóki nie będzie nic nowego do zdobycia)
Zameldowanie tylko po zakończeniu wszystkich kroków.
Zobacz odprawę taneczną .
Inne dobre praktyki:
źródło
rebase -i
wyczyścisz swoją lokalną historię, w razie potrzeby zgniatając zatwierdzenia, aby linia główna nie miała brzydkich zatwierdzeń w toku.Nie staram się być tutaj zbyt dużym spodniowcem, ale założenie w tym pytaniu (i wszystkie oprócz jednej odpowiedzi) dotyczy głównie Scentralizowanego VCS, takiego jak TFS, SVN, Perforce itp.
Właściwie to jest to, co OP używa.
Z drugiej jednak strony, gdy używasz DVCS (takich jak Mercurial i Git), zwykle nie powinieneś czekać na checkin, a większość rzeczy wymienionych w odpowiedziach - takich jak diffs, get latest, merge itp. - nie są konieczne . Nawet sprawdzanie kodu i testy są lepsze po zameldowaniu (choć być może przed wypchnięciem, w zależności od ...)
Jedynym wyjątkiem, który widziałem tutaj (jak dotąd), jest skojarzenie z elementem pracy. Oczywiście komentowanie meldowania jest również dobre ...
źródło
Trzy rzeczy, których nie widziałem w innych odpowiedziach:
Dołącz nowe pliki
Cofnij niezmienione pliki
Sprawdź przesłane zatwierdzenie
Dwie rzeczy, kiedy korzystam z Git:
Zatwierdzenia atomowe:
git add --patch
konieczne, dzielę swoją zmianę na wiele części.Zobacz różnice podczas podsumowania
git commit --verbose
aby zobaczyć różnicę mojej zmiany podczas pisania wiadomości zatwierdzenia. (Lub używam mojego załatanego git-vima, aby pokazać różnicę.)źródło
Kilka „dobrych praktyk”, które egzekwuję na serwerach mojego zespołu, jest całkiem prostych. Po pierwsze, zanim się zalogujesz, zawsze powinieneś pobrać najnowszą wersję i uruchomić lokalną kompilację, aby upewnić się, że nikt inny nie zaznaczył niczego, z czym kod się koliduje. Ponadto rozwiąż wszelkie konflikty kodów na komputerze lokalnym, a nie na serwerze. Po potwierdzeniu, że Twój kod, z najnowszym pobranym kodem, został zbudowany i działa poprawnie, możesz przejść do następnego kroku. Uruchom wszelkie automatyczne testy, a następnie rozpocznij odprawę, aby upewnić się, że nadal działają poprawnie. Następnie, dla pewności, uzyskaj najnowsze informacje.
Administrator TFS może wymuszać komentowanie wszystkich meldowań. Polecam zawsze umieszczać komentarze do odprawy dotyczące Twojej pracy, niezależnie od tego, czy jest ona egzekwowana czy nie. Jeśli masz taką możliwość, wymusz ją. Upewnij się, że komentarze są co najmniej ogólnym podsumowaniem tego, co zmieniłeś od czasu ostatniego wpisania kodu. W ten sposób, jeśli coś pójdzie nie tak, możesz przejrzeć zameldowania i z grubsza sprawdzić, co było zmieniony w trakcie odprawy. Ułatwia to debugowanie uszkodzonej wersji.
Ponadto, jeśli masz uprawnienia administratora TFS, wymuszaj stopniowe kompilowanie podczas meldowań (aby upewnić się, że wszyscy inni od razu wiedzą, czy ich zameldowanie coś zepsuje), a serwer można skonfigurować tak, aby przeprowadzał odprawę bramkową ( jeśli zaznaczony kod psuje kompilację, serwer ją odrzuca), lub możesz po prostu stworzyć błąd i przypisać go każdemu, kto złamał kompilację.
Istnieje kilka innych opcji, które możesz włączyć lub wyłączyć, aby utrzymać wszystko w porządku, lub zasugerować swojemu administratorowi TFS, aby włączał, aby utrzymać porządek i porządek ... ale są one w dużej mierze preferowane
źródło
Wyszukaj i zamień przekleństwa ;-)
źródło
Jeśli logujesz się z systemu Windows, sprawdź, czy kod nie ma tych niewidocznych znaków ^ M - edytory w systemie UNIX często podają przyczyny błędów / ostrzeżeń.
Spróbuj także zastąpić tabulatory - różni użytkownicy zobaczą tabstopsy inaczej, niektóre z 4 spacjami, niektóre 8 i nie są dobre dla czytelności kodu.
Najlepsze podejście IMHO polega na tym, aby wstępnie zdefiniowany skrypt sprawdzał kod pod kątem wytycznych kodowania organizacji. Mnóstwo systemów kontroli źródła ma tę funkcjonalność.
źródło
W mojej firmie korzystamy z recenzji odpraw. Nie muszą one być szczegółowe, ale po prostu pokazanie komuś różnic w liście zmian i rozmawianie przez nich czasami podkreśla dziwną literówkę, którą przegapiłeś podczas testowania.
Nasz serwer kontroli źródła nie pozwoli ci się zameldować, chyba że w komentarzach podasz nazwisko recenzenta (w formie! Inicjałów, np.! BW, jeśli Bruce Wayne zrobił twoją recenzję). Recenzent otrzymuje wiadomość e-mail z informacją, że pomógł sprawdzić. Jest to otwarte na oczywiste wykorzystanie, ale wydaje się działać całkiem dobrze.
źródło
Gdy tylko jest to możliwe, lubię kojarzyć zameldowanie z przedmiotem pracy. Daje to pewne kontekstowe informacje o tym, DLACZEGO to zostało zmienione, a nie tylko CO zostało zmienione. TFS ma dość przyzwoity system śledzenia elementów pracy, więc jest to dość trywialne w momencie odprawy.
(jest to oprócz przeglądu różnic moich zmian)
źródło
Jedną małą rzeczą, którą robię, jest nie rejestrowanie plików, które tak naprawdę się nie zmieniły. Pliki te mogły zostać nieumyślnie zmodyfikowane lub mogły być zaangażowane w refaktoryzacje, które zostały wycofane lub w inny sposób zostały wprowadzone w wątpliwość.
W ten sposób Twój zestaw zmian (powiązany z elementem pracy) zawiera dokładnie pliki niezbędne do spełnienia elementu pracy.
źródło
Aby połączyć wszystkie odpowiedzi tutaj i podać pełną listę kontrolną
[meldowanie / wymeldowywanie] nie powinieneś meldować się bezpośrednio w strumieniu, w którym pracują inni. Powinieneś mieć strategię strumieniową: np. dla programistów strumień, w którym możesz się meldować i wymeldować niezależnie bez przeszkadzania innym: Twoja praca będzie bądź bezpieczny, ale we własnym strumieniu programistycznym, więc [tylko we własnym strumieniu programistycznym]. Z każdą odprawą kojarzysz ją z zapisem zmian, aby zmiany były atomowe względem tej zmiany zwanej zestawem zmian (abyś mógł dystrybuować poszczególne błędy / błędy itp. Bez konieczności dostarczania „wszystkiego”).
[następnie bazuj na strumieniu zespołu] oznacza to, że otrzymujesz zmiany od innych we własnym strumieniu. Podczas tej operacji można zobaczyć w oknie dialogowym scalania wszystkie „różnice” i przejść przez nie lub ... jeśli są tysiące i / lub nie używasz kodu, ale także np. Modele danych / projekty siebel itp. Polegają na połączenia nietrywialne, trywialno-automatyczne i trywialne łączenia ręczne, ostatnia kategoria zawiera te trudne. Pamiętaj, że nadal pracujesz we własnym strumieniu.
[pełna rebase] Jeśli wszystko jest w porządku, sprawdź wszystkie zmiany, które właśnie dostałeś ze strumienia zespołu: Twój własny strumień jest teraz aktualny
[dostarcz] dostarcz teraz swoją pracę do strumienia zespołu. JEŻELI nie chcesz dostarczyć wszystkiego, możesz również wybrać np. 1 konkretny RFC z konkretnymi wersjami plików lub zestawem RFC / usuniętych wad.
[test dostarczony] powinno pójść dobrze, ale ponieważ istnieje szansa, że ktoś w międzyczasie dostarczył również zmiany: możesz sprawdzić, czy Twoja praca działa z najnowszymi zmianami w strumieniu zespołu. Z tymi samymi oknami dialogowymi scalania pokazującymi różnice.
[zupełne dostarczenie] ukończ swoje dostarczenie, a Twoja praca jest teraz w strumieniu zespołu.
Aby uczynić go bardziej złożonym: ponieważ nadal istnieje szansa, że praca, którą wykonałeś = ok ALE pracujesz już nad kolejną wersją, powinieneś zawsze bazować po dostarczeniu i wskazać, która linia jest preferowana dla innych użytkowników . Dzięki temu inni programiści otrzymają zalecaną, a nie najnowszą wersję w strumieniu (jeśli pracujesz w tym scenariuszu). Jest to również Potrójna kontrola, więc nawet jeśli najnowsze wersje w strumieniu zespołu są „złe”, nadal nie są to te, na których inni się bazują lub na które patrzą, a Twój menedżer konfiguracji może następnie połączyć poprzednią wersję z kolejną wersją, aby cofnąć twoja dostawa.
W swoim przykładzie podajesz, że zapomniałeś skomentować kod. Zdarzają się błędy. System zarządzania konfiguracją wokół niego powinien się tym zająć. Może być tak, że np. Przychodzą tysiące zmian, a „kompilacje” i „integracje” odbywają się w hierarchii strumieni na różnych serwerach połączonych i przetworzonych w czasie. Więc nawet jeśli po 5 miesiącach skomentowany kod zostanie przetestowany na serwerze integracyjnym, ponieważ kod wymaga integracji z innym kodem i systemami, nadal powinno być możliwe atomowe usunięcie zestawu zmian i kontynuowanie. Zatem najlepsza praktyka jest mniej więcej na wyższym poziomie. Powinien się tym zająć ogólny projekt strumieni zarządzania konfiguracją. Dla indywidualnych programistów najlepszą praktyką jest sprawdzanie poprawności / test jednostkowy. Ale od dużego obrazu do „
źródło
Niektóre z poniższych mają zastosowanie bardziej niż inne (lub w różnych formach) w zależności od SCM, więc proszę:
UWAGA : niektóre z powyższych elementów wydają się dość oczywiste, ale nie uwierzyłbyś, ile osób faktycznie pracuje w głównej gałęzi lub wprowadza najpierw zmiany w produkcji, a następnie ręcznie tworzy delty, aby przejść do kontroli wersji ... bezpośrednio w głównej gałęzi. .. i z etykietami. Słodka jak sfermentowana żółć zmieszana z niemytym sokiem pod pachą ... tak, tak.
źródło
Miej osobistą listę kontrolną. Zacznij od pustego, gdy się zepsujesz, przy wejściu. Kiedy stanie się drugą naturą, usuń go z listy.
Uruchom testy. Jeśli zdadzą, sprawdź. Jeśli coś popsuniesz i coś przejdzie test, napisz test.
źródło
Wykonujemy następujące ...
Test - chcemy się upewnić, że działa. Przynajmniej chcemy wiedzieć, że to niczego nie psuje.
Przegląd kodu lub przynajmniej znajomy sprawdzian - to świetny sposób, aby zapewnić, że wiedza się rozpowszechnia i że ludzie są na bieżąco. Pomaga także wykrywać błędy przed sprawdzeniem.
Wyślij powiadomienie z wyprzedzeniem - Powiadomienie z wyprzedzeniem jest wysyłane do grupy przed zameldowaniem. Ma to na celu nie tylko poinformowanie innych, które pliki lub obszary się zmieniają, ale daje im możliwość poinformowania (jeśli zdecydują się to zauważyć) na wypadek, gdyby zmiany te miały na nich wpływ.
Kilka godzin po wysłaniu powiadomienia z wyprzedzeniem odbywa się odprawa, a grupa jest informowana za pośrednictwem poczty elektronicznej. Wszyscy w grupie mogą wiedzieć, kiedy zakończy się konkretna praca nad błędem lub funkcją.
Kopia powiadomienia o zameldowaniu jest wklejana do rekordu poprawki związanego z błędem lub funkcją. Podczas przeszukiwania rekordów okazuje się, że bardzo przydatne jest wyobrażenie sobie, co pociąga za sobą poprawka / funkcja.
źródło
Przeprowadź testy jednostkowe, nad którymi tak pilnie pracujesz. Zieleń jest dobra.
źródło
Upewnij się, że kod jest poprawnie sformatowany (np. W Javie: wybierz kod i naciśnij Ctrl-Shift-F w Eclipse). Ale zachowaj ostrożność, robiąc to samo dla całego dokumentu.
źródło
Zawsze, zawsze, zawsze sprawdzaj, czy wszelkie wprowadzone zmiany nie psują kompilacji. Szczególnie niewielkie zmiany, które mogą wydawać się trywialne.
Kiedyś dokonałem bardzo drobnej zmiany, która, jak sądzę, nie spowodowałaby żadnych problemów tuż przed odejściem z pracy na weekend. Rzeczywiście, ta niewielka zmiana zepsuła kompilację i nie wykonano nocnych testów dla naszego projektu. Szef Q&A nie był z tego zbyt zadowolony i słusznie.
źródło
Poszukaj części zmian, które można wprowadzić jako samodzielne jednostki.
Często, zanim mam działającą poprawkę lub rozszerzenie kodu, jest sporo zmian. Niektóre z nich są specyficzne dla zmiany zachowania, o którą zamierzam; inne to refaktoryzacje, które zrobiłem, aby ta zmiana była czystsza.
Wolę sprawdzać każde refaktoryzowanie osobno, z własnym opisem zmiany, takim jak ten:
Następnie, po sprawdzeniu każdego dobrego refaktoryzacji, ostateczna zmiana zachowania jest często banalna.
Ponadto niektóre zmiany wpływają na wiele wierszy kodu, ale nie są bardzo interesujące, podczas gdy inne zmiany są bardzo zlokalizowane, ale mają istotny wpływ. Jeśli te zmiany są rejestrowane razem, odczytanie różnic może być trudne. Więc trzymam je oddzielnie.
Później, gdy ktoś czyta historię zmian, oczywiste jest, jak sprawy potoczyły się do obecnego stanu rzeczy i dlaczego tak jest. Cofnięcie zmiany moich zachowań jest również trywialne, ponieważ nie jest powiązane z mnóstwem innych zmian.
źródło
Rób to, co zrobiłbyś, zwracając coś, co pożyczyłeś od kogoś. Upewnij się, że jest czysty i w dobrym stanie. Jeśli zrobiłeś bałagan, pamiętaj o wyczyszczeniu przed zwróceniem kodu jego właścicielowi (w większości przypadków pracodawcy).
źródło
Prowadzę lokalne repozytorium hg dla mojej pracy.
Nie twierdzę, że są najlepsze, ale działają dla mnie.
źródło
Kiedy piszę kod, o którym wiem, że nie powinien być rejestrowany, dodaję wiersz przed nim zawierający „// TEMP:”, a po nim „// END TEMP.”. To, wraz z robieniem różnic przed zalogowaniem się, obiecuje, że przez pomyłkę nie sprawdzę tego kodu.
źródło
Dokładnie przetestuj wszystko, co dodałeś lub zmieniłeś. Wypróbuj wszystkie możliwe przypadki, które możesz wymyślić. Nie zostawiaj testów kontroli jakości. Gdybym miał kanapkę za każdym razem, gdy dokonywałem drobnych zmian, a następnie wypróbowałem kilka przypadków testowych, aby być po bezpiecznej stronie i od razu zobaczyłem problemy, zjadłbym dużo kanapek. Zwykle mówię sobie głośno: „Naprawdę się cieszę, że spróbowałem ...”
Mówisz, że interfejs użytkownika stał się dziwny po zmianie. Gdybyś tylko uruchomił program i spojrzał na interfejs użytkownika przed zalogowaniem, czy zauważyłbyś problem?
źródło