<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Effiziente Absch¨atzung von Datenflussfehlern in strukturierten Gesch¨aftsprozessen</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Thomas S. Heinze</string-name>
          <email>T.Heinze@uni-jena.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Wolfram Amme</string-name>
          <email>Wolfram.Amme@uni-jena.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Simon Moser</string-name>
          <email>smoser@de.ibm.com</email>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Friedrich-Schiller-Universita ̈t Jena</institution>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>IBM Entwicklungslabor Bo ̈blingen</institution>
        </aff>
      </contrib-group>
      <abstract>
        <p>Zusammenfassung. Neben dem Kontrollfluss von Gescha¨ftsprozessen kann auch der Datenfluss Ursache einer fehlerhaften Prozessausfu¨hrung sein, daher ist die U¨berpru¨fung eines Prozessmodells auf Datenflussfehler ebenfalls wesentlich. Wir schlagen in diesem Beitrag eine Methode zur Abscha¨tzung von Datenflussfehlern fu¨r strukturierte Gescha¨ftsprozesse vor. Auf Grundlage der durch eine Datenflussanalyse abgeleiteten Datenflussinformation geben wir Fehlermengen fu¨r mo¨gliche und sichere Datenflussfehler eines Gescha¨ftsprozesses an. Der Vorteil dieses Ansatzes besteht zum einen in der Effizienz der Analyse, andererseits aber auch in der Identifikation und Lokalisation von Fehlern in einem Schritt. Als Nachteil ergibt sich hingegen der Verlust absoluter Pra¨zision.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        Neben der Verifikation von Gescha¨ftsprozessen hinsichtlich Kontrollflussfehlern,
wie Verklemmungen oder fehlender Synchronisation, ist die Analyse der
Verwendung von Prozessdaten zur Gewa¨hrleistung einer fehlerfreien Prozessausfu¨hrung
von Interesse [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ]. Typische Fehler in diesem Zusammenhang sind beispielsweise
der lesende Zugriff auf noch uninitialisierte oder bereits gelo¨schte Daten, das
parallele Schreiben und Lesen von Daten oder das U¨berschreiben ungelesener
Daten. Entha¨lt ein Prozessmodell auch Informationen zur Verwendung der
Prozessdaten, in Form der durch Prozessaktivita¨ten geschriebenen, gelesenen und
gelo¨schten Daten, kann eine U¨berpru¨fung auf derartige Datenflussfehler erfolgen.
      </p>
      <p>
        Ein insbesonders fu¨r die Analyse des Datenflusses geeignetes Verfahren ist die
statische Datenflussanalyse [
        <xref ref-type="bibr" rid="ref2 ref3">2, 3</xref>
        ]. Im Gegensatz zu Verifikationstechniken die auf
