Więc zacząłem pracować dla dużego korpusu, jednego z tych 3 liter w nazwie, i oni próbują stać się Zwinnymi, ale mają mnóstwo procesów, które nie uważam za Zwinne.
Ten, który najbardziej mnie skończył, to recenzje kodu. Moja ostatnia praca dotyczyła startupu, który powiedziałbym, że jest najbardziej zwinnym zespołem programistycznym, jaki widziałem, w którym pracowałem i / lub kiedykolwiek słyszałem.
W każdym razie, moim argumentem jest to, że Code Review to strata czasu w iteracyjnym lub zwinnym rozwoju, w którym UX / UI jest ekstremalny / intensywny (pomyśl o doskonałości Apple / Steve Jobs). Może ktoś tutaj pomoże zrozumieć, zanim mnie zwolni?
Oto mój proces rozwoju i ten przy ostatnim uruchomieniu ... bardzo zwinny.
Robimy wczesne prace nad funkcjami sortowania zadań / zadań programistycznych. Wyśmiewalibyśmy kilka wersji i przedstawialiśmy użytkownikom, zespołowi i działowi marketingu, aby uzyskać opinie. Następnie wykonujemy kolejną iterację makiety, aby uzyskać jedną rundę od tych samych interesariuszy powyżej. Następnie podzielimy pracę i zaczniemy. Mamy kamienie milowe i daty do spełnienia, ale wciąż się rozłączamy. Nie mamy recenzji kodu w żadnym z tych przypadków. Kilka razy w ciągu tygodni naszego rozwoju ponownie przeprowadzamy sesje z interesariuszami, aby sprawdzić, czy nadal zgadzają się cechy / funkcje / UX / UI są nadal odpowiednie i zgodne z celem.
Gdy zbliżamy się do końca 8-tygodniowego cyklu iteracji, QA rozpoczyna testy, następnie przechodzi do użytkowników wersji alfa, a wreszcie do użytkowników wersji beta. Ale w fazie alfa i beta programiści omawiają nowe funkcje i starsze funkcje, wprowadzając iteracyjne codzienne lub godzinne zmiany w interfejsie użytkownika w celu ulepszenia interfejsu użytkownika. Tak więc funkcja, która była opracowywana w tym wydaniu, może zostać zmieniona jeszcze 3 razy w ciągu ostatnich czterech tygodni, aby ją ulepszyć i udoskonalić lub dodać kilka drobnych funkcji (np. Sprawić, że komponent będzie trochę płynniejszy lub inteligentniejszy). Czasami zmiany mogą być powierzchowne, co oznacza, że żadne operacje CRUD nie są zmieniane ani modyfikowane, ale wszystkie zmiany w interfejsie użytkownika ulegają zmianie.
Więc przy takim procesie rozwoju, ekstremalnie zwinny, czy recenzje kodu nie byłyby stratą czasu? Oznacza to, że gdybym miał innego programistę lub dwóch, którzy sprawdzili mój kod, ale ten kod zmienia się jeszcze 3 razy, zanim wyjdzie za drzwi, z powodu wszystkich ulepszeń interfejsu użytkownika / interfejsu użytkownika, czy nie marnujemy czasu na pierwsze 3 razy, gdy sprawdzili go kod, ponieważ ten kod / komponent / interfejs użytkownika został zezłomowany?
Nigdy nie mieliśmy wielu problemów z jakością z tym procesem i tak, jeśli programista opuścił całą wiedzę, wyszedł za drzwi, ale zawsze znaleźliśmy inteligentnych programistów, którzy mogliby ją przejąć i przejąć.
I tak, mamy wielu testerów, ponieważ mogą oni musieli przetestować rzeczy 3 lub 4 razy. Proszę też nie rozłączać się pytaniem, dlaczego wszystkie zmiany UI / UX ... tak właśnie się robi ... to wtedy aplikacja zdobywa mnóstwo nagród dla UI / UX, a użytkownicy zabiją za app. Proces myślowy polega na tym, że jeśli mogę coś ulepszyć nawet o 2%, ponieważ mam dodatkową godzinę, zrób to. Użytkownicy będą szczęśliwsi, co oznacza więcej $ lub użytkowników. I tak, nasi użytkownicy są w porządku z ciągłą zmianą aplikacji, ponieważ tak robiono od pierwszego dnia, aby nie postrzegali jej jako złej lub negatywnej.
Mam nadzieję, że ten post nie wygląda tak pompatycznie, ale po prostu nie widzę, jak Recenzje Kodeksu nie są marnotrawstwem. Być może 2% całego naszego kodu w sprawdzonym kodzie ma błędy. W każdym wydaniu możemy znaleźć 3 błędy poprzez przegląd kodu. Czyli kończy się 40 godzin sprawdzania kodu na programistę na wydanie (4 x 40 = 160 godzin), aby znaleźć 3 do 5 błędów? Szanse są 50%, że 3 do 5 błędów zostałoby wychwyconych przez QA. Czy nie lepiej byłoby spędzić 40 godzin na programistę, dodając nową funkcję lub ulepszając istniejące?
źródło
Odpowiedzi:
Jest kilka rzeczy, które recenzje kodów mogą dla Ciebie zrobić, a niektóre nie. Argumenty na rzecz recenzji kodu:
Wiele zwinnych procesów radzi sobie z nimi na różne sposoby:
Zasadniczo istnieją inne możliwości zadbania o potencjalne korzyści, jakie normalnie uzyskałbyś podczas przeprowadzania wzajemnych ocen. Moje osobiste doświadczenia z recenzjami są takie, że są to bardzo nieefektywne mechanizmy i nie są skuteczne w znajdowaniu błędów lub większych wad projektowych. Mają jednak swoje miejsce w niektórych zespołach, a przy projektach, w których zwinność nie jest możliwa (z jakiegokolwiek powodu), są one bardzo potrzebne.
źródło
Czy jednak recenzje kodu służą wyłącznie do znajdowania błędów? Wydaje ci się, że to prawda, a ja nie.
Twierdzę, że recenzje kodu mogą dotyczyć bardziej zbiorowego prawa własności do kodu, upewnienia się, że wiedza jest podzielona na wiele głów i przygotowania innych do dziedziczenia kodu, który może dotyczyć zarówno nowych funkcji, jak i błędów. Lubię recenzje kodu jako sposób na sprawdzenie i wyważenie systemu, ponieważ nigdy nie wiadomo, kiedy ktoś może mieć pojęcie, gdzie można napisać coś od nowa, aby zachować konwencje.
źródło
Programowanie w parach to odpowiedź XP na recenzje kodów. Zasadniczo każdy wiersz kodu jest sprawdzany podczas pisania. To ekstremalne recenzje kodu.
źródło
Przeglądy i testy kodu często nie wychwytują tego samego rodzaju błędów, a błędy wychwycone przez przegląd kodu mogą być łatwiejsze do naprawienia, ponieważ lokalizacja błędu jest znana.
Nie możesz wiedzieć, czy kod jest wolny od błędów, tylko dlatego, że pomyślnie przeszedł testowanie, ale żaden nie został zarejestrowany. „Testowanie może tylko udowodnić obecność błędów, a nie brak”. (Dijkstra?)
Przegląd kodu utrzymuje również ten sam styl kodu i jest w stanie znaleźć miejsca, w których kod nie jest dobry, ale na razie działa. Oszczędza koszty utrzymania na drodze.
Również wymagania dużej korporacji i startupu są różne. Startupy zwykle kończą się niepowodzeniem i muszą działać szybko. Duże korporacje czerpią znacznie więcej korzyści z robienia rzeczy właściwie, niż tak szybko, jak to możliwe. Możesz preferować pracę w startupach niż w dużych firmach, ale nie jest to powód, aby próbować narzucać strategie uruchamiania tam, gdzie nie pasują.
źródło
Czy twoje recenzje kodu wyświetlają tylko zmiany UI / UX? Twierdziłbym, że to nie jest przegląd kodu, to test użyteczności. Przeglądy kodu dotyczą znacznie więcej problemów, których użytkownicy / testerzy / biznes / cokolwiek nigdy nie widzą, ponieważ są w kodzie. Wskazówka jest tam w nazwie.
Teraz zgodzę się z tobą, że gdzieś trzeba narysować linię. Czy przeglądasz 4 iteracje tej samej zmiany interfejsu? A może przechodzisz przez 4 iteracje, z których każda potencjalnie czyni kod mniej konserwowalnym? Powiedziałbym, że spróbuj zmierzyć oba podejścia i znaleźć odpowiednią równowagę dla swojego zespołu, ale nie rezygnuj całkowicie z recenzji kodu.
Nawet jeśli przegląd kodu nigdy nie ujawnia problemu, ma tę zaletę, że rzadko się go zauważa, dopóki go nie ma: każdy kawałek kodu jest oglądany przez dwóch programistów, więc dwóch programistów wie, co było zmianą i co zamierzano osiągnąć . Tak więc jeden z nich zachoruje następnego dnia i jest nieobecny przez tydzień, drugi może odebrać każdą pilną pracę, którą wykonują.
źródło
Zgadzam się, że wspólna własność i parowanie kodu wraz z TDD i CI to zwinne antidotum na formalne sesje przeglądu kodu.
Nawet pod UP / Spiral nie byłem wielkim fanem konkretnego kroku procesu, jakim jest „przegląd kodu”, ponieważ wydaje mi się, że problemy, które można znaleźć, zostaną znalezione później niż mogłyby, gdyby zamiast tego zainwestowano tę samą energię współpraca i prosta automatyzacja.
Czułem, że ponieważ: - niektóre wspólne przeglądy projektu (zwykle wyrażone w UML przynajmniej na tablicy) oznaczały problemy projektowe na dużą skalę lub złe użycie interfejsów API itp. Zostały złapane przed napisaniem dużej ilości kodu. - FxCop, CheckStyle, FindBugs (lub podobny) działający wraz z automatycznymi kompilacjami ciągłej integracji w celu przechwytywania nazw, stylistyki, widoczności, powielania kodu itp.
Byliśmy w stanie ponieść porażkę wcześniej i uzyskać informacje zwrotne szybciej niż przyzwyczajenie związane z przeglądaniem kodu dalszego użytkownika.
Nie twierdzę, że to strata czasu, aby od czasu do czasu usiąść i rzucić okiem na bazę kodu, ale sprawienie, by przegląd kodu był bramkowym krokiem do wywołania czegoś zrobionego, wydaje się, że powoduje to wiele prac w toku, które mogły być uniknięto dzięki lepszej kontroli / współpracy na wcześniejszym etapie.
źródło
Jednym z głównych celów, których oczekuję od przeglądów kodu, jest zwiększenie łatwości obsługi kodu. Przeglądy kodu powinny pomagać każdemu w pisaniu przejrzystego kodu, w miarę zgodnego z dobrymi standardami kodowania. Większość kodu wymaga dużej konserwacji, szczególnie w dużych firmach. Zwrot za możliwy do utrzymania kod powinien rozpocząć się przed wydaniem kodu, a następnie kontynuować.
Przeglądy kodu same w sobie nigdy nie powinny powodować zmian w kodzie. Jeśli przegląd kodu wskazuje, że zmiany są wymagane, wdrożenie zmiany spowoduje zmianę kodu.
Stan kodu może ulec zmianie w wyniku przeglądu, ale powinno to być w większości nieistotne dla wspomnianych problemów.
Jeśli przegląd kodu powoduje wiele zmian w kodzie, oznacza to, że coś jest uszkodzone w procesie programowania. Biorąc pod uwagę liczbę testerów, którą masz, może to być rzut na ścianę i pozwolić testerom znaleźć mentalność problemu.
Sprawy powinny iść do testerów w stanie ukończonym. Jak najwięcej testów powinno być zautomatyzowanych, aby testerzy nie testowali za każdym razem tych samych rzeczy.
UI / UX wymaga trochę czasu na testowanie, ale posiadanie ekspertów w zakresie projektowania / programowania na froncie powinno to skrócić. Wymaga również twarzy przed ekranem. Jednak we wszystkich aplikacjach, z którymi pracowałem, była to stosunkowo niewielka część kodu.
Koszt wprowadzenia zmian (w tym poprawek błędów) ogólnie rośnie na każdym etapie, przez który przechodzi. Znajdowanie błędów w rozwoju jest na ogół tańsze niż naprawianie ich po testowaniu ich znalezienia.
źródło