3.6 % der getesteten Python-Repositories wiesen fehlende Kommafehler auf

Die Ergebnisse einer Studie zur Anfälligkeit von Python-Code für Fehler im Zusammenhang mit der falschen Verwendung von Kommas im Code wurden veröffentlicht. Die Probleme werden dadurch verursacht, dass Python beim Aufzählen die Zeichenfolgen in der Liste automatisch verkettet, wenn sie nicht durch ein Komma getrennt sind, und den Wert auch als Tupel behandelt, wenn dem Wert ein Komma folgt. Nach einer automatisierten Analyse von 666 GitHub-Repositories mit Python-Code identifizierten die Forscher mögliche Komma-Probleme in 5 % der untersuchten Projekte.

Eine weitere manuelle Überprüfung ergab, dass nur in 24 Repositories (3.6 %) echte Fehler auftraten und die restlichen 1.4 % falsch positive Ergebnisse waren (z. B. konnte absichtlich ein Komma zwischen Zeilen weggelassen werden, um mehrzeilige Dateipfade, lange Hashes oder HTML zu verketten Blöcke oder SQL-Ausdrücke). Bemerkenswert ist, dass unter den 24 Repositories mit echten Fehlern so große Projekte wie Tensorflow, Google V8, Sentry, Pydata xarray, rapidpro, django-colorfield und django-helpdesk waren. Probleme mit Kommas sind jedoch nicht spezifisch für Python und treten häufig in C/C++-Projekten auf (Beispiele für aktuelle Korrekturen sind LLVM, Mono, Tensorflow).

Die wichtigsten untersuchten Fehlerarten:

  • In Listen, Tupeln und Mengen fehlt versehentlich ein Komma, was dazu führt, dass Zeichenfolgen verkettet werden, anstatt als separate Werte interpretiert zu werden. In Sentry beispielsweise fehlte bei einem der Tests ein Komma zwischen den Zeichenfolgen „releases“ und „discover“ in der Liste, was dazu führte, dass ein nicht vorhandener „/releasesdiscover“-Handler überprüft wurde, anstatt „/releases“ und „ /discover" separat aufrufen.
    3.6 % der getesteten Python-Repositories wiesen fehlende Kommafehler auf

    Ein weiteres Beispiel ist, dass ein fehlendes Komma in RapidPro dazu führte, dass in Zeile 572 zwei verschiedene Regeln zusammengeführt wurden:

    3.6 % der getesteten Python-Repositories wiesen fehlende Kommafehler auf

  • Ein fehlendes Komma am Ende einer Tupeldefinition mit einem einzelnen Element führt dazu, dass die Zuweisung einen regulären Typ und nicht ein Tupel zuweist. Beispielsweise führt der Ausdruck „Werte = (1,)“ zu einer Zuweisung an eine Variable eines Tupels eines Elements, aber „Werte = (1)“ führt zu einer Zuweisung eines ganzzahligen Typs. Die Klammern in diesen Zuweisungen haben keinen Einfluss auf die Typdefinition und sind optional. Das Vorhandensein eines Tupels wird vom Parser nur anhand des Vorhandenseins von Kommas bestimmt. REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAuthenticated' # wird eine Zeichenfolge anstelle eines Tupels zugewiesen. ) }
  • Das Gegenteil sind zusätzliche Kommas während der Zuweisung. Wenn am Ende einer Zuweisung versehentlich ein Komma steht, wird ein Tupel als Wert anstelle des üblichen Typs zugewiesen (wenn beispielsweise „Wert = 1“ anstelle von „Wert = 1“ angegeben wird).

Source: opennet.ru

Kommentar hinzufügen