Systems Engineering Trends

Jede Woche Neuigkeiten aus der Welt des Systems Engineering

ForschungWerkzeuge

Anforderungen mit Vale „linten“

Programmierer wissen was „linten“ ist: Salopp gesagt ist es das Aufräumen und Pflegen von Softwarecode. Genauer gesagt handelt es sich um statische Codeanalyse: Ein Linter empfiehlt zum Beispiel, unbenutzte Variablen zu löschen. Vale ist ein Linter, der Autoren von Texten hilft, diese zu pflegen. Und Vale kann auch für das linten von Anforderungen benutzt werden.

Mein Interesse an Vale kommt nicht von Ungefähr: Mein Ziel ist es, bis Ende Juni 2022 Vale in Semiant, den von mir entwickelten Qualitätsassistenten, integriert zu haben und in der kostenlosen Version zu veröffentlichen. Wer mehr wissen möchte, kann sich zum Semiant-Webinar am 29. (Englisch) oder 30. Juni (Deutsch) anmelden >>

Linten für Softwarecode

Linten geht auf ein Werkzeug mit dem Namen „Lint“ zurück, welches Bell Labs bereits 1979 für die Programmiersprache C entwickelte. Es ist inzwischen so verbreitet, dass es als Standardfeature in fast allen Softwareentwicklungswerkzeugen für fast alle Programmiersprachen verfügbar ist.

Ein Linter führt eine statische Codeanalyse durch. Der Linter findet dabei bestimmte Fehler, die der Compiler durchwinken würde: Dazu gehören nicht initialisierte oder unbenutzte Variablen, nicht wieder freigegebenen Ressourcen, usw. Oft kümmern sich Linter auch um nichtfunktionale Themen wie die Einhaltung von Formatierungsrichtlinien.

Linten für natürliche Sprache

Ein Linter für natürliche Sprache macht im Prinzip dasselbe: Er findet bestimmte Fehler im Stil. Ein Linter kann zum Beispiel Grammatikfehler finden. Doch wie beim Linten von Softwarecode geht es bei der natürlichen Sprache in der Regel eher um den Schreibstil und nicht Korrektheit. Ein Linter könnte zum Beispiel Passiv-Konstrukte als Fehler markieren.

Linten für natürliche Sprache ist übrigens inzwischen weit verbreitet. Viele Schreibwerkzeuge lassen sich mit einem Linter versehen, zum Beispiel über Plug-Ins. Diesen Artikel schreibe ich gerade in WordPress mit installiertem Linter (Yoast), wie im folgenden Screenshot zu sehen:

Der Linter Yoast SEO (WordPress Plugin) bei der Arbeit

Linten für Anforderungen

Das Schreiben von Anforderungen bietet sich insbesondere aus den folgenden zwei Gründen an: Erstens lassen sich Muster für Anforderungen leicht in Regeln festhalten. Ein gutes Beispiel dafür ist das Folgen von Textschablonen. Wenn im Idealfall der Linter direkt beim Schreiben arbeitet und in Echtzeit Verbesserungen vorschlägt steigt die Chance drastisch, dass sich Mitarbeiter an die Schablonen halten. Auch andere „Best Practices“ für das Schreiben von natürlichsprachigen Anforderungen können recht leicht eingefordert werden. Zum Beispiel können „Weak-Words“ erkannt werden, wie: „einige“, „langsam“, „manchmal“, etc.

Zweitens kann ein Linter für einen einheitlichen Stil sorgen: Anforderungen werden oft von vielen Autoren geschrieben. Ein einheitlicher Stil sorgt dafür, dass sich die Spezifikation „wie aus einem Guss“ anfühlt. Dadurch wird daraus zwar keine spannende Lektüre, aber es hilft den Lesern beim Verständnis und beim Erkennen von Problemen.

Warum Vale?

Die Homepage von Vale zeigt unter anderem, wie populär das Projekt ist. Zu den Nutzern zählen Firmen wie Microsoft, Spotify und viele mehr. Es ist als quelloffenes Projekt bei github zu finden. Weiterhin ist Vale auch sehr performant. Auf der Entwicklerseite hat Vale auch mehrere „Konkurrenten“ aufgeführt und Benchmarks aufgeführt. Das sind alles wichtige Kriterien für die Verwertung in Semiant.

