Toter-Code



Toter – Code ( englisch toter Code ) ist in der Programmierung eines Begriffs für Teile Eines Computerprogramm , „die einen Stelle keinen im Programm used werden“. [1] In Erweiterter Sinn kann der totere Code als Sonderform redundante Codes (= „überflüssig“) verwendet werden. Toter – Code Kann Anweisungen / befehle Enthalten oder sich auf nicht Verwendete Datendeklarationen Beziehen.

Unerreichbarer – Code ist ein Programmteil wo Durch Keine Möglich Kontrollfluss erreicht und deshalb erst gar nicht ausgeführt Werden Kann; auch hier wird mitunter von totem Code gesprochen.

Bedeutung

Alle Formen Codes Lied, Hintergründe Anzeigen als Unerwünscht Mangel an der Softwarequalität .

Sie können diese Situation finden Code: Ace: Wir freuen uns auf die Zukunft. Häufig liegt auch ein Programmfehler vor, der ein Ziel beim Softwaretest ist.

Obwohl de Ergebnisse von Totem-Code nicht verdorben wurden, können Ausnahmebehandlungen ausstehen oder globalen Status beeinfussen. Zum Beispiel kann das Programm programmiert und programmierbar geändert werden . Ob es in diesen fällen oder bye Code handelt, ist umstritten.

Beispiel

1 int foo ( int x ) {
2 int y = 100 / x ; // toter code, weil du nicht verdorben bist wird
3 int z = x * x ; // reductions Code zu 2 Sails weiter unten
4 if ( z > = 0 ) {
5 return x * x ; // reductions Code zu 2 Sails weiter oben
6 }
7 return - 1 ; // uneroberbarer Code, dann z immer> = 0 ist
8 }
  • Toter Code – Im Beispiel wird in Zeile 2 von 100 durch xdividiert, wird aber nicht verdorben. Leicht, es geht um den Code. Ist allerdings x Null , wird eine Ausnahme ausgeschlossen. Eine Entfernung dieses Codes führt zu einer Änderung der Funktionalität. Da die Ausnahmen so auszulegen sind, wie sie sind, handelt es sich um ihre fehlerhaften Funktionalitäten, die minderwertig sind.
  • Redundanter Code – Im Beispiel wird xin Zeile 3 und 5 quarriert, ohne dass xdies geändert wird. Das Ergebnis ist so, dass der Code redundant ist. return zwäre so in der Zeile 5.
  • Unerreichbarer Code – Im Beispiel wird die Zeile 7 nicht so schlecht, da die Anfrage z >= 0in Zeil 4 wahr ist und Zeil 5 das Verfahren wißt. Somit handelt es sich um eine Belagerung von 7 um unerreichbarem Code.
  • Unbefriedigter Code – nach dem die Abfrage z >= 0in Zeile 4 ist, ist sie auch sinlos und kann ebenfalls entfernt werden. Unzufriedener Code Failed Swar in Keine der drei genannnten Kategorien, wird aber landläufig auch oft als toter Code bezeichnet.

Gründe

Toter-Code ist möglicherweise auch möglich

  • Programmierfehler; bei (oder) unvollmäßigem Testen ändern oder ändern Sie keine Programme;
  • Einer der Zeugen Jehovas, der Beweis des Einen, Programmierbare Unbeabsichtigte Hingegeben und Unerreichbaren Code In Bezug auf die Tests Unentdecktes Blieb;
  • Überflüssiger Code, der einen Programmierer nicht entfernt, der mit funktionalem Code versehen ist;
  • Überflüssiger Code, der einen Programmierer vergünstigt zu löschen;
  • früher sinnvollen Code, der nicht schlechter geworden ist, darf von Eingabed geändert werden, damit dieser Code nicht wieder auflaufen wird;
  • Komplexe, überflüssig, aber unberechtigt, kann man bei Bedarf „wiederbeleben“ können;
  • defektlokalisierende Konstrukte ( Eng. Debugging – Konstrukte ) und Reste vom Entwicklungscode wo noch vom Applications Werden Muss Entfernt.

Im Licht des Brunnens gibt es einen unwiederbringlichen Ethikkodex Altlast, d.H. Code, der zum ersten Mal Krieg, aber nicht mehr benötigt wird.

beispiel

Wird wahrscheinlich überflüssig Code erstellt, um zu antworten

int main ()
{
#define DEBUG 0
 int a = 3 ;
 // ...
 if ( DEBUG )
 printf ( "% d \ n " , a );
 // ...
 gebe ein zurück ;
}

Während der Entwicklungsphase Kann hier der Wert in der die Variablen a ausgegeben Werden, fällt das Macro DEBUG Auf einen Wert Ungleiche Null (wahr) Gesetzt Wird. When this Kontrollausgabe nicht mehr wird, setzt man die Wert auf 0 und der Präprozessor berechnet und das nur noch Stück Code.

Analyse

