210 likes | 288 Views
probléma formálisan specifikált:. valós világ (domai) (hibás eredmény). ködös határ (félreértés, hiba). formális világ (megoldás). A specifikáció csak nagyvonalakban írja le a valóságos problémát. A szoftver fejlesztőnek meg kell értenie a felhasználó problémáját.
E N D
probléma formálisan specifikált: valós világ (domai) (hibás eredmény) ködös határ (félreértés, hiba) formális világ (megoldás) A specifikáció csak nagyvonalakban írja le a valóságos problémát. A szoftver fejlesztőnek meg kell értenie a felhasználó problémáját.
Probléma dekompozíció és struktúrák leírása. A valóságos problémákat egyszerűbb részproblémákra kell felbontani. Rendszerint a problémának és a részproblémának is ugyan azok a doménjei: Azonos világban játszódnak le. Ezt a közös domént azonban a különböző részproblémákban különböző szempontok szerint vizsgáljuk és írjuk le. Ennek a probléma dekomponálásnak a hatását illusztrálja a következő példa.
1. Példa egy öntöző rendszer zsilip problémája. Egy kis zsilipről van szó, ahol a zsilipkapu felemelkedik és leesik. Ezt egy számítógép vezérli. Követelmény. Minden órában a zsilipkapu legyen nyitva 10 percig és máskor pedig legyen csukva. A zsilipkaput egy forgó vertikális csavarral emelik fel ill. le. Az emelőt egy kis motor húzza.
A motort vezérlő elektromos jelek: - be, - ki, - óramutató járásának megfelelő irány, - óramutató járásával ellentétes irány. • A kapu útjának a tetején és az alján van egy-egy érzékelő: • top érzékelő: a kapu teljesen felemelkedett, (elektromos jel); • bottom érzékelő: a kapu teljesen leereszkedett, (elektromos jel); A motor vezérléséhez a számítógépet 4 pulzusvonal köti össze a motorral és 2 állapot vonal a kapu szenzorokkal. Megkövetelt jelenségek: a kapu nyitva, a kapu csukva. Specifikációs jelenségek: motor vezérlő jelei, és a szenzorok állapotai.
A "világunk" (domain) tulajdonságai, amiket a gép megkonstruálásánál figyelembe kell venni: • A motor az állapotának a megváltozásával válaszol a hozzá • érkező külső jelre. • A zsilip mechanikus része az állapotát (emelkedik, esik), aszerint • változtatja, hogy a motor áll, vagy egyik vagy másik irányba • forog. • A szenzorok állapotai és a kapu vertikális pozíciói • közötti kapcsolatok. • A zsilip mechanikus részeinek az állapot változásait (áll, • emelkedik, süllyed) az vezérli, hogy a motor áll, vagy forog és • milyen a forgási iránya. A vezérlő gép specifikációjának ezeket formálisan kell rögzítenie.
A kapu állapotai: nyitva, zárva, emelkedik, süllyed. Specifikációs jelenségek. (A kapu állapotai és a motor kontrol jelei, és a top és bottom szenzor jelei közötti kapcsolat). Kapu emelkedik: ha a motor elindul az óramutató járásának megfelelő irányban. Kapu nyitva: ha a fenti irányú haladásnál a top szenzor jelzést ad. Kapu süllyed: ha a motor az óramutató járásával ellenkezőleg irányban forog Kapu zárva: ha az ellenkező irányú haladásnál a bottom szenzor jelt ad.
Nyilvánvaló ellentmondások kezelése. A fizikai eszközök azonban nem olyan megbízhatóak, ahogyan mi gondoljuk. Pl.: • Elszakadhat a kábel. • Leéghet a motortekercs. • A rozsda tönkreteheti a vasból készült alkatrészeket. Stb. A vezérlő gép viselkedésénél ezeket mind figyelembe kell venni, legalább is a motor megállásainak okai közé ezeket be kell venni.
Lehetséges hibás jelenségek még: • A top és bottom szenzor egyaránt jelez. • A motor emeli fel a kaput több mint n másodperce és a Top • szenzor még mindig nem jelez. • A motor engedi le a kaput több mint m másodperce és a Top • szenzor még mindig jelez. • A motor emeli fel a kaput több mint x másodperce és a Bottom • szenzor még mindig jelez. • A motor engedi le a kaput több mint y másodperce és a Bottom • szenzor még mindig nem jelez. Kezelés: auditáló program.
Auditháló program közös domain esetén. Az uditháló program konkurens módon fut magával a vezérlő programmal. A közös erőforrásokhoz való hozzáférésnél kölcsönös kizárást kell biztosítani. A két program egymással kommunikál. • Hiba detektálása esetén az auditálható program jelzést küld a • vezérlő gépnek. • A vezérlő gép az auditháló program jelzésére leállítja a motort • és előírt módon tevékenységeket indít el.
Objektumok azonosítási problémái. Fontos különbséget tenni: • Követelmény jelenségeinek leírásában szereplő azonosítók; • (A lift esetében: at(f), fel, le); • A specifikációs jelenségek leírásában szereplő azonosítók; • (sensor(f) állapotai a lift domain esetén), • között. (Később: f az emelet azonosítója volt, amit az informális leírásokban is használtunk). Elektromos vezeték szakadás detektálása és nem kellő megerősítő ellenőrzése számos repülőgép szerencsétlenség okozója volt. (Pl. Elégett a vezetéket detektáltak pedig csak dohányfüst volt).
A számítógépek gyakran behoznak egy komplexitást a probléma világába, amellyel interakcióba lépnek. Ennek gyökere: 1. Magának a szoftvernek a bonyolultsága. 2. A probléma világával való együttműködés bonyolultsága. 3. Ezt a bonyolultságot a régi rendszerekben három tényező kontrol alatt tartotta. - Maga a szoftver és annak kézi kezelése kisebb és egyszerűbb volt, mint a mai rendszerek. - Nem volt lehetőség, talán igény sem rendszerek ambíciózus integrálása. - A rendszerek működtetése emberi közreműködésre hagyatkozott. (az operátor, közbeavatkozott, ha abszurd viselkedést látott). Számos alkalmazásban megszűnt ez a biztosíték. Ma a felelősség nagy része az informatikában kutatók és a szoftver fejlesztő vállán nyugszik.
A géppel történő megoldás specifikációja. (formális leírás). Verifikáció (formális igazolás) Specifikáció (igazolt, bebizonyított) Kifejezés, típusos kifejezés. A probléma formálisan leírt megoldás (program)
Típusos kifejezések: • Alaptípusok: integer, boolean, character. Típus: <név> = <értékek halmaza>; Boolean = {true, false}; integer = {...-1,0,+1,....}; • Származtatott típusok (magasabb típusok): n1; T1...Tn T; Argument típusok; érték típus. Argumentumok száma n: a tömb dimenziója.
Változók: • Egyszerű változók; • Tömb változók (array); Konstansok: • Alaptípusok konstansok; • Összetett típusú (magasabb típusú) konstansok; Reláció ill. függvény: T1...Tn T; Ha T értéktípus boolean, akkor reláció szimbólum, egyébként függvény szimbólum. Pl. Reláció: : integer integer boolean [infix]; Függvény: + : integer integer integer [infix];
A tömb típusának jelölése: Pl. Ha egy tömb, amelynek típusa: integer T; az egy olyan függvényt jelöl, amely az integer értékek halmazáról a T által jelölt értékek halmazára képez le. Ha k l akkor [k:l] jelölés az intervallumot {i | k i l} -ra korlátozza. Ha tT; iinteger; akkor pl. t = [i]; Legyen az tömb típusa: integer Boolean Boolean; Ha iinteger; BBoolean, akkor pl. (i,B) egy Boolean kifejezés; B' Boolean; akkor pl. B' (i,B); egy értékadás;
Adva: T1...Tn T; típus-szimbólum. Példa: Egy tömb leképezés típus-szimbóluma: integer boolean boolean; A array; kinteger; B, ok boolean; Ekkor: B A[k+1,ok] bool kifejezés. A[2k,ok] bool kifejezés.
Típusos kifejezés rekurzív definíciója: • T típus egy egyszerű változója egy T típusú kifejezés. • T típus egy egyszerű konstansa egy T típusú kifejezés. • Ha s1,...,sn rendre a T1,...,Tn típusú kifejezések, és op egy • konstans a T1...Tn T típusból, akkor op(s1,...,sn) egy T • típusú kifejezés. • Ha s1,...,sn rendre a T1,...,Tn típusú kifejezések, és egy tömb • a T1...Tn T típusból, akkor [s1,...,sn] egy T típusú kifejezés. • Ha B egy bool típusú kifejezés, továbbá s1 és s2 pedig T típusú • kifejezések, akkor • if B then s1else s2fi • egy T típusú kifejezés.
Kifejezések felírási formái: Infix forma: s1 op s2 ; Pl. + : integer integer integer [infix]; iinteger, jinteger, kinteger, k=i+j; Prefix forma: op(s1,s2); op(s); Pl. add: integer integer integer; iinteger, jinteger, kinteger, k = add(i,j); Pl. : Boolean Boolean; iinteger , kinteger, k = i;
Post fix forma: s op; Pl. Faktoriális: ! : nat nat [postfix]; nnat; knat; n = k!; Kifejezés forma: Pl.: vektor, amelynek elemei integer értékek: Vektor műveletek: _ [ _ ] : vector nat integer vvector; knat; iinteger; i = v[k];
Kifejezések kiértékeléséről: Zárójelezések elkerülése, a műveletek prioritási sorrendje: 1: szorzás , osztás /, moduló; 2: összeadás +, kivonás -; 3: =, <, , >, ; 4: , ; 5: , . Például: x+y mod(n) értelmezése: x+(y mod(n)); pq r értelmezése: (pq) r;
Adva: T1...Tn T; típus-szimbólum. Példa: Egy tömb leképezés típus-szimbóluma: integer boolean boolean; A array; kinteger; B, ok boolean; Ekkor: B A[k+1,ok] bool kifejezés. A[2k,ok] bool kifejezés.