Es gibt verschiedene Codierungsstandards, die bei Softwareunternehmen durchgesetzt werden und das Ziel haben, die Codezuverlässigkeit, Portabilität und vor allem die Lesbarkeit von Code zu verbessern, der von verschiedenen Entwicklern gemeinsam geschrieben wurde.
Zwei bemerkenswerte Beispiele sind der MISRA C- und der C ++ - Standard, die für das JSF-Projekt entwickelt wurden .
Diese haben normalerweise die folgende Form, nachdem sorgfältig festgelegt wurde, was die Wörter "muss", "soll", "sollte", "könnte" usw. bedeuten:
Beispiel:
Regel 50: Gleitkommavariablen dürfen nicht auf exakte Gleichheit oder Ungleichheit geprüft werden.
Begründung: Da Gleitkommazahlen Rundungs- und Kürzungsfehlern unterliegen, wird möglicherweise keine exakte Gleichheit erreicht, selbst wenn dies erwartet wird.
Diese Codierungsstandards stellen normalerweise Beschränkungen für Code dar, die aus Sicht des Compilers legal wären, aber gefährlich oder unlesbar sind und daher als "schädlich" eingestuft werden.
Lasst uns das jetzt missbrauchen!
Sie werden als Mitglied eines kleinen Standardisierungskomitees in Ihrem Unternehmen aufgenommen, das die neuen Codierungsstandards entwerfen soll, die jeder Entwickler im Unternehmen verwenden muss. Unbekannt für die anderen sind Sie heimlich bei einer finsteren Organisation beschäftigt und haben es sich zur Aufgabe gemacht, das Unternehmen zu sabotieren. Sie müssen einen oder mehrere Einträge für den Codierungsstandard vorschlagen, was die Entwickler später behindern wird. Sie müssen jedoch darauf achten, dass dies nicht sofort offensichtlich wird, da Sie sonst riskieren, dass es nicht in den Standard aufgenommen wird.
Mit anderen Worten, Sie müssen Regeln in den Kodierungsstandard einführen, die legitim aussehen und eine gute Chance haben, von den anderen Ausschussmitgliedern akzeptiert zu werden. Nachdem die Projekte gestartet wurden und unzählige Arbeitsstunden in den Code investiert wurden, sollten Sie in der Lage sein, diese Regeln zu missbrauchen (z. B. durch eine technische oder eine sehr technische Regel)wörtliche Auslegung), um ansonsten normalen und qualitativ guten Code als gegen den Standard zu kennzeichnen. Sie müssen sich also viel Mühe geben, um es neu zu gestalten, und die Regeln werden sie von nun an behindern. Da die Regeln jedoch schon seit geraumer Zeit aktiv sind, werden diese Rollen durch reine Dynamik am Leben erhalten und es gibt erhebliche Konflikte Aufgrund von Interessen zwischen verschiedenen Führungsebenen werden die anderen Manager die Regeln wahrscheinlich am Leben erhalten (es wäre töricht, wenn sie ihren Fehler eingestehen würden!), wodurch das Unternehmen behindert wird! Mwahahahahaaa!
Wertung
Die Antwort mit der höchsten Bewertung nach ungefähr 2 Wochen ab dem ersten gültigen Eintrag gewinnt. Ich habe eine Idee für eine gute Antwort, aber ich werde sie erst ein paar Tage später veröffentlichen, da jemand anderes auf die gleiche Idee kommen könnte und ich möchte ihm nicht das Vergnügen rauben. Natürlich wird meine eigene Antwort unabhängig von der Punktzahl nicht über jede andere akzeptiert.
Die Wähler werden aufgefordert, die Antworten danach zu bewerten, wie gut die Lücken verborgen sind und wie frustrierend sie für die Entwickler wären.
Regeln und Vorschriften
- Die Regel oder Regeln müssen wie im obigen Beispiel professionell geschrieben aussehen
- Die Regeln sollten echt aussehen (also werden Dinge wie "Alle Variablen müssen mindestens einen Unterstrich, einen Großbuchstaben, einen Kleinbuchstaben und zwei Zahlen enthalten" nicht akzeptiert. Sie würden Entwickler zwar behindern, aber höchstwahrscheinlich von ihnen nicht akzeptiert der Ausschuss) und wenn ihr Verdienst nicht sofort offensichtlich ist, sollten Sie eine gute Begründung geben.
- Sie sollten in der Lage sein, eine Möglichkeit zu finden, Ihre Regeln zu verwenden / zu missbrauchen, um die Entwickler später zu sabotieren. Sie könnten Unklarheiten in anderen Regeln missbrauchen, oder Sie könnten mehrere Regeln verwenden, die für sich genommen harmlos, aber einmal kombiniert teuflisch sind!
- Sie sollten am Ende Ihres Beitrags eine Erklärung in Spoiler-Tags veröffentlichen, wie Sie die Regeln missbrauchen können
- Die verwendete Sprache darf keine esoterische Sprache sein. Es muss eine Sprache gewählt werden, die in realen Projekten weit verbreitet ist. Daher werden Sprachen mit C-ähnlicher Syntax (anstelle von Dingen wie Golfscript) bevorzugt.
Antworten:
C / C ++
Wenn Sie noch böser sein möchten, fügen Sie Folgendes hinzu:
Wie es missbraucht werden kann:
Nehmen Sie das folgende einfache Programm, das die ersten 10 Elemente eines Arrays hinzufügt. Dieser Code wäre nicht standardkonform.
quelle
0
eine Oktalkonstante ist? Ich vermute, es liegt daran, dass es mit dem Charakter beginnt0
. Dies würde das Argument Ihres hypothetischen Pedanten stärken.Python
Regel 1: Der gesamte Code muss mit dem
-OO
Flag bytekompiliert werden , wodurch der Bytecode optimiert wird. Wir wollen optimierten Bytecode für Größe und Effizienz!Regel 2: Tests müssen mit demselben "Artefakt" des Codes ausgeführt werden, der in die Produktion aufgenommen wird. Unsere Wirtschaftsprüfer verlangen dies.
quelle
help()
mit der REPL nichts anfangen können und die informellen REPL-Tests noch nicht abgeschlossen sind.unittest
Modul oder verwendet, das seine eigenen Zusicherungen unabhängig vom__debug__
Flag implementiert . Doctests werden jedoch stillschweigend nicht ausgeführt. Hinterhältig!Dies ist für ein Node.JS-Projekt.
Wie es missbraucht werden kann:
quelle
JavaScript (ECMAScript)
(Die Syntax des Grammatikauszuges selbst [nicht die, die er definiert] entspricht der der ECMAScript-Spezifikation. Dies würde natürlich an einer anderen Stelle der hypothetischen Spezifikation strenger definiert.)
Der Trick
Das folgende Programm ist nicht konform:
quelle
C #
Warum
quelle
JAVA / FRÜHLING
Der Trick
quelle
Website-Kodierung
Wie es missbraucht werden kann:
quelle
JavaScript bitweise Operatoren
Wie es missbraucht werden kann:
quelle
x = (x<<10) + (x<<8) + (x<<5) + (x<<4) + (x<<3) + (x)
es in jeder Hinsicht schlechter ist (möglicherweise sogar schneller)x *= 1337
, und dass es noch schlimmer ist, die Division durch eine Zweierpotenz durch Summen von Bitverschiebungen zu ersetzen.JavaScript (ECMAScript)
Der Trick
quelle