Toten – Code zu entdecken sind a Formular von statischer Codeanalyse und benötigen Eine Analyse genau , wo Ablaufsteuerung , um den Kodex unabhängig von Den Variable und other Laufzeitbedingungen zu FINDEN der. Meine Hilfe erkennt Analysewerkzeuge kann einen großen Teil der gesuchten und unerreichbaren Codeteile finden. In einzelnen Sprachen (die B. Java sind ) sind bestimmte Formen von unerreichbarem Code ausgeschlossen und führen zu Compilierungsfehlern.

In Großhandels-Software-Projekten ist es schwierig, Software zu verwenden, daher ist es möglich, das Modul zu identifizieren und zu implementieren. Es Testgerüstbau Kann Sölch – Code als noch „lebendig“ zeigen, und es Kann Sogara sein that aus vertraglichen gründlich wo irrelevant – Code Geliefert Werden Muss. [2]

In Einigen Fällen gibt es nur einen Praktiker, nicht nur für einen Job, sondern auch für eine Kombination von vereinfachten Standards und Kriterien für die Komplexität von Profilen . Mit Profilieren kann man nicht sterben Unerreichbarkeit von Kodex beweisen . Es ist aber eine gute heuristische Methode, um potenziell unerreichbaren Code zu entdecken. Es kann auch ein anderes Beispiel sein, wie es z. B. Wirksamer Codeanalysen werden durch die Analyse von Hand verdorben. Daugen kann durch den Codeteil tatsächlich nicht erreichbar bzw. nicht gebildet werden.

Optimierung

Seit Mitte der 1990er Jahre ist es Stand der Technik, der Compiler und Linker unbenutzte Codeabschnitte erkennen und entfernen. Diese Optimierungstechnik bezeichnet man als tote Codeeliminierung . Seit Mitte der 2010er Jahre HABEN äquivalente Technik in IDEs (Anzeige von unbenutzten – Code schon beim Editieren) und in Debugger ( – Code, wo im current durchlauf nicht mehr erreicht Werden Kann, Wird beispielsweise abgedunkelt) iDEAL Bankeinzug Gehalten.

Die korrekte, redundanzfreie Umsetzung des obigen Beispiels sollte folgendermaßen aussehen:

1 int foo ( int x ) {
2 Rückkehr x * x ;
3 }

Diese Optimierer-Codierungscodes enthalten alle Codes Codes. Bei der Entfernung von Totem Code ist eine besondere Quelle von Bedeutung, da es möglich ist, den Code of Seek Effects zu verwenden, der ein Code of Goods ist.

Compileroptimierungen Sind typischerweise konservative Ansätze, um tote oder unerreichbare – Code zu entfernet. Ist eine Mehrdeutigkeit bezgl. Programmverhaltungen vorhanden, wird der Code nicht entfernt. Die Optimierung wird der Compilierung wird eine Dead Code Elimination genannt. Dies kann durch Code Code Variable Analysis, für unerreichbaren Code mit Datumsbereichskontrolle erfolgen .

Der Kodex Kann Auch Durch Transformation, sterben der Compiler durchführt, unerreichbar Werden, Wie z. B. die sogenannte gemeinsame Teilausdrückung („Entfernte gemeinsame Teilausdrücke“).

In der Praxis hat die Ausgereiftheit der Analyse eindeutige Codes für einzelne Entitäten. Z. B. kann ständig gefaltet und eine Flussanalyse durchgeführt werden, ist der Funktionsaufruf foo()im folgenden Beispiel unerreichbar :

int i = 2 + 1 ;
if ( i == 4 )
 foo ();

Eine Vollständigkeit Analyse Compilierungszeit sind theoretisch Grenzen, die nicht mit dem Problem der theoretischen Informatik verbunden sind.

Öffentliche Wahrnehmung

Im November 2010 Vero-Light Microsofts Neue Version von Internet Explorern , die Browsern in Puncto erlauben können JavaScript -Wispering Weit Hin Sich Sich. Sie sind willkommen, Microsoft und Microsoft eigene Implementierung der toten Code-Beseitigung , und die Spitze eines zu gestehen JavaScript- Benchmarks zu katapultieren. In anderen Benchmarks waren diese Ergebnisse eher im Mittelfeld. [3]

Literatur

  • SS Muchnick: Advanced Compiler Design und Implementierung . Morgan Kaufmann, 1997.

Weblinks

  • DCD Alternativen Vergleichbare Werkzeuge zur statistischen Code-Analyse mit Funktionen zum Auffinden der Codes

Werkzeuge und Zubehör / Unerreichbare Codes

  • Dead Code Detector (DCD)
  • FindBugs findbugs.sourceforge.net
  • Checkstyle checkstyle.sourceforge.net
  • PMD pmd.github.io

Einzelstunden

  1. Hochspringen↑ Fernuni Hagen: Ein Eclipse Plugin zum Aufspüren toter Codefragmente (…) , PDF.
  2. Hochsprünge↑ Douglas W. Jones: Dead-Code-Wartung . Risiko 8.19, 1. Februar 1989
  3. Hochspringen↑ Herbert Braun: Browser-Debatten: Hat Microsoft Scams? Heise Online, 18. November 2010.