CSC 508 Lecture Notes Week 9
Review of Other Requirements and Specification Methodologies
| Datum Name | Definition | Remarks |
| ... | ... | ... |
where the definition is a compositional expression using the following symbols:
| Symbol | Meaning |
| = | is composed of |
| + | and |
| () | optional |
| {} | iteration |
| [] | select one of several alternative choices |
| | | separates alternative choices in the [] construct |
| @ | identifier (key field) for a store |
Figure 1: Inferno top-most DFD (a context diagram).
Figure 2: Top-Level Inferno DFD.
Figure 3: Expansion of File Operation.
Figure 4: Poorly-conceived expansion of File.New operation.
Figure 5: ER definition of Process.
Figure 6: Excerpt of ER definition of ProcessStep.
Figure 7: Excerpt of ER definition of produces and produced- by.
module ProcessAndArtifactWhichReallyShouldBeInTwoSeparateModules
define attribute produces;
define attribute produced_by;
...
obj ProcessStep is ...
produces: Artifact;
end;
obj Artifact is ...
produced_by: ProcessStep;
end;
Figure 8: Excerpt of ER definition of produces and produced- by.
Actor Action Subjectwhere
| Use Case | RSL |
| Software Monitors Living_Quarters | op Monitor(LivingQuarters)->LivingQuarters) |
| Timer Triggers Living_Quarters_Sensor | op TriggerChange(Timer,LivingQuarters)->LivingQuarters |
| Software Lights Window |
op LightWindow(lq:LivingQuarters)->lq':LivingQuarters
post: if (...) then (lq'.lit = true); -- alternatively -- op TriggerChange(Timer,lq:LivingQuarters)-> lq':LivingQuarters post: if (lq.state ...) then (lq'.lit = true) |
module Communications:
(* Caller operations *)
operation RequestToSend();
operation ReceiveClearToSend();
operation SendMessage(MessageBody)->Message;
operation AwaitAcknowledgement();
operation TerminateConnection();
(* Central exchange operations *)
. . .
(* Receiver operations *)
. . .
end;
operation RequestToSend(ce:CommExchange, r:Receiver)->
(ce':CommExchange, r':Receiver, m:Message)
precondition: (ce.cs.clear = false) and (r.cs.clear = false);
postcondition: (ce'.cs.clear = false) and (r'.cs.clear = false) and
(m.body = "$REQUEST$");
end;
operation ReceiveClearToSend(ce:CommExchange, r:Receiver, m:Message)->
(ce':CommExchange, r':Receiver);
precondition: (ce.cs.clear = false) and (r.cs.clear = false) and
(m.mb = "$REQUEST$");
postcondition: (ce'.cs.clear = true) and (r'.cs.clear = true);
operation SendMessage(ce:CommExchange, r:Receiver, mb:MessageBody)->
m':Message;
precondition: (ce.cs.clear = true) and (r.cs.clear = true) and
IsValid(mb);
postcondition: (m'.mb = mb) and (m'.sent = true);
end;
operation ReceiveAcknowledgement(r:Receiver)->r':Reciever;
precondition: r.cs.ack = false;
precondition: r'.cs.ack = true;
end;
operation TerminateConnection(ce:CommExchange)->ce':CommExchange
precondtion: ce.cs.connected = true;
postcondtion: ce.cs.connected = false;
end;
object CommExchange is cs:CommStatus and ... ;
object Receiver is cs:CommStatus and ... ;
object Message is cs:CommStatus and body:MessageBody and ... ;
object CommStatus is clear:boolean and sent:boolean and ack:boolean and
connected:boolean and ... ;