... o których każdy programista
wiedzieć powinien.

Zawsze słuchaj ekspertów. Oni powiedzą ci, czego nie da się zrobić i dlaczego. A ty potem to zrób.
-- Robert Heinlein
Filip van Laenen

Zautomatyzuj swój standard kodowania

Oryginalny tytuł: Automate Your Coding Standard

Autor: Filip van Laenen

Prawdopodobnie byłeś już w takiej sytuacji. Na początku projektu każdy ma sporo dobrych chęci — nazwijmy je "postanowieniami nowoprojektowymi". Bardzo często wiele z tych postanowień jest zapisywanych w dokumentach. Te dotyczące kodu trafiają do standardów kodowania projektu. Podczas spotkania rozpoczynającego projekt, główny programista czyta wszystko, co znajduje się w takim dokumencie, i w najlepszym wypadku, wszyscy zgadzają się z tym, że będą starali się tego przestrzegać. Jednak kiedy projekt się rozpoczyna, dobre postanowienia zostają porzucane jedno po drugim. Kiedy projekt jest w końcu dostarczony, kod wygląda jak istny bałagan i nikt zdaje się nie wiedzieć, jak do tego doszło.

Kiedy coś poszło nie tak? Prawdopodobnie już na spotkaniu rozpoczynającym. Niektórzy z członków zespołu nie uważali. Inni nie zrozumieli sensu. Co gorsza, niektórzy nie zgodzili się i już planowali bunt. W końcu, niektórzy zrozumieli i zgodzili się, ale kiedy presja w projekcie stała się zbyt duża, musieli odpuścić niektóre rzeczy. Dobrze sformatowanym kodem nie zaplusujesz u klienta, który chce więcej funkcjonalności. Co więcej, podążanie za standardami kodowania może być nudne, jeśli nie jest zautomatyzowane. Aby przekonać się o tym samemu, spóbuj ręcznie porobić poprawne wcięcia w niechlujnej klasie.

Tak więc, skoro to jest taki problem, to dlaczego tak bardzo pragniemy standardów kodowania? Jednym powodem, aby unifikować formatowanie kodu jest to, iż nikt nie może "posiadać" kodu poprzez sformatowanie go na swój sposób. Możemy chcieć zapobiegać używania pewnych antywzorców, aby unikać niektórych popularnych błędów. Reasumując, standardy kodowania powinny ułatwiać pracę w projekcie i podtrzymywać prędkość rozwoju oprogramowania od początku do końca. Co za tym idzie to, że każdy powinien zgodzić się na standardy kodowania - robienie wcięć na trzy spacje przez jednego programistę, a na cztery przez drugiego, nie ułatwia sprawy.

Istnieje całe mnóstwo narzędzi, które mogą być użyte do tworzenia raportów o jakości kodu i do dokumentowania oraz utrzymywania standardów kodowania, ale to nie wszystko. Wszystko powinno być zautomatyzowane i egzekwowane, gdzie tylko się da. Poniżej znajduje się kilka przykładów:

  • Upewnij się, że formatowanie kodu jest częścią procesu buildowego tak, aby każdy uruchamiał to automatycznie za każdym razem, kiedy kompiluje kod.
  • Używaj narzędzi do statycznej analizy kodu, aby sprawdzić kod na obecność niechcianych antywzorców. Jeśli jakikolwiek jest znaleziony, psuj builda.
  • Naucz się konfigurować te narzędzia tak, abyś mógł wypatrywać antywzorców specyficznych dla Twojego projektu.
  • Nie tylko mierz pokrycie kodu testami, ale też automatycznie sprawdzaj wyniki. I znowu, psuj builda jeśli pokrycie jest za małe.

Staraj się robić powyższe dla wszystkiego, co uważasz za istotne. Nie będziesz w stanie zautomatyzować wszystkiego, na czym Ci naprawdę zależy. Dla tych rzeczy, których nie możesz automatycznie zaznaczyć bądź naprawić, załóż, że są zbiorem dodatkowych dyrektyw standardów kodowania do tych, które są zautomatyzowane, oraz miej świadomość, że Ty i Twoi współpracownicy możecie nie podążać za nimi tak pilnie.

W końcu, standardy kodowania powinny być bardziej dynamiczne aniżeli statyczne. W miarę jak projekt rozwija się, jego potrzeby się zmieniają i to, co mogło wydawać się mądre na początku, niekoniecznie musi być takie kilka miesięcy później.

Creative Commons Uznanie Autorstwa 3.0 Artykuł został opublikowany na licencji Creative Commons Uznanie Autorstwa 3.0.
Tłumaczenie: rafek

