Jaki jest termin zatwierdzenia naprawdę dużego kodu źródłowego? [Zamknięte]

37

Czasami, gdy sprawdzamy historię zatwierdzeń oprogramowania, możemy zauważyć, że istnieje kilka BITÓW, które są naprawdę DUŻE - mogą zmieniać 10 lub 20 plików setkami zmienionych linii kodu źródłowego (delta). Pamiętam, że istnieje taki termin na BIG, ale nie pamiętam dokładnie, co to jest. Czy ktoś może mi pomóc? Jakiego terminu programiści zwykle używają w odniesieniu do takiego DUŻEGO i gigantycznego zatwierdzenia?

BTW, czy wprowadzanie wielu zmian razem jest dobrą praktyką?

AKTUALIZACJA: dziękuję wam za inspirującą dyskusję! Ale myślę, że „bomba kodowa” to termin, którego szukam.

Ida
źródło
15
„Breaking commit”. :-)
Peter K.,
3
Osobiście nazwałbym zatwierdzenie tej wielkościcluster f...
Ramhound
1
Mój szef robi to cały czas. Komentarz do
odprawy
+1 za pytanie, ponieważ uwielbiam każdą odpowiedź do tej pory i cierpiałem, popełniając przynajmniej jeden z grzechów przynajmniej raz w mojej karierze i chcę, aby inni tego nie robili =)
Patrick Hughes,
Mógłbym powiedzieć lawinę kodu!
Brian

Odpowiedzi:

50

(1) Ben Collins-Sussman : „...” bomby kodowe . Co robisz, gdy ktoś pojawia się w projekcie open source z nową, gigantyczną funkcją, której napisanie zajęło miesiące? Kto ma czas na recenzję tysiące linii kodu? ... ”

(2) Dan Fabulich : „Bomba kodowa lub: Nowicjusz z wielkimi pomysłami ... Bomba kodowa to łatka tak duża, że ​​nikt nie może jej przejrzeć”.

(3) Google Summer of Code: Wytyczne : „Podejmij decyzję wcześnie, często dokonuj… Nie pracuj cały dzień, a następnie wypchnij wszystko w jednej bombie kodowej . Zamiast tego każde zatwierdzenie powinno być samodzielne tylko dla jednego zadania które należy streścić w komunikacie dziennika. ”

(4) Jeff Atwood : „bomby kodowe ... Zasada nr 30: Nie ciemź .

David Cary
źródło
link 2 i 4 bezpośrednio link i zacytuj link 1. Nie ma nic złego w rozpowszechnianiu koncepcji, ale jest to nieco mniej istotne. Podoba mi się ten termin, ale nie wydaje mi się, żeby to tak bardzo go pochwyciło.
haylem
1
Co jeśli zatwierdzony kod jest nowym kodem, który jest dość odizolowany od reszty projektu? W tym przypadku uważam, że pojedynczy duży zatwierdzenie (prawie) ukończonego i wyczyszczonego kodu jest lepszy niż wiele małych zatwierdzeń, które zmuszają ludzi do przeglądu (1) pośrednich poprawek błędów, (2) refaktoryzacji, takich jak zmiana nazwy klasy i tak dalej, ( 3) wstępny kod, który ostatecznie zostanie usunięty. Tylko moje 2 centy.
Giorgio
Z tego powodu jestem przeciwny przepisywaniu / rebasingowaniu historii
dukeofgaming
@Giorgio - po to są gałęzie.
Brian
@Brian: Tak, to możliwość. W tym przypadku masz duże zatwierdzenie w głównej gałęzi, kiedy scalasz funkcjonalność, którą opracowałeś w gałęzi.
Giorgio
38

Prawdopodobnie nazywamy to złym zatwierdzeniem . :)

Zła praktyka

