Błędy, których można uniknąć dzięki standardom kodowania [zamknięte]

11

Szukam statystyk (lub szacunków), które potwierdzają twierdzenie, że standardy kodowania pomagają zmniejszyć liczbę błędów. Twarde liczby byłyby fajne, chociaż nie miałem zbyt wiele do znalezienia. Patrzyłem nawet na śledzenie błędów w różnych projektach typu open source, ale nie udało mi się znaleźć tego, czego potrzebuję. Czy ktoś tam zna jakieś miejsce, w którym mógłbym to znaleźć? Czy może któryś z was przyczynia się do jakichkolwiek projektów typu open source, w których występowały błędy, których można było uniknąć dzięki lepszym standardom kodowania?

ZĄBKOWAĆ
źródło
5
powodzenia! znalezienie statystyk dotyczących wszystkiego, co dotyczy programowania, jest naprawdę trudne.
Winston Ewert,
Raz przeczytałem standardy kodowania ... i to już koniec tej historii. StyleCop, z drugiej strony - uruchamiam go codziennie.
Job
IMO większość czasu na naprawianie błędów spędza na naprawianiu błędów, które wynikają ze złożoności. Dlatego Twoim zadaniem jako programisty jest kontynuowanie walki z całym legionem i różnymi Siłami Komplikacji. zaczynając od samych wymagań biznesowych, a kończąc na sprzężeniu, zależnościach i architekturze, a także spójności i czytelności. Złe standardy kodowania reprezentują tylko niewielki batalion w Siłach Komplikacji ustawionych przeciwko tobie.
Brad Thomas

Odpowiedzi:

8

Same standardy kodowania nie redukują błędów. Standardy kodowania w ramach solidnego procesu opracowywania oprogramowania redukują błędy.

Oto dwa artykuły, które badają statystyczny wpływ rzetelnego procesu inżynierii oprogramowania na redukcję defektów, który można wykorzystać jako punkt wyjścia:

Gryźć
źródło
3

Kodowanie „standardów” ... Istnieje wiele obszarów rozwoju, które można znormalizować. Czy mówimy o konwencjach kodowania, takich jak standardy nazewnictwa itp.? Czy mówimy o czymś głębszym, takim jak TDD / BDD, CI itp.?

Mogę powiedzieć, że przestrzeganie metodologii „pierwszy test”, z wymuszaniem przekazywania testów przez CI i dobrym pokryciem kodu, zmniejsza liczbę błędów wykrytych przez klienta. Zautomatyzowane testowanie, zarówno przez programistę, jak i QA, jest również stosunkowo „tanim” sposobem na znalezienie błędów, ponieważ zazwyczaj mają one bardzo krótki czas reakcji. Możesz wiedzieć, że nie napisałeś tego, co napisałeś, przeprowadzając testy jednostkowe o wartości około 45 sekund. Kilka godzin testów integracyjnych pozwoli znaleźć miejsca, w których łączenie elementów nie poszło zgodnie z planem, a kompleksowe i zautomatyzowane testy interfejsu użytkownika mogą szybko wykryć usterki funkcjonalne w oprogramowaniu na bardzo wysokim poziomie.

Zapobiegają również regresji. Znalazłeś błąd. Piszesz test, który udowodni, że takie zachowanie już nie występuje, kodujesz, dopóki test się nie powiedzie, a teraz masz test, który od tego momentu sprawi, że błąd nigdy więcej nie będzie problemem. Z mojego doświadczenia wynika, że ​​jest to główne źródło nowych błędów; naprawienie jednej rzeczy psuje coś innego, a testowanie poprawki przez programistę może nie obejmować tej innej, która jest teraz zepsuta. Przełamywanie rzeczy, które kiedyś działały, to OGROMNA czerwona flaga dla Twoich klientów.

Wreszcie, ta zautomatyzowana struktura testowa, którą zbudujesz w ramach tej metodologii, bardzo łatwo da ci środowisko, w którym możesz wypuścić nową wersję oprogramowania w dosłownie chwili. „Hej, właśnie naprawiony błąd powodował prawdziwe bóle głowy; kiedy będziesz gotowy w nowej wersji?” kliknij „Och, za około 5 minut, kiedy serwer kompilacji zakończy publikowanie na stronie pobierania”.

Jeśli chodzi o podstawowe konwencje kodowania, takie jak standaryzacja nazw zmiennych itp., Większość z nich okazała się mniej przydatna i bardziej irytująca. Są to standardy, które są „wspaniałe, ponieważ jest ich tak wiele do wyboru”. To, co postrzegasz jako różnicę między identyfikatorem PascalCased i camelCased, może nie być tym, co myśli ktoś inny. Wiodące podkreślenia, ograniczenia długości nazw (lub wymagania, które nazwy metod / pól opowiadają); inne niż konwencje wymuszane przez kompilator lub powszechnie spotykane w kodzie biblioteki specyficznym dla języka, nowoczesne IDE może powiedzieć ci wszystko, co musisz wiedzieć o zmiennej lub funkcji, w tym czy powinieneś, czy nie powinieneś próbować używać go w określonym okoliczność. Ponadto uruchomienie sprawdzania konwencji kodu często zwróci problemy z kodem, którego nie można lub nie można chcesz zmienić, jak biblioteka innej firmy, która używała innego zestawu standardów, lub kod interop, który może być zgodny ze standardami nazewnictwa Win API zamiast ze standardami twojego języka ojczystego. W końcu dodajesz cruft do kodu, aby Twoje narzędzie zignorowało cruft w kodzie.

KeithS
źródło
3

Każda luka w iniekcji SQL jest defektem, któremu można było zapobiec za pomocą standardu kodowania. Dostępne są statystyki podatności na iniekcje SQL, AFAIK.

Każdej podatności na przepełnienie bufora można było zapobiec dzięki standardowi kodowania. Statystyki na ich temat są prawdopodobnie również dostępne.

użytkownik16764
źródło