Dies bezieht sich auf eine Diskussion in einer Antwort und die Kommentare dieser Frage: Was ist mit der Abneigung gegen Dokumentation in der Branche? . In der Antwort wurde behauptet, dass "Code nicht lügen kann" und daher anstelle der Dokumentation der Anlaufpunkt sein sollte. In mehreren Kommentaren wurde darauf hingewiesen, dass "Code lügen kann". Es gibt auf beiden Seiten Wahrheit, zumindest teilweise, weil die Dokumentation schlecht und unangemessen gehandhabt wird.
Sollten wir nach Lügencode Ausschau halten und ihn mit einer vorhandenen Dokumentation vergleichen? Oder ist es normalerweise die beste Quelle für das, was es tun muss? Wenn es sich um agilen Code handelt, ist es weniger wahrscheinlich zu lügen, oder kann dieser Code überhaupt nicht lügen?
quelle
Antworten:
In Laienwörtern:
Ja , Sie sollten nach Lügencode suchen und ihn die Wahrheit sagen lassen. Aber nicht durch Vergleich mit der Dokumentation. Das wäre eine Methode, um Lügen zu erkennen.
Es gibt verschiedene Möglichkeiten, wie Code lügen kann, von denen ich nur einige erwähnen werde:
Je kürzer ist, desto weniger liegt es. Es ist selbstverständlich.
Je weniger kompliziert der Code ist, desto transparenter ist er. Es liegt also weniger.
Arkane Syntaxtricks lügen viel. Bevorzugen Sie klare, schrittweise Algorithmen. Sie lügen weniger.
Ein gutes statisches Code-Analyse-Tool kann Ihnen helfen, lügenden Code zu finden.
Auch eine gute automatisierte Testbatterie zwingt den Code dazu, die Wahrheit zu sagen.
quelle
The shorter and terser the code is, the less it lies. It's self evident.
Das würde ich kaum sagen. Nach meiner Erfahrung, je kürzer und knapper der Code ist, desto mehr Möglichkeiten hat er, unter dem Teppich zu kehren, indem er sie im Allgemeinen in irreführenden Funktionsaufrufen versteckt.p
für eine Variable haben, die ist kein Zeiger.Code kann nicht lügen.
Was im Code enthalten ist, ist das, was Ihr Programm gerade tut - unabhängig davon, welche Dokumentation, Qualitätssicherung oder der Kunde dies sagt. Insbesondere wenn Ihr Code veröffentlicht wurde und eine Weile im Feld war, sollte dieses erwartete Verhalten nicht ignoriert werden.
Der Code kann sicherlich falsch sein . Es kann sicherlich in seiner Benennung oder Organisation irreführend sein. Es kann sicherlich unlesbar sein.
Aber wenn Sie die Quelle der Wahrheit für das wollen, was Ihr Code tut , nicht für das , was er tun soll, nicht für das, wofür er entwickelt wurde, nicht für das, was Sie dachten, dass er tut ... wenn Sie wissen müssen, was er tatsächlich tut, Gehe zum Code.
quelle
Sie stellen mehrere Fragen.
Na sicher!
Das könnte niemals schaden, obwohl dies, wie in anderen Antworten erwähnt, häufig dazu führt, dass Sie Probleme in der Dokumentation finden , nicht im Code .
Es ist immer die beste Quelle für das, was es ist , zu tun. Die beste Quelle für das, was Code tun sollte , können jedoch (eine Kombination von) verschiedenen Dingen sein, wobei die wichtigsten folgende sind:
Welche "beste" Quelle (oder Kombination davon) ist, hängt von Ihrer Situation ab.
Ich bin mir nicht sicher, was Sie unter "agilem Code" verstehen. AFAIK "agil" bezieht sich normalerweise auf den Codierungsprozess. Angenommen, Sie meinen "Code, der in einem agilen Programmierprozess erstellt wurde", dann kann ich mit Sicherheit sagen, dass er immer noch lügen kann. Wie wahrscheinlich es ist, zu lügen, im Vergleich zu Code, der beispielsweise in Projekten im Wasserfallstil erstellt wurde, ist eine subjektive Angelegenheit (ich persönlich glaube nicht, dass es einen großen Zusammenhang gibt).
Fußnote
Alle oben sind unter der Annahme , dass Code kann liegen, und dass dies ein Grund ist (wenn auch etwas gekünstelt) Beispiel:
Dies ist nur ein Beispiel, in dem ich "Codelügen" sagen würde, @ user61852 hat einige andere (nicht erreichbarer Code, Komplexität des Codes stimmt nicht mit der Komplexität des Problems überein, schlechte Benennung), und ich denke, es gibt noch viel mehr. Wikipedia hat eine etwas anständige Zusammenfassung von Lügen , viele von ihnen können Code gefunden werden.
Beachten Sie, dass, wenn Sie sich mit jemandem streiten, Sie sehr sicher sein müssen, dass die andere Person nicht mit "Code kann nicht lügen" meint, dass "Code tut, was er tut". Im Wesentlichen definiert die andere Person hier eine Definition für "Lüge", die so eng ist, dass sie die Aussage "Code kann nicht lügen" als Axiom / Grundwahrheit deklarieren kann. In diesem Fall ist es wahrscheinlich am besten, seinem Axiom zuzustimmen.
quelle
Sie können darüber streiten, ob das Wort "Lüge" technisch angemessen ist, aber dieser Code impliziert ganz klar, dass x manchmal größer als 5 ist und manchmal nicht. Wenn Sie sich das vollständige Programm ansehen und feststellen, dass diese Funktion immer nur an einer Stelle aufgerufen wird und x immer auf eine Konstante 6 gesetzt ist, dann ist das eine Lüge.
Darüber hinaus hat der Compiler dies möglicherweise bemerkt und diesen Codeblock durch einfach ersetzt
Wenn doADifferentThing an keiner anderen Stelle in Ihrem Programm aufgerufen wird, wird es möglicherweise vollständig aus dem Programm entfernt.
Wenn Ihre Sprache eine
assert
Art unterstützt, die in Produktions-Builds deaktiviert ist, ist jedeassert
Aussage möglicherweise eine Lüge. Eine Typografie ist eine weitere Behauptung, die eine Lüge sein könnte.quelle