Istnieją różne standardy kodowania egzekwowane w firmach programistycznych, których celem jest zwiększenie niezawodności, przenośności i, co najważniejsze, czytelności kodu napisanego wspólnie przez różnych programistów.
Dwa godne uwagi przykłady to MISRA C i standard C ++ opracowany dla projektu JSF .
Zazwyczaj mają one następującą formę, po dokładnym określeniu, co oznaczają słowa „musi”, „powinno”, „powinno”, „może” itd.:
Przykład:
Reguła 50: Zmiennych zmiennoprzecinkowych nie bada się pod kątem dokładnej równości lub nierówności.
Uzasadnienie: Ponieważ liczby zmiennoprzecinkowe podlegają błędom zaokrąglania i obcinania, dokładna równość może nie zostać osiągnięta, nawet jeśli jest to oczekiwane.
Te standardy kodowania nakładają ograniczenia, zwykle na kod, który byłby legalny z punktu widzenia kompilatora, ale jest niebezpieczny lub nieczytelny i dlatego jest „uważany za szkodliwy”.
Teraz wykorzystajmy to!
Zostajesz zaakceptowany jako członek małego komitetu normalizacyjnego w swojej firmie, który ma opracować nowe standardy kodowania, z których będzie musiał korzystać każdy programista w firmie. Bez wiedzy innych, potajemnie zatrudniasz złowrogą organizację i Twoim zadaniem jest sabotowanie towarzystwa. Musisz zaproponować jeden lub więcej wpisów do standardu kodowania, które później będą utrudniać programistom. Należy jednak uważać, aby nie uczynić tego natychmiast oczywistym, w przeciwnym razie ryzykujesz, że nie zostanie zaakceptowany w standardzie.
Innymi słowy, musisz wprowadzić zasady do standardu kodowania, które wyglądają na uzasadnione i mają duże szanse na zaakceptowanie przez innych członków komitetu. Po rozpoczęciu projektów i zainwestowaniu w kod niezliczonych roboczogodzin, powinieneś być w stanie nadużyć tych zasad (na przykład ze względów technicznych lub bardzodosłowna interpretacja), aby oznaczyć kod normalny i dobrej jakości jako niezgodny ze standardem. Muszą więc włożyć dużo wysiłku w przeprojektowanie go, a reguły będą odtąd im przeszkadzać, ale ponieważ reguły są aktywne już od dłuższego czasu, czysty pęd utrzyma te role przy życiu, a ponieważ istnieją znaczące konflikty interesów między różnymi poziomami zarządzania, inni menedżerowie prawdopodobnie utrzymają zasady przy życiu (głupotą byłoby przyznać się do błędu!), utrudniając tym samym firmę! Mwahahahahaaa!
Punktacja
Najwyższa głosowana odpowiedź wygrywa po około 2 tygodniach od pierwszego ważnego wpisu. Mam pomysł na dobrą odpowiedź, ale opublikuję ją dopiero kilka dni później, ponieważ ktoś inny może dojść do tego samego pomysłu i nie chcę okradać ich z przyjemności. Oczywiście moja własna odpowiedź nie zostanie zaakceptowana ponad wszystko, bez względu na wynik.
Wyborcy są zachęcani do oceniania odpowiedzi na podstawie tego, jak dobrze luki są ukryte i jak frustrujące byłyby dla programistów.
Zasady i przepisy
- Reguła lub reguły muszą wyglądać profesjonalnie napisane, jak w powyższym przykładzie
- Reguły powinny wyglądać autentycznie (więc rzeczy takie jak „wszystkie zmienne muszą zawierać co najmniej jeden znak podkreślenia, jedną wielką literę, jedną małą literę i dwie cyfry” nie są akceptowane. W rzeczywistości utrudniłyby programistom, ale najprawdopodobniej nie zostałyby zaakceptowane przez komitet), a jeśli ich zasługi nie są od razu oczywiste, należy podać dobre uzasadnienie.
- Powinieneś być w stanie znaleźć sposób na wykorzystanie / nadużywanie swoich zasad, aby później sabotować programistów. Możesz nadużywać niejednoznaczności w innych regułach lub możesz stosować wiele reguł, które same w sobie są nieszkodliwe, ale po połączeniu diaboliczne!
- Powinieneś zamieścić wyjaśnienie w tagach spoiler na końcu swojego postu, w jaki sposób możesz nadużyć zasad
- Używany język nie może być językiem ezoterycznym. Należy wybrać język szeroko stosowany w prawdziwych projektach, dlatego preferowane są języki ze składnią podobną do C (zamiast rzeczy takich jak Golfscript).
Odpowiedzi:
C / C ++
Jeśli chcesz być jeszcze bardziej zły, dodaj:
Jak można go nadużywać:
Weź następujący prosty program, który doda pierwsze 10 elementów tablicy. Ten kod nie byłby zgodny ze standardami.
źródło
0
podać link do standardowej definicji kodowania, która mówi, że jest to ósemkowa stała? Zakładam, że to dlatego, że zaczyna się od charakteru0
. Wzmocniłoby to hipotetyczny argument pedanta.Pyton
Reguła 1: Cały kod musi być skompilowany bajtowo przy użyciu
-OO
flagi, która optymalizuje kod bajtowy. Chcemy zoptymalizowanego kodu bajtowego pod względem wielkości i wydajności!Reguła 2: Testy muszą być przeprowadzane na tym samym „artefakcie” kodu, który zostanie wprowadzony do produkcji. Nasi audytorzy tego wymagają.
źródło
help()
REPL, a nieformalne testowanie REPL wciąż testuje.unittest
modułu lub, który implementuje swoje własne twierdzenia niezależne od__debug__
flagi. Doctests po cichu nie będą jednak działać. Podstępny!To jest dla projektu Node.JS.
Jak można go nadużywać:
źródło
JavaScript (ECMAScript)
(Składnia samego fragmentu gramatyki [nie tego, który on definiuje] odpowiada składni specyfikacji ECMAScript. Zostałoby to oczywiście zdefiniowane bardziej rygorystycznie w innym punkcie hipotetycznej specyfikacji.)
Sztuczka
Następujący program jest niezgodny:
źródło
DO#
Czemu
źródło
JAVA / SPRING
Sztuczka
źródło
Kodowanie strony internetowej
Jak można go nadużywać:
źródło
JavaScript Operatory bitowe
Jak można go nadużywać:
źródło
x = (x<<10) + (x<<8) + (x<<5) + (x<<4) + (x<<3) + (x)
jest gorsze pod każdym względem (być może nawet prędkości)x *= 1337
, i że zastąpienie dzielenia przez brak potęgi dwóch sumami przesunięć bitowych jest jeszcze gorsze.JavaScript (ECMAScript)
Sztuczka
źródło