95 lines
5.2 KiB
Markdown
95 lines
5.2 KiB
Markdown
# sprachinventar Specification
|
|
|
|
## Purpose
|
|
Das Sprachinventar ist das Messinstrument für die Leitplanke
|
|
„Vollständigkeit ist das Soll": eine gepflegte Liste aller in der
|
|
Original-Hilfe des Vorbilds dokumentierten Anweisungen, Funktionen und
|
|
Metabefehle mit Abdeckungsstatus, gegen die sich der Implementierungsstand
|
|
jederzeit prüfen lässt.
|
|
|
|
## Requirements
|
|
|
|
### Requirement: Vollständiges Inventar der Original-Hilfe
|
|
`docs/inventar.md` SHALL jede in der Original-Hilfe des Vorbilds
|
|
dokumentierte Anweisung, Funktion, Metabefehl, Operator-Schlüsselwort und
|
|
Klausel als eigenen Eintrag führen. Darüber hinaus SHALL es das
|
|
**Forms-Objektmodell** führen: je Klasse ihre Eigenschaften, Methoden und
|
|
Ereignisse als eigene Einträge. Ein dokumentiertes Element MUST NOT
|
|
fehlen; Vollständigkeit gegenüber der Quelle geht der Kürze vor. Jeder
|
|
Eintrag SHALL Name, Art (Anweisung/Funktion/Metabefehl/Eigenschaft/
|
|
Methode/Ereignis), Themengruppe, Status, Fundstelle und Quelle tragen.
|
|
Für Einträge des Objektmodells SHALL die Quelle die Forms-Referenz sein,
|
|
weil die Themenliste der Original-Hilfe sie nicht führt.
|
|
|
|
#### Scenario: Dokumentiertes Element ist erfasst
|
|
- **WHEN** die Original-Hilfe die Anweisung `VIEW PRINT` dokumentiert
|
|
- **THEN** enthält das Inventar einen Eintrag `VIEW PRINT` mit Art, Gruppe, Status und Fundstelle
|
|
|
|
#### Scenario: Non-Feature ist erfasst, nicht weggelassen
|
|
- **WHEN** `PEEK` als Non-Feature deklariert ist
|
|
- **THEN** steht `PEEK` mit Status `Non-Feature` im Inventar und die Fundstelle verweist auf den Abschnitt „Abweichungen" der Sprachreferenz
|
|
|
|
#### Scenario: Eigenschaft einer Steuerelementklasse ist erfasst
|
|
- **WHEN** die Forms-Referenz für `TextBox` die Eigenschaft `SelStart` führt
|
|
- **THEN** enthält das Inventar einen Eintrag für `TextBox.SelStart` mit Art `Eigenschaft`, Status und Quelle Forms-Referenz
|
|
|
|
#### Scenario: Ereignis einer Klasse ist erfasst
|
|
- **WHEN** die Forms-Referenz für `Form` das Ereignis `Resize` führt
|
|
- **THEN** enthält das Inventar einen Eintrag für `Form_Resize` mit Art `Ereignis`
|
|
|
|
### Requirement: Festes Statusvokabular
|
|
Der Status eines Eintrags SHALL genau einen von drei Werten tragen:
|
|
`implementiert` (Frontend senkt ab und die Laufzeit führt aus),
|
|
`offen` (dokumentiert, noch nicht verfügbar) oder `Non-Feature`
|
|
(vom Projektinhaber abgelehnt und in der Sprachreferenz unter
|
|
„Abweichungen" gelistet). Ein Eintrag mit Status `Non-Feature` MUST eine
|
|
Fundstelle in der Sprachreferenz nennen.
|
|
|
|
#### Scenario: Unzulässiger Status
|
|
- **WHEN** ein Eintrag den Status `teilweise` trägt
|
|
- **THEN** schlägt die Inventarprüfung mit Nennung des Eintrags fehl
|
|
|
|
#### Scenario: Non-Feature ohne Fundstelle
|
|
- **WHEN** ein Eintrag den Status `Non-Feature` trägt, aber keine Fundstelle nennt
|
|
- **THEN** schlägt die Inventarprüfung mit Nennung des Eintrags fehl
|
|
|
|
### Requirement: Automatischer Abgleich Inventar gegen Implementierung
|
|
Ein automatischer Test SHALL das Inventar gegen den tatsächlichen
|
|
Implementierungsstand prüfen und bei jeder Divergenz fehlschlagen. Als
|
|
`implementiert` markierte Elemente MUST im Frontend eine Signatur besitzen
|
|
und MUST NOT auf einen „nicht verfügbar"-Marker absenken; als `offen`
|
|
markierte Elemente MUST auf einen solchen Marker absenken oder ohne
|
|
Signatur sein; als `Non-Feature` markierte Elemente MUST zur Compile-Zeit
|
|
mit „Feature unavailable" abgewiesen werden. Der Test MUST das
|
|
divergierende Element, seinen Inventarstatus und den vorgefundenen
|
|
Zustand benennen.
|
|
|
|
Klassentabellen oder deklarierte Signaturnamen allein MUST NOT als Laufzeitnachweis gelten. Für implementierte Elemente SHALL ein erreichbarer Frontend-/Absenkungspfad und ein ausführbares Laufzeitziel geprüft werden. Für deklarierte Ereignisse SHALL ein Test den Auslöser bis zum BASIC-Handler führen.
|
|
|
|
#### Scenario: Inventar hinkt der Implementierung hinterher
|
|
- **WHEN** `LOCATE` implementiert wurde, im Inventar aber noch `offen` steht
|
|
- **THEN** schlägt der Abgleich fehl und nennt `LOCATE`, Status `offen` und den Befund „implementiert"
|
|
|
|
#### Scenario: Inventar behauptet zu viel
|
|
- **WHEN** ein Eintrag `implementiert` trägt, das Element aber weiterhin auf den „nicht verfügbar"-Marker absenkt
|
|
- **THEN** schlägt der Abgleich fehl und nennt das Element
|
|
|
|
#### Scenario: Abdeckungsstand ist abrufbar
|
|
- **WHEN** der Abgleich läuft
|
|
- **THEN** nennt er die Zahl der Einträge je Status als Abdeckungsstand
|
|
|
|
#### Scenario: Deklariertes Ereignis ohne Auslöser
|
|
- **WHEN** ein als implementiert geführtes Formularereignis bei seiner dokumentierten Hosteingabe keinen Handler ausführt
|
|
- **THEN** schlägt der Abgleich mit Name, Status und fehlendem Auslösepfad fehl
|
|
|
|
### Requirement: Keine stillen Lücken bei dokumentierten Elementen
|
|
Ein Element mit Status `offen` MUST bei Verwendung eine benannte
|
|
Ablehnung erzeugen — entweder eine Compile-Diagnose oder den Laufzeitfehler
|
|
für nicht verfügbare Funktionen —, die das Element namentlich nennt. Ein
|
|
generischer Syntaxfehler oder „unbekannter Bezeichner" für ein
|
|
dokumentiertes Element MUST NOT auftreten (Guiding Principle).
|
|
|
|
#### Scenario: Offenes Element wird namentlich abgewiesen
|
|
- **WHEN** ein Programm eine im Inventar als `offen` geführte Anweisung verwendet
|
|
- **THEN** nennt die Ablehnung den Namen der Anweisung, nicht nur „Syntaxfehler"
|