• Nem Talált Eredményt

Kritikus rendszerek fejlesztése

A hatékonyabb szoftvertervezési módszertanok és programozási nyelvek megjelenése, valamint a szoftver minőségbiztosítás területén bekövetkező szemléletváltás jelentősen hozzájárultak a szoftverek üzembiztonságának javulásához. A kritikus rendszerek esetében azonban további lépések szükségesek az üzembiztonság magasabb szintjének eléréséhez. A kritikus rendszerek esetében speciális fejlesztési módszerek és technikák alkalmazásával biztosítható, hogy a rendszer biztonságos, védett és megbízható legyen.

Az alábbi három, egymást kiegészítő fejlesztés elv alkalmazásával növelhető a szoftverek üzembiztonsága:

1. Hiba elkerülése. A rendszer tervezése és implementációja folyamán olyan programozási és fejlesztési módszerek alkalmazása, amelyek minimalizálják és kiszűrik a programozási hibákat.

2. Hiba detektálása. A rendszer fejlesztése során olyan validációs, tesztelési folyamatokat kell alkalmazni, amelynek segítségével a rendszerhibák még azelőtt felismerhetők és megszüntethetők mielőtt a rendszert működésbe állítanák.

3. Hibatűrés. A rendszert úgy kell megtervezni, hogy a felmerülő hibák észlelhetőek és kezelhetőek legyenek, hogy ne vezessenek a rendszer hibás működéséhez és a rendszer szolgáltatásainak megszűnéséhez.

A minél magasabb üzembiztonság szint elérésében fontos szerepet játszik a redundancia és diverzitás alkalmazása. Mindkét technika a hibaelkerülés révén járul

134

hozzá az üzembiztonság javításához. Azoknál a rendszereknél például, ahol a rendelkezésre állás kritikus követelmény, többnyire redundáns szervereket alkalmaznak.

Ezek automatikusan működésbe lépnek, ha egy adott szerver meghibásodik. Sokszor, hogy biztosítsák a rendszer védettségét a külső támadások ellen, különböző típusú szervereket használnak és különböző típusú operációs rendszert futtatnak rajtuk. A különböző típusú operációs rendszerek alkalmazása egy példa a szoftverdiverzitásra.

A szoftvertechnológia területén folyó kutatások egyik fő célja, hogy olyan eszközök, technikák és módszerek fejlődjenek ki, amelyek elősegítik a hibamentes szoftverek előállítását. A hibamentes szoftverek elérésének érdekében az alábbi fejlesztési technikákat és módszereket ajánlatos alkalmazni:

Megbízható szoftverfolyamat. A megbízható szoftverfejlesztési eljárások biztosítják a hibák elkerülését és detektálását. A megbízható szoftverfejlesztési folyamat jól definiált tevékenységekből áll, szabványosított és dokumentált. A validációs és verifikációs tevékenységek széles skáláját foglalja magában, amelyek minimalizálják programhibák számát.

Minőségkezelés. A fejlesztő szervezetnek megfelelő minőségbiztosítási folyamattal kell rendelkeznie, amelyek tervezési, fejlesztési és termék szabványokon alapul, és amelyek a fejlesztők számára biztosítják a hibamentes programok készítését.

Formális specifikáció. A fejlesztésnek pontos és precíz követelmény specifikáción kell alapulnia. Számos tervezési és programozási hiba vezethető vissza a nem kellő részletességgel megalkotott specifikációra.

Statikus programverifikáció. A statikus programverifikációs technikák alkalmazása, a programok futtatása nélkül számos programozási hiba és rendellenes szerkezet felderítésére használható.

Erős típusosság. A kódolásban szigorúan típusos nyelveket kell használni, amelyek esetében a nyelv fordítóprogramja már fordítási időben felismerheti a programozási hibákat.

Biztonságos programozás. A megbízható programozás olyan programozási konstrukciókat és technikákat foglal magában, amelyek elősegítik a hibák elkerülését és a hibatűrést. Számos programozási nyelvben léteznek olyan adattípusok és programozási struktúrák, amelyeket nem körültekintően használva a programhibák gyakorisága megnövekedhet. A biztonságos programozás e tekintetben azt jelenti, hogy a lehetőségek szerint elkerüljük az ilyen szerkezetek alkalmazását.

Védett információ, egységbezárás. Az információrejtés elvén alapuló implementációs szemlélet alkalmazása. Az objektumorientált nyelvek használata alapjában biztosítják ezt a lehetőséget.

A napjainkban rendelkezésre álló szoftverfejlesztési módszerekkel és technikákkal a hibamentes szoftver elérhető, de gazdaságilag nem túl előnyös. A szoftver teljes hibamentességének elérése bonyolult és költséges feladat. A szoftverben megmaradt hibák felderítésének és eltávolításának költsége a validáció folyamata során exponenciálisan növekszik. A validáció előrehaladtával a szoftver egyre megbízhatóbbá válik, de egyre több tesztre van szükség az egyre kevesebb hiba felderítéséhez.

