Czy powinienem się martwić, jeśli mój stosunek LOC / dzień jest zbyt wysoki? [Zamknięte]

9

Aktualnie pracuję nad projektem niezależnym, więc nie mam luksusu w testach na ludziach ani przeglądaniu kodu zewnętrznego - jednak nie widzę żadnych trudnych błędów w moim bieżącym kodzie (naprawiam je tak, jak je widzę) , i przez większość czasu są to po prostu złe nazwy pól i takie rzeczy, które naprawiasz za minutę lub dwie), a ja testuję to po zaimplementowaniu dowolnej funkcji przed jej przekazaniem. Ostatnio mój numer LOC wynosił około 400 dziennie (dla przypomnienia, to C #), i nie tylko wdrażam nowe systemy, ale także przepisuję rzeczy, które już napisałem i naprawiam kilka błędów.

Czy powinienem się martwić? Czy to znak, że muszę zatrzymać i przejrzeć cały kod, który do tej pory pisałem, i zrefakturować?

Max Yankov
źródło
jak mierzysz LOC? wyklucza kod wygenerowany przez studio graficzne, czy nie?
jk.
Za pomocą tego polecenia bash w moim folderze kodu: (znajdź ./ -name '* .cs' -print0 | xargs -0 cat) | wc -l
Max Yankov
tak, aby prawdopodobnie zawierał dowolny wygenerowany kod, np. designer.cs - nie martwiłbym się liczbą pisanych linii
jk.
Ogólnie tak, ale w tym konkretnym środowisku (silnik gry Unity) tak nie jest.
Max Yankov,
1
Staram się usunąć jak najwięcej wierszy kodu, zanim mogę dodać więcej. Praca na minimalnym systemie jest o wiele przyjemniejsza niż alternatywa.
Jon Purdy,

Odpowiedzi:

18

LOC jest prawdopodobnie jednym z najbardziej nadużywanych wskaźników, w wyniku czego jest prawdopodobnie jedną z bardziej bezużytecznych miar jakości kodu i jeszcze bardziej bezużytecznym pomiarem wysiłku programistycznego.

Tak, to odważne stwierdzenie, które mogę wypowiedzieć, i nie, nie mogę skierować cię na studia potwierdzające mój punkt widzenia. Jednak z ciężkim doświadczeniem mogę stwierdzić, że kiedy zaczynasz się martwić ilością napisanego kodu, prawdopodobnie martwisz się niewłaściwymi problemami.

Najpierw musisz zadać sobie pytanie, co próbujesz zmierzyć lub udowodnić, i czy ten dowód jest po prostu poza zainteresowaniem, czy też może wspierać szerszą poprawę jakości i gdzie musisz użyć tych informacji, aby uzyskać wpis od swojego zespołu / zarząd, aby coś z tym zrobić.

Jedną z rzeczy, do których zwykle używam LOC, jest kontrola zdrowia psychicznego. Jeśli piszę dużo kodu, bardziej interesuje mnie LOC według metody lub LOC według klasy, a nie LOC. Pomiary te mogą być wskaźnikami, które należy poddać dalszemu refaktoryzacji, jeśli czujesz się trochę obsesyjnie na temat tego, jak dobrze powinien być uwzględniony Twój kod. Bardzo duże klasy mogą wymagać przekształcenia w kilka mniejszych klas, a długie wieloliniowe metody mogą wymagać podziału na kilka metod, inne klasy, a nawet mogą wskazywać na pewne powtórzenia, które można usunąć. Zauważ, że użyłem tam słowa „może” kilka razy.

W rzeczywistości LOC zapewnia tylko możliwy wskaźnik i nie ma prawdziwej gwarancji, że Twój kod może wymagać zmiany. Rzeczywistym pytaniem jest, czy kod zachowuje się zgodnie z wymaganiami i oczekiwaniami. Jeśli tak, to następne pytanie dotyczy tego, czy będziesz w stanie łatwo utrzymać kod i czy będziesz miał czas, czy teraz, czy w przyszłości, aby wprowadzić zmiany w działającym kodzie, aby zmniejszyć koszty utrzymania w przyszłości.

Często dużo kodu oznacza, że ​​będziesz musiał później zachować więcej, ale czasami nawet dobrze skonstruowany kod może rozciągać się na setki linii kodu, i tak, czasami możesz napisać setki linii kodu dziennie. Doświadczenie mówi mi jednak, że jeśli codziennie otrzymuję setki wierszy nowego kodu, często istnieje ryzyko, że znaczna część kodu została niewłaściwie wycięta i wklejona gdzie indziej, a to samo w sobie może wskazywać na problemy z powielanie i konserwacja, ale znowu nie jest to gwarancją, więc zwykle polegam na tym, co mówią moje doświadczenia i instynkty w oparciu o to, jak zrealizowano zadania.

Najlepszym sposobem na uniknięcie dylematu postawionego w pytaniu IMHO jest zapomnienie o LOC i refaktoryzacja CAŁEGO czasu. Najpierw napisz test kodu, zaimplementuj, aby zakończyć się niepowodzeniem, przeprowadź refaktoryzację, a następnie sprawdź, co można tam refaktoryzować, a następnie popraw kod. Opuścisz zadanie wiedząc, że już dwukrotnie sprawdziłeś swoją pracę, i nie będziesz się tak przejmował zgadywaniem siebie w przyszłości. Realistycznie rzecz biorąc, jeśli zastosujesz podejście testowe zgodnie z tym, co opisałem, każdy pomiar LOC / dzień na ukończonym kodzie naprawdę oznacza, że ​​napisałeś 3-5 razy zmierzoną ilość, a wysiłek ten został skutecznie ukryty przez ciągłe refaktoryzowanie starania.

S.Robins
źródło
1
+1 400 linii dziennie może wskazywać na problem, niestety myślę, że jedynym sposobem na sprawdzenie jest przegląd kodu, który jest trudny w zespole 1-osobowym
jk.
Dzięki za odpowiedź tak szczegółową :) Myślę, że całkowicie obejmuje ten temat.
Max Yankov,
@jk. Uważam, że adresuję twój komentarz w kontekście mojej odpowiedzi. W trybie solo najlepszym sposobem ochrony jakości kodu jest skupienie się na sposobie pisania i testowania kodu. Dobry zestaw testów w połączeniu z mentalnością ciągłego refaktoryzacji może być tak dobry jak przegląd kodu na wiele sposobów. Pamiętaj, że nie mówię, że w ogóle nie obejdę się bez recenzji, ale raczej, że powinny one mieć drugorzędne znaczenie dla zapewnienia, że ​​Twój produkt spełnia wymagania i ma dobry zasięg testowy, co pozwala na pewne zmiany w przyszłości. Moje pierwsze pytanie podczas przeglądu kodu brzmi zawsze: „Gdzie jest test na to?” :-)
S.Robins,
+1 Chociaż nie możesz wskazać badań, które pokazują, że LOC jest złym wskaźnikiem, łatwo jest znaleźć badania, które napotkały problemy, ponieważ użyły LOC jako miernika.
daramarak
Całkowicie zgadzam się, że LOC jest bezużyteczną miarą. W niektóre dni piszę setki linii kodu i jest w porządku. W niektóre dni osiągam zero. W niektóre dni wszystko, co robię, to usuwam kod. :-)
Brian Knoblauch,
5