Vale selber nutzen

Schauen wir uns als nächstes mal an, was Vale so kann. Die Installation ist auf allen üblichen Betriebssystemen einfach. Als nächstes muss Vale konfiguriert werden. Ein guter Startpunkt ist das Boilerplate-Repository. Eine Vale-Konfiguration setzt sich aus vielen Regeln zusammen. Hier ist eine einfache Regel aus dem Repository:

OxfordComma.yml
extends: existence
message: "Use the Oxford comma in '%s'."
link: https://docs.microsoft.com/en-us/style-guide/punctuation/commas
scope: sentence
level: warning
tokens:
  - '(?:[^,]+,){1,}\s\w+\sand'

Beim Oxford-Komma wird bei einer Aufzählung das Komma vor dem letzten „and“ gesetzt, also anders als im Deutschen. Ein Beispiel:

Remember to check your grammar, spelling, and punctuation.
Oxford-Komma ---------------------------^

Wenn ich nun den obigen Satz — ohne Komma — als Eingabe benutze, bekomme ich von Vale folgende Ausgabe:

$ vale oxford.md 
 oxford.md
 1:1  warning  Use the Oxford comma in         OxfordComma 
               'Remember to check your                               
               grammar, spelling and'.                               
✖ 0 errors, 1 warning and 0 suggestions in 1 file.

Was ist nun mit KI und NLP?

Wer mir bis hierher gefolgt ist wird sich fragen, ob hier über Natural Language Processing (NLP) zum Einsatz gekommen ist. Schließlich erinnert die Regel weiter oben eher an Regular Expressions (was auch stimmt). Der NLP-Aspekt kommt durch die Vorarbeit, erkennbar an „scope: sentence“ oder „tokens:“. Die NLP-Engine hat den Text bereits in diese zu verarbeitenden Elemente zerlegt.

Die traurige Wahrheit: Trotz allem Hype wird beim Verarbeiten von natürlicher Sprache sehr viel auf Regeln statt KI gesetzt.

Dennoch kann Vale auch auf Metadaten der Token zugreifen, insbesondere auf die POS-Tags. Hierzu ein Beispiel von der Vale-Webseite:

extends: sequence
message: Did you mean "%[1]ss" instead of "%[1]s's"?
tokens:
  - tag: NN
  - pattern: "'s"
  - pattern: are

Dabei steht „NN“ für „noun, singular or mass“, also ein Substantiv das entweder singular oder unzählbar ist. Die Tags stammen von der Bibliothek prose und funktionieren im Moment nur für Englisch. Dieses Muster erkennt den Fehler, beim Plural eines Wortes ein Apostroph vor dem „s“ zu benutzen.

Vale für Linten von Anforderungen

Mein Ziel ist es, bei dem Webinar am 29./30.Juni 2022 zumindest einen Proof of Concept fertiggestellt zu haben. Gerade Stilregeln lassen sich sehr einfach umsetzen, zum Beispiel das Erkennen von Weak-Words:

tokens:
  - viel(?:|e|es)

Die gezeigte Regel findet die deutschen Weak Words „viel“, „viele“ und „vieles“.

Spannend wird es, ob Vale leistungsfähig genug ist, um komplexere Regeln zu prüfen. Was da möglich ist, werde ich im Webinar vorstellen.

Was brauchen Sie…?

Zuletzt: Mich interessiert natürlich sehr, welche Lint-Aktivitäten Sie, meine Leser, gerne automatisiert haben würden. Ich kann zwar nicht garantieren, dass ich Vorschläge auch umsetzen werde. Es ist aber niemanden mit einem Linter geholfen, der Regeln anwendet, die niemanden interessieren. Also: Ich freue mich auf Feedback. Gern anonym unten in den Kommentaren, oder auch im persönlichen Gespräch.

Michael Jastram

Creator and Author of SE-Trends