Komentarze (13)

dziki kali pisze:
22-03-2010 09:43:36
Co to jest: "procesu buildowego" albo "builda"? Nie mozna po naszemu?
Immortal pisze:
22-03-2010 09:48:49
@dziki kali To może raczysz zaproponować własne tłumaczenie tego wyrażenia? Łatwo tak niekonstruktywnie krytykować.
rafek pisze:
22-03-2010 09:59:13
@dziki kali: tłumacząc ten tekst stanąłem przed dylematem, jak tłumaczyć wyrażenia, które przytoczyłeś. Jako iż nie potrafiłem dobrać *rozsądnego* tłumaczenia polskiego, postanowiłem zostawić, tak jak jest. Niemniej jednak jestem otwarty na wszelakie sugestie i jak tylko znajdę/ktoś mi podpowie lepsze "tłumaczenie", to poprawię. :)
bilberry pisze:
22-03-2010 11:41:44
build i compile to prawie to samo, są wprawdzie różnice, ale nie wgłębiając się można je dość często używać zamiennie - tyle, jeżeli chodzi o język angielski, w polskim mamy słowo kompilować, ale nie mamy odpowiednika dla słowa build (budować brzmi głupio odnośnie kodu), tak więc ja bym proponował tłumaczenie: procesu kompilacji (nie oddaje to wprawdzie w pełni angielskiego terminu, ale jest chyba jedynym polskim tłumaczeniem) - oczywiście pozostaje jeszcze słowotwórstwo - trzeba wymyślić jakiś polski termin
rafek pisze:
22-03-2010 11:45:51
@bilberry: build, o którym mowa, to proces - kompilacja, testy automatyczne, pokrycie kodu, analiza statyczna i co tam jeszcze da się podłączyć pod ciągłą integrację. Użycie tutaj słowa "kompilacja" zupełnie nie oddawałoby sensu.
Greg pisze:
22-03-2010 12:06:51
Ważne, że wszyscy wiedzą o co chodzi. W ten branży trudno zachować czystość językową ;)
mar pisze:
25-03-2010 11:44:28
A co z terminem konsolidacja? Nie jest to odpowiednik "builda"?
mar pisze:
25-03-2010 11:45:04
albo z linkowaniem pomyliłem
rafek pisze:
25-03-2010 11:45:56
@mar: tak, pomyliłeś z linkowaniem :)
Piotr pisze:
29-03-2010 14:08:52
@dziki kali: Po naszemu ? A po co ? Wymyślając jakieś karkołomne tłumaczenia nie swoich rzeczy traci się na uniwersalność zrozumienia terminu. Ja rozumiem popędy przodowników myśli patriotycznej i obrońców wiary...erm czystości języka ale myślę że jesteśmy w gronie ścisłowców i specjalistów tutaj a problem nie znajomości języka angielskiego też raczej nie występuje.
Gerard pisze:
11-06-2010 13:53:29
"Build" to znaczy "budować". To dobre tłumaczenie (bo faktycznie budujemy) a sam termin łatwiejszy do przyswojenia dla zwykłego czytelnika niż "kompilować", pod którym dopiero podczas nauki programowania zbieramy intuicje i skojarzenia. Poza tym tłumaczenie na język ojczysty ma zasadniczą zaletę: sprawdzamy w ten sposób, czy faktycznie rozumiemy termin. Weźmy przykład z programowania. Załóżmy, że dostaliśmy do napisania aplikację w języku J1, w którym czynność C jest wykonywana przez funkcje F1. Naszym językiem, w którym "myślimy" jest jednak język J2, w którym ta sama czynność jest wykonywana przez funkcję o nazwie F2. Możemy oczywiście zdefiniować podstawienie F2 za F1, ale to zmniejsza czytelność kodu w języku J1, a czytelność i spojność kodu są przecież warte zachodu.
Gerard pisze:
11-06-2010 13:59:11
Swoją drogą, wydawać się może że dyskusja o tłumaczeniu terminu "build" odbiega od tematu, ale w zasadzie dotyczy właśnie standardu kodowania: czy tłumaczymy w jednym stylu (języku) czy mieszamy style (języki)?
grzegorz pisze:
16-07-2010 10:31:08
A jakie automatyczne narzędzia polecacie do projektu pisanego w C++? Niestety wiele dobrych narzędzi jest bardzo drogich i nie opłaca się w nie inwestować w przypadku małych i średnich projektów.

Dodaj komentarz

*
 
 
*
*