Odnosi się to do dyskusji w odpowiedzi i komentarzy do tego pytania: Co jest związane z awersją do dokumentacji w branży? . W odpowiedzi twierdzono, że „kod nie może kłamać”, a zatem powinna być lokalizacją docelową zamiast dokumentacji. Kilka komentarzy wskazuje, że „kod może kłamać”. Po obu stronach jest prawda, przynajmniej częściowo ze względu na to, jak słabo i niewłaściwie traktowana jest dokumentacja.
Czy powinniśmy szukać kłamliwego kodu, porównując go z istniejącą dokumentacją? Czy jest to zwykle najlepsze źródło tego, co musi robić? Jeśli jest to zwinny kod, to czy jest mniej prawdopodobne, że kłamie, czy może ten kod wcale nie kłamie?
documentation
czwartek
źródło
źródło
Odpowiedzi:
Słowami laika:
Tak , powinieneś poszukać kłamliwego kodu i sprawić, by mówił prawdę. Ale nie przez porównanie go z dokumentacją. To byłby sposób na wykrycie kłamliwej dokumentacji.
Kod może kłamać na kilka sposobów, o których wspomnę tylko kilka:
Im krótszy, tym mniej kłamie. To oczywiste.
Im mniej skomplikowany kod, tym bardziej przejrzysty. Więc leży mniej.
Wiele tajemnych sztuczek składniowych. Preferuj przejrzyste algorytmy krok po kroku. Kłamią mniej.
Dobre narzędzie do analizy kodu statycznego może pomóc Ci znaleźć kod, który kłamie.
Również dobra zautomatyzowana bateria testowa zmusza kod do mówienia prawdy.
źródło
The shorter and terser the code is, the less it lies. It's self evident.
Ledwo to powiedziałbym. Z mojego doświadczenia wynika, że im krótszy i krótszy kod, tym więcej możliwości zamiatania leży pod dywanikiem, na ogół przez ukrycie ich w zwodniczych wywołaniach funkcji.p
dla zmiennej, która nie jest wskaźnikiem.Kod nie może kłamać.
To, co jest w kodzie, jest tym, co obecnie robi Twój program - bez względu na dokumentację, kontrolę jakości lub klient. Zwłaszcza jeśli Twój kod został zwolniony i był przez jakiś czas w terenie, tego oczekiwanego zachowania nie należy ignorować.
Kod z pewnością może być niepoprawny . Z pewnością może wprowadzać w błąd co do nazewnictwa lub organizacji. Z pewnością może być nieczytelny.
Ale jeśli chcesz źródła prawdy na temat tego, co robi Twój kod , a nie tego, co ma robić, a nie tego, do czego został zaprojektowany, a nie tego, co myślałeś, że robi ... jeśli chcesz wiedzieć, co on właściwie robi, idź do kodu.
źródło
Zadajesz kilka pytań.
Oczywiście!
To nigdy nie może zaszkodzić, chociaż jak wspomniano w innych odpowiedziach, częściej prowadzi to do problemów w dokumentacji , a nie w kodzie .
To jest zawsze najlepszym źródłem do tego co się robi. Najlepszym źródłem tego, co powinien robić kod, mogą być (kombinacje) różnych rzeczy, z których najważniejsze to:
To, które jest „najlepszym” źródłem (lub ich kombinacją), zależy od twojej sytuacji.
Nie jestem pewien, co rozumiesz przez „zwinny kod”, AFAIK „zwinny” zwykle odnosi się do procesu kodowania. Przypuśćmy, że masz na myśli „kod utworzony w zwinnym procesie programowania”, więc myślę, że można bezpiecznie powiedzieć, że wciąż może kłamać. To, jak prawdopodobne jest, że kłamie, w porównaniu do kodu stworzonego np. W projektach w stylu wodospadu, jest kwestią subiektywną (osobiście nie sądzę, żeby istniało duże powiązanie).
Przypis
Wszystkie powyższe założenia zakładają, że kod może kłamać i że jest to podstawowy (choć nieco wymyślony) przykład:
To tylko jeden przykład, w którym powiedziałbym, że „kod leży”, @ user61852 ma jeszcze kilka innych (nieosiągalny kod, złożoność kodu niepasująca do złożoności problemu, złe nazewnictwo) i myślę, że jest ich o wiele więcej. Wikipedia ma dość przyzwoite podsumowanie kłamstw , wiele z nich można znaleźć kod.
Zauważ, że jeśli kłócisz się z kimś, bądź pewien, że druga osoba nie rozumie przez „kod nie może kłamać”, że „kod robi to, co robi”. Zasadniczo druga osoba tutaj definiuje za pomocą definicji „kłamstwa”, która jest tak wąska, że może zadeklarować stwierdzenie „kod nie może kłamać” jako aksjomat / podstawowa prawda. W takim przypadku prawdopodobnie najlepiej jest zgodzić się z jego / jej axioma.
źródło
Możesz spierać się o to, czy słowo „kłamstwo” jest technicznie właściwe, ale ten kod sugeruje dość wyraźnie, że czasami x będzie większe niż 5, a czasem nie. Jeśli spojrzysz na pełny program i odkryjesz, że ta funkcja jest zawsze wywoływana tylko w jednym miejscu i że x jest zawsze ustawione na stałą 6, to kłamstwo.
Co więcej, kompilator mógł to zauważyć i zastąpił ten blok kodu po prostu
Jeśli doADifferentThing nie jest wywoływany nigdzie indziej w twoim programie, może zostać całkowicie usunięty z programu.
Jeśli twój język obsługuje
assert
jakiś rodzaj, który jest wyłączony w kompilacjach produkcyjnych, każdeassert
zdanie jest potencjalnie kłamstwem. Rzutowanie to kolejne stwierdzenie, które może być kłamstwem.źródło