tstDiff: Kategorie und Gewichtung

Der Ablauf

Für jede Differenz mit einem DiffNamewird ein Eintrag in der DCAW gesucht. Wenn ein Eintrag gefunden wird, bekommt die Differenz die angegebene Kategorie und Gewichtung. Dieser Schritt kann eingeschränkt durchgeführt werden, indem die DiffNamen und Kategorien, die verarbeitet werden sollen, angegeben werden.

Einflussmöglichkeiten

Die Zuordnung der Kategorien und Gewichtungen kann vorher beeinflusst werden indem:

Anschließend kann Einfluss genommen werden indem:

Diese Anpassungen können entweder durch ein Programm oder manuell durchgeführt werden, wobei der programmatische Ansatz zu bevorzugen ist.

Protokoll vorher

<Type DiffName="BsarType">
    <Left>ASTR</Left> 
    <Right>ASTR</Right> 
</Type>

Protokoll nachher

<Type DiffName="BsarType" IsDifferent="no" Category="Definition" Weight="Info">
    <Left>ASTR</Left> 
    <Right>ASTR</Right> 
</Type>

Die Tabelle "DCAW"

Die Felder und deren Bedeutung

DiffNameHier kann ein „*“ für alle DiffNamen oder ein bestimmter DiffName eingetragen werden.
DiffKindHier kann ein „*“ für alle Arten von Differenzen eingetragen werden, oder auch eine bestimmte Art, s. unten.
StufeHier kann ein „*“ für all Stufen eingetragen werden, oder auch eine einzelne Stufe wie z.B. ALRFRG
BeschreibungEine Beschreibung was der Eintrag ausdrückt
KategorieDie Kategorie die die Differenz bekommt wenn der Eintrag zutrifft.
GewichtungDie Gewichtung die die Differenz bekommt wenn der Eintrag zutrifft.

Die momentanen DiffKinds sind:
Equal - die Werte sind nicht unterschiedlich.
NotEqual - die Werte sind unterschiedlich.
Missing - Einer der beiden Werte ist nicht vorhanden.
Empty - Einer der beiden Werte ist leer.
Occurs - Es ist kein Left und Right vorhanden (z.B. FindReport) 1)
NB: Wenn z.B. beide Werte „empty=yes“ haben, dann ist der DiffKind „Equal“.

Die SQL-Statements um diese Tabelle einzurichten finden Sie hier.

Suchreihenfolge nach einem passenden Eintrag

Gesucht wird immer nach einem passenden DiffName, DiffKind und Umgebung.

  1. DiffName, DiffKind und Umgebung
  2. DiffName und DiffKind
  3. DiffName und Umgebung
  4. DiffName
  5. DiffKind und Umgebung
  6. DiffKind
  7. Umgebung
  8. Der erste Eintrag der passt

Bei jeder Suche werden die genannten Felder exakt gesucht und die anderen Werte mittels Patternmatching verglichen. Bei jedem Eintrag ist der Wildcharacter „*“ erlaubt.

Vorschlag für den Inhalt dieser Tabelle

In untenstehender Tabelle sind die Regeln wie sie im Konzept formuliert wurden eingetragen.

