This article provides an example of a Fault Tree Graph using the configurable Graphs view. Alternatively, there is a FaultTreeGraph extension view available.
Example Data
Example Configuration
<Graph> <Options> <ObjIcons/> <Legend/> </Options> <Layout name="incrementalHierarchical"> <Setting name="layoutOrientation" value="topToBottom"/> <Setting name="nodeToNodeDistance" value="50"/> <Setting name="busRouting" value="True"/> </Layout> <NodeStyles> <NodeStyle name="AND" fillColor="#eeeeee" fillColor2="#ffffff" borderThickness="1" borderColor="#000000" legendLabel="And Gate"> <Shape> <AndGate/> </Shape> </NodeStyle> <NodeStyle name="OR" fillColor="#eeeeee" fillColor2="#ffffff" borderThickness="1" borderColor="#000000" legendLabel="Or Gate"> <Shape> <OrGate/> </Shape> </NodeStyle> <NodeStyle name="BasicEvent" fillColor="#ffffff" fillColor2="#ffffff" borderThickness="1" borderColor="#000000" legendLabel="Attack Event"> <Shape> <Ellipse/> </Shape> </NodeStyle> <NodeStyle name="ExternalEvent" fillColor="#ffffff" fillColor2="#ffffff" borderThickness="1" borderColor="#000000" legendLabel="External Event"> <Shape> <RectangularPentagon/> </Shape> </NodeStyle> <NodeStyle name="IntermediateNode" fillColor="#eeeeee" fillColor2="#ffffff" borderThickness="1" borderColor="#000000" legendLabel="Gate Description"/> <NodeStyle name="input" fillColor="#E5AEA3" fillColor2="#ffffff" borderThickness="1" borderColor="#000000" legendLabel="Incoming Requirement"/> <NodeStyle name="component" fillColor="#F5DEB3" fillColor2="#ffffff" borderThickness="1" borderColor="#000000" legendLabel="System component"/> <NodeStyle name="Threat" fillColor="#ffcccc" fillColor2="#ffffff" borderThickness="2" borderColor="#000000" legendLabel="Threat"/> </NodeStyles> <EdgeStyles> <EdgeStyle name="mitigatedBy" color="#0000FF" thickness="2" lineType="dash" fromArrowType="none" toArrowType="none" legendLabel="Mitigated by"/> <EdgeStyle name="FaultScope" color="#FF0000" thickness="2" lineType="dash" fromArrowType="none" toArrowType="none" legendLabel="Fault scope"/> </EdgeStyles> <Context name="FTAContext"> <AddParts owner="main" sid="SP0574" part="MainToFaultEvent" defobj="+FaultEvent"/> <AddParts owner="main" sid="SP0538" part="MainToFaultEvent" defobj="+FaultEvent"/> <AddParts owner="main" sid="SP0555" part="Requirement" defobj="+Requirement"/> <AddParts owner="FaultEvent" sid="SP0538" part="FaultEventToFaultEvent" defobj="+FaultEvent"/> <AddParts owner="FaultEvent" sid="SP0555" part="Requirement" defobj="+Requirement"/> <AddParts owner="main" sid="SP0597" part="FaultScope" defobj="+Component"/> <AddParts owner="FaultEvent" sid="SP0597" part="FaultScope" defobj="+Component"/> </Context> <ForEachInContext name="FTAContext" group="main"> <If test="SID != 'SI0421'"> <ApplyTemplate name="generateFaultTree"/> </If> </ForEachInContext> <ForEachInContext name="FTAContext" group="FaultEvent"> <ApplyTemplate name="generateFaultTree"/> </ForEachInContext> <Template name="generateFaultTree"> <Choose> <When test="SID in ['SI0395', 'SI0394']"> <ApplyTemplate name="createGate"/> </When> <Otherwise> <Variable name="currentItem" as="Items" select="."/> <Node style="BasicEvent" caption="#{? Name + printAttr('Failure rate', @SA0826.ToString) + printAttr('ASIL', @SA0814.ToString)" rowId="faultTree" columnId="faultTreeCol"> </Node> <ForEach select="Context:/part::Requirement"> <Edge from="Owner" to="DefObj" style="mitigatedBy" caption="@SA0535" objects="Owner"> </Edge> </ForEach> </Otherwise> </Choose> <ForEach select="Context:/part::FaultScope"> <Edge from="Owner" to="DefObj" style="FaultScope" objects="Owner"> </Edge> </ForEach> </Template> <Template name="createGate"> <Node objects="." id="Intermediate_#{Handle}" style="IntermediateNode" caption="#{? Name + printAttr('Failure rate', @SA0826.ToString) + printAttr('ASIL', @SA0814.ToString)" rowId="faultTree" columnId="faultTreeCol"> </Node> <Node style="#{?if SID='SI0395' then 'OR' else 'AND'" caption="" rowId="faultTree" columnId="faultTreeCol"> </Node> <Edge from="'Intermediate_' + Handle" to="." objects="."/> <ForEach select="Context:/part::FaultEventToFaultEvent or /part::MainToFaultEvent"> <Choose> <!--Gate--> <When test="DefObj.SID in ['SI0395', 'SI0394']"> <Edge from="Owner" to="'Intermediate_' + DefObj.Handle" objects="."> </Edge> </When> <Otherwise> <Edge from="Owner" to="DefObj" objects="."> </Edge> </Otherwise> </Choose> </ForEach> <ForEach select="Context:/part::Requirement"> <Edge from="DefObj" to="'Intermediate_' + Owner.Handle" style="mitigatedBy" objects="Owner"> </Edge> </ForEach> </Template> <Function name="printAttr" as="String"> <Parameter name="label" as="String"/> <Parameter name="value" as="String"/> <Value select="if $value ='' then '' else NewLine + $label + '=' + $value"/> </Function> </Graph>