einer vollsta¨ndigen Modellpru¨fung beruhen erlaubt die Datenflussanalyse eine
effiziente Ableitung von konservativer Datenflussinformation, verzichtet aber im
Gegenzug auf exakte Ergebnisse. Auf diese Weise kann der exponentielle
Verifikationsaufwand vermieden werden, der sich sonst bei einer pra¨zisen Analyse ergibt.
Der hohe Aufwand ist dabei auf die zur U¨berpru¨fung des Datenflusses
notwendige Identifikation parallel ausfu¨hrbarer Prozessaktivita¨ten zuru¨ckzufu¨hren, die
schon fu¨r strukturierte Prozesse und unter Ausschluß von Schleifen exponentielle
Kosten verursachen kann [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. Zusa¨tzlich wird auch keine endliche Abstraktion
fu¨r die in einem Gescha¨ftsprozess auftretenden Daten beno¨tigt, da lediglich der
Datenfluss zwischen den Prozessaktivita¨ten beru¨cksichtigt werden muss.
      </p>
    </sec>
    <sec id="sec-2">
      <title>Fehlende Daten</title>
    </sec>
    <sec id="sec-3">
      <title>Redundante Daten</title>
      <sec id="sec-3-1">
        <title>U¨berschriebene Daten</title>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Inkonsistente Daten</title>
    </sec>
    <sec id="sec-5">
      <title>Nicht gelo¨schte Daten</title>
    </sec>
    <sec id="sec-6">
      <title>Doppelt gelo¨schte Daten</title>
    </sec>
    <sec id="sec-7">
      <title>Zu spa¨t gelo¨schte Daten</title>
    </sec>
    <sec id="sec-8">
      <title>Zugriff auf ein uninitialisiertes oder gelo¨schtes Datum</title>
    </sec>
    <sec id="sec-9">
      <title>Schreiben eines Datums durch eine Prozessaktivita¨t auf</title>
      <p>das im weiteren Verlauf nicht lesend zugegriffen wird</p>
      <sec id="sec-9-1">
        <title>U¨berschreiben eines Datums durch eine Prozessaktivita¨t</title>
        <p>auf das noch nicht lesend zugegriffen wurde</p>
      </sec>
    </sec>
    <sec id="sec-10">
      <title>Zugriff einer Prozessaktivita¨t auf ein Datum und dazu</title>
      <p>paralleles Schreiben oder Lo¨schen desselben Datums</p>
    </sec>
    <sec id="sec-11">
      <title>Fehlendes Lo¨schen fu¨r ein geschriebenes Datum</title>
    </sec>
    <sec id="sec-12">
      <title>Zweimaliges Lo¨schen ein und desselben Datums</title>
    </sec>
    <sec id="sec-13">
      <title>Letzter lesender Zugriff einer Prozessaktivita¨t auf ein</title>
    </sec>
    <sec id="sec-14">
      <title>Datum ohne sich unmittelbar anschließendes Lo¨schen</title>
    </sec>
    <sec id="sec-15">
      <title>Tabelle 1. Datenflussfehler (Anti-Muster) nach [5]</title>
      <p>Im vorliegenden Beitrag zeigen wir, wie das Verfahren der
Datenflussanalyse zur U¨berpru¨fung eines strukturierten Gescha¨ftsprozesses auf Datenflussfehler
genutzt werden kann. In Abschnitt 2 wird dazu zuna¨chst ein U¨ berblick zu
Datenflussfehlern und dem hier verwendeten Prozessmodell gegeben. Danach erfolgt in
Abschnitt 3 eine Beschreibung der Bestimmung von fehlenden, gelo¨schten sowie
definierenden Daten mit Hilfe einer statischen Datenflussanalyse. Auf
Grundlage der so fu¨r einen Prozess effizient ableitbaren Datenflussinformationen ko¨nnen
wir dann in Abschnitt 4 Fehlermengen einfu¨hren, die Abscha¨tzungen zu den im
Prozess enthaltenen Datenflussfehlern in Form sicherer und m¨oglicher Fehler
bilden. Schließlich wird der Beitrag in Abschnitt 5 kurz zusammengefasst.
2
2.1</p>
      <sec id="sec-15-1">
        <title>Grundbegriffe</title>
        <p>
          Datenflussfehler
In der Arbeit [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ] wird eine Sammlung der in Gescha¨ftsprozessen auftretenden
Datenflussfehler beschrieben. Dabei werden mehrere Anti-Muster vorgestellt, die
Schwachstellen hinsichtlich einer fehlerfreien Verwendung von Prozessdaten
darstellen. Wir beziehen uns im Folgenden auf diese, in Tabelle 1 angegebenen,
Anti-Muster, wenn wir von Datenflussfehlern sprechen. Im Gegensatz zu [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ] wird
hier fu¨r die Anti-Muster Redundante Daten und U¨berschriebene Daten keine
Unterscheidung zwischen Fehlern, die immer auftreten, und solchen, die nur in
bestimmten Ausfu¨hrungsszenarien auftreten, vorgenommen. Stattdessen werden
fu¨r alle Anti-Muster die Begriffe sicherer und m¨oglicher Fehler definiert:
Definition 1 (Sicherer/Mo¨glicher Datenflussfehler). Ein sicherer Fehler
tritt unabh¨angig vom zur Ausfu¨hrungszeit tats¨achlich gew¨ahlten Kontrollfluss
eines Prozesses immer auf. Ein m¨oglicher Fehler ist ein Kandidat fu¨r einen Fehler
der in mindestens einer Prozessausfu¨hrung auftreten kann.
2.2
        </p>
        <p>
          Prozessrepr¨asentation
Zur Durchfu¨hrung unserer Methode beno¨tigen wir ein Prozessmodell, dass die
Wiedergabe des Datenflusses innerhalb eines Prozesses gestattet. Zu diesem
Zweck werden erweiterte Workflow-Graphen genutzt, die gewo¨hnliche
WorkflowGraphen [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ] mit Datenflussannotationen versehen. Auf der rechten Seite von
read: /
write: A, D, H
destroy: /
read: A, H
write: U, V
destroy: D
read: A
write: C, E, F
destroy: /
read: E
write: G
destroy: B
read: F, H, U
write: /
destroy: E, F, G
read: /
write: B, G, V
destroy: /
        </p>
        <p>cond(V)
read: B, G, U
write: F, H
destroy: /
read: /
write: U
destroy: /</p>
        <p>Fork</p>
        <p>A1= write(A0)
D1= write(D0)
H4=π(H0, H2)
H1= write(H4)
read(A1)
H5=π(H1, H2)
read(H5)
U5=π(U0, U2)
U1 = write(U5)
V4 =π(V0, V2)
V1 = write(V4)
D2 = destroy(D 1)
Join</p>
        <p>Split
read(E1)
G2 = write(G1)
B2= destroy(B1)</p>
        <p>Merge
read(F 2)
read(H3)
read(U4)
E2= destroy(E1)
F3= destroy(F2)
G4 = destroy(G3 )</p>
        <p>B1= write(B0)
G1 = write(G0)
V5 =π(V0, V1)
V2 = write(V5)
cVo6n=dπ(V(V6)2, V1)</p>
        <p>U6=π(U0, U1)
U2 = write(U6)
G3=Φ(G2, G1)
B3= Φ(B2, B1)</p>
        <p>U3 =Φ(U0, U2)
read(B3)
read(G3)
U7=π(U3, U1)
read(U7)
F2= write(F1)
H6=π(H0, H1)
H2= write(H6)
H3=Φ(H1, H2)
V3 =Φ(V1, V2)
U4 =Φ(U1, U3)</p>
      </sec>
    </sec>
    <sec id="sec-16">
      <title>Abb. 1. Beispielprozess in BPMN-Notation (l.) und als Workflow-Graph (r.)</title>
      <p>
        Abbildung 1 ist der erweiterte Workflow-Graph fu¨r den aus [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] u¨bernommenen
Beispielprozess dargestellt. Zum Vergleich bildet die linke Seite den Prozess auch
in BPMN-Notation ab. In der BPMN-Darstellung sind die Prozessknoten mit
Annotationen versehen, die in den Knoten gelesene, geschriebene oder gelo¨schte
Daten in Form von Variablen (A,B,...) bezeichnen. Ferner wurde die bedingte
Aufspaltung des Kontrollflusses mit der Verzweigungsbedingung versehen.
      </p>
      <p>
        Im erweiterten Workflow-Graphen sind die Annotationen u¨bernommen, nur
dass diese nun im Format der Concurrent Static Single Assignment Form
(CSSAForm) [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ] vorliegen. Zu diesem Zweck wurden die auf Daten operierenden
Prozessaktivita¨ten auf vier Instruktionstypen abgebildet:
– read(Vi) liest das Datum in Variable Vi,
– cond(Vi) bestimmt den Wert einer Verzweigungsbedingung u¨ber Variable Vi,
– Vi = write(Vj ) u¨berschreibt die alte Definition des Datums in Variable Vj
mit einem neuen Datum und legt dieses in der Variablen Vi ab,
– Vi = destroy(Vj ) lo¨scht das Datum in Variable Vj und setzt dadurch den
      </p>
      <p>Wert der Variablen Vi auf undefiniert.</p>
      <p>Charakteristische Eigenschaft der CSSA-Form ist, dass jede Variable statisch
einmal definiert ist, so dass fu¨r jede Variablendefinition durch die
Instruktionen write oder destroy ein eigener Name eingefu¨hrt, und Variablenzugriffe
entsprechend angepasst wurden (beispielsweise G1, . . . , G4 fu¨r Variable G). Treffen
mehrere Definitionen einer Variablen auf verschiedenen Pfaden des
Kontrollflusses in einem Knoten zusammen, wurden spezielle Instruktionen mit wie folgt
definierten Φ-Funktionen eingefu¨gt, um die Definitionen zusammenzufassen:
Definition 2 (Φ-Funktion). Eine Φ-Funktion fu¨r Variable V hat die Form
Φ(V1, . . . , Vn), wobei die Operanden Vi den im Knoten der Funktion
zusammenfließenden Definitionen von V entsprechen. Der Wert der Funktion ist der
Operand Vi, der die zur Prozesslaufzeit tats¨achlich, beziehungsweise als letztes,
ausgefu¨hrte Instruktion mit einer Definition der Variablen V repr¨asentiert.</p>
      <p>Neben den Instruktionen mit Φ-Funktionen entha¨lt die CSSA-Form weitere
spezielle Instruktionen mit π-Funktionen, um Schreib-/Lese-Konflikte zwischen
parallelen Prozessaktivita¨ten modellieren zu ko¨nnen:
Definition 3 (π-Funktion). Eine π-Funktion fu¨r Variable V hat die Form
π(V1, . . . , Vn), wobei die Operanden Vi den im Knoten der Funktion
konkurrierenden Definitionen von V entsprechen. Der Wert der Funktion ist der Operand
Vi, der die zur Prozesslaufzeit letzte Definition von V repr¨asentiert.
3</p>
      <sec id="sec-16-1">
        <title>Datenflussinformation</title>
        <p>Auf Grundlage der Repra¨sentation eines strukturierten Gescha¨ftsprozesses durch
erweiterte Workflow-Graphen ko¨nnen dann Informationen zum Datenfluss
abgeleitet werden. Fu¨r die Bestimmung der sicheren und mo¨glichen Fehler zu den in
Tabelle 1 aufgefu¨hrten Fehlerarten werden Datenflussinformationen u¨ber die
fehlenden, gel¨oschten und definierenden Daten des untersuchten Prozesses beno¨tigt.</p>
        <p>Als fehlende Daten werden Variablen bezeichnet, die uninitialisiert sind oder
gelo¨scht wurden. Dabei kann unterschieden werden, ob eine Variable fu¨r
mindestens ein Ausfu¨hrungsszenario ein fehlendes Datum beschreibt, oder fu¨r alle
mo¨glichen Prozessausfu¨hrungen. In unserem Beispiel aus Abbildung 1 entspricht
die Variable A0 immer einem fehlenden Datum, die Variable B3 hingegen nur
dann, falls die Instruktion B2 = destroy(B1) ausgefu¨hrt wurde. Zur Darstellung
der Datenflussinformation werden Wahrheitswerte genutzt, die angeben ob
eine Variable ein fehlendes Datum beschreibt. Bedingt durch die Eigenschaft der
CSSA-Form dass jede Variable statisch nur einmal definiert ist, ko¨nnen diese
Werte den die Variablen definierenden Instruktionen zugewiesen werden:
Definition 4 (Fehlende Daten). Fu¨r Instruktion s enth¨alt M ISSMUST (s)
einen Wahrheitswert, der anzeigt ob die durch s definierte Variable auf allen
Kontrollflusspfaden uninitialisiert/gel¨oscht ist und M ISSMAY (s) einen Wert,
ob die Variable auf mindestens einem Pfad uninitialisiert/gel¨oscht ist. Ist die
Instruktion s nicht vorhanden, gilt M ISSMUST (s) = M ISSMAY (s) = true.</p>
        <p>Analog ergibt sich die Datenflussinformation zu gel¨oschten Daten, die angibt
ob eine Variable im Prozess bereits gelo¨scht wurde:
Definition 5 (Gelo¨schte Daten). Fu¨r Instruktion s enth¨alt DELMUST (s)
einen Wahrheitswert, der anzeigt ob die durch s definierte Variable auf allen
Kontrollflusspfaden gel¨oscht wurde und DELMAY (s) einen Wahrheitswert, der
anzeigt ob diese Variable auf mindestens einem Pfad gel¨oscht wurde. Ist die
Instruktion s nicht vorhanden, gilt DELMUST (s) = DELMAY (s) = f alse.</p>
        <p>Die Datenflussinformation zu definierenden Daten entspricht hingegen der
Menge von Daten, in Form von durch write-Instruktionen definierten Variablen,
die den Wert einer Variablen in mindestens einer Prozessausfu¨hrung festlegen
(beispielsweise {H1, H2} fu¨r Variable H3 in Abbildung 1), oder in allen:
Definition 6 (Definierende Daten). Fu¨r Instruktion s enth¨alt die Menge
DAT AMUST (s) alle Daten, welche den Wert der durch s definierten Variablen
auf allen Kontrollflusspfaden festlegen und die Menge DAT AMAY (s) alle Daten,
welche den Wert dieser Variablen auf mindestens einem Pfad festlegen. Ist die
Instruktion s nicht vorhanden, gilt DAT AMUST (s) = DAT AMAY (s) = ∅.</p>
        <p>
          Um die so definierten Datenflussinformationen fu¨r einen Gescha¨ftsprozess
exakt bestimmen zu ko¨nnen, ist eine Analyse der parallel ausfu¨hrbaren
Prozessaktivita¨ten notwendig. Grundsa¨tzlich ist eine solche Analyse Co-NP-schwer [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ].
Daher verzichten wir auf die exakte Bestimmung und ermitteln stattdessen
konservative Abscha¨tzungen. Zu diesem Zweck wird das Verfahren der statischen
Datenflussanalyse angewendet. Dieses erlaubt fu¨r die Charakterisierung eines
Datenflussproblems durch ein System rekursiver Gleichungen eine Fixpunktlo¨sung
zu berechnen, die eine Abscha¨tzung zur gesuchten Information bildet. Das
Gleichungssystem zu den definierenden Daten ergibt sich beispielsweise wie folgt:
DAT AMUST (s) = Ti∈{1,...,n} DAT AMUST (def (Vi)) fu¨r s : V = Φ(V1, . . . , Vn)
DAT AMUST (s) = Ti∈{1,...,n} DAT AMUST (def (Vi)) fu¨r s : V = π(V1, . . . , Vn)
DAT AMAY (s) = Si∈{1,...,n} DAT AMAY (def (Vi)) fu¨r s : V = Φ(V1, . . . , Vn)
DAT AMAY (s) = Si∈{1,...,n} DAT AMAY (def (Vi)) fu¨r s : V = π(V1, . . . , Vn)
DAT AMUST (s) = DAT AMAY (s) = {Vi}
DAT AMUST (s) = DAT AMAY (s) = ∅
fu¨r s : Vi = write(Vj)
sonst
Wie zu erkennen, werden darin jeder Instruktion s eines Prozesses
Gleichungen DAT AMUST (s) und DAT AMAY (s) zugeordnet. Die Datenflussinformation
fu¨r eine write-Instruktion s bildet gerade die Menge, die als einziges Element
die durch s definierte Variable entha¨lt. Fu¨r eine Instruktion mit Φ- oder
πFunktion ergeben sich die Mengen DAT AMUST und DAT AMAY als Schnitt
beziehungsweise Vereinigung der Datenflussinformation zu den die Operanden
definierenden Instruktionen (Instruktion def (Vi) fu¨r Operand Vi). Da das
Gleichungssystem u¨ber endlichen Mengen und monotonen Funktionen definiert ist,
ist dessen Konvergenz sichergestellt. Fu¨r die Fixpunktbestimmung kann dann
ein Algorithmus zur Datenflussanalyse auf CSSA-Form genutzt werden [
          <xref ref-type="bibr" rid="ref2 ref3">2, 3</xref>
          ],
der diesen in ho¨chstens quadratischer Zeit bezu¨glich der Anzahl von
Prozessinstruktionen berechnet. Aufgrund des beschra¨nkten Platzes wird hier auf die
Angabe der Fixpunktgleichungen zu fehlenden und gel¨oschten Daten verzichtet.
        </p>
        <p>Fehlerart</p>
      </sec>
    </sec>
    <sec id="sec-17">
      <title>Fehlende Daten</title>
      <p>(sichere Fehler)</p>
    </sec>
    <sec id="sec-18">
      <title>Fehlende Daten</title>
      <p>(mo¨gliche Fehler)</p>
    </sec>
    <sec id="sec-19">
      <title>Redundante oder</title>
      <p>u¨berschriebene Daten
(sichere Fehler)</p>
    </sec>
    <sec id="sec-20">
      <title>Redundante oder</title>
      <p>u¨berschriebene Daten</p>
    </sec>
    <sec id="sec-21">
      <title>Nicht gelo¨schte Daten</title>
      <p>(sichere Fehler)
(mo¨gliche Fehler)</p>
    </sec>
    <sec id="sec-22">
      <title>Inkonsistente Daten</title>
      <p>(mo¨gliche Fehler)</p>
    </sec>
    <sec id="sec-23">
      <title>Nicht gelo¨schte Daten (mo¨gliche Fehler)</title>
    </sec>
    <sec id="sec-24">
      <title>Doppelt gelo¨schte Daten</title>
      <p>(sichere Fehler)</p>
    </sec>
    <sec id="sec-25">
      <title>Doppelt gelo¨schte Daten (mo¨gliche Fehler) Zu spa¨t gelo¨schte Daten (mo¨gliche Fehler)</title>
      <p>s0: read(Vk)
s0 postdominiert s
∪ S s0: cond(Vk) DAT AMUST (def (Vk)) ) }
s0 postdominiert s
{ s | ( s : Vi = destroy(Vj) ∨ s : read(Vj)
∨ s : cond(Vj) ∨ s : Vi = write(Vj) )
∧ Vj ist def iniert durch π−Funktion mit mehr
als einem Operanden }
{ s | s : Vi = write(Vj)
∧ Vi ∈/ ( Ss0: Vl=destroy(Vk) DAT AMAY (def (Vk))
∪ Ss0: Vl=write(Vk) DAT AMAY (def (Vk)) ) }
{ s | s : Vi = write(Vj)
∧ Vi ∈/ ( S s0: Vl=destroy(Vk) DAT AMAY (def (Vk))
s0 postdominiert s
∪ S s0: Vl=write(Vk) DAT AMAY (def (Vk)) ) }
s0 postdominiert s
{ s | s : Vi = destroy(Vj)</p>
      <p>∧ DELMUST (def (Vj)) = true }
{ s | s : Vi = destroy(Vj)</p>
      <p>∧ DELMAY (def (Vj)) = true }
{ s | ( s : read(Vi) ∨ s : cond(Vi) )
∧ @ s0 : Vj = destroy(Vi) in Basisblock von s
∧ Vi ∈/ ( S s00: read(Vk) ∧ s006=s DAT AMUST (def (Vk))
s00 postdominiert s
∪ S s00: cond(Vk) ∧ s006=s DAT AMUST (def (Vk)) ) }
s00 postdominiert s</p>
    </sec>
    <sec id="sec-26">
      <title>Tabelle 2. Fehlermengen (s, s0, s00 bezeichnen Instruktionen des Prozesses)</title>
      <p>Fehlermenge
{ s | ( s : Vi = destroyM(VIjS)S∨M UsS: Tr(edaedf((VVjj))) = true }
∨ s : cond(Vj) ) ∧
{ s | ( s : Vi = destroyM(VIjS)S∨M AsY: (rdeeafd(V(Vjj))) = true }
∨ s : cond(Vj) ) ∧
{ s | s : Vi = write(Vj)
∧ Vi ∈/ ( Ss0: read(Vk) DAT AMAY (def (Vk))</p>
      <p>∪ Ss0: cond(Vk) DAT AMAY (def (Vk)) ) }
{ s | s : Vi = write(Vj)
∧ Vi ∈/ ( S DAT AMUST (def (Vk))
4</p>
      <sec id="sec-26-1">
        <title>Absch¨atzung sicherer und mo¨glicher Fehler</title>
        <p>Nachdem Abscha¨tzungen fu¨r die fehlenden, gelo¨schten und definierenden Daten
fu¨r einen Prozess bestimmt wurden, ko¨nnen dessen sichere und m¨ogliche
Datenflussfehler abgeleitet werden. Zu diesem Zweck definieren wir fu¨r jeden der in
Tabelle 1 aufgefu¨hrten Fehler zugeho¨rige Fehlermengen (vergleiche Definition 1):
Die Menge sicherer Fehler entha¨lt Instruktionen, die den Fehler sicher und in
allen Prozessausfu¨hrungen aufweisen, ist also eine Teilmenge der tatsa¨chlichen
Fehler. Die Menge m¨oglicher Fehler entha¨lt Instruktionen, die den Fehler in einer
Ausfu¨hrung aufweisen ko¨nnen, ist also eine Obermenge der tatsa¨chlichen Fehler.
In Tabelle 2 sind die Fehlermengen dargestellt. Wie zu erkennen, konnten fu¨r
alle Fehler, bis auf Inkonsistente Daten und Zu sp¨at gel¨oschte Daten, sowohl die
Menge der sicheren, als auch die Menge der mo¨glichen Fehler angegeben werden.</p>
        <p>Fehlerart sichere Fehler mo¨gliche Fehler</p>
      </sec>
    </sec>
    <sec id="sec-27">
      <title>Fehlende Daten A0 A0, B3, U7, U4</title>
      <p>Redundante oder C1, F1, D1 C1, F1, D1, H1, H2, U1, U2, V1, V2, G1,
u¨berschriebene Daten davon redundant: G2, E1, B1</p>
      <p>C1, D1 davon redundant: C1, D1, G2, E1, B1
Inkonsistente Daten / H4, H5, H6, U5, U6, U7, V4, V5, V6
Nicht gelo¨schte Daten C1, A1 C1, A1, H1, H2, U1, U2, V1, V2, B1</p>
      <sec id="sec-27-1">
        <title>Doppelt gelo¨schte Daten ∅ ∅</title>
        <p>Zu spa¨t gelo¨schte Daten / H3, H5, A1, B3, E1, G3, U4, U7, V6, A0</p>
      </sec>
    </sec>
    <sec id="sec-28">
      <title>Tabelle 3. Abgeleitete Fehler fu¨r den Beispielprozess aus Abbildung 1</title>
      <p>Die Menge Fehlende Daten (sichere Fehler) entha¨lt Instruktionen s der
Instruktionstypen Vi = destroy(Vj), read(Vj) und cond(Vj), die fu¨r alle
Kontrollflusspfade auf ein fehlendes Datum Vj zugreifen. Dazu wird u¨berpru¨ft, ob
M ISSMUST fu¨r die Vj definierende Instruktion def (Vj) dem Wahrheitswert true
entspricht. Die Menge Fehlende Daten (m¨ogliche Fehler) umfasst Instruktionen,
die fu¨r einen Pfad auf ein fehlendes Datum zugreifen ko¨nnen, und wurde analog
u¨ber die Wahrheitswerte in M ISSMAY definiert. Auf gleiche Weise ergeben sich
die Fehlermengen Doppelt gel¨oschte Daten, nur das diese destroy-Instruktionen
enthalten und als Datenflussinformation DELMUST , DELMAY genutzt wird.</p>
      <p>Die Fehlermenge Redundante oder u¨berschriebene Daten (sichere Fehler)
umfasst write-Instruktionen, die Daten schreiben auf die im Prozess nie lesend, also
durch Instruktionen read oder cond zugegriffen wird. Zu diesem Zweck wird die
Menge aller im Prozess auf mindestens einem Kontrollflusspfad gelesenen Daten
bestimmt, als Vereinigung der Mengen DAT AMAY (def (Vk)) fu¨r alle durch
Instruktionen s0 : read(Vk) und s0 : cond(Vk) gelesenen Variablen Vk. Ist eine durch
Instruktion s : Vi = write(Vj) definierte Variable Vi kein Element dieser Menge,
wird nie lesend auf Vi zugegriffen und die Instruktion erfu¨llt den Fehler. Die
Menge Redundante oder u¨berschriebene Daten (m¨ogliche Fehler) ergibt sich analog,
nur dass nun u¨berpru¨ft wird, ob eine durch Instruktion s : Vi = write(Vj)
definierte Variable Vi nicht auf allen Kontrollflusspfaden gelesen wird, unter
Ausnutzung der Datenflussinformation DAT AMUST und der Postdominanz-Relation.</p>
      <p>
        In [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] wird zusa¨tzlich eine Unterscheidung zwischen redundanten und
u¨berschriebenen Daten vorgenommen. Um auch eine solche Unterscheidung
durchzufu¨hren, kann die Menge Ss: Vl=write(Vk) DAT AMAY (def (Vk)) aller auf
mindestens einem Kontrollflusspfad u¨berschriebenen Variablen bestimmt werden. Ist
die durch eine write-Instruktion definierte Variable kein Element dieser Menge,
wird sie in keinem Fall u¨berschrieben und muss daher redundant sein.
      </p>
      <p>Die Menge Inkonsistente Daten (m¨ogliche Fehler) umfasst Instruktionen, die
auf ein Datum zugreifen, auf das auch eine parallel ausgefu¨hrte Instruktion
schreibend oder lo¨schend zugreift. Da solche Schreib-/Lese-Konflikte im
erweiterten Workflow-Graphen bereits mittels π-Funktionen gekennzeichnet sind, ergibt
sich die Fehlermenge als Menge aller Instruktionen, die auf eine durch π-Funktion
mit mehr als einem Operanden definierte Variable zugreifen. In a¨hnlicher Weise
zu den hier na¨her erla¨uterten Fehlermengen ergeben sich dann auch die Mengen
zu den Datenflussfehlern Nicht gel¨oschte Daten und Zu sp¨at gel¨oschte Daten.</p>
      <p>Eine auf diese Weise durchgefu¨hrte Abscha¨tzung fu¨r die Datenflussfehler im
Beispielprozess aus Abbildung 1 ist in Tabelle 3 dargestellt. Aus Gru¨nden der
U¨ bersichtlichkeit wurden nicht Instruktionen, sondern die zugeho¨rigen Variablen
angegeben. So enthalten die Mengen zum Fehler Fehlende Daten Variablen, die
fehlende Daten beschreiben und auf die durch eine Instruktion zugegriffen wird,
und die Mengen zum Fehler Nicht gel¨oschte Daten Variablen, die durch eine
Instruktion geschrieben aber spa¨ter nicht gelo¨scht werden. Die Fehlermengen
beschreiben offenbar recht gut die im Prozess enthaltenen Fehler. Die Mengen
sicherer Fehler repra¨sentieren so nur tatsa¨chlich immer im Prozess auftretende
Fehler. Die Mengen mo¨glicher Fehler repra¨sentieren nahezu nur Fehler, die fu¨r
mindestens eine Prozessausfu¨hrung auch tatsa¨chlich auftreten. Lediglich bei U4
in der Fehlermenge Fehlende Daten und G2 in der Fehlermenge Redundante oder
u¨berschriebene Daten handelt es sich um keine tatsa¨chlichen Fehler.
5</p>
      <sec id="sec-28-1">
        <title>Zusammenfassung</title>
        <p>In der vorliegenden Arbeit haben wir eine Methode vorgestellt, die es fu¨r
strukturierte Gescha¨ftsprozesse erlaubt, Abscha¨tzungen fu¨r Datenflussfehler effizient
zu bestimmen. Zu diesem Zweck werden erweiterte Workflow-Graphen als
Prozessmodell genutzt, die die Durchfu¨hrung einer Datenflussanalyse begu¨nstigen.
Basierend auf den durch Datenflussanalyse ableitbaren Informationen zu
fehlenden, gelo¨schten und definierenden Daten konnten dann Fehlermengen fu¨r
sichere und mo¨gliche Datenflussfehler angegeben werden. Die Methode bietet neben
ihrer Effizienz den weiteren Vorteil, dass alle in einem Prozess enthaltenen
Datenflussfehler in einem Schritt abgescha¨tzt werden ko¨nnen. Im Gegensatz dazu
liefert ein Ansatz auf Grundlage einer Modellpru¨fung immer nur einen Fehler
als Gegenbeispiel zur untersuchten Eigenschaft. Zuku¨nftige Arbeiten sollen die
praktische Relevanz dieser Vorteile anhand von Fallstudien weiter untersuchen.</p>
      </sec>
      <sec id="sec-28-2">
        <title>Literatur</title>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <surname>Callahan</surname>
          </string-name>
          , David ; Subhlok, Jaspal:
          <article-title>Static Analysis of Low-level Synchronization</article-title>
          .
          <source>In: ACM SIGPLAN Notices</source>
          <volume>24</volume>
          (
          <year>1989</year>
          ),
          <year>Nr</year>
          . 1,
          <string-name>
            <surname>S.</surname>
          </string-name>
          100-
          <fpage>111</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <surname>Lee</surname>
            , Jaejin ; Midkiff,
            <given-names>Samuel P.</given-names>
          </string-name>
          ;
          <string-name>
            <surname>Padua</surname>
            ,
            <given-names>David A.</given-names>
          </string-name>
          :
          <article-title>Concurrent Static Single Assignment Form and Constant Propagation for Explicitly Parallel Programs</article-title>
          .
          <source>In: Languages and Compilers for Parallel Computing, 10th International Workshop</source>
          , LCPC'97,
          <string-name>
            <surname>Minneapolis</surname>
          </string-name>
          , Minnesota, USA,
          <year>August</year>
          7-
          <issue>9</issue>
          ,
          <year>1997</year>
          , Proceedings, Springer,
          <year>1998</year>
          (LNCS 1366), S.
          <fpage>114</fpage>
          -
          <lpage>130</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <surname>Moser</surname>
          </string-name>
          , Simon ; Martens, Axel ; Go¨rlach, Katharina ; Amme, Wolfram ; Godlinski,
          <article-title>Artur: Advanced Verification of Distributed WS-BPEL Business Processes Incorporating CSSA-based Data Flow Analysis</article-title>
          .
          <source>In: 2007 IEEE International Conference on Services Computing (SCC</source>
          <year>2007</year>
          ),
          <fpage>9</fpage>
          -
          <issue>13</issue>
          <year>July 2007</year>
          , Salt Lake City, Utah, USA, IEEE Computer Society Press,
          <year>2007</year>
          , S.
          <fpage>98</fpage>
          -
          <lpage>105</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <surname>Sadiq</surname>
          </string-name>
          , Wasim ; Orlowska, Maria E.:
          <article-title>Analyzing Process Models Using Graph Reduction Techniques</article-title>
          .
          <source>In: Information Systems</source>
          <volume>25</volume>
          (
          <year>2000</year>
          ),
          <year>Nr</year>
          . 2,
          <string-name>
            <surname>S.</surname>
          </string-name>
          117-
          <fpage>134</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5] Trc˘ka, Nikola ; van der Aalst, Wil M.
          <article-title>; Sidorova, Natalia: Data-Flow Antipatterns: Discovering Data-Flow Errors in Workflows</article-title>
          .
          <source>In: Advanced Information Systems Engineering</source>
          , 21st International Conference, CAiSE
          <year>2009</year>
          , Amsterdam, The Netherlands, June 8-12,
          <year>2009</year>
          , Proceedings, Springer,
          <year>2009</year>
          (LNCS 5565), S.
          <fpage>425</fpage>
          -
          <lpage>439</lpage>
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>