11.2.1 Hibatűrés

A hibatűrő rendszerek fő jellemzője és célja, hogy rendszerhibák esetén is tudja 135

folytatni a működését és teljesíteni az elvárt szolgáltatásokat. Erre olyan rendszerek esetében van szükség, amikor a szolgáltatások kimaradása emberi sérüléshez, életvesztéshez vagy nagy gazdasági károkhoz vezetne. A hibatűrő rendszer működésére az alábbi tevékenységek végrehajtása a jellemző:

Hiba detektálása. A rendszerállapotok konzisztenciáját folyamatosan ellenőrizni kell. A hibatűrő rendszernek fel kell ismernie az olyan nem konzisztens, egymásnak nem megfelelő állapotokat, amelyek a rendszer meghibásodásához vezethetnek.

Veszteség felmérése. Meg kell határozni a rendszer állapotának azon részeit, ame-lyek a hiba következményeként érintettek.

Helyreállítás. A rendszernek képesnek kell lennie az állapotát biztonságosra visszaállítani. Ez történhet a sérült állapotrészek kijavításával, vagy egy korábbi ismert biztonságos rendszerállapot visszaállításával.

Hibajavítás. A hibajavítás magában foglalja a rendszer olyan módosítását, amely által elérhető, hogy az előforduló hiba ne fordulhasson elő mégegyszer. A szoftverhibák sokszor csak átmeneti hibaként jelennek meg, mivel ezeket a hibákat a rendszer bemeneteinek a szokásostól eltérő kombinációja váltja ki. Az ilyen hibák kijavítása szükségtelen, mivel a rendszerállapot visszaállítása után a rendszer működése a normális üzemmódban folytatódik.

A hibamentes rendszer önmagában nem jelenti azt, hogy a rendszer hibátlan működésű. Az, hogy a rendszer hibamentesen tud működni mindössze annyit jelent, hogy a program megfelel annak a követelmény specifikációnak, amelyet a rendszer fejlesztése során a követelményelemzési fázis során meghatároztak. Azonban a követelmény specifikáció is tartalmazhat hibákat, alapulhat hibás feltételezéseken, amelynek az lehet a következménye, hogy bár a rendszer hibamentes, de nem felel meg a felhasználó igényeinek.

11.2.1.1 Hibadetektálás és a veszteség felmérése

A hibatűrés biztosításának első lépéseként detektálnunk kell az állapotváltozókban bekövetkezett olyan változásokat, amelyek nagy valószínűséggel hibás működéshez fognak vezetni. Ehhez ismernünk kell az állapotváltozók megengedett értéktartományait, illetve, hogy milyen esetekben tekinthetők konzisztensnek az állapotváltozók értékei. Az állapotváltozók értékeire ezért korlátokat kell definiálni, amelyek rögzítik a feltételeket az összes megengedett állapot fenntartásához, illetve módosításához. Ha ezek az előfeltételek nem teljesülnek, nagy valószínűséggel hiba fog bekövetkezni.

A veszteség felmérése a rendszer állapotának vizsgálatát jelenti abból a célból, hogy megállapítsuk, hogy a hiba az állapottér mely részeit érintette. A veszteség csak akkor mérhető fel pontosan, ha rendelkezésünkre áll egy olyan ellenőrző funkció, amelynek alkalmazásával el tudjuk dönteni, hogy az adott rendszerállapot konzisztens-e. A rendszer meghibásodása és a veszteség felmérése a legtöbb esetben elkerülhető a lehetséges hiba előfordulásának a detektálásával még az állapotváltozások nyugtázása előtt. Ha az állapotváltozók értékében hibát detektálunk, az állapotváltozást nem fogadjuk el, így elkerülhetjük a meghibásodás következményeit.

136

11.2.1.2 Hiba helyreállítása és javítása

A rendszerállapot helyreállítás során úgy módosítjuk a rendszer állapotát, hogy a bekövetkezett hiba hatásai minimálisra csökkentsük. A rendszer ezután folytathatja a működését, még ha valamilyen csökkentett üzemmódban is. A rendszer állapot helyreállítása két módon történhet. A rendszerállapot helyreállítása során megpróbálhatjuk kijavítani a sérült állapotrészeket vagy visszaállítani a rendszerállapotot egy korábbi stabil állapotra. Az első esetben a sérült állapotrészek kijavítása csak abban az esetben lehetséges, ha a rendszerállapotnak létezik egy redundáns másolata. A második, egyszerűbb megoldásban a hiba detektálása után visszaállítjuk a rendszer állapotát egy korábbi biztonságos állapotra.

A szoftverhibák javítását tekintve a leggyakrabban használt szoftveres javítótevékenység a rendszer állapotának újrainicializálása.