Pracuję w firmie, która uzyska 11 punktów w teście Joela - przynajmniej na papierze.
W praktyce jednak nic nie działa tak dobrze, jak się spodziewano, a projekt działa na DEFCON 1 od pół roku. Teraz większość moich rówieśników jest zadowolona, jeśli mogą wrócić do domu o 18:00 - w niedzielę.
Jedną z pozornie dobrych praktyk, które mnie zaskoczyły, jest brak narzędzi do analizy statycznej. Projekt śledzi zarówno ostrzeżenia gcc -Wall, jak i zastrzeżone i bardzo drogie narzędzie „C / C ++” .
Ostrzeżenia Gcc najczęściej wskazują na prawdziwe (choć przez większość czasu nieszkodliwe) błędy.
Jednak zastrzeżone narzędzia wymieniają takie rzeczy, jak niejawne rzutowania i rozmiar literału łańcuchowego. Niejawne obsady również znajdują się na czarnej liście w ich książce stylów.
Standardową praktyką jest zmuszanie ludzi do zamykania każdego ostrzeżenia. Pamiętaj, że nie wyklucza to ostrzeżeń, które są w większości fałszywie pozytywne, nie stanowi to problemu.
Wynik to:
- Ludzie dodają typy rzutów do każdej wartości i każdego argumentu, ukrywając w tym procesie prawdziwe niedopasowania typów.
- Ludzie wprowadzają się przez jeden błąd lub używają innej problematycznej funkcji języka (strlen zamiast sizeof, strncpy zamiast strcpy itp.)
- Ostrzeżenia zostały wyciszone.
- Raporty o błędach zaczynają się pojawiać.
Najważniejsze jest to, że oryginalny kod działał i został napisany przez ludzi, którzy bawili się bezpiecznie w swoich umiejętnościach językowych, podczas gdy poprawki nie były.
Nie sądzę, żeby tę firmę można było uratować. Chciałbym jednak wiedzieć, czy istnieje lepszy, najlepiej działający sposób korzystania z narzędzi „pro” , czy też powinienem po prostu całkowicie ich unikać, na wypadek, gdyby to ja podejmowałem decyzję w przyszłości.
Rozwiązanie, które nie zakłada, że wszyscy programiści są geniuszami, którzy nie mogą się mylić. Ponieważ cóż, jeśli tak, to nie ma potrzeby używania narzędzi w pierwszej kolejności.