Contracts in SPARK
Explizite Contracts: Pre- und Postconditions
Bedingungen bei Aufruf und Verlassen des Teilprogramms
procedure Turn_on (speed: in out Integer) with
pre => speed = 0, Post => speed < 200 is
begin
end Turn_on;
Explizite Contracts: Type Invariants
type Bank_Account is private
with Type_Invariant => Consistent_Balance(Bank_Account);
function Consistent_Balance (This : Bank_Account) return Boolean;
Das sichere Subset
Side Effects
Auswirkung auf externe Objekte
=> in SPARK keine globalen Variablen verändern, keine in out oder out Parameter
Aliasing
Verschiedene Namen für denselben Parameter innerhalb einer Routine