I tak, byłoby to ogólnie uważane za złą praktykę , ponieważ ma negatywne skutki:

  • co czyni go trudnym do przeglądu ,
  • co czyni go trudnym do łatwo i szybko uchwycić popełnić pierwotnej intencji ,
  • co trudno zobaczyć, jak to wpłynęło na kod jawnie poprawki lub rozwiązania problemu ,
  • utrudniając ustalenie , czy rozmiar zatwierdzenia jest spowodowany hałasem innych ewentualnie niezwiązanych zmian (np. małych porządków lub innych zadań).

Dopuszczalne przypadki

Jednak można mieć przypadki, w których duże rewizje są całkowicie dopuszczalne . Na przykład:

  • podczas łączenia całej gałęzi ,
  • podczas dodawania nowych źródeł z innej bazy danych nie wersjonowanej,
  • podczas zastępowania dużej funkcji w miejscu (chociaż powinieneś to zrobić raczej w gałęzi, z mniejszymi zatwierdzeniami adresującymi różne części zmiany, a następnie scalić całość z powrotem, aby mieć lepsze okno na stopniowy rozwój funkcja i problemy, które mogły napotkać po drodze),
  • podczas refaktoryzacji interfejsu API mającego wpływ na wiele klas potomnych i konsumenckich.

Tak więc, o ile to możliwe, preferuj typy zatwierdzeń typu „chirurgiczne ostrzeżenie” (i połącz je z identyfikatorami zadań w narzędziu do śledzenia problemów!). Jeśli masz ważny powód, śmiało.


Poza tym tak naprawdę nie wiem i nie sądzę, żebym kiedykolwiek słyszał specjalną nazwę dla dużego zatwierdzenia. Potworne popełnienie? Fat-commit?

Aktualizacja: Odpowiedź Davida Cary'ego prowadzi do znanych aktorów IT posługujących się terminem „bomba kodowa” (co najważniejsze, Collins-Sussman, oryginalny twórca Subversion ). Tak to (choć do tej pory nie mogę powiedzieć, że słyszałem, jeśli często).

Haylem
źródło
11
Zatwierdzenie Godzilla! Eeeeeeeek !!!
Péter Török,
@ PéterTörök: Podoba mi się. Zróbmy z tego trend. Inne opcje: zatwierdzenie wieloryba, zatwierdzenie Gargantuan lub po prostu BigFatCommit.
haylem
1
Tak, albo „źle”, albo „późno”. Jeśli nie ma na to nazwy w Twojej firmie, nazwij ją po nazwisku programisty. „Hej, nowy gościu, nie rób Jerry! Zaangażuj się wcześnie i często popełniaj”.
chooban
Nie rób Jerry'ego, to przydatne podejście! Również masowe zatwierdzanie może pochodzić od stresujących się programistów, którzy nie wierzą ani nie rozumieją użycia wersjonowania. Sprawdź wiedzę!
Niezależny
Co jeśli czyjeś imię to Jerry?
Loïc Faure-Lacroix
12

BTW, czy wprowadzanie wielu zmian razem jest dobrą praktyką?

Cóż, nie jest dobrą praktyką trzymać się zmian przez długi czas i wdrażać różne funkcje i poprawki błędów, a następnie zatwierdzać je, co jest jednym ze sposobów, w jaki może się zdarzyć duże zatwierdzenie.

Innym sposobem może się to stać, jeśli refaktoryzacja zmieni sygnaturę powszechnie używanej funkcji, a następnie wszystkie te muszą zostać zmienione. Nie musi to być złe i nie chciałbym, aby programiści powstrzymywali się od czyszczenia kodu z obawy przed przekroczeniem pewnego progu.

Jest więc coś więcej niż tylko przeglądanie liczby plików dotkniętych w zatwierdzeniu.

JohnMcG
źródło
5
To. Liczy się nie liczba zmienionych plików lub liczba zmienionych wierszy, ale zakres zmian. Jeśli potrafisz poprawnie i precyzyjnie opisać zestaw zmian w krótkim komunikacie zatwierdzenia, który niczego nie pomija, liczba zmian fizycznych jest względnie nieistotna. Nie jest to nieistotne, ale ja, ja wolę mieć jeden duży zatwierdzenie, które utrzymuje kod do zbudowania, niż zestaw zatwierdzeń, w którym tylko niektóre z nich dają drzewo kodu źródłowego, które zbuduje (por. Zmiany podpisu metody).
CVn
8

