Problem diagram
Extension of PlantUML (See Pull\_Request-120), initiate by Yijun Yu, to draw Problem Diagrams or diagram for problem analysis or problem frames approach, a rather useful requirements modeling diagram based on Michael Jackson’s Problem Frames.
Example R1
@startuml
left to right direction
title Problem Diagram R1
requirement "Collect and display drone flight paths on a map" as R1
domain "Google Map" as D1 <>
domain "Onboard LiveBox" as D2 <>
domain "Drone" as D3 <>
domain "Path" as D4 <>
domain "Map" as D5 <>
domain "Monitor" as M <>
M -- D1: a1
M -- D2: b1
D1 -- D4: d1
D4 <-[dashed]- R1: d
D2 -- D3: e1
D3 -[dashed]- R1: e
D2 -- D4: d2
D5 <-[dashed]- R1: c
D1 -- D5: c1
@enduml
[from Pull\_Request-120]
Example R1-1
@startuml
left to right direction
title Problem Diagram R1-1
requirement "Collect drone flight paths" as R
domain "Drone collocated \n with Smartphone" as D31 <> {
domain "Drone" as D3 <>
domain "Smartphone" as D321 <> {
domain "LiveBox App" as D32 <>
}
}
'D3 -- D321: f
'note bottom on link
' assume that the smartphone and the drone are always collocated
'end note
domain "Path" as D4 <>
domain "Onboard LiveBox" as M <>
D4 <-- R: d
note bottom on link
the flight path consists of
zero to many geolocations
end note
D3 -- R: e
note bottom on link
the drone's geolocation includes
latitude, longitude, altitude
and the timestamp
end note
M -- D4: d2
note bottom on link
<(geolocation, timestamp)>
by the order of timestamps
end note
M -- D32: e1
note bottom on link
(geolocation, timestamp) from
the smart phone as a payload
of the drone
end note
@enduml
Sequence:
@startuml
'skinparam backgroundColor lightblue
hide footbox
participant "Onboard LiveBox" as LB
participant "Drone" as D
participant "Path" as P
D -> LB: d2: takeoff(initial location)
LB -> P: e1: save(initial location)
loop
D -> LB: d2: send(location)
LB -> P: e1: save(location)
end
D -> LB: d2: landing(final location)
LB -> P: e1: save(final location)
@enduml
Example LiveBox
@startuml
hide footbox
title LiveBox Scenario
participant Nesta
participant HospitalFrom
actor Pilot
participant Drone
participant Controller
participant HospitalTo
participant NHS
HospitalTo <- NHS: request delivery
Nesta <- HospitalTo: request delivery(HospitalFrom, HospitalTo, Type, Size, Amount)
Nesta -> Drone: select
Nesta -> Pilot: select
alt selected
Nesta -> HospitalFrom: inform
HospitalFrom -> Pilot: send payload
Pilot -> Drone: load delivery
Pilot -> Controller: send
Drone <- Controller : take off
loop
Pilot -> Drone: maneuver
Drone -> Controller: report
Pilot <- Controller: display
Nesta <- Controller: notify periodically
end
Pilot -> Controller: landing
Drone <- Controller: landing
Drone -> Controller: landed
Pilot <- Controller: landed
Nesta <- Controller: landed
Nesta -> HospitalTo: inform
Drone <- HospitalTo: unload
Drone <- HospitalTo: turn off
Nesta -> HospitalTo: package received
Nesta -> HospitalFrom: inform successful
Nesta -> Pilot: inform successful
end
@enduml
Example of Composition of two designed domains
@startuml
left to right direction
title Composition of two designed domains
left to right direction
domain "Monitor" as M <> {
domain "Google Map" as D1 <>
domain "Onboard LiveBox" as D2 <>
}
domain "Map" as D3 <>
domain "Path" as D4 <>
domain "Drone" as D5 <>
requirement "Requirements" as R {
requirement "Display flight paths on a map" as R1
requirement "Collect flight paths from a drone" as R2
}
R1 -[dashed]left-> D3: c
D4 -[dashed]-> R1: d
R2 -[dashed]left-> D4: d
D5 -[dashed]-> R2: e
D1 --> D3: c1
D1 --> D4: d1
D2 --> D4: d2
D2 --> D5: e1
@enduml
Example of Problem
@startuml
left to right direction
domain "Monitor" as M <>
domain "Display" as D1 <>
domain "Collect" as D2 <>
domain "Pilot" as P <>
domain "Table" as TT <>
domain "XYZ" as XYZ <<(C)>>
requirement "R1" as R1
M -- D1: a
D1 -[dashed]- R1: a
D2 <-[dashed]- R1: b
TT -[dashed]- R1: c
P -[dashed]- R1: d
M -- TT: c
M -- D2: b
M -- P: d
@enduml
Minimal example
@startuml
title Minimal example
domain "Biddable" as B <>
domain "Causal" as C <>
domain "Designed" as D <>
domain "Lexical" as L <>
domain "Machine" as M <>
domain "Problem" as s <>
requirement "Requirement" as R
@enduml
[Ref. GH-120]