Wcale nie - w niektóre dni naprawiasz trudny do znalezienia błąd i zmieniasz tylko jedną linię. W inne dni dodajesz nowy kod i piszesz kilka tysięcy wierszy.

Daily LOC nie mówi nic poza tym, że zadania na ten dzień można wykonać za pomocą 400 linii kodu.

Tom Clarkson
źródło
2

Niektóre z tych odpowiedzi nie mają sensu, nie używasz LOC jako miernika produktywności (gdybyś był, nie martwiłbyś się zbytnią „produktywnością”), tak naprawdę martwisz się o jakość kodu, ponieważ kod jest wrogiem, dlatego warto się martwić.

Niestety jedynym sposobem, aby dowiedzieć się o jakości kodu, jest przegląd kodu, ponieważ jesteś zespołem jednoosobowym, będzie to trudne, nawet jeśli przestałeś sprawdzać swój kod (a tak naprawdę nie chcesz przestać, prawda?) Przeglądając swój własny kod nie ujawni tak wiele, jak peer recenzujący Twój kod. Sugeruję, aby poprosić kogoś o sprawdzenie przynajmniej części twojego kodu, abyś mógł stwierdzić, czy twój 400 LOC / dzień wydaje bełkot, czy nie. Pomoże tu nawet niezależna recenzja kodu jednodniowego

jk.
źródło
1

Nie powinieneś przejmować się ilością LOC wytwarzanych dziennie.

Ale powinieneś się martwić:

  • jeśli Twój kod nie jest testowany (jeśli na przykład nie masz testów jednostkowych)
  • jeśli wystąpią problemy z dodawaniem nowych funkcji lub zmianą zaimplementowanych funkcji (oznacza to, że refaktoryzacja nie była właściwa)
  • jeśli Twoje doświadczenie nie jest duże, a kod nie jest sprawdzany (dodatkowa para oczu prawdopodobnie zauważy problemy)
BЈовић
źródło
0

LOC jest „oficjalną” miarą produktywności, ale argumenty przeciwko jego wartości mogą być długotrwałe (ORM może wygenerować 50 000 wierszy kodu w ciągu 3 minut, jednak jeśli projekt bazy danych jest nieprawidłowy, cały ten kod może trafić do kosza).

Sugeruję, abyś mierzył swoje postępy, śledząc% wykonanych zadań w funkcji czasu w porównaniu do% zadań planowanych do ukończenia. To się liczy. Klienci płacą za działający kod, który zapewnia wartość biznesową, a nie LOC.

Niektóre referencje na temat LOC

Bez szans
źródło
ale nie używa LOC jako miary produktywności
jk.
Tak, ale jak powiedziałem, nie jest to miara dokładna. To samo, gdy używasz „średniej wartości 1 22100”, otrzymujesz średnią, ale jest ona stronnicza i nie jest dokładna. W przypadku LOC sytuacja się pogarsza, ponieważ każde środowisko programistyczne i zestaw narzędzi mogą odzwierciedlać różne dane dotyczące wydajności. Na przykład LOC nie mogą porównywać złożoności kodu, tylko jego długości. Poprawiłem oryginalny post, dodając 2 referencje, które możesz chcieć zobaczyć.
NoChance,
0

Czy mierzysz także liczbę duplikatów kodu ?

Jeśli wysoka wydajność wynika z tego, że masz dużo kodu do kopiowania i wklejania , powinieneś się martwić.

Powód: w przypadku wystąpienia błędu w źródle kopiowania i wklejania, trudne i podatne na błędy jest naprawienie wszystkich zastosowań kopiowania i wklejania

k3b
źródło
-1

Jeśli wierzysz w piękny kod funkcjonalny, powinien to być twój jedyny sposób

„Czy płynie? Czy wygląda pięknie?”

Ciemna noc
źródło
3
jedyny środek? jak to działa? czy to jest wystarczająco szybkie?
jk.
dlatego powiedziałem funkcjonalny :)
Darknight