Termin, który słyszałem, to „masywne zameldowania” . I nie jestem ich fanem. Lubię mniejsze zobowiązania, które zapewniają, że nic innego nie zostanie zerwane na rozsądnym etapie projektu. Wielkie zatwierdzenie jest na ogół obarczone problemami, które rozbrzmiewają przez pewien czas poza czasem.

Jesse C. Slicer
źródło
+1, ponieważ nie pamiętałem tego w tym czasie (choć nie sądzę, że jest to ogólny termin, lub nie jestem tego świadomy), ale słyszałem słowo „fragment” użyte przez merkurial w odniesieniu do rozszerzenie pozwalające na przesyłanie dużych zatwierdzeń z różnymi częściami danych, ale poza tym nie sądzę, żebym kiedykolwiek słyszał ten termin dla zatwierdzeń w ogóle.
haylem
Firma, w której byłem, kiedy programista użył tego terminu, korzystała z SourceGear Vault.
Jesse C. Slicer
3

Nazywam to „typowym zatwierdzeniem SVN” lub „jutro zatwierdza dzień premiery”

Mimo że uwielbiam SVN, jestem po prostu wyłączony przez fakt, że nie mogę wykonywać lokalnych zatwierdzeń.

EDYCJA: zwykle zawierają słowa „rzeczy” i „piwo” w komunikacie zatwierdzenia.

PONOWNIE EDYCJA: Popełniania wielu zmian, choć niekoniecznie zła praktyka, należy unikać w jak największym stopniu. Łatwiej jest mi przejrzeć krótką i zwięzłą wersję / zatwierdzenie. (w połączeniu z dobrze napisaną wiadomością zatwierdzenia, patrz mój poprzedni montaż, aby znaleźć zły przykład)

Bro Kevin D.
źródło
2

„Parujący kawałek kodu”. :-)

Ross Patterson
źródło
2
  • wstępne zatwierdzenie - projekt, który nie był kontrolowany, wrzucony do SVN
  • refaktoryzacja - architekt ma genialny pomysł na zmianę nazw klas z / na Smurf Naming Convention lub zmienił katalog główny hierarchii pakietów
  • format kodu - architekt postanowił zmienić wcięcie kodu z 4 do 3 spacji lub zmienić zakończenia linii z Unixa na Windows (lub przywrócić)
  • Zatwierdzenie w piątek - Joe zawsze zaczyna pracę przez cały tydzień w piątki o 16:30
  • uuups commit - Ted przez pomyłkę usunął katalog główny, zobowiązał się do tego, a teraz ponownie pompuje całą hierarchię plików do SVN
Żeglarz naddunajski
źródło
0

Zwykle wiele osób dokonuje dużych zatwierdzeń przy użyciu scentralizowanego VCS, szczególnie serwer wymusza dobre zasady zatwierdzania. Oznacza to, że zatwierdzenie musi przejść wszystkie testy, a testy trwają dłużej (dłużej niż kilka sekund). Dlatego programiści nie chcą tak długo czekać na wielokrotne zatwierdzanie i rozkładanie zmian na wiele małych zatwierdzeń.

A programiści, którzy są zieloni dla VCS, mogą zapomnieć o podziale zmian na wiele małych zatwierdzeń. Pamiętają tylko o popełnieniu, gdy udostępnią program zespołowi ds. Kontroli jakości. Co gorsza, aby inni nie widzieli błędnego kodu, nie zatwierdzają go, zanim pomyślnie przejdą testy kontroli jakości. Wreszcie, nie zdawali sobie sprawy z tego, że popełnili wyjściowe pliki binarne, pliki tymczasowe i dane wyjściowe konsolidatora, które naprawdę powodują „duże” zatwierdzenie.

linquize
źródło