DiffNameDiffKindStufeBeschreibungKategorieGewichtung
BsarTypeEqual*Der Modultyp hat sich nicht verändertDefinitionInfo
BsarTypeNotEqual*Der Modultyp hat sich verändertDefinitionSevere
BsarStatEqual*Der Zustand des Moduls hat sich nicht verändertControlFlowInfo
BsarStatNotEqual*Der Zustand des Moduls hat sich verändertControlFlowWarning
BsarStatEmpty*Das Modul hat keinen Zustand gesetztControlFlowSevere
Time*Equal*Die (gesamt) Verweildauer ist gleich gebliebenPerformanceInfo
Time*NotEqual*Die (gesamt) Verweildauer ist nicht gleich gebliebenPerformanceWarning
CalleeCountEqual*Die Anzahl gerufene Bausteine ist gleich geblieben.ControlFlowInfo
CallNameEqual*Der Name des gerufenen Bausteins ist gleich gebliebenControlFlowInfo
CallEvntEqual*Das ausgelöste Ereignis ist gleich gebliebenControlFlowInfo
Call*NotEqual*Bei den gerufenen Bausteinen hat sich etwas verändertControlFlowWarning
CndOpCountEqual*Die Anzahl Conditionoperationen ist gleich gebliebenConditionInfo
CndSevEqual*Die Severity der Condition ist gleich gebliebenConditionInfo
CndTitleEqual*Der Titel der Condition ist gleich gebliebenConditionInfo
CndArgEqual*Das Argument bei der Condition hat den gleichen WertConditionInfo
CndAssocEqual*Die Association der Condition ist gleich gebliebenConditionInfo
Cnd*NotEqual*Bei den Conditionoperationen hat sich etwas verändertConditionWarning
OopsCountEqual*Die Anzahl Oopse sind gleich gebliebenQualityInfo
OopsMsgEqual*Der Text des Oops ist gleich gebliebenQualityInfo
Oops*NotEqual*Bei den Oopsen hat sich etwas verändertQualityWarning
ParmObjtEqual*Der Objekttyp hat den gleichen NamenDefinitionInfo
ParmObjtNotEqual*Der Objekttyp hat nicht den gleichen NamenDefinitionSevere
ParmClassEqual*Die Klasse ist gleich gebliebenDefinitionInfo
ParmClassNotEqual*Die Klasse ist nicht gleich gebliebenDefinitionSevere
ParmDstrEqual*Die Datenstruktur hat den gleichen NamenDefinitionInfo
ParmDstrNotEqual*Die Datenstruktur hat nicht den gleichen NamenDefinitionSevere
ParmRoleEqual*Die Rolle ist gleich gebliebenDefinitionInfo
ParmRoleNotEqual*Die Rolle ist nicht gleich gebliebenDefinitionWarning
ParmItemCountEqual*Die Anzahl Sätze ist gleich gebliebenContentInfo
ParmItemCountNotEqual*Die Anzahl Sätze ist nicht gleich gebliebenContentWarning
ParmFieldZEqual*Ein Timestamp hat den gleichen WertTimestampWarning
ParmFieldZNotEqual*Ein Timestamp hat einen anderen WertTimestampInfo
ParmFieldZEmpty*Ein Timestamp ist leerTimestampSevere
ParmFieldDEmpty*Ein Datumsfeld ist leerContentSevere
ParmField*Equal*Ein Feldinhalt ist gleich gebliebenContentInfo
ParmField*NotEqual*Ein Feldinhalt ist nicht gleich gebliebenContentWarning
ParmField*Empty*Ein Feldinhalt ist leerContentWarning
ParmField*Missing*Ein Feld fehltDefinitionWarning
GlobObjtEqual*Der Objekttyp hat den gleichen NamenDefinitionInfo
GlobObjtNotEqual*Der Objekttyp hat nicht den gleichen NamenDefinitionWarning
GlobClassEqual*Die Klasse ist gleich gebliebenDefinitionInfo
GlobClassNotEqual*Die Klasse ist nicht gleich gebliebenDefinitionWarning
GlobDstrEqual*Die Datenstruktur hat den gleichen NamenDefinitionInfo
GlobDstrNotEqual*Die Datenstruktur hat nicht den gleichen NamenDefinitionWarning
GlobRoleEqual*Die Rolle ist gleich gebliebenDefinitionInfo
GlobRoleNotEqual*Die Rolle ist nicht gleich gebliebenDefinitionWarning
GlobItemCountEqual*Die Anzahl Sätze ist gleich gebliebenContentInfo
GlobItemCountNotEqual*Die Anzahl Sätze ist nicht gleich gebliebenContentWarning
GlobFieldZEqual*Ein Timestamp hat den gleichen WertTimestampWarning
GlobFieldZNotEqual*Ein Timestamp hat einen anderen WertTimestampInfo
GlobFieldZEmpty*Ein Timestamp ist leerTimestampSevere
GlobFieldDEmpty*Ein Datumsfeld ist leerContentSevere
GlobField*Equal*Ein Feldinhalt ist gleich gebliebenContentInfo
GlobField*NotEqual*Ein Feldinhalt ist nicht gleich gebliebenContentWarning
GlobField*Empty*Ein Feldinhalt ist leerContentWarning
GlobField*Missing*Ein Feld fehltDefinitionWarning

Die umgesetzten Regeln in der Tabelle sprechen für sich. An dieser Stelle sei nur darauf hingewiesen, dass:

  • In der Tabelle alle Differenzen die mit einem Timestamp zu tun haben die Kategorie Timestamp bekommen haben. Das ermöglicht speziell für Timestamps, Regeln festzulegen, wie der Differenzstatus und der Protokollstatus davon beeinflusst werden.
  • Ein leeres Datumsfeld als wichtige Differenz angesehen wird und deshalb die Gewichtung „Severe“ hat.
  • Ein nicht vorhandenes Feld die Kategorie „Definition“ bekommen hat, weil es auf eine Änderung der Datenstruktur hinweist.
  • Bei einer Differenz die keinen passenden Eintrag in der Tabelle hat, die Kategorie und Gewichtung nicht gesetzt werden und diese Differenzen somit auch keinen Einfluss auf den Protokollstatus haben.

Beispiel für eine Erweiterung

Da in dem Vorschlag alle Differenzen berücksichtigt sind, gibt es keine sinnvolle Erweiterung, sondern eher sinnvolle Änderungen oder Streichungen. Wie zuvor schon erwähnt, müssen in dieser Tabelle nicht alle Differenzen berücksichtigt werden. Differenzen die keinen passenden Eintrag in der Tabelle haben, werden bei der weiteren Bewertung nicht berücksichtigt. Eine andere Möglichkeit dafür zu sorgen, das Differenzen keinen Einfluss auf das Ergebnis haben, ist das Einrichten folgender Zeile:

DiffNameDiffKindStufeBeschreibungKategorieGewichtung
***Differenz ist nicht RelevantNotRelevantInfo

Hierdurch bewirkt man, dass die Differenzen eine Kategorie und eine Gewichtung bekommen. Bei einem entsprechenden Eintrag in der DDST der dafür sorgt, dass diese Differenzen mit der Kategorie „NotRelevant“ den Status „Accept“ bekommen, bewirkt man, dass diese Differenzen nicht dazu führen, dass der Protokollstatus „NotOK“ ist.

Beim Füllen der Tabelle soll immer die Suchreihenfolge im Auge behalten werden. Wenn man Erweiterungen vornehmen möchte ist zu empfehlen, immer mindestens einen Wert exakt zu spezifizieren. Beim Patternmatching wird nicht versucht den passendsten Eintrag zu finden, sondern einen passenden Eintrag. Haben zwei Regeln bei DiffName einen Wildcard eingetragen, dann bestimmt implizit die Reihenfolge welche Regel genommen wird. Beispiel: Der DiffName „*“ und „Oops*“ sind beide nicht exakt und werden beim Patternmatching beide als passend gefunden für eine Differenz „OopsCount“.

1)
7.01
faq:syntax:tstdiff:ratingcw · Zuletzt geändert: 09.08.2024 13:25

Copyright © 1992-2025 TeamWiSE Gesellschaft für Softwaretechnik mbH         Adressen |  Kontakt |  AGB |  Datenschutzerklärung |  Impressum