16.09.2013 Views

Tekniker för att testa mjukvara - AddQ

Tekniker för att testa mjukvara - AddQ

Tekniker för att testa mjukvara - AddQ

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong><br />

Analys av testtekniker samt risker med ett mjukvarubaserat börssystem<br />

2001-05-11<br />

av<br />

Stefan Särd<br />

Dag Wester


Sammanf<strong>att</strong>ning<br />

Mjukvarubaserade lösningar <strong>för</strong> <strong>att</strong> sköta handeln på börser är inget nytt, men en<br />

hårdare konkurrens, ökad omsättning och krav på nya funktioner gör <strong>att</strong> bössystemen<br />

blir allt mer komplexa. Komplexiteten har med<strong>för</strong>t en ökad svårighet <strong>att</strong> verifiera<br />

börssystemens funktionalitet. En stor del av verifieringen består i <strong>att</strong> genom<strong>för</strong>a tester<br />

på systemen. För <strong>att</strong> <strong>testa</strong>rbetet ska ge önskad effekt är det viktigt <strong>att</strong> lämpliga<br />

testtekniker används i rätt omf<strong>att</strong>ning.<br />

Två fristående studier presenteras, dels en riskanalys och dels en sammanställning av<br />

testtekniker. I riskanalysen <strong>för</strong>s resonemang om vilka incidenter som kan inträffa i ett<br />

börssystem. Sammanställningen av testteknikerna ger en generell bild av de tekniker<br />

som kan användas <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong>. Utifrån de två studierna och en internationell<br />

standard diskuteras hur börssystemen bör <strong>testa</strong>s <strong>för</strong> <strong>att</strong> nå en viss felsannolikhet. Det<br />

visar sig <strong>att</strong> inga universallösningar finns <strong>att</strong> tillgå. För <strong>att</strong> nå önskad felsannolikhet<br />

ska testningen ske kontinuerligt under utvecklingen och bygga på en kombination av<br />

testtekniker som kompletterar varandra.<br />

NYCKELORD:<br />

Säkerhetskritiska system, mjukvarubaserade börssystem, riskanalys, riskvärderingsmatris, testtekniker,<br />

statisk analys, dynamisk analys, strukturell testning, funktionell testning, statistisk testning,<br />

felsannolikhet, felintensitet.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester Industriella informations och styrsystem


Abstract<br />

Software based solutions for electronic trading platforms are nothing new. However,<br />

due to stronger competition, more turnover, and new functionality the software-based<br />

trading platforms used by the stock markets have increased their complexity. This<br />

increase in complexity has made it more difficult to verify the functionality of the<br />

platforms. A major part of the verification process consists of testing. Adequate<br />

testing, using the right techniques, is important in order to ensure the desired effect of<br />

the verification process.<br />

In this thesis, two independent studies will be introduced. The first study is a risk<br />

analysis concerning possible failures of a software based trading platform. The second<br />

study is a guide to different techniques used when testing software. From these studies<br />

it is argued, based on an international standard framework, which testing techniques<br />

might be suitable in order to reach a particular failure probability. When discussing<br />

these results it is emphasised that there is no obvious solution to the verification<br />

problem. To achieve a certain failure probability it is essential to use different kinds<br />

of testing techniques, which complement each other, and to conduct testing over a<br />

broad part of the development life cycle.<br />

KEYWORD:<br />

Safety-critical systems, software based electronic trading platform, risk analysis, risk valuation matrix,<br />

software testing techniques, static analysis, dynamic analysis, structural testing, functional testing,<br />

statistical testing, failure probability, failure intensity.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester Industriella informations och styrsystem


Förord<br />

Vi vill här ta tillfället i akt <strong>att</strong> tacka våra två handledare <strong>för</strong> deras engagemang, Lars<br />

Wahlberg på OM Technology och Erik Johansson från institutionen <strong>för</strong> industriella<br />

informations- och styrsystem på KTH. De har båda bidragit med värdefull kritik,<br />

feedback och idéer under arbetets gång.<br />

Tre studiebesök har genom<strong>för</strong>ts. Mycket uppsk<strong>att</strong>ade har de rundvandringar varit då<br />

vi har fått se JAS-plan och kärnkraftverk på nära håll. Särskilt tack vill vi fram<strong>för</strong>a till<br />

följande,<br />

Bo Liwång, som har gett oss en insikt i hur Statens Kärnkraftsinspektion arbetar.<br />

De personer som vi var i kontakt med vid Forsmarks kärnkraftverk, däribland<br />

M<strong>att</strong>ias Hansson som var vår värd under besöket.<br />

SAAB i Linköping, och då fram<strong>för</strong>allt verifiering- och valideringsteamet <strong>för</strong><br />

styrsystemet av JAS 39 Gripen.<br />

Slutligen vill vi tacka all personal på OM Technology som har hjälpt oss i vårt arbete.<br />

Stockholm, maj 2001.<br />

Stefan Särd och Dag Wester<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester Industriella informations och styrsystem


Innehålls<strong>för</strong>teckning<br />

1 INTRODUKTION .......................................................................................................................................1<br />

1.1 BAKGRUND................................................................................................................................................1<br />

1.1.1 Företaget där examensarbetet är ut<strong>för</strong>t ..........................................................................................1<br />

1.2 SYFTE OCH MÅL.........................................................................................................................................2<br />

1.2.1 Målgrupp.........................................................................................................................................3<br />

1.2.2 Avgränsningar.................................................................................................................................3<br />

1.3 RAPPORTDISPOSITION................................................................................................................................3<br />

1.4 ORGANISATION..........................................................................................................................................4<br />

1.5 ARBETSMETOD ..........................................................................................................................................4<br />

1.5.1 Riskanalys........................................................................................................................................5<br />

1.5.2 Mjukvarutestning.............................................................................................................................5<br />

1.5.3 Analys och diskussion......................................................................................................................5<br />

1.5.4 Intervjuer.........................................................................................................................................6<br />

1.6 TERMINOLOGI............................................................................................................................................6<br />

2 RISKER FÖRKNIPPADE MED BÖRSSYSTEM ...................................................................................8<br />

2.1 VAD ÄR ETT BÖRSSYSTEM .........................................................................................................................8<br />

2.1.1 Vad karaktäriserar ett börssystem...................................................................................................8<br />

2.1.2 Aktörer.............................................................................................................................................9<br />

2.1.3 Ett fiktivt börssystem .....................................................................................................................10<br />

2.2 GENERELL RISKANALYS ..........................................................................................................................12<br />

2.2.1 Incidenternas konsekvensgrader ...................................................................................................12<br />

2.2.2 Incidenternas frekvens...................................................................................................................13<br />

2.2.3 Riskvärderingsmatris.....................................................................................................................14<br />

2.3 RISKANALYS FÖR ETT BÖRSSYSTEM ........................................................................................................15<br />

2.3.1 Definition av konsekvensgrad och frekvens...................................................................................15<br />

2.3.2 Riskvärderingsmatris.....................................................................................................................16<br />

2.3.3 Incidenter ......................................................................................................................................17<br />

2.3.4 Incidenter sorterade efter konsekvensgrad....................................................................................26<br />

3 MJUKVARUTESTNING .........................................................................................................................27<br />

3.1 INTRODUKTION........................................................................................................................................27<br />

3.1.1 Disposition ....................................................................................................................................28<br />

3.2 TESTNING SOM BEGREPP..........................................................................................................................30<br />

3.2.1 Testningens syfte ...........................................................................................................................30<br />

3.2.2 Testningens begränsningar ...........................................................................................................30<br />

3.2.3 Testningens omf<strong>att</strong>ning..................................................................................................................32<br />

3.2.4 Testningens ut<strong>för</strong>are......................................................................................................................33<br />

3.2.5 Testningens faser...........................................................................................................................34<br />

3.2.6 Funktionell eller strukturell testning .............................................................................................38<br />

3.2.7 Statisk eller dynamisk analys.........................................................................................................39<br />

3.2.8 Jäm<strong>för</strong>else av fel i hård- och <strong>mjukvara</strong> .........................................................................................41<br />

3.2.9 Orsaker till <strong>att</strong> incidenter inträffar................................................................................................43<br />

3.3 STRUKTURELL TESTNING.........................................................................................................................44<br />

3.3.1 Flödesterminologi .........................................................................................................................45<br />

3.3.2 Control Flow Testing (Path Testing).............................................................................................47<br />

3.3.3 Data Flow Testing.........................................................................................................................50<br />

3.3.4 Looptestning ..................................................................................................................................52<br />

3.3.5 Logikbaserad testning (villkorstestning) .......................................................................................54<br />

3.4 FUNKTIONELL TESTNING .........................................................................................................................55<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester Industriella informations och styrsystem


3.4.1 Domäntestning ..............................................................................................................................56<br />

3.4.2 Tillståndstestning ..........................................................................................................................61<br />

3.4.3 Logikbaserad testning ...................................................................................................................63<br />

3.4.4 Syntaxtestning................................................................................................................................64<br />

3.4.5 Transaction flow testing ................................................................................................................65<br />

3.5 STATISTISK TESTNING..............................................................................................................................66<br />

3.5.1 Felinjicering ..................................................................................................................................66<br />

3.5.2 Random testing..............................................................................................................................67<br />

3.5.3 Feluppsk<strong>att</strong>ning med hjälp av dubbla testlag................................................................................69<br />

3.6 STATISK ANALYS .....................................................................................................................................70<br />

3.6.1 Granskning och walkthrough ........................................................................................................70<br />

3.6.2 Inspektion ......................................................................................................................................71<br />

3.6.3 Formella metoder..........................................................................................................................72<br />

3.7 ÖVRIGA TEKNIKER...................................................................................................................................74<br />

3.7.1 Stresstestning.................................................................................................................................74<br />

3.7.2 Cleanroom testing .........................................................................................................................75<br />

3.7.3 N-version programmering.............................................................................................................76<br />

3.7.4 Modellbaserad verifiering (MBV) .................................................................................................78<br />

3.7.5 Regressionstestning.......................................................................................................................79<br />

3.8 SAMMANFATTNING..................................................................................................................................81<br />

3.8.1 Vilka teststrategier används på vilka mjukvarudelar ....................................................................81<br />

3.8.2 Vem bör <strong>testa</strong> på vilken nivå .........................................................................................................81<br />

3.8.3 Sammanställning över testtekniker................................................................................................81<br />

3.8.4 Sammanställning över vad som uppnås med hjälp av olika testtekniker.......................................83<br />

4 TESTTEKNIKERS INVERKAN PÅ FELSANNOLIKHET ................................................................85<br />

4.1 UPPDELNING I KRITIKALITETSNIVÅER ENLIGT IEC 61508 .......................................................................85<br />

4.2 MJUKVARUVERIFIERING DELVIS BASERAD PÅ IEC 61508........................................................................86<br />

4.2.1 Översiktlig mjukvaruverifiering ....................................................................................................86<br />

4.2.2 Verifiering uppdelad i statisk- och dynamisk analys.....................................................................87<br />

4.2.3 Verifiering i olika faser av testningen ...........................................................................................88<br />

4.3 IEC 61508 KOPPLAD TILL RISKVÄRDERINGSMATRIS FÖR BÖRSSYSTEM...................................................89<br />

5 DISKUSSION OCH SLUTSATS .............................................................................................................90<br />

5.1 DISKUSSION AV ARBETET ........................................................................................................................90<br />

5.1.1 Börssystemets roll i samhället .......................................................................................................90<br />

5.1.2 Myndighetens inblandning ............................................................................................................91<br />

5.1.3 Felsannolikhet <strong>för</strong> <strong>mjukvara</strong>..........................................................................................................92<br />

5.1.4 Mätetal <strong>för</strong> felbegrepp inom <strong>mjukvara</strong>..........................................................................................93<br />

5.1.5 Partitionering och klassificering av <strong>mjukvara</strong> ..............................................................................93<br />

5.1.6 Återkoppla testningen till felens ursprung.....................................................................................94<br />

5.1.7 Kommentarer och <strong>för</strong>slag på användningssätt av IEC 61508.......................................................94<br />

5.1.8 Forts<strong>att</strong>a studier............................................................................................................................95<br />

5.2 DISKUSSION RUNT FRÅGESTÄLLNING ......................................................................................................95<br />

5.2.1 Slutsats ..........................................................................................................................................97<br />

BILAGOR:<br />

A. Studie av säkerhetskritiska system 98<br />

B. Enkätbilaga 105<br />

C. Riskvärderingsmatrisenkät 112<br />

D. Konsekvensenkät 115<br />

ORDLISTA<br />

REFERENSER<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

1 Introduktion<br />

Kapitlet ger en introduktion till rapporten som är resultatet av ett examensarbete ut<strong>för</strong>t<br />

på OM Technology. Bakgrunden och syftet med arbetet presenteras och en<br />

beskrivning av arbetsgången ges. För <strong>att</strong> inte begrepp ska miss<strong>för</strong>stås innehåller även<br />

kapitlet ett terminologiavsnitt.<br />

1.1 Bakgrund<br />

Under de senaste decennierna har omsättningen på världens börser ökat kraftigt. På<br />

Stockholmsbörsen har omsättningen ökat från <strong>att</strong> under 70-talet uppgå till några<br />

miljoner kronor per dag till <strong>att</strong> nu dagligen omf<strong>att</strong>a tiotals miljarder kronor.<br />

Omsättningen har i genomsnitt ökat med 39 procent per år under det senaste decenniet<br />

[OMy99]. Omsättningsökningen, samt en ökad användning finansiella instrument som<br />

optioner och warrants, har med<strong>för</strong>t <strong>att</strong> mängden information som passerar igenom<br />

börssystemen ökar lavinartat. Den ökande informationsmängden har resulterat i <strong>att</strong><br />

nya och högre krav ställs på börssystemen.<br />

En viktig <strong>för</strong>ändring som påverkat konkurrenssituationen på de finansiella<br />

marknaderna är avregleringar och privatiseringar. Då börserna är privatägda<br />

prioriteras vinstintressen och därmed en effektivisering av handeln. Eftersom samma<br />

aktie ofta handlas på flera börser ställs också högre krav på <strong>att</strong> transaktionskostnaderna<br />

ska vara så låga som möjligt. Samtidigt är det ur konkurrenshänsyn<br />

mycket viktigt <strong>att</strong> systemen fungerar, i annat fall kan börserna byta systemleverantör.<br />

Antalet människor som handlar med aktier ökar ständigt och faktum är <strong>att</strong> de flesta<br />

svenskar idag har delar av sitt sparkapital placerat i aktier. Börshandeln är inte<br />

<strong>för</strong>enad med risker vad gäller människoliv, som i t.ex. kärnkrafts- och flygbranschen,<br />

men ett börshaveri kan få stora konsekvenser <strong>för</strong> såväl den enskilde småspararen som<br />

de stora finansiella institutionerna.<br />

Ett led i <strong>att</strong> identifiera och minimera riskerna i börshandeln är <strong>att</strong> ha väldefinierade<br />

metoder <strong>för</strong> <strong>att</strong> <strong>testa</strong> den <strong>mjukvara</strong> som utgör grunden <strong>för</strong> börssystemet. Testningen<br />

under utvecklingsarbetet syftar till <strong>att</strong> verifiera systemkraven och därigenom påvisa<br />

<strong>att</strong> de mjukvarubaserade börssystemen uppfyller kundernas önskemål.<br />

1.1.1 Företaget där examensarbetet är ut<strong>för</strong>t<br />

För femton år sedan startade OM den <strong>för</strong>sta elektroniska börshandelsplatsen i Sverige.<br />

Sedan dess har <strong>för</strong>etaget vuxit kraftigt. Idag är OM ett internationellt <strong>för</strong>etag som<br />

arbetar med <strong>att</strong> ta fram och driva elektroniska marknadsplatser <strong>för</strong> aktiehandel och<br />

andra finansiella instrument. OM driver bl.a. Stockholmsbörsen vars kunder är de<br />

mäklare som handlar över börsen.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 1(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

OM Technology är det affärsområde inom OM som arbetar med <strong>att</strong> utveckla<br />

programvaran <strong>för</strong> de elektroniska marknadsplatserna och <strong>för</strong> mäklarnas applikationer.<br />

Kunderna är främst börser runt om i världen.<br />

För <strong>att</strong> OM Technology ska fortsätta vara framgångsrikt är det viktigt <strong>att</strong> deras<br />

produkter håller hög kvalité. För <strong>att</strong> <strong>för</strong>vissa sig om produkternas kvalité ut<strong>för</strong>s<br />

omf<strong>att</strong>ande testning av <strong>mjukvara</strong>n. Men det är inte bara antalet tester som är av<br />

betydelse <strong>för</strong> <strong>att</strong> <strong>för</strong>vissa sig om kvalitén utan även vilka typer av tester som<br />

genom<strong>för</strong>s. Denna rapport innehåller en summarisk genomgång av testtekniker <strong>för</strong><br />

<strong>mjukvara</strong> och <strong>för</strong>eslår vilka av dessa tekniker som bör prioriteras fram<strong>för</strong> andra. Det<br />

är en <strong>för</strong>hoppning <strong>att</strong> denna rapport ska ge värdefulla idéer till det <strong>testa</strong>rbete som<br />

genom<strong>för</strong>s på <strong>för</strong>etaget.<br />

1.2 Syfte och mål<br />

De högre kraven leder till en lägre feltolerans och därmed ökar behovet av <strong>att</strong> kunna<br />

åtgärda de fel som finns i systemet. En <strong>för</strong>utsättning <strong>för</strong> <strong>att</strong> felen ska kunna åtgärdas<br />

är <strong>att</strong> de <strong>för</strong>st lokaliseras. Felen har olika kritikalitet, d.v.s. konsekvenserna av felen<br />

kan få olika allvarliga följder. Riskerna som de tänkbara felen kan ge upphov till<br />

påvisas lämpligen med en riskanalys. Ett sätt <strong>att</strong> hitta felen är <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong>n. Till<br />

<strong>testa</strong>rens <strong>för</strong>fogande finns en uppsjö av testtekniker som alla är mer eller mindre bra<br />

inom sitt användningsområde.<br />

Ovanstående fakta leder fram till en arbetsuppdelning i följande tre steg, där varje steg<br />

representerar ett delmål med en frågeställning.<br />

• En riskanalys ut<strong>för</strong>s <strong>för</strong> ett börssystem, där tänkbara incidenter identifieras. En<br />

frågeställning som genomsyrar riskanalysarbetet lyder som följer.<br />

Vilken kritikalitet har ett mjukvarubaserat börssystem?<br />

• En kartläggning och utvärdering av befintliga testtekniker som används inom<br />

säkerhetskritiska branscher sammanställs. Sammanställningen ska ge svar på<br />

följande frågeställning.<br />

Vilka tekniker finns <strong>för</strong> testning av <strong>mjukvara</strong> samt vilket resultat ger<br />

användandet av dessa?<br />

• De två delmålen leder fram till den analys som ska besvara den slutgiltiga<br />

frågeställningen.<br />

Vilka testtekniker <strong>för</strong>ordas givet en viss kritikalitet på <strong>mjukvara</strong>n?<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 2(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

1.2.1 Målgrupp<br />

Rapporten vänder sig <strong>för</strong>st och främst till <strong>för</strong>etaget där arbetet ut<strong>för</strong>ts. Målsättningen<br />

är <strong>att</strong> rapporten ska vara skriven så <strong>att</strong> alla som har en anknytning till<br />

systemutveckling inom <strong>för</strong>etaget ska kunna ta del av innehållet. Information gällande<br />

börssystem är skriven på ett sådant sätt <strong>att</strong> rapporten ska vara begriplig <strong>för</strong><br />

intresserade även utan<strong>för</strong> <strong>för</strong>etaget.<br />

1.2.2 Avgränsningar<br />

Utvecklingen från idé till färdig produkt bör följa en väl definierad arbetsgång <strong>för</strong> <strong>att</strong><br />

slutprodukten ska bli ett system som fungerar som det var tänkt. Synsättet <strong>att</strong> alla fel<br />

kan hittas genom testning och därefter åtgärdas så <strong>att</strong> systemet blir felfritt är inte<br />

realistiskt. Ett sådant arbetssätt kräver orimligt stora resurser och är inte särskilt<br />

kostnadseffektivt [Hei97]. Verifiering och validering tas kortf<strong>att</strong>at upp, men<br />

koncentrationen ligger främst på testningen av <strong>mjukvara</strong>. Utvecklingsprocesser som<br />

t.ex. kravidentifiering och design behandlas alltså bara översiktligt.<br />

Med börssystem avses den utrustning som krävs <strong>för</strong> <strong>att</strong> kunna bedriva börshandel,<br />

d.v.s. <strong>mjukvara</strong> och den tillhörande hårdvaran. Då inget annat sägs syftar begreppet<br />

börssystem i denna rapport till den <strong>mjukvara</strong> som systemet är uppbyggt av. En<br />

avgränsning som gjorts är <strong>att</strong> arbetet inte behandlar testning av hårdvara.<br />

1.3 Rapportdisposition<br />

I rapportens syfte och mål nämndes <strong>att</strong> examensarbetet är uppdelat i tre steg. Dessa<br />

steg utgör den röda tråden i rapporten och har lett till <strong>att</strong> arbetet följer en<br />

trestegsmodell.<br />

Steg 1<br />

Riskanalysarbete<br />

Steg 2<br />

Studie av<br />

testteknike<br />

r<br />

Riskvärderingsmatris<br />

Oacceptabel Oacceptabel Bedömning<br />

Oacceptabel Bedömning Acceptabel<br />

Bedömning Acceptabel Acceptabel<br />

Frekvens<br />

Sammanställning av<br />

testtekniker<br />

Figur 1-1. Den trestegsmodell som legat till grund <strong>för</strong> examensarbetet.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 3(124) Industriella informations och styrsystem<br />

Konsekvens<br />

Steg 3<br />

Vilka testtekniker <strong>för</strong>ordas givet<br />

en viss kritikalitet på <strong>mjukvara</strong>n?


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Vardera av dessa steg utgör ett kapitel i rapporten. I kapitel 2 ges en introduktion till<br />

riskanalysbegreppet varpå en riskanalys ut<strong>för</strong>s på ett fiktivt börssystem. Arbetet<br />

mynnar ut i en riskvärderingsmatris. De testtekniker som undersöktes under det andra<br />

steget sammanställs och presenteras i kapitel 3. I kapitel 4 rekommenderas vilka<br />

testtekniker som bör användas <strong>för</strong> <strong>att</strong> uppnå en viss felsannolikhet i systemet.<br />

Rekommendationerna bygger på en standard som har studerats. Diskussioner samt<br />

slutsatser som dragits under arbetets gång presenteras slutligen i kapitel 5.<br />

1.4 Organisation<br />

Examensarbetet, som är på 20 poäng, är ut<strong>för</strong>t av Stefan Särd och Dag Wester, båda<br />

teknologer på civilingenjörsutbildning i elektroteknik vid KTH med inriktning<br />

industriella informations- och styrsystem. Till examensarbetet var dessutom två<br />

handledare knutna, dels en ämneshandledare från OM Technology och dels en<br />

akademisk handledare från KTH. Handledarnas uppgifter var <strong>att</strong> ge stöd och tips, men<br />

också kritik. Lars Wahlberg, som är team leader <strong>för</strong> Test Tools på OM Technology,<br />

var ämneshandledare. Erik Johansson, snart färdig teknologiedoktor från industriella<br />

informations- och styrsystem på KTH, stod <strong>för</strong> den akademiska handledningen. I sin<br />

forskning har han bland annat studerat säkerhetskritiska system inom bl.a.<br />

kärnkraftsindustrin.<br />

1.5 Arbetsmetod<br />

I detta avsnitt beskrivs de metoder som använts under arbetets gång, d.v.s. metoder<br />

<strong>för</strong> hur information har samlats in och analyserats. Det framgår vilken typ av studie<br />

det rör sig om och tillvägagångssättet <strong>för</strong> <strong>att</strong> nå slutmålet. Läsaren bör vara bekant<br />

med innehållet i rapporten <strong>för</strong> <strong>att</strong> fullständigt <strong>för</strong>stå avsnittet eftersom vissa uttryck<br />

används som <strong>för</strong>klaras längre fram.<br />

Eftersom rapporten innehåller en sammanställning av befintliga testtekniker är det en<br />

studie med hermeneutiska inslag [Lun99]. Rapporten är både explorativ och<br />

beskrivande, explorativ eftersom olika kända testtekniker sammanställs och<br />

beskrivande då intervjuer genom<strong>för</strong>s som utreder hur de olika teknikerna används i<br />

verkligheten. Riskanalysen klassificeras som en beskrivande undersökning då den<br />

beskriver personalens syn på risker <strong>för</strong> <strong>för</strong>etaget.<br />

Arbetsmetoderna <strong>för</strong> de tre steg, som presenterades i Figur 1-1, beskrivs nedan. För<br />

<strong>att</strong> styrka vissa bitar i rapporten ut<strong>för</strong>des också intervjuer. En beskrivning av<br />

intervjuernas genom<strong>för</strong>ande beskrivs också.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 4(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

1.5.1 Riskanalys<br />

Riskanalysen grundar sig på ett fiktivt börssystem. Anledningen till <strong>att</strong> riskanalysen<br />

inte grundar sig på ett riktigt system är <strong>att</strong> ett sådant system är mycket komplext samt<br />

<strong>för</strong> <strong>att</strong> på så sätt inte exakt behöva beskriva hur systemen på <strong>för</strong>etaget är uppbyggda.<br />

Inspiration har dock tagits från ett riktigt börssystem var<strong>för</strong> resultatet från<br />

riskanalysen i stort sett är direkt applicerbart.<br />

Varje del av det fiktiva börssystemet analyserades med tanke på vilka incidenter som<br />

kan följa av olika fel. Arbetet resulterade i en sammanställning av tänkbara incidenter.<br />

För <strong>att</strong> göra bedömningar av hur allvarliga incidenterna kan tänkas vara gjordes en<br />

enkätundersökning på <strong>för</strong>etaget. Sammanställningen av enkäten redovisas i bilaga B.<br />

Enkäten i sin helhet finns bifogad som bilaga C.<br />

Då en riskanalys ut<strong>för</strong>s måste även incidenternas frekvenser kalkyleras. Riskanalysen<br />

fullbordades genom <strong>att</strong> ta fram en riskvärderingsmatris som relaterar vilka frekvenser<br />

som accepteras <strong>för</strong> olika allvarliga incidenter. Även riskvärderingsmatrisen togs fram<br />

genom en enkätundersökning. Under arbetets gång har också diskussioner och<br />

intervjuer med personer på <strong>för</strong>etaget genom<strong>för</strong>ts. Enkätsammanställningen finns<br />

bifogad i bilaga B och enkäten som bilaga D.<br />

1.5.2 Mjukvarutestning<br />

Denna del av rapporten beskriver vanligt <strong>för</strong>ekommande testtekniker. Information har<br />

inhämtats från <strong>för</strong> ämnet relevant litteratur. Böcker användes <strong>för</strong> <strong>att</strong> ge ett brett<br />

teoretisk underlag medan paper gav information om de senaste vetenskapliga rönen.<br />

Det är naturligtvis omöjligt <strong>att</strong> påstå <strong>att</strong> vi täckt in all relevant litteratur eftersom det<br />

är ett stort ämne som det skrivits många hyllmeter om. Då vi funnit <strong>att</strong> många<br />

<strong>för</strong>f<strong>att</strong>are refererar till varandra anser vi <strong>att</strong> vi använt oss av de mest framstående<br />

verken som behandlar testtekniker, och där<strong>för</strong> gjort en <strong>för</strong> ett examensarbete fullgod<br />

litteraturstudie. En ytterligare källa till information angående testtekniker var de<br />

intervjuer som gjordes i andra säkerhetskritiska branscher.<br />

1.5.3 Analys och diskussion<br />

De rekommendationer på vilka testtekniker som bör användas grundar sig så långt<br />

som möjligt på standarder. Vissa justeringar har dock gjorts <strong>för</strong> <strong>att</strong> teknikerna bättre<br />

ska passa rapportens upplägg. De diskussioner som <strong>för</strong>s bygger vidare på den<br />

information som hämtats från litteratur och intervjuer samt funderingar som väckts<br />

under arbetets gång.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 5(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

1.5.4 Intervjuer<br />

Intervjuer genom<strong>för</strong>des med representanter från två olika säkerhetskritiska branscher.<br />

Dessa var kärnkraft- och flygbranschen. Intervjuerna syftar till <strong>att</strong> ge information<br />

inom fram<strong>för</strong>allt två olika områden, dels vilka testtekniker som används men också<br />

vilken effekt användningen av dessa får på den <strong>testa</strong>nde <strong>mjukvara</strong>n.<br />

Intervjuerna ut<strong>för</strong>des enligt en semistandardiserad och strukturerad metod. Med<br />

semistandardiserad menas <strong>att</strong> en del av frågorna är gemensamma och obligatoriska <strong>för</strong><br />

samtliga intervjuer. De obligatoriska frågorna kompletteras med följdfrågor <strong>för</strong> <strong>att</strong> ge<br />

en bredare bild av ämnesområdet. Eftersom målsättningen med intervjuerna redan i<br />

<strong>för</strong>väg var fastställd är intervjuformen strukturerad. En strukturerad intervju innebär<br />

bl.a. <strong>att</strong> det finns ett väl definierat syfte och <strong>att</strong> frågorna är bestämda innan intervjun<br />

[Lun99].<br />

En sammanställning av intervjuerna finns i bilaga A.<br />

1.6 Terminologi<br />

Eftersom samma begrepp kan tolkas på många olika sätt är det viktigt <strong>att</strong> klargöra vad<br />

som menas, annars är det lätt hänt <strong>att</strong> miss<strong>för</strong>stånd uppstår mellan läsare och<br />

<strong>för</strong>f<strong>att</strong>are. Ordet fel är exempel på ett ord som ofta används med en tvetydig<br />

betydelse. Eftersom det inte finns några bra översättningar <strong>för</strong> engelskans fault och<br />

failure översätts båda dessa ord ofta med det svenska ordet fel. I vanligt tal sägs där<strong>för</strong><br />

ibland <strong>att</strong> fel inträffar när ett fel exekveras. En lämpligare benämning bör vara <strong>att</strong> en<br />

incident uppstår då ett fel exekveras. Nedan följer några definitioner på begrepp<br />

såsom vi använder dem i rapporten.<br />

• Fel kan med<strong>för</strong>a <strong>att</strong> <strong>mjukvara</strong>ns funktionalitet på något sätt avviker från vad som<br />

är önskvärt. Fel kan t.ex. vara implementerade i koden om programmeraren har<br />

programmerat fel eller inte programmerat vad som avsågs. Fel kan också uppstå<br />

vid tolkningen av luddiga kravspecifikationer. Ett fel är något som kvarstår ända<br />

tills det åtgärdas.<br />

• Felintensitet är ett mått på hur mycket fel som finns i koden. En tänkbar enhet är<br />

antal fel per kodrad.<br />

• Felsannolikheten anger sannolikheten <strong>för</strong> <strong>att</strong> ett fel exekveras. Eftersom ett system<br />

kan ha många fel som aldrig exekveras behöver inte en hög felintensitet leda till<br />

en hög felsannolikhet.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 6(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Följande figur, inspirerad av [Joh96], visar sambandet mellan några begrepp som<br />

används i rapporten. Efter figuren ges en <strong>för</strong>klaring till begreppen.<br />

Systemets möjliga tillstånd<br />

Felaktiga tillstånd<br />

Incident<br />

Figur 1-2. Av systemets alla tillstånd är några felaktiga. En del av de felaktiga tillstånden kan leda till<br />

en incident.<br />

• Då ett programmeringsfel exekveras går systemet in i ett felaktigt tillstånd. När<br />

systemet befinner sig i ett felaktigt tillstånd behöver det inte nödvändigtvis leda<br />

till händelser som avviker från specifikationen, men det kan göra det.<br />

• En incident är en mer eller mindre allvarlig och ospecificerad händelse som kan<br />

inträffa då systemet befinner sig i ett felaktigt tillstånd, vilket i sin tur är en följd<br />

av <strong>att</strong> ett fel har exekverats. En incident är således skillnaden mellan det önskade<br />

och det verkliga beteendet.<br />

Sammanf<strong>att</strong>ningsvis kan sägas <strong>att</strong> alla incidenter beror av fel, men alla fel leder inte<br />

till incidenter.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 7(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

2 Risker <strong>för</strong>knippade med börssystem<br />

Kapitlet mynnar ut i den riskanalys som har gjorts <strong>för</strong> ett fiktivt börssystem. För <strong>att</strong><br />

kunna ta del av riskanalysen presenteras <strong>för</strong>st vad som karaktäriserar ett börssystem<br />

samt de aktörer som kommer i kontakt med systemet. Efterföljande avsnitt beskriver<br />

det fiktiva börssystem som ligger till grund <strong>för</strong> riskanalysen. Innan riskanalysen i<br />

kapitel 2.3 ges även en generell <strong>för</strong>klaring till vad en riskanalys är.<br />

2.1 Vad är ett börssystem<br />

Ett börssystem kan sägas bestå av den mjuk- och hårdvara som tillsammans utgör en<br />

elektronisk marknadsplats <strong>för</strong> värdepapper. Den kommande framställningen fokuserar<br />

i <strong>för</strong>sta hand på börssystemets mjukvarudel.<br />

För <strong>att</strong> kunna ta del av den kommande riskanalysen är det bra <strong>att</strong> <strong>för</strong>st få en inblick i<br />

vad ett börssystem är samt vilka som kommer i kontakt med systemet. I det här<br />

kapitlet presenteras några av de <strong>för</strong>utsättningar som karaktäriserar ett börssystem. En<br />

presentation av det fiktiva börssystem, som ligger till grund <strong>för</strong> analysen, presenteras<br />

också. De exempel på regler och aktörer som <strong>för</strong>ekommer utgår alla från den svenska<br />

marknaden.<br />

2.1.1 Vad karaktäriserar ett börssystem<br />

Som omnämnts i rapportens bakgrund har omsättningen på världens börser ökat<br />

kraftigt under de senaste decennierna. På Stockholmsbörsen har omsättningen ökat<br />

från <strong>att</strong> under 70-talet uppgå till några miljoner kronor per dag till <strong>att</strong> nu dagligen<br />

omf<strong>att</strong>a tiotals miljarder kronor. Omsättningen har i genomsnitt ökat med 39 procent<br />

per år under det senaste decenniet [Omy99]. Omsättningsökningen samt en ökad<br />

användning av finansiella instrument som optioner och warrants, med<strong>för</strong> <strong>att</strong> mängden<br />

information som passerar börssystemen ökar lavinartat. En utmärkande egenskap <strong>för</strong><br />

ett börssystem är alltså <strong>att</strong> det ska klara <strong>att</strong> hantera stora mängder information.<br />

Dagens samhälle präglas av en stor tillgång på information som används under en kort<br />

tidsrymd. Fler och fler affärer över börsen görs på kortare sikt, vilket i sin tur ökar<br />

kravet på <strong>att</strong> affärerna ska ske ögonblickligen. Ytterligare ett kännetecken <strong>för</strong><br />

börssystem är där<strong>för</strong> <strong>att</strong> de bör kunna köras i realtid.<br />

Börshandeln är inte <strong>för</strong>enad med risker vad gäller människoliv, som i t.ex. kärnkrafts-<br />

och flygbranschen, men ett börshaveri kan få stora konsekvenser <strong>för</strong> såväl den<br />

enskilde småspararen som de stora finansiella institutionerna. Stora delar av<br />

samhällets tillgångar handlas via börsen, vilket <strong>för</strong>anleder <strong>att</strong> samhället ställer krav på<br />

en fungerande handel. Den myndighet som kontrollerar detta är Finansinspektionen.<br />

Då mer och mer av våra pengar finns investerade i bolag som handlas över börsen<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 8(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

ökar vikten av <strong>att</strong> handeln över börsen fungerar. Eftersom fel i börssystem kan få<br />

allvarliga ekonomiska konsekvenser skulle det eventuellt kunna klassificeras som<br />

säkerhetskritiskt.<br />

Sammanf<strong>att</strong>ningsvis sker alltså börshandeln under realtid på ett säkerhetskritiskt<br />

system som hanterar stora mängder information.<br />

2.1.2 Aktörer<br />

Med aktörer avses de personer och <strong>för</strong>etag som på något sätt är i kontakt med ett<br />

börssystem. De kan delas upp i följande kategorier.<br />

• Systemleverantörer<br />

• Börser<br />

• Börsmedlemmar<br />

• Användare<br />

• Investerare<br />

Systemleverantör, utvecklar<br />

programvara till börsen och dess<br />

medlemmar.<br />

Börsen, direktkontakt<br />

med börsmedlemmarna<br />

Börsmedlem,<br />

t.ex. en bank<br />

Användare, mäklare<br />

anställda av börsmedlem<br />

Figur 2-1. Börssystemets aktörer och deras relationer till varandra.<br />

Investerare<br />

Systemleverantörer utvecklar och tillhandahåller den <strong>mjukvara</strong>, ibland även hårdvara,<br />

som behövs <strong>för</strong> driften av börssystemet. Mjukvaran ska primärt styra systemet där<br />

handeln sker, men kan också utgöra de användarapplikationer som är gränssnittet<br />

mellan system och användare. Systemleverantörernas kunder kan vara både börser<br />

och börsmedlemmar, börser då det gäller hela system och börsmedlemmar då det<br />

gäller de användarapplikationer som används vid uppkoppling till börssystemet.<br />

Exempel på systemleverantör i Sverige är OM Technology.<br />

Börser erbjuder en marknadsplats där handel med olika värdepapper bedrivs. Börsens<br />

kunder är de som köper och säljer värdepapper direkt över börsen, här benämnda<br />

användare. Märk <strong>att</strong> det är skillnad mellan användare och investerare. Aktiehandeln i<br />

Sverige sker till största del över Stockholmsbörsen.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 9(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Börsmedlemmar är de banker och mäklarfirmor som är direkt uppkopplade mot<br />

börsen. För <strong>att</strong> bli medlem i Stockholmsbörsen krävs tillstånd från Finansinspektionen<br />

och börsen.<br />

Användare av börssystemet är de mäklare som arbetar på banker och mäklarfirmor<br />

som utgör börsens medlemmar. Användarna är direkt uppkopplade mot börsen.<br />

Investerare är de privatpersoner eller <strong>för</strong>etag som handlar på börsen via någon<br />

börsmedlem. De kommer därmed inte i direkt kontakt med börssystemet. Även<br />

personer som handlar med aktier via Internet räknas till denna kategori eftersom de<br />

går via en börsmedlem <strong>för</strong> <strong>att</strong> lägga in sina ordrar.<br />

Till aktörer kan även <strong>för</strong>etag räknas, vars aktier handlas på börsen. Det är inte bara<br />

aktier som handlas över börser, utan även t.ex. obligationer. Alltså kan även staten,<br />

eftersom den emitterar obligationer, räknas som en typ av aktör. Ska frågan om vilka<br />

som räknas till aktörer dras till sin spets, kan svaret sägas vara hela samhället. En<br />

finansmarknad som inte fungerar ger effekter på hela samhällsekonomin. Här nöjer vi<br />

oss dock med den lite smalare definitionen av aktörer.<br />

2.1.3 Ett fiktivt börssystem<br />

Eftersom ett börssystem är mycket komplext samt <strong>att</strong> viss information kan vara<br />

känslig, är den kommande analysen tillämpad på ett fiktivt börssystem. Det fiktiva<br />

börssystemet bygger till en viss del på ett riktigt system, men är klart <strong>för</strong>enklat.<br />

Endast den mest grundläggande funktionaliteten presenteras.<br />

Användare<br />

Figur 2-2 beskriver arkitekturen hos det fiktiva börssystemet. Därefter följer en<br />

<strong>för</strong>klaring till varje ruta i bilden.<br />

Ordermottagare<br />

Främre<br />

orderloggare<br />

Figur 2-2. Schematisk beskrivning av ett fiktivt börssystem.<br />

Primärsystem<br />

Matchare<br />

Sekundärsystem<br />

Informations<strong>för</strong>medlare<br />

Bakre<br />

orderloggare<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 10(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

För <strong>att</strong> systemet inte ska bli så känsligt <strong>för</strong> fel i t.ex. hårdvara används ett primär- och<br />

ett sekundärsystem. Dessa båda delsystem är identiska, d.v.s. de använder samma<br />

programvara och hårdvara. Fördelen med <strong>att</strong> ha två delsystem är <strong>att</strong> sekundärsystemet<br />

kan ta över driften vid en eventuell hårdvarukrasch i primärsystemet och på så sätt<br />

minskar risken <strong>för</strong> ett driftstopp. De båda systemen är geografiskt åtskilda till skydd<br />

<strong>för</strong> t.ex. brand, översvämningar och elavbrott. Eftersom det är samma <strong>mjukvara</strong> i båda<br />

delsystemen skyddar den redundanta konstruktionen däremot inte mot fel i<br />

<strong>mjukvara</strong>n.<br />

Under normala omständigheter, d.v.s. då båda systemen är funktionsdugliga, körs<br />

systemen parallellt, s.k. ”hot stand by”. Det primära systemet tar emot information<br />

från klienten, men både primär- och sekundärsystemet behandlar informationen<br />

parallellt under körning. Konsekvensen av denna design är <strong>att</strong> oavsett vilken del i<br />

systemet som sätts ur funktion så finns ändå exakt samma information i det parallella<br />

systemet och ingen information går <strong>för</strong>lorad.<br />

Användare är personer som har direktkontakt med börssystemet. Hit hör börssmäklare<br />

som lägger in köp- och säljordrar i systemet.<br />

Ordermottagaren är en del av börssystemets gränssnitt ut mot användaren. Här tas<br />

ordrar om hand och det kontrolleras <strong>att</strong> ordrarna är korrekt ifyllda. En bekräftelse,<br />

som ger information om den inkomna ordern accepteras eller ej, returneras till<br />

användaren. Då denna <strong>för</strong>sta kontroll av ordern är genom<strong>för</strong>d skickas accepterade<br />

ordrar vidare till den främre orderloggaren.<br />

Den främre orderloggaren tar emot ordrar från ordermottagaren och ger varje order<br />

ett specifikt sekvensnummer. Ordern skrivs till disk och skickas därefter till både<br />

sekundärsystemet och matcharen. Eftersom varje order har ett unikt sekvensnummer<br />

och finns lagrad på disk är det möjligt <strong>att</strong> återskapa ett visst <strong>för</strong>lopp av<br />

orderinmatningar i händelse av <strong>att</strong> systemet går ner.<br />

Det är i matcharen som köp- och säljordrar kombineras med varandra. Matcharen<br />

innehåller alla de regler som styr börshandeln. Ordrar kommer in från främre<br />

orderloggaren i en viss ordning, enligt ordrarnas sekvensnummer. Väl i matcharen<br />

jäm<strong>för</strong>s de mot ordrar som ännu inte matchats. Sker en matchning mellan köp- och<br />

säljorder skickas informationen angående matchningen vidare till bakre<br />

orderloggaren. Om det däremot inte går <strong>att</strong> matcha den inkomna ordern får orden<br />

ligga kvar i primärminnet i väntan på nya ordrar som ska matchas. Ordermatchning<br />

sker i <strong>för</strong>sta hand efter pris och i andra hand efter vid vilken tidpunkt ordern gavs.<br />

Tidpunkten representeras av sekvensnumret <strong>för</strong> <strong>att</strong> undvika identiska tidpunkter.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 11(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Den bakre orderloggaren tar emot matchade ordrar från matcharen. De matchade<br />

ordrarna skrivs till disk och skickas därefter till informations<strong>för</strong>medlaren. Då ordrarna<br />

lagras både <strong>för</strong>e och efter matcharen är det möjligt <strong>att</strong> i efterhand köra om en<br />

ordersekvens om matcharen gått ner eller om matchningsfel befaras ha inträffat.<br />

Informations<strong>för</strong>medlaren utgör tillsammans med ordermottageren börssystemets<br />

gränssnitt ut mot användarapplikationen. Om systemet fungerar som det ska får<br />

<strong>för</strong>medlaren identisk information från både det primära- och sekundära systemet.<br />

Eftersom informationen är identisk kastas det duplikat som sist anländer till<br />

informations<strong>för</strong>medlaren medan det <strong>för</strong>sta skickas vidare till användaren. Beroende på<br />

vad informationen innehåller skickas den ut till antingen en eller samtliga användare.<br />

Den enskilde användaren får t.ex. specifik information om sin order och samtliga<br />

användare får allmän information om <strong>att</strong> en affär har skett.<br />

2.2 Generell riskanalys<br />

En riskanalys <strong>för</strong> ett mjukvarusystem syftar till <strong>att</strong> kartlägga vilka typer av risker som<br />

användandet av systemet med<strong>för</strong>. I och med <strong>att</strong> en tydligare bild erhålls om vilka<br />

risker som finns, kan resurserna <strong>för</strong> <strong>att</strong> minska riskerna <strong>för</strong>delas på ett effektivare sätt.<br />

Med begreppet risk avses kombinationen av sannolikheten <strong>för</strong> <strong>att</strong> en incident inträffar<br />

och konsekvensgraden av den inträffade incidenten.<br />

Risk<br />

Figur 2-3. Begreppet risk.<br />

Som detta kapitel kommer <strong>att</strong> visa mynnar riskanalysen ut i en riskvärderingsmatris.<br />

Matrisen visar vilka typer av risker som är oacceptabla och vilka risker som inte är<br />

kostnadseffektiva <strong>att</strong> <strong>för</strong>ebygga.<br />

2.2.1 Incidenternas konsekvensgrader<br />

Då ett fel i systemet uppmärksammas ska den incident som felet kan leda till<br />

klassificeras efter konsekvensgrad. Omf<strong>att</strong>ande arbete har lagts ner inom bl.a. militära<br />

organ <strong>för</strong> <strong>att</strong> standardisera riskarbetet. Konsekvensgraderna kan delas upp i olika antal<br />

nivåer. Leveson <strong>för</strong>eslår <strong>att</strong> incidenterna delas upp i följande fyra nivåer [Lev95].<br />

• Katastrof<br />

• Kritisk<br />

• Marginell<br />

• Obetydlig<br />

Incidentens<br />

Incidentens<br />

= f ( konsekvensgrad , frekvens<br />

)<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 12(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Om det råder osäkerhet angående hur allvarliga följder en incident kan få, bör den<br />

högre konsekvensgraden användas. Så länge det <strong>för</strong>eligger tveksamheter är det<br />

säkrare <strong>att</strong> ta till lite marginaler. Om det senare visar sig <strong>att</strong> klassificeringen av<br />

incidenten är väl tilltagen kan den göras om.<br />

Tabellen nedan, som till viss del är hämtad ur [Joh96], innehåller en jäm<strong>för</strong>else som<br />

visar innebörden av olika konsekvensgrader. Tabellen visar vad ett mjukvarufel kan få<br />

<strong>för</strong> konsekvenser i jäm<strong>för</strong>else med liknande konsekvensgrad <strong>för</strong> en produktionsanläggning,<br />

miljön och människan.<br />

Mjukvaru<strong>för</strong>etag Produktionsanläggning<br />

Miljö Människa<br />

Katastrof T.ex. <strong>för</strong>lust av flera Förstörd Mycket Dödsfall<br />

viktiga beställningar<br />

allvarlig<br />

som i värsta fall kan<br />

leda till konkurs<br />

skada<br />

Kritisk Stor ekonomisk skada Stor skada, Stor skada Stor skada<br />

efter t.ex. <strong>för</strong>lust av <strong>för</strong>lust av<br />

eller sjukdom<br />

viktig order<br />

viktig order<br />

Marginell Mindre ekonomisk Mindre Mindre skada Liten skada<br />

<strong>för</strong>lust<br />

skada, <strong>för</strong>lust<br />

av mindre<br />

viktig order<br />

eller sjukdom<br />

Obetydlig Försumbar <strong>för</strong>lust Försumbar Försumbar Mindre ytlig<br />

skada skada skada<br />

Tabell 2-1. Beskrivning över vad jäm<strong>för</strong>bara konsekvenser kan innebära <strong>för</strong> olika kategorier.<br />

2.2.2 Incidenternas frekvens<br />

När incidenterna har klassificerats efter konsekvensgrad ska även sannolikheterna <strong>för</strong><br />

<strong>att</strong> de inträffar bedömas. Dessa bedömningar är ofta svårare <strong>att</strong> göra och kan där<strong>för</strong> bli<br />

lite osäkra. Det kan där<strong>för</strong> vara bättre <strong>att</strong> ta det säkra <strong>för</strong>e det osäkra och uppsk<strong>att</strong>a <strong>att</strong><br />

incidenterna <strong>för</strong>ekommer med högre frekvens. Sannolikheten går alltid <strong>att</strong> uppsk<strong>att</strong>a<br />

på nytt vid ett senare tillfälle.<br />

Följande tabell innehåller <strong>för</strong>klaringar till de termer som används <strong>för</strong> <strong>att</strong> beskriva<br />

frekvens i den kommande framställningen. Lämpligt är <strong>att</strong> <strong>för</strong> den specifika<br />

riskanalysen ange en ungefärlig siffra <strong>för</strong> varje frekvensnivå. Värdena beror på vad<br />

det är <strong>för</strong> system som riskanalysen är tänkt <strong>att</strong> beröra samt systemets livslängd.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 13(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Frekvens Förklaring<br />

Frekvent Inträffar många gånger under systemets livslängd<br />

Trolig Inträffar ett flertal gånger under systemets livslängd<br />

Sannolik Inträffar någon gång under systemets livslängd<br />

Försumbar Kan möjligen inträffa under systemets livslängd<br />

Osannolik Förväntas inte inträffa under systemets livslängd<br />

Tabell 2-2. Riskvärderingsmatrisens frekvensskala<br />

OBS! Utifrån systemleverantörens syn ökar sannolikheten <strong>för</strong> <strong>att</strong> en incident ska<br />

inträffa om flera likadana system är i drift samtidigt. Om t.ex. tio likadana system är i<br />

drift ökar sannolikheten <strong>för</strong> en incident med en faktor tio. En incident som är trolig <strong>för</strong><br />

ett system kan således bli frekvent <strong>för</strong> ett flertal system.<br />

2.2.3 Riskvärderingsmatris<br />

När incidenterna är bedömda efter dels konsekvensgrad och dels sannolikheten <strong>för</strong> <strong>att</strong><br />

de ska inträffa, kan riskerna värderas utifrån en riskvärderingsmatris. På matrisens<br />

axlar anges incidenternas frekvens samt konsekvensgrad. Nedan presenteras ett<br />

exempel på en riskvärderingsmatris.<br />

Frekvent Trolig Sannolik Försumbar Osannolik<br />

Katastrof Oacceptabel Oacceptabel Oacceptabel Oacceptabel Bedömning<br />

Kritisk Oacceptabel Bedömning Bedömning Bedömning Acceptabel<br />

Marginell Bedömning Bedömning Bedömning Acceptabel Acceptabel<br />

Obetydlig Bedömning Acceptabel Acceptabel Acceptabel Acceptabel<br />

Figur 2-4. Exempel på hur en riskvärderingsmatris kan se ut.<br />

I matrisens celler skrivs de termer som används <strong>för</strong> <strong>att</strong> gradera hur allvarlig risken är.<br />

Antalet uppdelningar kan variera. I detta exempel har följande tre uppdelningar gjorts.<br />

Oacceptabel: Risken är så allvarlig <strong>att</strong> den under inga omständigheter kan tillåtas<br />

inträffa i angivet frekvens- och konsekvensintervall.<br />

Bedömning: En bedömning måste göras från fall till fall hur kostnadseffektivt det<br />

är <strong>att</strong> <strong>för</strong>ebygga risken.<br />

Acceptabel: Konsekvensen av incidenten är så obetydlig <strong>att</strong> ingen åtgärd behöver<br />

genom<strong>för</strong>as.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 14(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

2.3 Riskanalys <strong>för</strong> ett börssystem<br />

I det här kapitlet presenteras den riskanalys som gjorts på det fiktiva börssystemet (se<br />

kapitel 2.1.3). Analysen resulterar i en riskvärderingsmatris som visar hur frekvent<br />

incidenter får inträffa <strong>för</strong> <strong>att</strong> det ska vara acceptabelt.<br />

Riskanalysen är skriven med utgångspunkt från en av <strong>för</strong>etagets produkter snarare än<br />

<strong>för</strong> hela <strong>för</strong>etaget. Det allvarligaste som kan hända med produkten är <strong>att</strong> <strong>för</strong>troendet<br />

<strong>för</strong>loras så mycket <strong>att</strong> varumärket dör. Om utgångspunkten istället hade varit <strong>för</strong>etaget<br />

är det allvarligaste som kan inträffa <strong>att</strong> <strong>för</strong>etaget går i konkurs.<br />

2.3.1 Definition av konsekvensgrad och frekvens<br />

Nedan definieras begreppen konsekvens och frekvens som utgör kolumn och rad i den<br />

kommande riskvärderingsmatrisen. Definitionerna av begreppen har ingen direkt<br />

koppling till något verkligt börssystem, men har tagits fram i samråd med ins<strong>att</strong>a<br />

personer på <strong>för</strong>etaget.<br />

Konsekvensgrad Förklaring<br />

Katastrof Föregås av en allvarlig incident som kan leda till konkurs.<br />

Varumärket skadas så allvarligt <strong>att</strong> det blir oanvändbart. Inga nya<br />

ordrar erhålls och befintliga kunder säger upp avtal.<br />

Kritisk Varumärket skadas så allvarligt <strong>att</strong> det inverkar negativt på<br />

möjligheten <strong>att</strong> sälja produkten. Enskilda avtal med direkt<br />

inblandade kunder riskeras sägas upp.<br />

Marginell Ringa skada på varumärket. Leder inte till minskad <strong>för</strong>säljning<br />

men kan med<strong>för</strong>a vissa direkta kostnader.<br />

Obetydlig Ej märkbar ekonomisk konsekvens. Visst irritationsmoment <strong>för</strong><br />

enstaka kunder.<br />

Tabell 2-3. Definition av konsekvensgrad.<br />

Följande tabell innehåller <strong>för</strong>klaringar till de termer som används <strong>för</strong> <strong>att</strong> beskriva<br />

frekvens i den kommande riskanalysen. Framställningen bygger på sannolikheten <strong>att</strong><br />

incidenter inträffar per tidsenhet. Det kan diskuteras huruvida valet av den enheten är<br />

bästa tänkbara. Om två system körs under ett år och det ena utsätts <strong>för</strong> en mindre<br />

belastning än det andra kommer troligen fler incidenter <strong>att</strong> inträffa i systemet med hög<br />

belastning. Antal incidenter per transaktioner skulle där<strong>för</strong> kunna vara en bättre enhet.<br />

Dock är enheten incidenter per tidsenhet mer generell och vanligt <strong>för</strong>ekommande i<br />

litteratur och standarder, vilket är motivet till <strong>att</strong> den används här. Definitionerna av<br />

frekvenser utgår från ett fiktivt börssystem med en uppsk<strong>att</strong>ad livslängd på ca 20 000<br />

drifttimmar, grundat på <strong>att</strong> systemet används ungefär 3000 timmar årligen under 5 till<br />

10 år.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 15(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Frekvens Förklaring Inträffar ungefär<br />

antal gånger per<br />

år<br />

Frekvent Inträffar många gånger under<br />

systemets livslängd<br />

Trolig Inträffar ett flertal gånger<br />

under systemets livslängd<br />

Sannolik Inträffar någon gång under<br />

systemets livslängd<br />

Försumbar Kan möjligen inträffa under<br />

systemets livslängd<br />

Osannolik Förväntas inte inträffa under<br />

systemets livslängd<br />

Tabell 2-4. Förklaring av begreppet frekvens <strong>för</strong> det fiktiva börssystemet.<br />

Inträffar ungefär<br />

antal gånger per<br />

timme<br />

> 30 > 10 -2<br />

3 10 -3<br />

0,3 10 -4<br />

0,03 10 -5<br />

< 0,003 < 10 -6<br />

OBS! Utifrån systemleverantörens syn ökar sannolikheten <strong>för</strong> <strong>att</strong> en incident ska<br />

inträffa om flera likadana system är i drift samtidigt. Om t.ex. tio likadana system är i<br />

drift ökar sannolikheten <strong>för</strong> en incident med en faktor tio. En incident som är trolig <strong>för</strong><br />

ett system kan således bli frekvent <strong>för</strong> ett flertal system.<br />

2.3.2 Riskvärderingsmatris<br />

Nedan presenteras en riskvärderingsmatris <strong>för</strong> produkten, d.v.s. ett mjukvarubaserat<br />

börssystem. Riskvärderingsmatrisen är framtagen med hjälp av en enkätundersökning,<br />

se bilaga B. Motivet till enkätundersökningen var <strong>att</strong> få med synpunkter från flera<br />

olika personer med större inblick i hur olika risker och dess konsekvenser kan påverka<br />

<strong>för</strong>etaget. Enkäten skickades främst till personer som har inblick i vad incidenter kan<br />

få <strong>för</strong> ekonomiska följder <strong>för</strong> <strong>för</strong>etaget. Som exempel på bef<strong>att</strong>ningar hos deltagarna<br />

kan nämnas linjechefer, avdelningschefer och projektledare.<br />

Frekvent Trolig Sannolik Försumbar Osannolik<br />

Katastrof Oacceptabel Oacceptabel Oacceptabel Oacceptabel Bedömning<br />

Kritisk Oacceptabel Oacceptabel Oacceptabel Bedömning Acceptabel<br />

Marginell Oacceptabel Oacceptabel Bedömning Acceptabel Acceptabel<br />

Obetydlig Oacceptabel Acceptabel Acceptabel Acceptabel Acceptabel<br />

Figur 2-5. Den riskvärderingsmatris som enkätundersökningen resulterade i.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 16(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

I matrisen skrivs de termer som används <strong>för</strong> <strong>att</strong> gradera hur allvarlig risken är. Antalet<br />

uppdelningar kan variera. I detta exempel har följande tre uppdelningar gjorts.<br />

Oacceptabel: Risken är så allvarlig <strong>att</strong> den under inga omständigheter kan tillåtas<br />

inträffa i angivet frekvens- och konsekvensintervall.<br />

Bedömning: En bedömning måste göras från fall till fall hur kostnadseffektivt det är<br />

<strong>att</strong> <strong>för</strong>ebygga risken.<br />

Acceptabel: Konsekvensen av incidenten är så obetydlig <strong>att</strong> ingen åtgärd behöver<br />

genom<strong>för</strong>as.<br />

2.3.3 Incidenter<br />

Incidenterna har tagits fram utifrån systemleverantörens synvinkel. De flesta<br />

incidenter berör dock på något sätt samtliga aktörer, d.v.s. systemleverantören,<br />

börsen, börsmedlemmar, användare och investerare. För samtliga incidenter skapas<br />

även större eller mindre indirekta kostnader, t.ex. i form av dålig publicitet. Dessa<br />

indirekta kostnader är svåra <strong>att</strong> uppsk<strong>att</strong>a till storlek, men de kan vara mycket<br />

ansenliga och därmed allvarliga.<br />

För <strong>att</strong> få en överskådlig framställning har incidenterna delats upp i följande fem<br />

kategorier.<br />

1. Störning i handel<br />

2. Felaktig handel<br />

3. Användargränssnitt<br />

4. Informationsflöde<br />

5. Övriga incidenter<br />

Samtliga incidenter har tilldelats ett incidentnummer (I.nr) bestående av två siffror.<br />

Den <strong>för</strong>sta siffran anger till vilken kategori incidenten hör och den andra är<br />

incidentens plats i kategorin. Incidenten I1.1 är således den <strong>för</strong>sta incidenten i den<br />

<strong>för</strong>sta kategorin.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 17(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Kategori 1. Störning i handel<br />

En störning i handeln med<strong>för</strong> <strong>att</strong> systemet på något sätt inte är tillgängligt <strong>för</strong> samtliga<br />

användare. Störningar kan drabba såväl enskilda som samtliga användare. Den<br />

allvarligaste incidenten i denna kategori är ett handelsstopp av hela systemet, vilket då<br />

drabbar samtliga användare.<br />

I.nr Incident Förklaring och bedömning<br />

I1.1 Handelsstopp i<br />

hela systemet<br />

på grund av<br />

tekniskt fel<br />

I1.2 Handelsstopp i<br />

vissa<br />

orderböcker<br />

Under drift inträffar ett fel i systemet som leder till <strong>att</strong> handeln<br />

stoppas. Nya ordrar kan ej läggas och ordrar som befinner sig i<br />

systemet kan ej matchas under handelsstoppets varaktighet.<br />

Tidsestimaten gäller från konstaterat driftsstopp tills <strong>att</strong><br />

marknaden har öppnat igen. Denna incident innebär däremot inte<br />

<strong>att</strong> information som finns i systemet går <strong>för</strong>lorad.<br />

Ett längre handelsstopp är en allvarlig incident då samtliga aktörer<br />

på något sätt drabbas.<br />

• Katastrof – dagar<br />

• Kritisk – timmar, upp till en dag<br />

• Marginell – mindre än en timme<br />

Under drift inträffar ett fel som med<strong>för</strong> <strong>att</strong> handeln stoppas <strong>för</strong> ett<br />

antal orderböcker. I de orderböcker som ej berörs av felet fortgår<br />

handeln som <strong>för</strong>ut.<br />

Konsekvensgraden beror dels på hur många orderböcker som<br />

berörs samt hur länge handelsstoppet pågår. Konsekvensgraden<br />

beror också på vilka orderböcker som går ner eftersom olika<br />

orderböcker har olika omsättning.<br />

• Kritisk – >90 % av antalet orderböcker under en dag<br />

• Marginell – 0-90 % av antalet orderböcker under en dag.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 18(124) Industriella informations och styrsystem


___________________________________________________________________________<br />

I1.3 Prestanda<strong>för</strong>sämringar<br />

I1.4 Användarapplikationer<br />

ej anslutna<br />

<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

Systemets prestanda <strong>för</strong>sämras så <strong>att</strong> användaren upplever<br />

<strong>för</strong>dröjningar vid t.ex. orderläggning. Fördröjningen uppstår då<br />

köer bildas i systemet och användarapplikationerna tvingas köa<br />

ordrar i det egna systemet.<br />

En prestanda<strong>för</strong>sämring kan uppstå av flera olika anledningar.<br />

Dimensioneringen av systemet kan vara dåligt tilltagen. Även om<br />

systemet fungerar till 100 % av normal tps-nivå kan köer uppstå<br />

vid ovanligt hård belastning. Fördröjningar kan också uppkomma<br />

p.g.a. <strong>att</strong> över<strong>för</strong>ingskapaciteten mellan användare och systemet är<br />

liten. Ingen av dessa anledningar har egentligen med<br />

börssystemets <strong>mjukvara</strong> <strong>att</strong> göra. Användaren bryr sig troligen<br />

inte om var<strong>för</strong> <strong>för</strong>dröjningen uppstår, bara <strong>att</strong> den existerar.<br />

Hur allvarlig incidenten är beror på graden av<br />

prestanda<strong>för</strong>sämringen samt dess varaktighet. Med <strong>för</strong>seningar<br />

menas <strong>att</strong> det tar några sekunder mer än vanligt <strong>att</strong> lägga en order.<br />

Nedan angivna konsekvensgrader gäller under antagandet <strong>att</strong><br />

prestanda<strong>för</strong>sämringen gäller en viss del av antalet ordrar under en<br />

handelsdag.<br />

• Marginell – 30-100 %<br />

• Obetydlig –


___________________________________________________________________________<br />

I1.5 Systemet<br />

startar ej vid<br />

initiering<br />

I1.6 Felaktig<br />

schemaläggning<br />

<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

Fel inträffar vid initieringen av systemet vilket med<strong>för</strong> <strong>att</strong> det inte<br />

startar som planerat.<br />

Under antagandet <strong>att</strong> felet åtgärdas till börsens öppnande påverkas<br />

inte användarna och konsekvensgraden blir marginell. Om felet<br />

inte åtgärdas innan handeln påbörjas inträffar istället incidenten<br />

handelsstopp (se Handelsstopp p.g.a. tekniskt fel, I1.1)<br />

• Obetydlig<br />

Systemet kan befinna sig i olika tillstånd. Ett tillstånd kan t.ex.<br />

vara tidsintervallet innan handeln startar, när handeln startar eller<br />

efter <strong>att</strong> handeln startat. Till dessa olika tillstånd är olika regler<br />

kopplade som bl.a. anger hur handeln ska bedrivas och vilka<br />

aktörer som ska få vilken information. Fel kan uppstå i<br />

schemaläggningen som styr de olika tillstånden. Detta kan<br />

resultera i en rad olika fel som t.ex. handelsstopp och eller <strong>att</strong> det<br />

går <strong>att</strong> handla när det inte ska vara möjligt.<br />

Konsekvensgraden kan vara mycket varierande beroende på vilka<br />

andra incidenter som inträffar på grund av den felaktiga<br />

schemaläggningen.<br />

• Marginell – Under antagandet <strong>att</strong> den felaktiga<br />

schemaläggningen t.ex. resulterar i en något <strong>för</strong>dröjd<br />

handelsstart.<br />

Tabell 2-5. Incidenter under kategorin ”störning i handel”.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 20(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Kategori 2. Felaktig handel<br />

En felaktig handel påverkar en enskild eller många ordrar. Konsekvensgraden är alltså<br />

starkt beroende av antalet ordrar som berörs. För enskilda investerare är det<br />

naturligtvis av större vikt om den egna ordern behandlas på ett felaktigt sätt än om det<br />

händer någon annan. Inom kategorin felaktig handel kan incidenterna leda till<br />

specifika engångskostnader.<br />

I.nr Incident Förklaring och bedömning<br />

I2.1 Order matchas<br />

felaktigt<br />

I2.2 Handelsregler<br />

följs ej<br />

I2.3 Felaktig<br />

avgifts- eller<br />

avrundningsavvikelse<br />

Ordern omf<strong>att</strong>ar något annat än det användaren önskar köpa eller<br />

sälja. Det kan bero på <strong>att</strong> informationen har <strong>för</strong>vanskats i systemet<br />

eller fel i matchning mellan köp- och säljorder.<br />

Om ordrar börjar matchas felaktigt kan det få mycket allvarliga<br />

konsekvenser eftersom det då rör sig om stora belopp. Omsättning<br />

under en normal handelsdag brukar uppgå till tiotals miljoner<br />

kronor per minut. Att ordrar matchas felaktigt under en längre tid<br />

är inte troligt eftersom en sådan incident ofta är lätt <strong>att</strong> upptäcka.<br />

Konsekvensgraderna nedan <strong>för</strong>utsätter <strong>att</strong> det går <strong>att</strong> backa<br />

tillbaka handeln så <strong>att</strong> ingen felmatchning sker. Under den tiden<br />

det tar <strong>att</strong> backa tillbaka ordrarna ligger systemet nere.<br />

• Kritisk – från en minut och uppåt<br />

• Marginell – mindre än en minut<br />

Om det inte går <strong>att</strong> backa tillbaka handeln är det naturligtvis ännu<br />

allvarligare. Skadeståndskrav kan ställas från berörda kunder vid<br />

annulering av gjorda affärer. Dessutom innebär det mycket dålig<br />

publicitet.<br />

• Katastrof – från en minut och uppåt<br />

• Kritisk – från enstaka ordrar upp till en minuts handel<br />

Med felaktiga handelsregler menas <strong>att</strong> ordrar inte matchas enligt<br />

de bestämmelser som råder. Innebörden kan t.ex. vara <strong>att</strong> en order<br />

betjänas trots <strong>att</strong> dess pris eller tidstämpel inte är den mest<br />

<strong>för</strong>delaktiga. Konsekvensgraden beror på hur många ordrar som<br />

berörs och i slutändan på annulerings- och ersättningskravens<br />

storlek.<br />

• Kritiskt<br />

• Marginell<br />

Även en liten avgifts- eller avrundningsavvikelse kan resultera i<br />

stora belopp om den får råda under lång tid.<br />

• Kritiskt<br />

• Marginell<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 21(124) Industriella informations och styrsystem


___________________________________________________________________________<br />

I2.4 Order<br />

<strong>för</strong>svinner innan<br />

matchning<br />

I2.5 Felaktigt ifylld<br />

order<br />

accepteras<br />

I2.6 Felaktig<br />

prissättning<br />

<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

Order som accepterats av systemet <strong>för</strong>svinner innan den hunnit<br />

matchats med en annan order. Användaren tror <strong>att</strong> ordern är under<br />

behandling när den i själva verket inte existerar.<br />

Incidentens konsekvens beror på hur många ordrar som<br />

<strong>för</strong>svinner. Att ordrar <strong>för</strong>svinner måste dock ses som en allvarlig<br />

incident, fram<strong>för</strong>allt eftersom <strong>för</strong>troendet <strong>för</strong> systemet skadas.<br />

Däremot är det kanske mindre troligt <strong>att</strong> det leder till <strong>att</strong> stora<br />

ersättningsbelopp betalas ut.<br />

• Marginell<br />

Användaren lägger order som ej är acceptabla, t.ex. säljer aktier<br />

som ej finns, och ordern går igenom. Denna typ av handelsfel är<br />

alltid av en allvarlig karaktär. Hur allvarligt det är beror på hur<br />

stora kostnader som behövs <strong>för</strong> ersättning och annulering.<br />

• Kritisk<br />

Prissättningen av affärerna sker på ett otillåtet sätt. T.ex. <strong>att</strong><br />

prisspreadar blir större än vad de får vara.<br />

Beroende på hur stora direkta och indirekta kostnader som<br />

uppkommer är incidenten olika allvarlig.<br />

• Kritiskt<br />

• Marginell<br />

Tabell 2-6. Konsekvenser under kategorin ”felaktig handel”.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 22(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Kategori 3. Användarapplikation<br />

Då användaren ger oavsiktliga kommandon är felet på något sätt antagligen kopplat<br />

till användargränssnittet. Dessa fel drabbar främst den användare som ut<strong>för</strong><br />

felinmatningen. Utvecklaren av användarapplikationen bär inte ensamt ansvar <strong>för</strong> <strong>att</strong><br />

användaren gör felinmatningar via användargränssnittet, även användaren själv bär en<br />

stor del av ansvaret. Användarapplikationen måste dock vara lätt <strong>att</strong> <strong>för</strong>stå och<br />

använda.<br />

I.nr Incident Förklaring och bedömning<br />

I3.1 Användaren<br />

ger oavsiktliga<br />

kommandon<br />

I3.2 Användaren<br />

gör felaktiga<br />

avläsningar<br />

I3.3 Svårbegriplig<br />

användarapplikation<br />

Dåligt användargränssnitt. Knappar och menyer ligger på<br />

olämpliga ställen vilket orsakar felinmatningar från användaren.<br />

Tvetydigheter vad gäller funktionalitet i användarapplikationen<br />

kan med<strong>för</strong>a <strong>att</strong> användaren ger kommandon som resulterar i<br />

oavsiktliga inmatningar.<br />

• Marginell – användargränssnitt som ofta missuppf<strong>att</strong>as och<br />

som leder till feltryckningar.<br />

Dåligt användargränssnitt. Informationen presenteras på ett<br />

otydligt sätt. Detta leder till <strong>att</strong> användaren får en skev bild av vad<br />

som händer på börsen.<br />

Om informationen är lätt <strong>att</strong> miss<strong>för</strong>stå kan det få indirekta<br />

konsekvenser då användaren inte trivs med användargränssnittet.<br />

Incidenten är dock inte allvarlig eftersom kostnaden inte direkt<br />

kan hän<strong>för</strong>as till börssystemet.<br />

• Obetydlig<br />

Användarapplikationen är så krånglig <strong>att</strong> användaren inte <strong>för</strong>står<br />

hur man använder all funktionalitet.<br />

Begränsade användarmöjligheter behöver inte betyda ekonomiska<br />

<strong>för</strong>luster men skadar <strong>för</strong>troendet <strong>för</strong> systemet.<br />

• Obetydlig<br />

Tabell 2-7. Incidenter under kategorin ”användarapplikation”.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 23(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Kategori 4. Informationsflöde<br />

Fel som uppstår i den information som går in i eller ut ur ett börssystem kan leda till<br />

olika konsekvenser.<br />

I.nr Incident Förklaring och bedömning<br />

I4.1 För mycket<br />

information<br />

når<br />

användaren<br />

I4.2 För lite<br />

information<br />

når<br />

användaren<br />

I4.3 Information om<br />

index m.m.<br />

uteblir<br />

Information som endast är avsedd <strong>för</strong> en viss adressat skickas ut<br />

som allmän information. Kritikaliteten beror givetvis på vad det är<br />

<strong>för</strong> slags information som visas och under vilken tidsrymd det<br />

sker. Konsekvensgraderna nedan <strong>för</strong>utsätter <strong>att</strong> incidenten berör<br />

samtliga ordrar.<br />

• Kritisk – från en handelsvecka och uppåt.<br />

• Marginell – upp till en handelsvecka.<br />

Användaren får inte tillräcklig information om status på egna<br />

ordrar, t.ex. <strong>att</strong> en order lagts in i systemet eller <strong>att</strong> en order gått<br />

igenom.<br />

Kan leda till <strong>att</strong> användaren f<strong>att</strong>ar beslut grundade på felaktig<br />

information som tillhandahållits av börssystemet. Hur allvarlig<br />

incidenten är beror på hur stora summor det rör sig om.<br />

• Marginell<br />

Uppdateringen av t.ex. indexinformation eller annan information<br />

som berör handeln. Hur allvarlig incidenten är beror på hur länge<br />

felet får råda. Förtroendet <strong>för</strong> systemet kan minska, men någon<br />

direkt kostnad kan inte härledas till felet.<br />

• Obetydlig<br />

Tabell 2-8. Incidenter under kategorin ”informationsflöde”.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 24(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Kategori 5. Övriga incidenter<br />

Övriga incidenter, som inte passar in under någon av de ovan nämnda kategorierna,<br />

presenteras i tabellen nedan.<br />

I.nr Incident Förklaring och bedömning<br />

I5.1 Ett av de två<br />

redundanta<br />

systemen ligger<br />

nere<br />

I5.2 Övergången<br />

mellan de<br />

redundanta<br />

systemen<br />

misslyckas<br />

I5.3 Korrekt ifylld<br />

order<br />

accepteras inte<br />

Säkerhetskritiska system bygger ofta på redundans, d.v.s. två eller<br />

flera system körs parallellt. Anledningen är <strong>att</strong> systemet ska<br />

fungera oavsett om ett delsystem slutar <strong>att</strong> fungera. Att ett<br />

delsystem går ner behöver inte få någon primär konsekvens, men<br />

så länge som delsystemet är ur drift blir systemet känsligare <strong>för</strong> fel<br />

och därmed instabilare.<br />

• Obetydlig – under <strong>för</strong>utsättning <strong>att</strong> felet åtgärdas.<br />

Då ett hårdvarufel uppstår i systemet ska driften gå över till den<br />

andra delen av det redundanta systemet. Om övergången inte<br />

fungerar som den ska kan det i sin tur leda till många andra<br />

incidenter, t.ex. ett handelsstopp.<br />

• Marginell<br />

En order som borde mottagits av systemet behandlas ej.<br />

Konsekvensgraden beror dels på hur många ordrar som berörs<br />

samt eventuella ersättningskrav.<br />

• Marginell<br />

Tabell 2-9. Incidenter under kategorin ”övriga incidenter”. Här benämns de incidenter som inte är<br />

lämpliga <strong>att</strong> sorteras in under de andra kategorierna.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 25(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

2.3.4 Incidenter sorterade efter konsekvensgrad<br />

I kommande tabell har samtliga incidenter sorterats efter konsekvensgrad med de<br />

allvarligaste incidenterna <strong>för</strong>st. Orsaken till denna sortering är <strong>att</strong> incidenterna lättare<br />

ska kunna appliceras på riskvärderingsmatrisen.<br />

Konsekvensgrad I.nr Incident<br />

Katastrof I1.1 Handelsstopp i hela systemet på grund av tekniskt fel<br />

I2.1 Order matchas felaktigt<br />

Kritisk<br />

I1.1 Handelsstopp i hela systemet på grund av tekniskt fel<br />

I1.2 Handelsstopp i vissa orderböcker<br />

I1.4 Användarapplikationer ej anslutna<br />

I2.1 Order matchas felaktigt<br />

I2.2 Felaktiga handelsregler<br />

I2.3 Felaktig avgifts- eller avrundningsavvikelse<br />

I2.5 Felaktigt ifylld order accepteras<br />

I2.6 Felaktig prissättning<br />

I4.1 För mycket information når användaren<br />

Marginell I1.1 Handelsstopp i hela systemet på grund av tekniskt fel<br />

I1.2 Handelsstopp i vissa orderböcker<br />

I1.3 Prestanda<strong>för</strong>sämringar<br />

I1.4 Användarapplikationer ej anslutna<br />

I1.6 Felaktig schemaläggning<br />

I2.1 Order matchas felaktigt<br />

I2.2 Felaktiga handelsregler<br />

I2.3 Felaktig avgifts- eller avrundningsavvikelse<br />

I2.4 Order <strong>för</strong>svinner innan matchning<br />

I2.6 Felaktig prissättning<br />

I3.1 Användaren ger oavsiktliga kommandon<br />

I4.1 För mycket information når användaren<br />

I4.2 För lite information når användaren<br />

I5.2 Övergången mellan de redundanta systemen misslyckas<br />

I5.3 Korrekt ifylld order accepteras inte<br />

Obetydlig I1.3 Prestanda<strong>för</strong>sämringar<br />

I1.5 Systemet startat ej vid initiering<br />

I3.2 Användaren gör felaktiga avläsningar<br />

I3.3 Svårbegriplig användarapplikation<br />

I4.3 Information om index m.m. uteblir<br />

I5.1 Ett av de två redundanta systemen ligger nere<br />

Tabell 2-10. Konsekvenserna sorterade efter konsekvensgrad.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 26(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

3 Mjukvarutestning<br />

Ett sätt <strong>att</strong> hitta fel i <strong>mjukvara</strong> är <strong>att</strong> tillämpa någon kombination av testtekniker.<br />

Syftet med användandet av testteknikerna är <strong>att</strong> hitta eventuella fel som har smugit sig<br />

in under utvecklingsprocessen. Det här kapitlet ger en beskrivning av vad som<br />

egentligen menas med testning och ett antal tekniker som kan användas vid testningen<br />

av mjukvarubaserade system presenteras.<br />

3.1 Introduktion<br />

En del av det arbete som ut<strong>för</strong>s <strong>för</strong> <strong>att</strong> verifiera och validera <strong>mjukvara</strong> kan vara <strong>att</strong><br />

genom<strong>för</strong>a tester. Med verifiering och validering avses här alla de aktiviteter vars mål<br />

är <strong>att</strong> <strong>mjukvara</strong>n ska stämma överrens med de ursprungliga kraven. Syftet med<br />

verifiering är <strong>att</strong> uppnå överensstämmelse mellan varje steg i utvecklingskedjan<br />

medan validering syftar till <strong>att</strong> påvisa överensstämmelse mellan systemet och<br />

beställarens <strong>för</strong>väntningar. Testning kan användas <strong>för</strong> <strong>att</strong> stärka både verifiering och<br />

validering; verifiering eftersom testning innebär en kontroll av systemet gentemot de<br />

specifikationer som framställts i tidigare faser av utvecklingen och validering genom<br />

<strong>att</strong> testerna demonstreras <strong>för</strong> beställaren som då kan granska huruvida systemet<br />

motsvarar <strong>för</strong>väntningarna.<br />

Verifiering och validering består som tidigare påpekats inte enbart av testning. Ofta<br />

används begreppet testning bara <strong>för</strong> aktiviteter som innebär <strong>att</strong> kod exekveras, s.k.<br />

dynamisk analys. En nog så viktig del <strong>för</strong> av verifierings- och valideringsarbetet är<br />

den statiska analysen, d.v.s. då kod inte exekveras.<br />

Strukturell<br />

testning<br />

Dynamisk analys<br />

Funktionell<br />

testning<br />

Verifiering och validering<br />

Statistisk testning<br />

Figur 3-1. Centrala begrepp som används inom mjukvarutestning.<br />

Statisk analys<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 27(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Dynamisk analys – Till den dynamiska analysen hör sådana testtekniker som bygger<br />

på <strong>att</strong> kod exekveras under test<strong>för</strong>farandet. Framställning av testtekniker i den här<br />

rapporten behandlar mestadels dynamiska tekniker, var<strong>för</strong> en ytterligare uppdelning<br />

gjorts av dessa enligt nedan.<br />

Strukturell testning – I den strukturella testningen, som även kallas ”white<br />

box”-testning eller ”glas-box”-testning, <strong>testa</strong>s <strong>mjukvara</strong>n utifrån systemets<br />

design. Gedigen kunskap om <strong>mjukvara</strong>ns design och fullständig tillgång till<br />

källkoden behövs.<br />

Funktionell testning – I den funktionella testningen, även kallat ”black box”testning,<br />

betraktas systemet som en svart låda. Det ställs inga krav på hur<br />

<strong>mjukvara</strong>n är implementerad eller designad och någon tillgång till källkod är<br />

inte nödvändig. Tester ut<strong>för</strong>s genom <strong>att</strong> systemet matas med lämpliga indata<br />

varpå resulterande utdata granskas. Funktionell testning innebär <strong>att</strong> ett<br />

program <strong>testa</strong>s med avseende på vad det kan göra, inte hur det gör det. Den<br />

funktionella testningen fokuserar således på <strong>mjukvara</strong>ns tilltänkta beteende<br />

och inte dess inre struktur.<br />

Statistisk testning – Det primära syftet med den statistiska testningen behöver<br />

inte vara <strong>att</strong> hitta nya fel. Istället används den statistiska testningen till <strong>att</strong> ge<br />

ett ungefärligt mått på hur många fel som existerar i <strong>mjukvara</strong>n.<br />

Statisk analys – Till skillnad mot den dynamiska analysen exekveras inte någon kod<br />

under den statiska analysen, var<strong>för</strong> den egentligen inte hör till begreppet testning.<br />

Arbetsinsatsen i den statiska analysen koncentreras istället till faserna <strong>för</strong>e<br />

implementationen, d.v.s. kravidentifierings- och designfaserna. Eftersom koden<br />

implementeras utefter specifikationer som är skrivna under dessa faser finns det<br />

mycket <strong>att</strong> vinna om fel som härrör från kravidentifierings- och designfaserna kan<br />

minimeras. Fel från de tidigare faserna som fortplantas till koden blir väsentligt dyrare<br />

<strong>att</strong> åtgärda än vanliga felkodningar. Även om den statiska analysen inte hör till<br />

gruppen av testtekniker tas den upp här eftersom användningen kan få en så stor<br />

inverkan på antalet fel i den färdigutvecklade <strong>mjukvara</strong>n.<br />

3.1.1 Disposition<br />

I kapitel 3.2 ges en introduktion till begreppet testning. Här beskrivs bl.a. syftet med<br />

testningen och de faser som den vanligtvis är uppdelad i. Kapitel 3.3 till 3.7 ger en<br />

grundlig <strong>för</strong>klaring till ett antal testtekniker. Dessa kapitel är främst till <strong>för</strong> den<br />

intresserade läsaren som vill ha mer <strong>för</strong>djupade kunskaper om testtekniker. Kapitlen<br />

kan också passa bra som uppslagsverk om information söks om en specifik testteknik.<br />

I Figur 3-2 visas alla de testtekniker som kommer <strong>att</strong> beskrivas samt uppdelningen<br />

efter kapitel. Avslutningsvis sammanf<strong>att</strong>as alla behandlade testtekniker i kapitel 3.8.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 28(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Strukturell<br />

testning<br />

Control flow testing<br />

Data flow testing<br />

Looptestning<br />

Logikbaserad testning<br />

Funktionell<br />

testning<br />

Domäntestning<br />

Tillståndstestning<br />

Logikbaserad testning<br />

Verifiering och validering<br />

Syntaxtestning<br />

Transaction flow testing<br />

Statistisk testning<br />

Felinjicering<br />

Random testing<br />

Dubbla testlag<br />

Statisk analys<br />

Granskning<br />

Walkthrough<br />

Inspektion<br />

Formella metoder<br />

Figur 3-2. Uppdelningen av testtekniker enligt den struktur som följs i kapitel 3.3 till 3.7.<br />

Övriga<br />

Stresstestning<br />

Cleanroom testing<br />

N-version programming<br />

Modellbaserad verifiering<br />

De tre grupperna strukturell, funktionell och statistisk testning innef<strong>att</strong>ar dynamiska<br />

tekniker och <strong>för</strong>klaras i kapitel 3.3, 3.4 respektive 3.5. Framställningen av den statiska<br />

analysen är inte lika omf<strong>att</strong>ande som den dynamiska och behöver där<strong>för</strong> inte delas<br />

upp i flera grupper. Den redovisas i sin helhet i kapitel 3.6. Det finns ett antal tekniker<br />

som vi ansåg vara nog viktiga <strong>för</strong> <strong>att</strong> beskriva men ändå svåra <strong>att</strong> placera in i under de<br />

nämnda rubrikerna. Dessa tekniker beskrivs i kapitel 3.7 under rubriken övriga<br />

tekniker.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 29(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

3.2 Testning som begrepp<br />

Innan den grundligare beskrivningen av testteknikerna presenteras kan det vara bra <strong>att</strong><br />

få en övergripande bild av begreppet testning. I detta kapitel beskrivs bl.a. syftet med<br />

testningen, dess begränsningar, testfaserna samt var i utvecklingen som felen uppstår.<br />

3.2.1 Testningens syfte<br />

Var<strong>för</strong> <strong>mjukvara</strong> ska <strong>testa</strong>s är en fråga som kan resultera i många olika svar beroende<br />

på vem som svarar. Då testning inte resulterar i några funna fel uppstår ofta glädje och<br />

många tolkar det som <strong>att</strong> koden är felfri. Å andra sidan är det bra om fel hittas<br />

eftersom det <strong>för</strong>st är då de kan åtgärdas. Testning kan således många gånger leda fram<br />

till ett lite tvetydigt <strong>för</strong>hållningssätt. Vi vet alla hur lyckan sprider sig i kroppen efter<br />

en lyckad kompilering. Från programmerarens sida är <strong>för</strong>hoppningen <strong>att</strong> inte hitta<br />

några fel, samtidigt som han faktiskt borde bli glad om felen upptäcks. [Kan93]<br />

formulerar följande ”A test that reveals a problem is a success. A test that did not<br />

reveal a problem was a waste of time.” Om <strong>för</strong>hoppningen enbart är <strong>att</strong> inte hitta<br />

några fel torde det bästa vara <strong>att</strong> inte <strong>testa</strong> överhuvudtaget [Bei90].<br />

Frågan är om <strong>testa</strong>ren gör ett bra eller dåligt jobb då han visar <strong>att</strong> <strong>mjukvara</strong>n är full<br />

med fel. Tyvärr finns det många projektledare som snarare bli irriterade än lättade<br />

över <strong>att</strong> felen faktiskt uppmärksammas. Det finns exempel på hur <strong>testa</strong>re har<br />

<strong>för</strong>bjudits <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> <strong>för</strong> <strong>att</strong> <strong>för</strong>etaget på så sätt ska klara av <strong>att</strong> leverera<br />

<strong>mjukvara</strong>n vid överenskommen tidpunkt [Kan93]. I vissa enstaka fall kan ett sådant<br />

<strong>för</strong>farande vara acceptabelt. Det handlar helt enkelt om var ribban ska läggas och hur<br />

många eventuella fel i <strong>mjukvara</strong>n som kan accepteras.<br />

En <strong>för</strong>utf<strong>att</strong>ad mening är <strong>att</strong> testning ska visa <strong>att</strong> det inte finns några fel i <strong>mjukvara</strong>n.<br />

Problemet är <strong>att</strong> det aldrig går <strong>att</strong> visa <strong>att</strong> programvara är helt felfri, det är endast<br />

motsatsen som kan bevisas. För <strong>att</strong> bevisa <strong>att</strong> <strong>mjukvara</strong>n är felfri krävs oändligt<br />

många testfall, samtidigt krävs det bara ett enda <strong>för</strong> <strong>att</strong> påvisa <strong>att</strong> <strong>mjukvara</strong>n inte<br />

fungerar som den ska. Redan år 1972 påpekade Dijkstra <strong>att</strong> ”program testing can be<br />

used to show the presence of bugs, but not their absence”. Det är ett påstående som i<br />

hög grad gäller än idag [Gar99].<br />

Syftet med testning borde där<strong>för</strong> vara <strong>att</strong> påvisa <strong>mjukvara</strong>ns brister istället <strong>för</strong> <strong>att</strong> visa<br />

<strong>att</strong> den faktiskt fungerar. Genom <strong>testa</strong>rbete kan fel hittas och åtgärdas, på så sätt höjs<br />

stegvis kvalitén på <strong>mjukvara</strong>n. Testning bör således ses som en kvalitets<strong>för</strong>höjande<br />

åtgärd snarare än <strong>att</strong> påvisa <strong>att</strong> <strong>mjukvara</strong>n är felfri.<br />

3.2.2 Testningens begränsningar<br />

I samma stund som <strong>mjukvara</strong> <strong>testa</strong>s finns en risk <strong>att</strong> <strong>testa</strong>ren invaggas i en falsk<br />

säkerhet. För hur kan <strong>testa</strong>ren veta <strong>att</strong> de testfall som genomlöpts verkligen täcker alla<br />

fel? Är det överhuvudtaget möjligt <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> fullständigt?<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 30(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Det finns många olika sätt på vilket <strong>mjukvara</strong> kan genomlöpas, många varianter på<br />

indata och många anledningar till <strong>att</strong> hårdvara kan sluta fungera. För <strong>att</strong> <strong>testa</strong> alla fall<br />

som ett större system kan utsättas <strong>för</strong> krävs näst intill oändligt många testfall. Redan<br />

1976 undersökte Myers ett program på 100 kodrader och konstaterade <strong>att</strong> programmet<br />

kunde genomlöpas på 10 18 unika sätt. Som jäm<strong>för</strong>else är universums existens endast<br />

4·10 17 sekunder. I ett annat av hans exempel hävdar han <strong>att</strong> ett program på endast 20<br />

kodrader kan genomlöpas på 10 14 unika sätt. En snabb <strong>testa</strong>re skulle kunna <strong>testa</strong> dem<br />

alla på en miljard år [Kan93]. Exemplen bör tas med en nypa salt men visar <strong>att</strong> även<br />

mindre program kan genomlöpas på många olika sätt. Lite större program kan bestå<br />

av många tusen kodrader och <strong>att</strong> <strong>testa</strong> alla exekveringsmöjligheter med ovanstående<br />

fakta i bakhuvudet måste anses vara näst intill omöjligt.<br />

Det är inte bara mängden testfall som begränsar testningen. Ofta är det svårt <strong>att</strong> <strong>testa</strong><br />

under realistiska <strong>för</strong>hållanden eftersom den verkliga miljön kan vara svår <strong>att</strong> simulera<br />

i en testmiljö. Exempel på svåra miljöer <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> i kan vara kärnkraftverk<br />

eller flygplan som ännu inte har byggts [Lev95].<br />

Mängden testfall och svårigheten <strong>att</strong> <strong>testa</strong> i en realistisk miljö till trots är det betydligt<br />

lättare <strong>att</strong> <strong>för</strong>utse hur en van användare brukar systemet än <strong>att</strong> göra detsamma <strong>för</strong><br />

nybörjare. Ovana användare har en <strong>för</strong>måga <strong>att</strong> belasta programmet på de mest<br />

underliga sätt. Användarnas beteenden kan också skilja sig radikalt från normal drift<br />

till onormal. Så fort människan har ett finger med i spelet i form av operatörer eller<br />

användare av systemet så kan vad som helst hända.<br />

Eftersom hälften av alla fel kan lokaliseras till de specifikationer som ligger till grund<br />

<strong>för</strong> testningen går det inte på något sätt <strong>att</strong> <strong>testa</strong> sig till en felfri <strong>mjukvara</strong> [Lev95].<br />

Om specifikationerna, som testerna verifieras mot, innehåller felaktigheter kommer<br />

dessa <strong>att</strong> fortplantas i den forts<strong>att</strong>a utvecklingen. Gediget arbete måste där<strong>för</strong> läggas<br />

ner på <strong>att</strong> kontrollera specifikationernas korrekthet. Detta statiska analysarbete är som<br />

tidigare påpekats egentligen inte <strong>att</strong> betrakta som testning.<br />

Med dagens testtekniker går det bara till en viss gräns <strong>att</strong> påvisa <strong>mjukvara</strong>s felfrihet.<br />

Litteraturundersökningar visar <strong>att</strong> de flesta är överens om <strong>att</strong> gränsen <strong>för</strong> vad som är<br />

möjligt <strong>att</strong> nå med testning går någonstans runt 10 -5 incidenter per timme [Gar99].<br />

Ofta är kraven på systemen i de säkerhetskritiska branscherna betydligt större än så.<br />

För särskilt kritiska delar av ett passagerarflyg av typen Boeing 777 tillåts allvarliga<br />

incident inträffa högst 10 -9 gånger per timme eller en gång på 100 000 driftår [Lit94].<br />

Att <strong>testa</strong> sig till en sådan felosäkerhet måste anses vara omöjligt.<br />

Sammanf<strong>att</strong>ningsvis kan det slås fast <strong>att</strong> <strong>mjukvara</strong> inte går <strong>att</strong> <strong>testa</strong> fullständigt<br />

eftersom det alltid finns omständigheter som begränsar möjligheten <strong>att</strong> <strong>testa</strong>. I och<br />

med det är testningen i sig alltid <strong>för</strong>knippad med en viss risk. Bara <strong>för</strong> <strong>att</strong> ett antal<br />

testfall har lyckats betyder det inte <strong>att</strong> <strong>mjukvara</strong>n fungerar. Låt oss ytterligare belysa<br />

detta med ett exempel. Antag <strong>att</strong> du är ute och fiskar i en sjö, och inte får någon fisk.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 31(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Kan du då med säkerhet säga <strong>att</strong> det inte finns någon fisk i sjön? Nej, inte med<br />

säkerhet. Möjligen kan du dra slutsatsen <strong>att</strong> det inte finns så mycket fisk i sjön, eller<br />

<strong>att</strong> du har fel bete på kroken (om du <strong>testa</strong>r <strong>mjukvara</strong> skulle dåligt bete kunna jäm<strong>för</strong>as<br />

med en ineffektiv testteknik). Om du å andra sidan mot <strong>för</strong>modan skulle få en fin fisk<br />

på kroken är sannolikheten liten <strong>att</strong> just den fisken är den enda i sjön. Alltså, oavsett<br />

om du hittar fel eller inte är det i stort sett omöjligt <strong>att</strong> avgöra hur många ytterligare<br />

fel som existerar.<br />

3.2.3 Testningens omf<strong>att</strong>ning<br />

Om vi <strong>för</strong>utsätter <strong>att</strong> det i stort sett är omöjligt <strong>att</strong> <strong>testa</strong> och åtgärda <strong>mjukvara</strong> tills den<br />

blir helt felfri kan en ny frågeställning ställas. Hur mycket resurser ska läggas ner på<br />

testningen?<br />

Antalet funna fel i <strong>mjukvara</strong>n beror på testningens omf<strong>att</strong>ning. Ju större resurser som<br />

avsätts <strong>för</strong> testningen desto större är sannolikheten <strong>att</strong> felen i <strong>mjukvara</strong>n hittas. Var<br />

gränsen ska gå <strong>för</strong> hur mycket resurser som ska läggas på testningen beror helt och<br />

hållet på vilka krav som ställs på systemet.<br />

Testningens omf<strong>att</strong>ning<br />

Kostnad <strong>för</strong> testning<br />

Antal kvarvarande<br />

fel i <strong>mjukvara</strong>n<br />

Figur 3-3. Ju större resurser som läggs på testning desto fler fel hittas. Det gäller <strong>att</strong> hitta en jämvikt<br />

mellan kostnad och feltolerans.<br />

Det är enligt Pressman inte ovanligt <strong>att</strong> mellan 30 och 40 procent av arbetet i ett<br />

mjukvaruprojekt läggs ner på testningen. Förhållandet mellan testning och övrigt<br />

arbete i projektet kan dock variera kraftigt mellan olika projekt. I vissa<br />

säkerhetskritiska system, där människoliv står på spel, kan kostnader som är kopplade<br />

till testningen vara tre till fem gånger större än projektets övriga kostnader<br />

tillsammans [Pre97].<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 32(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

3.2.4 Testningens ut<strong>för</strong>are<br />

Liksom andra personer som skapar något är programmeraren inte så mottaglig <strong>för</strong><br />

negativ kritik utan vill hellre visa <strong>att</strong> koden är korrekt implementerad och <strong>att</strong> den<br />

fungerar som den ska. Om någon oberoende person <strong>testa</strong>r programmerarens kod<br />

koncentreras testningen istället på <strong>att</strong> hitta eventuella fel. Syftet med den testningen<br />

skiljer sig något från då programmeraren själv <strong>testa</strong>r koden. Programmeraren blir<br />

knappast glad om nya fel upptäcks, men fel kommer antagligen alltid <strong>att</strong> finnas och<br />

hittar inte <strong>testa</strong>ren dem kommer troligen användaren <strong>att</strong> göra det [Pre97].<br />

Vem bör då egentligen undersöka om den kod som har producerats verkligen<br />

uppfyller de krav som ställts? Tre vanliga missuppf<strong>att</strong>ningar kan råda. Inget av dessa<br />

alternativ är <strong>att</strong> rekommendera [Pre97].<br />

1) Den partiske programmeraren <strong>testa</strong>r inte överhuvudtaget.<br />

2) Testningen lämnas helt över till en opartisk och utomstående <strong>testa</strong>vdelning.<br />

3) Den oberoende <strong>testa</strong>vdelningen tar vid <strong>för</strong>st efter implementationen.<br />

Det har visat sig <strong>att</strong> det finns mycket <strong>att</strong> vinna om testningen istället sker i samråd<br />

mellan programmeraren och andra oberoende <strong>testa</strong>re.<br />

Programmeraren ska genom testning av sin egen kod visa <strong>att</strong> de moduler och<br />

funktioner som produceras verkligen stämmer överens med designspecifikationen.<br />

Eftersom programmeraren är väl ins<strong>att</strong> i kodens uppbyggnad kan onödiga tester som<br />

t.ex. genomlöper programmet på likartat sätt elimineras. Det är viktigt <strong>att</strong><br />

programmeraren är medveten om sin dubbla roll som programmerare och <strong>testa</strong>re.<br />

Programmeraren <strong>för</strong>söker göra jobbet på enklast möjliga sätt <strong>för</strong> <strong>att</strong> klara av tidsmål<br />

och budget. Då samma person kliver in i <strong>testa</strong>rens roll ska han istället vara<br />

misstänksam, fientlig och bes<strong>att</strong> av <strong>att</strong> <strong>för</strong>söka få programmet <strong>att</strong> krascha [Bei90].<br />

Det oberoende testlaget tar oftast vid efter <strong>att</strong> koden har producerats och ska <strong>för</strong>st och<br />

främst <strong>testa</strong> <strong>att</strong> <strong>mjukvara</strong>ns funktioner tillsammans överensstämmer med kraven.<br />

Testarna kan då vara oberoende av utvecklingen eftersom de inte behöver ha några<br />

ingående kunskaper om hur koden är implementerad. Att de inte vet hur koden är<br />

implementerad är såväl en stor styrka som en stor svaghet. De ej ins<strong>att</strong>a <strong>testa</strong>rna har<br />

vagare <strong>för</strong>aningar om vad som är rimligt och ut<strong>för</strong> där<strong>för</strong> tester som programmerarna<br />

antagligen aldrig skulle komma på tanken <strong>att</strong> göra. En <strong>för</strong>del med <strong>att</strong> använda<br />

oberoende <strong>testa</strong>re är <strong>att</strong> det är lättare <strong>att</strong> vara nitisk gentemot någon annans kod. En<br />

programmerare som <strong>testa</strong>r sin egen kod anser ofta <strong>att</strong> ett test är lyckat om testfallet<br />

genomlöps utan några problem. Så borde det inte vara. Som påpekats tidigare bör<br />

nämligen ett lyckat test avslöja fel [Bei90].<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 33(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Följande tabell ger en översiktlig bild över vem som bör vara delaktig i de olika<br />

teststrategierna [Sco95].<br />

Programmerare Oberoende <strong>testa</strong>re<br />

Statisk analys Kan Kan<br />

Strukturell testning Bör<br />

Funktionell testning Bör Bör<br />

Statistisk testning Kan Bör<br />

Tabell 3-1. Hur olika teststrategier bör/kan användas av programmerare och oberoende <strong>testa</strong>re.<br />

3.2.5 Testningens faser<br />

Generellt kan mjukvaruutveckling delas upp i följande fyra faser; kravidentifiering,<br />

design, implementation samt en integration- eller testfas. Ofta används någon form av<br />

V-modell där de fyra faserna delas upp i flera mindre faser, se<br />

Figur 3-4.<br />

Kravidentifiering<br />

Översiktlig design<br />

Detaljerad design<br />

Implementationsfas<br />

Figur 3-4. Mjukvaruutveckling gestaltad i en V-modell.<br />

Integrationstest<br />

Modultest<br />

Systemtest<br />

I den <strong>för</strong>sta fasen, kravidentifieringen, analyseras vad systemet ska göra och en<br />

kravspecifikation tas fram. Utifrån kravspecifikationen görs en översiktlig designspecifikation<br />

som beskriver vilka moduler som ska bygga upp systemet samt dessa<br />

modulers funktionalitet. Den översiktliga designspecifikationen ligger till grund <strong>för</strong><br />

framtagandet av den detaljerade designspecifikationen som beskriver hur varje<br />

enskild modul ska implementeras i detalj. Implementationsfasen innebär <strong>att</strong> kod<br />

skrivs utifrån den detaljerade designspecifikationen. Efter implementationen ska de<br />

dynamiska testerna ta vid. Testerna brukar delas upp i tre steg; modultester,<br />

integrationstester och systemtester [Bei90]. Resultatet av testerna kontrolleras mot<br />

krav- och designspecifikationer; modultest mot detaljerad designspecifikation,<br />

integrationstest mot översiktlig designspecifikation och systemtest mot<br />

kravspecifikation.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 34(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Modultestning<br />

En modul är den minsta delen av ett program i mjukvarudesignen. Modulerna <strong>testa</strong>s<br />

och utvärderas gentemot den detaljerade designspecifikationen. Testningen<br />

undersöker både modulernas funktion och struktur, men strukturella tester används<br />

mer än funktionella. Innan modultestningen är klar är det viktigt <strong>att</strong> modulernas<br />

gränssnitt <strong>testa</strong>s. Om information inte kan komma in och ut ur modulen på ett korrekt<br />

sätt går det heller inte <strong>att</strong> fortsätta med de efterföljande integrationstesterna [Pre97].<br />

En enskild modul kan vanligtvis inte köras i sin helhet eftersom den vanligtvis inte<br />

utgör ett körbart program. För <strong>att</strong> möjliggöra testning måste s.k. drivers och stubs tas<br />

fram. En stub ersätter underordnade moduler som måste finnas med <strong>för</strong> <strong>att</strong> möjliggöra<br />

exekvering. Den har samma gränssnitt som den ers<strong>att</strong>a modulen men är i övrigt<br />

betydligt mindre komplex. En driver ersätter överordnade moduler och kan t.ex.<br />

utgöras av ett mainprogram som tar in testfall, ut<strong>för</strong> dessa på modulen och levererar<br />

resultaten av testerna som utdata [Pre97].<br />

Testfall<br />

Stub<br />

Figur 3-5. Förfaringssätt vid modultestning.<br />

Driver<br />

Modul som<br />

ska <strong>testa</strong>s<br />

Resultat<br />

Integrationstestning<br />

Genom integration sammanlänkas moduler till större mjukvaruenheter eller hela<br />

program. Integrationstestning har till syfte <strong>att</strong> upptäcka huruvida de olika modulerna<br />

samverkar med varandra i överensstämmelse med den översiktliga<br />

designspecifikationen. Bara <strong>för</strong> <strong>att</strong> modulerna fungerar var <strong>för</strong> sig är det inte säkert <strong>att</strong><br />

de fungerar tillsammans. Exempel på orsaker till fel kan vara globala datastrukturer<br />

eller <strong>att</strong> information går <strong>för</strong>lorad mellan modulernas gränssnitt [Bei90].<br />

Innan integrationstestning kan ut<strong>för</strong>as måste naturligtvis de olika modulerna<br />

integreras med varandra. Integrationen kan göras enligt olika strategier. Typexemplet<br />

på en mindre bra men tyvärr vanlig strategi är <strong>att</strong> integrera alla delarna till ett program<br />

och därefter påbörja integrationstestningen. Nackdelen med denna strategi är <strong>att</strong> det<br />

lätt kan bli rörigt om allt <strong>för</strong> många fel upptäcks. Strategin med<strong>för</strong> också svårigheter<br />

<strong>att</strong> lokalisera vad som egentligen orsakar felen. Integreringen bör istället ske enligt en<br />

inkrementell strategi. Det betyder <strong>att</strong> modulerna integreras i mindre delar och <strong>att</strong><br />

tester ut<strong>för</strong>s på smådelar som sedan kopplas samman till större. Genom ett använda en<br />

inkrementell integrationsstrategi är det lättare <strong>att</strong> hitta vilka delar av programmet som<br />

orsakar felen. Nedan presenteras de två vanligaste inkrementella<br />

integrationsstrategierna top-down integration och bottom-up integration [Pre97].<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 35(124) Industriella informations och styrsystem<br />

Stub


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Top-Down Integration<br />

Top-down integration utgår från toppen av modulkontrollhierarkin, d.v.s.<br />

mainprogrammet M1 i Figur 3-6. Därifrån byggs programmet upp genom <strong>att</strong> integrera<br />

underordnade moduler en i taget, antingen på djupet t.ex. M1-M2-M5-M8 eller på<br />

bredden t.ex. M1-M2-M3-M4. En underordnad modul som inte integrerats men som<br />

måste finnas med <strong>för</strong> <strong>att</strong> möjliggöra exekveringen ersätts med en stub.<br />

M7<br />

Figur 3-6. Top-down integration.<br />

Bottom-Up Integration<br />

Bottom-up integration utgår från botten av modulkontrollhierarkin och byggs på<br />

uppåt. Eftersom utgångspunkten är de mest underordnade modulerna finns inget<br />

behov av stubs som i top-down integration. Här behövs i stället driver som ersätter<br />

överordnade moduler. En driver kopplar samman underordnade moduler så <strong>att</strong> de kan<br />

<strong>testa</strong>s.<br />

I Figur 3-7 visas hur en bottom-up integration går till. De underordnade modulerna<br />

delas upp i två grupper. För <strong>att</strong> <strong>testa</strong> grupperna behövs en driver <strong>för</strong> varje grupp, D1<br />

respektive D2. Då varje grupp är <strong>testa</strong>d kan grupperna sättas samman under den<br />

överordnade modulen, M2. Då behövs inte längre D1 och D2. Integrations- och<br />

<strong>testa</strong>rbetet fortgår på likartat sätt ända tills mainprogrammet i M1 har integrerats.<br />

M3<br />

Figur 3-7. Bottom-up integration.<br />

M1<br />

M2 M3 M4<br />

M5<br />

M8<br />

D1<br />

M4<br />

M6<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 36(124) Industriella informations och styrsystem<br />

M1<br />

M2<br />

M5<br />

D2<br />

Grupp 1 Grupp 2<br />

M6


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Det finns både <strong>för</strong>- och nackdelar med top-down och bottom-up integration. Ofta är<br />

en <strong>för</strong>del <strong>för</strong> den ena strategin en nackdel <strong>för</strong> den andra. Den största <strong>för</strong>delen med topdown<br />

integration är <strong>att</strong> den övergripande strukturen på systemet kan <strong>testa</strong>s tidigt. Den<br />

största nackdelen är <strong>att</strong> det krävs mycket arbete med stubs. Största <strong>för</strong>delen med<br />

bottom-up är <strong>att</strong> det inte behövs några stubs och den största nackdelen är <strong>att</strong><br />

programmet som helhet inte existerar <strong>för</strong>rän alla moduler kopplats samman.<br />

Då ytterligare moduler integreras med <strong>mjukvara</strong>n innebär det <strong>att</strong> den <strong>för</strong>ändras. Då<br />

<strong>för</strong>ändringar in<strong>för</strong>s bör regressionstester genom<strong>för</strong>as, se kapitel 3.7.5, <strong>för</strong> <strong>att</strong><br />

kontrollera <strong>att</strong> <strong>för</strong>ändringen inte får oönskade effekter. Om det är många moduler som<br />

ska sättas samman blir det snabbt ett stort antal regressionstester som ska genom<strong>för</strong>as.<br />

Det är där<strong>för</strong> opraktiskt <strong>att</strong> <strong>testa</strong> om alla tester som genom<strong>för</strong>ts på programmet vid<br />

varje <strong>för</strong>ändring. Det viktiga är <strong>att</strong> de tester som kan upptäcka eventuellt<br />

nyintroducerade felaktigheter ut<strong>för</strong>s. Problemet <strong>att</strong> sortera bort de testfall som är<br />

överflödiga är allt annat än trivialt [Pre97].<br />

Systemtestning<br />

Under integrationsfasen kopplas modulerna samman till ett program. När programmet<br />

sedan samverkar med bl.a. användare och hårdvara bildas ett system. Systemtestning<br />

syftar till <strong>att</strong> upptäcka skillnader som uppkommer gentemot kravspecifikationen trots<br />

<strong>att</strong> modultestningen och integrationstestningen genomlöpts utan fel. Det är <strong>för</strong>st nu<br />

det går <strong>att</strong> <strong>testa</strong> hur väl systemet passar in i den miljö där det ska verka. De tilltänkta<br />

användarna kan prova systemet och se om det uppfyller deras <strong>för</strong>väntningar.<br />

Systemtestning utgörs av övergripande funktionalitets- och prestandatester.<br />

Säkerhetstester, med vilket menas t.ex. systemets skydd mot intrång, är ytterligare<br />

något som bör täckas in med systemtester [Bei90]. Eftersom säkerheten även är<br />

beroende av omgivningarna är säkerhetstester på det färdiga systemet i dess rätta<br />

miljö en viktig del av systemtestningen. Det sistnämnda ligger dock utan<strong>för</strong> denna<br />

rapports omfång.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 37(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

3.2.6 Funktionell eller strukturell testning<br />

Som omnämnts tidigare kan testning ut<strong>för</strong>as från en funktionell eller en strukturell<br />

utgångspunkt. Funktionell testning innebär <strong>att</strong> ett program <strong>testa</strong>s med avseende på vad<br />

det kan göra, inte hur det gör det. Sådana tester är inte möjliga <strong>att</strong> ut<strong>för</strong>a <strong>för</strong>rän det<br />

finns någon exekverbar modul eller program <strong>att</strong> köra. Där<strong>för</strong> ut<strong>för</strong>s de funktionella<br />

testerna vanligtvis i någon av projektets senare faser. Eftersom den funktionella<br />

testningen inte kräver större kännedom och tillgång till källkoden kan en större del av<br />

den funktionella testningen läggas ut på oberoende <strong>testa</strong>re.<br />

Strukturell testning är lite av motsatsen till funktionell testning eftersom den istället<br />

utgår från kodens struktur och uppbyggnad. Eftersom den strukturella testningen<br />

anknyter till koden är det lämpligt <strong>att</strong> testningen ligger i anslutning till skrivandet av<br />

koden. De strukturella testerna kräver kännedom om kodens struktur och där<strong>för</strong> ut<strong>för</strong>s<br />

testerna ofta av programmerarna själva.<br />

Implementationsfas<br />

Modultest<br />

Integrationstest Systemtest<br />

Strukturella tester Funktionella tester<br />

Figur 3-8. Skeden i projektet då strukturella och funktionella tester bör tillämpas.<br />

Det kan ibland vara svårt <strong>att</strong> avgöra vad som ska kategoriseras som funktionell<br />

respektive strukturell testning. En orsak är <strong>att</strong> mjukvarusystem ofta byggs i lager<br />

[Bei90]. Användaren ser bara det yttersta lagret som består av funktionaliteten. Det<br />

näst yttersta lagret har ur användarens synvinkel mindre <strong>att</strong> göra med funktionalitet<br />

och mer <strong>att</strong> göra med programmets struktur. Om däremot en programmerare som<br />

bygger det yttersta lagret betraktar det näst yttersta använder han sig av funktioner<br />

som finns där. För honom består då även det näst yttersta lagret av funktionalitet. Så<br />

beroende på ur vilken synvinkel programmet betraktas kan ett lager anses vara<br />

antingen funktionellt eller strukturellt.<br />

Användandet av funktionella testtekniker ersätter inte nyttan med strukturella tester.<br />

Strukturella och funktionella testtekniker har nämligen olika <strong>för</strong> och nackdelar. De är<br />

olika bra på <strong>att</strong> hitta olika typer av fel. Strukturell testning tenderar till <strong>att</strong> upptäcka fel<br />

som härstammar från själva kodskrivandet medan funktionella tester tenderar <strong>att</strong><br />

upptäcka fel som uppstår då specifikationer tolkats på ett felaktigt sätt. För <strong>att</strong> få en så<br />

heltäckande testning som möjligt bör både strukturell och funktionell testning<br />

genom<strong>för</strong>as [Per95].<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 38(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

3.2.7 Statisk eller dynamisk analys<br />

Det har visats <strong>att</strong> fel som kommer från de tidiga faserna, d.v.s. innan<br />

implementationsfasen, ofta är av allvarligare karaktär än fel som uppkommer i ett<br />

senare skede av utvecklingen [Jon96]. En studie av IBM visar <strong>att</strong> det finns mycket <strong>att</strong><br />

vinna om felen hittas och åtgärdas i ett tidigt skede av projektet. Om fel från<br />

kravidentifieringsfasen ska rättas till i utvecklingens senare faser blir kostnaderna<br />

betydligt större än om samma fel hade åtgärdats redan då de uppstod. För <strong>att</strong><br />

lokalisera fel som smugit sig in i utvecklingen innan implementationsfasen bör någon<br />

slags statisk analys tillämpas.<br />

Testning är en dynamisk aktivitet som innebär <strong>att</strong> kod exekveras. Den dynamiska<br />

analysen bör <strong>för</strong>egås av en statisk analys som innebär <strong>att</strong> krav och<br />

designspecifikationer undersöks och analyseras. Den statiska analysen ut<strong>för</strong>s<br />

vanligtvis <strong>för</strong>e implementationen medan dynamiska aktiviteter som testning ut<strong>för</strong>s<br />

efter implementationen.<br />

Statisk analys Dynamisk analys<br />

Kravidentifiering<br />

Översiktlig design<br />

Detaljerad design<br />

Implementationsfas<br />

Integrationstest<br />

Modultest<br />

Systemtest<br />

Figur 3-9. Figuren visar vilka faser som lämpar sig <strong>för</strong> verifiering med statisk analys respektive den<br />

dynamisk aktiviteten testning.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 39(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

I Figur 3-10 presenteras en del av studien från IBM som visar <strong>att</strong> kostnaden <strong>för</strong><br />

testningen kan skäras ner till en tredjedel om arbete läggs ner på <strong>att</strong> åtgärda felen<br />

innan koden har producerats [Per95]. Siffror och resultat i exemplet ska inte tas som<br />

exakta. Poängen är <strong>att</strong> åskådliggöra den statiska analysens betydelse och <strong>för</strong>delar.<br />

Testning<br />

utan statisk analys<br />

Total<br />

testkostnad<br />

Återstående<br />

antal fel<br />

0 20<br />

0 40<br />

0 60<br />

480 12<br />

1680 0<br />

Kravidentifiering<br />

20 fel<br />

ÅK = 1<br />

ÅK = 1<br />

ÅK = 1<br />

ÅK = 10<br />

ÅK = 100<br />

Design<br />

20 fel<br />

Implementation<br />

20 fel<br />

Test<br />

80% felreduktion<br />

Produktion<br />

0 fel<br />

Testning<br />

med statisk analys<br />

Återstående<br />

antal fel<br />

Total<br />

testkostnad<br />

10 10<br />

15 25<br />

18 42<br />

4 182<br />

0 582<br />

ÅK = Åtgärdskostnad<br />

Figur 3-10. Undersökningen från IBM visar <strong>att</strong> kostnaden <strong>för</strong> testning kan skäras ner till en tredjedel<br />

om den dynamiska analysen <strong>för</strong>egås av en statisk analys.<br />

Studien visar <strong>att</strong> vid utvecklingen av ett 1000 kodraders program uppstår 60 fel i de<br />

tre <strong>för</strong>sta faserna. Då statisk analys tillämpas kan hälften av dessa fel lokaliseras och<br />

åtgärdas redan i de faser där de uppkommer. På så sätt återstår endast 18 av de 60<br />

felen efter implementationen. Testningen efter implementationen hittar 80 procent av<br />

de kvarvarande felen. Dessa fel kostar tio gånger mer <strong>att</strong> åtgärda än om de istället<br />

hade hittats och åtgärdats tidigare i projektet. Felen som hittas <strong>för</strong>st när programmet<br />

finns på marknaden kostar hundra gånger mer <strong>att</strong> åtgärda. Sammanf<strong>att</strong>ningsvis<br />

konstateras <strong>att</strong> kostnaderna kan minska avsevärt om statisk analys tillämpas innan<br />

koden har producerats och de traditionella testerna tar vid.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 40(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Ur ett kostnadsperspektiv är det bra om felen hittas så fort som möjligt efter <strong>att</strong> de<br />

uppkommit. Idealfallet vore där<strong>för</strong> <strong>att</strong> alla fel som uppkom innan kodningen hittades<br />

via den statiska analysen medan alla fel som uppkommer under själva kodningen<br />

hittas via den dynamiska analysen. Exemplet ovan belyser <strong>för</strong>delar som kan uppnås<br />

genom <strong>att</strong> tillämpa statisk analys. Det betyder dock inte <strong>att</strong> statisk analys kan ersätta<br />

den dynamiska. I exemplet, liksom i verkligheten, uppkommer det fel även efter de<br />

faser som vanligtvis berörs av den statiska analysen. Kontentan är alltså <strong>att</strong> både<br />

statisk och dynamisk analys har sina <strong>för</strong>delar, och bäst resultat erhålls genom <strong>att</strong><br />

använda en kombination av de två.<br />

3.2.8 Jäm<strong>för</strong>else av fel i hård- och <strong>mjukvara</strong><br />

Om upptäckta fel rättas till under tidens gång kan det kännas naturligt <strong>att</strong> tro <strong>att</strong><br />

felintensiteten i ett system minskar med tiden. Antagandet kan dock visa sig vara<br />

något <strong>för</strong>hastat. I och med <strong>att</strong> systemet antas vara näst intill felfritt så används inte<br />

lika mycket resurser till <strong>att</strong> <strong>för</strong>ebygga risker och dess konsekvenser då nya versioner<br />

av systemet utvecklas. En oberättigad ökad tilltro till systemet kan också med<strong>för</strong>a <strong>att</strong><br />

säkerhetsmarginaler minimeras i tron <strong>att</strong> de är överflödiga [Lev95].<br />

Nedan följer en diskussion angående felintensitet som funktion av tiden <strong>för</strong> hård- och<br />

mjukvarusystem. Denna rapport kommer <strong>att</strong> fokusera på mjukvarusystem.<br />

Hårdvaruavsnittet finns med <strong>för</strong> <strong>att</strong> ge en <strong>för</strong>ståelse <strong>för</strong> begreppet felintensitet samt<br />

<strong>för</strong> <strong>att</strong> påvisa skillnaden mellan hård- och <strong>mjukvara</strong>.<br />

Hårdvara<br />

Då ny hårdvara utvecklas brukar den vara behäftad med en hel del fel som härrör från<br />

design- och produktionsfel. Designfelen kan <strong>för</strong>hoppningsvis justeras utan <strong>att</strong> allt<strong>för</strong><br />

många nya fel tillkommer. Produktionsfelen reduceras allteftersom<br />

produktionsapparaten finjusteras. Med tiden minskas således felintensiteten. Men i<br />

takt med <strong>att</strong> hårdvaran åldras börjar felintensiteten återigen öka, vilket orsakar den<br />

s.k. badkarskurvan, se Figur 3-11 nedan [Pre97]. Anledningen till <strong>att</strong> hårdvaran<br />

<strong>för</strong>sämras med tiden kan ha flera olika orsaker som t.ex. <strong>att</strong> materialet åldras eller <strong>att</strong><br />

hårdvaran på annat sätt slits ut.<br />

Felintensitet<br />

Figur 3-11. Kurvan, som ofta benämns badkarskurvan, beskriver felintensitet <strong>för</strong> hårdvara från<br />

nyutveckling tills den slits ut.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 41(124) Industriella informations och styrsystem<br />

Tid


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Mjukvara<br />

Felintensiteten <strong>för</strong> nyutvecklad <strong>mjukvara</strong> antar i början ett liknande utseende som <strong>för</strong><br />

nyutvecklad hårdvara. Ofta är även ny <strong>mjukvara</strong> behäftad med fel orsakade från<br />

design- och implementationsarbetet. I och med <strong>att</strong> felen åtgärdas minskas<br />

felintensiteten på samma sätt som <strong>för</strong> hårdvaran. I idealfallet bör där<strong>för</strong> felintensiteten<br />

<strong>för</strong> <strong>mjukvara</strong> fortsätta <strong>att</strong> minska med tiden, då fler och fler fel rättas till [Pre97].<br />

En klar skillnad mellan hård- och <strong>mjukvara</strong> är <strong>att</strong> <strong>mjukvara</strong>n inte åldras på samma sätt<br />

som hårdvaran. Mjukvara slits inte ut eller blir sämre bara <strong>för</strong> <strong>att</strong> den blir åldersstigen.<br />

Det betyder dock inte <strong>att</strong> idealfallet i Figur 3-12 är <strong>för</strong>enligt med verkligheten. Ett<br />

vanligt dilemma är <strong>att</strong> nya fel uppstår då gamla rättas till. För varje ny version av<br />

koden kan felintensiteten öka istället <strong>för</strong> <strong>att</strong> minska. Om systemet är komplext kan ett<br />

åtgärdat fel ibland resultera i en uppsjö nya fel, vilket med<strong>för</strong> <strong>att</strong> det i vissa fall kan<br />

vara klokt <strong>att</strong> avstå från <strong>att</strong> rätta till fel.<br />

Felintensitet<br />

Idealfallet<br />

Verklig<br />

felintensitet<br />

Större <strong>för</strong>ändring<br />

av <strong>mjukvara</strong>n<br />

Figur 3-12. Felintensitet <strong>för</strong> <strong>mjukvara</strong> som funktion av tiden, dels <strong>för</strong> idealfallet och dels <strong>för</strong><br />

verkligheten [Pre97].<br />

Om <strong>mjukvara</strong>n har använts under lång tid utan <strong>att</strong> några incidenter inträffat är det lätt<br />

<strong>att</strong> tro <strong>att</strong> inga incidenter heller kommer <strong>att</strong> inträffa i framtiden. Det är lätt <strong>att</strong> invagga<br />

sig i falsk säkerhet då <strong>mjukvara</strong>n har använts under en lång tid utan modifieringar. De<br />

yttre <strong>för</strong>utsättningarna kan däremot <strong>för</strong>ändrats, t.ex. mängden data som ska passera<br />

genom systemet. Resultatet kan bli <strong>att</strong> systemet antar nya tillstånd som tidigare inte<br />

<strong>för</strong>ekommit och därmed ökar sannolikheten <strong>för</strong> <strong>att</strong> ett fel uppträder. Observera <strong>att</strong> det<br />

inte betyder <strong>att</strong> felintensiteten i koden ökar, utan istället en ökad sannolikhet <strong>för</strong> <strong>att</strong> fel<br />

kommer <strong>att</strong> exekveras.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 42(124) Industriella informations och styrsystem<br />

Tid


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

3.2.9 Orsaker till <strong>att</strong> incidenter inträffar<br />

En incident kan uppstå av många olika anledningar. Enligt [Joh96] kan incidenter<br />

huvudsakligen kopplas till följande fyra områden.<br />

1. Fel i kravspecifikation<br />

Det är viktigt <strong>att</strong> det redan från början inte råder några miss<strong>för</strong>stånd mellan kund<br />

och leverantör. Om kravspecifikationen inte speglar kundens egentliga önskemål<br />

finns en stor risk <strong>att</strong> leverantören utvecklar något som kunden inte <strong>för</strong>väntar sig.<br />

Leverantören kan stringent följa specifikationerna, och tro <strong>att</strong> de utvecklar något<br />

som kunden efterfrågar, när kunden egentligen avsåg något annat. Eftersom det i<br />

efterhand är mycket kostsamt <strong>att</strong> gå tillbaka i utvecklingsarbetet är det viktigt <strong>att</strong><br />

åtgärda sådana fel i ett tidigt skede av utvecklingen.<br />

2. Fel från design- och implementationsfasen<br />

Majoriteten av felen kommer från design- eller implementationsfasen. Felen kan<br />

härstamma både från människa eller ett verktyg, t.ex. en kompilator.<br />

3. Fel i hårdvara<br />

Till all <strong>mjukvara</strong> finns någon hårdvara kopplad. Fel kan existera i hårdvaran men<br />

kan också uppstå om den utsätts <strong>för</strong> stora påfrestningar.<br />

4. Fel från operatören<br />

Eftersom system i slutändan styrs av människan kan också fel uppkomma då<br />

operatören ger otillåtna kommandon eller på annat sätt utgör fara <strong>för</strong> systemet.<br />

Enligt [Hei97] härstammar ungefär hälften av alla fel från arbetet innan<br />

implementationen. Nedanstående tabell ger en vägledning över hur stor del av felen<br />

som uppkommer i olika delar av mjukvaruutvecklingen.<br />

Var felen uppkommer Andel av totala antalet fel<br />

Arbetet med kravspecifikation 20 %<br />

Designarbetet 30 %<br />

Implementationsarbetet 35 %<br />

Dåligt rättade fel 10 %<br />

Felaktig dokumentation 5 %<br />

Tabell 3-2. Felens uppkomst i olika skeden av projektet [Hei97].<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 43(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

3.3 Strukturell testning<br />

Under implementationsfasen programmeras och <strong>testa</strong>s moduler var <strong>för</strong> sig. Då är<br />

testningen nära anknuten till programmeringen och görs där<strong>för</strong> lämpligast av<br />

programmeraren själv. Många av de testtekniker som används i det här skedet av<br />

utvecklingen har en sak gemensamt, de fokuserar på systemets inre struktur och inte<br />

så mycket på modulens tilltänkta funktion. Sådana testtekniker brukar grupperas<br />

under begreppet strukturell testning, som även kallas ”white box”-testning eller ”glas<br />

box”-testning. Istället <strong>för</strong> <strong>att</strong> fokusera på funktionens in- och utdata undersöks bl.a.<br />

informationsflödet genom modulen och hur data <strong>för</strong>ändras längs vägen genom<br />

programmet.<br />

Det finns vissa fel som med stor sannolikhet enbart kan hittas med de strukturella<br />

testteknikerna. Att ersätta de strukturella testteknikerna med kombinationer av andra<br />

tekniker är där<strong>för</strong> inte möjligt [Sco95].<br />

Styrkor<br />

En av styrkorna med strukturell testning är <strong>att</strong> delar av programmet kan <strong>testa</strong>s var <strong>för</strong><br />

sig direkt efter implementering. Om testerna visar på fel kan koden modifieras varpå<br />

testet genomlöps ytterligare en gång. Genom ett iterativt <strong>för</strong>farande kan<br />

programmeraren sänka felintensiteten till en acceptabel nivå.<br />

Ett problem med de flesta testteknikerna är svårigheten <strong>att</strong> skapa en uppf<strong>att</strong>ning om<br />

hur stor del av koden som verkligen har <strong>testa</strong>ts. Testaren kan verifiera <strong>att</strong> tester<br />

lyckas, men vet ändå ingenting om hur många testfall som måste skrivas <strong>för</strong> <strong>att</strong><br />

testningen ska bli i stort sett heltäckande. De strukturella testteknikerna är däremot<br />

uppbyggda på ett sådant sätt <strong>att</strong> <strong>testa</strong>ren kan få en uppf<strong>att</strong>ning om hur stor del av<br />

programrymden som har <strong>testa</strong>ts. Tester kan t.ex. ut<strong>för</strong>as som exekverar samtliga<br />

kodrader i programmet.<br />

Svagheter<br />

En svaghet med strukturella testtekniker är <strong>att</strong> de kräver tillgång till källkoden <strong>för</strong> <strong>att</strong><br />

testfall ska kunna skrivas. Eftersom testerna är så kodnära måste testfallen skrivas om<br />

så fort koden <strong>för</strong>ändras. De strukturella testteknikerna ställer också höga krav på <strong>att</strong><br />

<strong>testa</strong>ren är väl ins<strong>att</strong> i programstrukturen [Kan93]. Det är där<strong>för</strong> ofta svårt <strong>för</strong><br />

oberoende testgrupper <strong>att</strong> genom<strong>för</strong>a strukturella tester på ett effektivt sätt, testerna<br />

ut<strong>för</strong>s istället i de flesta fall av programmerarna själva.<br />

Disposition<br />

I det här kapitlet ges <strong>för</strong>st en beskrivning av den terminologi som används <strong>för</strong> de<br />

strukturella testteknikerna. Terminologin behandlar huvudsakligen flödesgrafer och<br />

dess komponenter. Ett kort exempel på ett program med tillhörande flödesgraf<br />

beskrivs också. Exemplet tillämpas senare på ett flertal av testteknikerna i kapitlet.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 44(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Följande testtekniker kommer <strong>att</strong> presenteras.<br />

• Control flow testing<br />

- Nodtestning<br />

- Grentestning<br />

- Path testing<br />

• Data flow testing<br />

• Villkor/Logiktestning<br />

• Looptestning<br />

3.3.1 Flödesterminologi<br />

Nedan presenteras några termer som används i den kommande framställningen. Hur<br />

termerna representeras i flödesscheman visas med figurer. Kapitlet avslutas med ett<br />

komplett flödesschema <strong>för</strong> ett litet program. Med flöde menas de kodavsnitt som<br />

exekveras då ett program eller en modul körs.<br />

En nod är en sekvens av programmet som inte innehåller några <strong>för</strong>greningar av flödet.<br />

Det innebär <strong>att</strong> om en av sekvensens instruktioner exekveras så exekveras även<br />

samtliga resterande instruktioner i sekvensen. En sekvens har således en början och<br />

ett slut, däremellan finns inga möjligheter <strong>för</strong> några vägval. En sekvensen kan bestå<br />

av en eller flera instruktioner.<br />

Figur 3-13. Nod.<br />

Vid en gren finns det olika alternativ <strong>för</strong> flödet. Grenen kan vara uppbygd av en ifsats<br />

med enbart två alternativa vägar, men kan också bestå av ytterligare<br />

valmöjligheter.<br />

Figur 3-14. Gren.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 45(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Att flödet <strong>för</strong>enas efter en uppdelning benämns sammanflöde.<br />

Figur 3-15. Sammanflöde.<br />

Nedan följer ett exempel hämtat från [Sco95]. I Figur 3-16 visas koden <strong>för</strong> ett mindre<br />

program. I Figur 3-17 finns en graf som visar flödet genom programmet.<br />

Figur 3-16. Exempel på ett program.<br />

En länk är kopplingen mellan två noder. Ett segment är en sekvens av ett antal länkar<br />

och noder. I Figur 3-17 kan flödet genom noderna 2, 3, 4, 6 och 7 symbolisera ett<br />

segment. En path eller väg är ett av de möjliga segmenten som sträcker sig från början<br />

till slutet av modulen. Om någon av noderna genomlöps mer än en gång innehåller<br />

vägen en loop. Ett exempel på en väg med en loop är 1-2-3-4-6-2-3-5-6-7-8-9-11.<br />

Början<br />

Figur 3-17. Flödesgraf till program i Figur 3-16.<br />

Begin module 1<br />

L2: x = x +1 2<br />

y = 7<br />

L3: if z < 4 3<br />

then x = 2 * x 4<br />

else x = x – 1 5<br />

if z = 0 then go to L2 6<br />

if y = x – z then go to L3 7<br />

if z = 2 * z 8<br />

then y = y – 1 9<br />

w = 2 * x<br />

else if z < 2 then go to L2 10<br />

1 2 3<br />

6<br />

End module 11<br />

4<br />

5<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 46(124) Industriella informations och styrsystem<br />

7<br />

8<br />

10<br />

Slut<br />

9 11


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

3.3.2 Control Flow Testing (Path Testing)<br />

Control flow testing har använts på IBM i över tre decennier och är den äldsta av alla<br />

strukturella testtekniker [Bei90]. Testtekniken baseras på <strong>att</strong> ett antal lämpliga<br />

testvägar väljs genom programmet. Förhoppningen är <strong>att</strong> kombinationen av testvägar<br />

ska påvisa om det finns några fel i programmodulen som har sitt ursprung i flödet.<br />

Målsättningen är <strong>att</strong> <strong>testa</strong> så många vägar genom programmodulerna <strong>att</strong> alla möjliga<br />

fel, som kan härröras till flödet, upptäcks. Om testerna behandlar alla tänkbara<br />

varianter sägs <strong>att</strong> fullständig täckning råder. Enligt [Bei90] finns det tre olika nivåer<br />

av flödestestning.<br />

1. Nodtäckning (P1) – Fullständig nodtäckning råder då instruktionerna i samtliga<br />

noder exekveras. Fullständig nodtäckning innebär <strong>att</strong> alla noder genomlöps.<br />

Eftersom samtliga noder i Figur 3-17 kan genomlöpas utan <strong>att</strong> alla segment <strong>testa</strong>s<br />

(det är till exempel möjligt <strong>att</strong> <strong>testa</strong> alla noder utan <strong>att</strong> länkarna 10-2 och 7-3<br />

berörs) är nodtäckning den svagaste av de tre nivåerna.<br />

2. Grentäckning (Pn) – Fullständig grentäckning råder då alla möjliga grenar med<br />

tillhörande instruktioner genomlöps åtminstone en gång.<br />

3. Pathtäckning (P∞) – För <strong>att</strong> nå fullständig pathtäckning måste samtliga vägar från<br />

början till slutet av modulen genomlöpas. Alla noder, alla möjliga grenar och alla<br />

loopar (se kapitel 3.3.4) måste exekveras. Fullständig pathtäckning innef<strong>att</strong>ar<br />

därmed grentäckning och nodtäckning. Pathtäckning är den starkaste nivån vad<br />

gäller control flow testing.<br />

Även <strong>för</strong> mindre moduler finns det ofta många möjliga vägar genom modulen. Varje<br />

enkel gren <strong>för</strong>dubblar antalet vägar och varje loop multiplicerar antalet möjliga vägar<br />

med det antal iterationer som loopen kan åsamka. För komplexa system är det där<strong>för</strong> i<br />

stort sett omöjligt <strong>att</strong> <strong>testa</strong> alla vägar genom programmet. Att uppnå 100%<br />

pathtäckning är mer en teoretisk <strong>för</strong>hoppning snarare än ett realistiskt mål. Det bör<br />

påpekas <strong>att</strong> även om <strong>testa</strong>ren mot <strong>för</strong>modan skulle lyckas <strong>testa</strong> alla tänkbara vägar är<br />

det långt ifrån säkert <strong>att</strong> modulen är felfri. Fel kan givetvis bero av många andra<br />

orsaker än fel i flödesvägar.<br />

Syftet är <strong>att</strong> hitta fel som är kopplade till de olika vägar som kan genomlöpas då<br />

programmet körs. Det kan handla om en felsyftning till en gren eller <strong>att</strong> en if-sats inte<br />

är uppbyggd som det var tänkt, t.ex. ”IF A is true THEN DO X ELSE DO Y” istället<br />

<strong>för</strong> ”IF A is false THEN…” [Bei90]. Då pathtesting tillämpas <strong>för</strong>utsätts <strong>att</strong><br />

specifikationer är korrekta och <strong>att</strong> variabler är korrekt definierade. Det <strong>för</strong>utsätts <strong>att</strong><br />

inga andra fel finns än de som härrör till själva flödet. Flera strukturella<br />

programmeringsspråk har inbyggda tester <strong>för</strong> <strong>att</strong> hitta fel som är kopplade till flödet.<br />

För sådana språk är vinsten med användandet av pathtesting något mindre än då äldre<br />

programmeringsspråk, som tillexempel COBOL och FORTRAN, används.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 47(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Pathtesting är en testteknik som <strong>för</strong>st och främst används på modulnivå och är inte en<br />

testteknik som lämpar sig <strong>för</strong> systemtestning. Tekniken används som regel av<br />

programmeraren själv innan den eventuellt forts<strong>att</strong>a testningen tas över av någon<br />

<strong>testa</strong>vdelning. För <strong>att</strong> kunna använda tekniken måste <strong>testa</strong>ren ha fullständig<br />

information om programmets struktur, d.v.s. ha tillgång till programmets källkod. För<br />

programmeraren är pathtesting många gånger en av de grundläggande testteknikerna,<br />

men det är bra om även system<strong>testa</strong>re har en viss kunskap om pathtesting eftersom<br />

denna testteknik ligger till grund <strong>för</strong> många andra tekniker [Bei90].<br />

Vilka vägar ska väljas<br />

Nedanstående exempel kan vara ganska tungrott och bör främst läsas av den som är<br />

ute efter en mer detaljerad <strong>för</strong>ståelse <strong>för</strong> tillvägagångssätt <strong>för</strong> control flow testing.<br />

Att <strong>testa</strong> alla möjliga vägar i ett komplext system är knappast realistiskt. I många<br />

organisationer och standarder <strong>för</strong>ordas där<strong>för</strong> endast nodtäckning och grentäckning.<br />

Som tidigare påpekats innebär inte fullständig nod- och grentäckning <strong>att</strong> pathtäckning<br />

råder.<br />

Det finns många olika tillvägagångssätt då antalet testvägar ska väljas. Exemplet i<br />

Tabell 3-3, som bygger på programmet i Figur 3-16 nedan med tillhörande flödesgraf<br />

i Figur 3-17, ska påvisa <strong>att</strong> de valda vägarna med<strong>för</strong> nod- och grentäckning.<br />

Tillvägagångssättet går ut på <strong>att</strong> börja med den <strong>för</strong>sta noden med den kortaste<br />

tänkbara vägen. Därefter följer nästkommande nod med eventuella testvägar som<br />

ännu inte behandlats.<br />

• Börja i nod 1 med den enklaste vägen från början till slut.<br />

• Fortsätt med den <strong>för</strong>sta grenen i nod 3. Två testvägar är möjliga. Den ena<br />

testvägen har dock redan behandlats under <strong>för</strong>egående punkt, där<strong>för</strong> stryks den.<br />

• Fortsätt på samma sätt med grenarna i nod 6, 7 och 10.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 48(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Grenar<br />

Processlänkar<br />

Vägar<br />

1,2,3,4,6,7,<br />

8,9,11<br />

1,2,3,5,6,7,<br />

8,9,11<br />

1,2,3,4,6,2,<br />

3,4,6,7,8,9,<br />

11<br />

1,2,3,4,6,7,<br />

3,4,6,7,8,9,<br />

11<br />

1,2,3,4,6,7,<br />

8,10,2,3,4,6,<br />

7,8,9,11<br />

1,2,3,4,6,7,<br />

8,10,11<br />

3 3-4 3-5 3-4 3-4 3-4 3-4<br />

6 6-7 6-7 6-2, 6-7 6-7, 6-7 6-7, 6-7 6-7<br />

7 7-8 7-8 7-8 7-3, 7-8 7-8, 7-8 7-8<br />

8 8-9 6-7 8-9 8-9 8-10, 8-9 8-10<br />

10 10-2 10-11<br />

1-2 * * * * * *<br />

2-3 * * ** * ** *<br />

3-4 * ** ** ** *<br />

3-5 *<br />

4-6 * ** ** ** *<br />

5-6 *<br />

6-2 *<br />

6-7 * * * ** ** *<br />

7-3 *<br />

7-8 * * * * ** *<br />

8-9 * * * * *<br />

8-10 * *<br />

9-11 * * * * *<br />

10-2 *<br />

10-11 *<br />

Tabell 3-3. Testvägar som ska påvisa nod- och grentäckning till flödesgrafen i Figur 3-17.<br />

För <strong>att</strong> <strong>för</strong>säkra sig om <strong>att</strong> det råder fullständig nod- och grentäckning ska tabellen<br />

uppfylla två kriterier.<br />

1. Fullständig nodtäckning uppnås av <strong>att</strong> alla noder exekveras. Det innebär <strong>att</strong> alla<br />

noder finns med i raden <strong>för</strong> vägar.<br />

2. Om alla tänkbara länkar genomlöps kommer även alla grenalternativ <strong>att</strong><br />

genomlöpas. I tabellen motsvaras grentäckning av <strong>att</strong> det finns åtminstone en<br />

markering <strong>för</strong> samtliga processlänkar.<br />

Tabell 3-3 visar <strong>att</strong> de valda testvägarna uppfyllar både nod- och grentäckning.<br />

Det går ofta <strong>att</strong> optimera antalet testvägar. I exemplet ovan ser vi <strong>att</strong> den <strong>för</strong>sta<br />

testvägen spelar ut sin roll eftersom samtliga grenar och länkar i den testvägen<br />

återfinns i någon av de andra testvägarna. Även det andra testfallet skulle med enkla<br />

modifikationer kunna elimineras. För det behandlade exemplet skulle det faktiskt<br />

räcka med enbart två testvägar om dessa innehåller loopar som med<strong>för</strong> <strong>att</strong> alla noder<br />

och grenar genomlöps. Det finns dock risker med <strong>att</strong> optimera <strong>för</strong> mycket, testvägarna<br />

blir ofta ologiska och svåra <strong>att</strong> följa. Det är ofta värt <strong>att</strong> lägga ner lite extra tid på <strong>att</strong><br />

göra fler enkla testvägar än några få komplexa [Bei90].<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 49(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

3.3.3 Data Flow Testing<br />

Data flow testing bygger liksom control flow testing på <strong>att</strong> lämpliga flödesvägar väljs<br />

genom programmet. Data flow testing fokuserar på var och hur data <strong>för</strong>ändras längs<br />

den utvalda vägen. Tekniken är ett bra komplement till control flow testing då<br />

målsättningen är <strong>att</strong> höja nod- och grentäckning närmare en fullständig pathtäckning<br />

[Bei90]. I moderna programmeringsspråk finns det vanligtvis en viss funktionalitet<br />

inbyggd <strong>för</strong> <strong>att</strong> automatiskt hitta fel i dataflödet.<br />

Rapp och Meyuker [Rap82] motiverade en användning av data flow testing på<br />

följande sätt: “It is our belief that, just as one would not feel confident about a<br />

program without executing every statement in it as part of some test, one should not<br />

feel confident about a program without having seen the effect of using the value<br />

produced by each and every computation.”<br />

En <strong>för</strong>utsättning <strong>för</strong> <strong>att</strong> resultatet från data flow testing ska bli pålitligt är <strong>att</strong><br />

flödesvägarna är korrekt valda. Om det finns luckor och tveksamheter i flödesvägarna<br />

fortlever tveksamheterna i data flow testningens resultat. Ett påvisat fel i testningen<br />

kan t.ex. bero på <strong>att</strong> data inte är åtkomligt när de ska eller <strong>att</strong> data har använts på ett<br />

felaktigt sätt.<br />

Dataobjekt kan antingen skapas, <strong>för</strong>störas eller användas. Nedan följer en tabell med<br />

definitioner och <strong>för</strong>klaringar till de tre begreppen.<br />

Beteckning Betydelse Förklaring<br />

S Skapas Ett objekt skapas eller definieras när det används i en<br />

deklaration eller när det skrivs till vänster om ett lika<br />

med-tecken, t.ex. x = 17 där x definieras som 17. Att<br />

skapa något kan också innebära <strong>att</strong> en fil har öppnats<br />

eller <strong>att</strong> någonting har lagrats på en stack.<br />

F Förstöras Att ett objekt <strong>för</strong>störs kan t.ex. innebära <strong>att</strong> det inte<br />

längre är åtkomligt, <strong>att</strong> det tagits bort eller <strong>att</strong> en fil har<br />

stängts.<br />

A Användas En variabel kan användas i beräkningar när den står till<br />

höger om ett lika med-tecken, som en pekare eller då<br />

en fil skrivs eller läses. Den kan också användas som<br />

ett predikat, t.ex. IF A


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

ss Troligen ingen skada, men var<strong>för</strong> definiera ett objekt två gånger i följd?<br />

sf Troligen ett fel. Var<strong>för</strong> skapa objektet och <strong>för</strong>störa det innan det använts?<br />

sa Acceptabelt.<br />

fs Acceptabelt.<br />

ff Det blir troligen ingen skada av <strong>att</strong> ta bort ett objekt två gånger. Anledningen till<br />

<strong>att</strong> det görs kan dock ifrågasättas.<br />

fa Ett fel. Det går inte <strong>att</strong> använda ett objekt som inte längre finns.<br />

as Troligen inte ett fel. Det är ofta möjligt <strong>att</strong> definiera ett objekt på nytt.<br />

af Acceptabelt.<br />

aa Acceptabelt.<br />

Även sex enkla sekvenser <strong>för</strong>ekommer. Sekvenserna är uppbygga med någon av de<br />

tre definitionerna samt ett bindestreck som symboliserar <strong>att</strong> det är <strong>för</strong>sta eller sista<br />

gången objektet berörs längs vägen. De sex enkla sekvenserna är enligt följande:<br />

-s Acceptabelt. Det är <strong>för</strong>sta gången objektet skapas längs vägen.<br />

-f Möjligt fel eftersom ett objekt som inte är definierat längs vägen tas bort. Om<br />

objektet är globalt, d.v.s. om det är definierat utan<strong>för</strong> modulen, kan det dock<br />

vara acceptabelt.<br />

-a Möjligt fel. Dock acceptabelt om objektet är globalt och tidigare definierat.<br />

s- Möjligt fel. Ett objekt skapas utan <strong>att</strong> användas. Det kan dock vara acceptabelt<br />

om det är ett globalt objekt som används av andra funktioner.<br />

f- Acceptabelt. Det sista som görs längs vägen är <strong>att</strong> ta bort objektet.<br />

a- Möjligt fel. Objektet används utan <strong>att</strong> <strong>för</strong>störas längs vägen. Det är dock<br />

acceptabelt om objektet används i andra funktioner.<br />

De dubbla och enkla sekvenserna kan tillsammans representera alla möjliga<br />

dataflöden. Då de enkla sekvenserna inte bildar något egentligt dataflöde kan det<br />

ifrågasättas om tekniken bör räknas till data flow testing. Till skillnad från de dubbla<br />

sekvenserna berör de enkla ofta flera moduler var<strong>för</strong> det snarare är ett slags<br />

integrationstest [Bei90].<br />

Ett exempel<br />

Vi återgår till programmet i Figur 3-16 <strong>för</strong> <strong>att</strong> ge ett exempel. Variabeln x berörs på<br />

något sätt i noderna 2, 4, 5, 7 och 9. Vi <strong>för</strong>eställer oss <strong>att</strong> vägen genom modulen i<br />

Figur 3-17 är 1-2-3-4-6-7-8-9-11. Den totala sekvensen blir då ”asasaa”. De två <strong>för</strong>sta<br />

bokstäverna i sekvensen ”as” kommer av <strong>att</strong> i nod 2 används variabeln x <strong>för</strong> <strong>att</strong><br />

definiera om sig själv. På samma sätt uppkommer sekvensen ”as” i nod 4. Nod 7 och<br />

9 orsakar sedan varsina respektive ”a”-tecken. Notera <strong>att</strong> om x är en lokal variabel så<br />

med<strong>för</strong> det ett fel eftersom variabeln <strong>för</strong>utsätts vara definierad utan<strong>för</strong> den behandlade<br />

modulen. I övrigt finns det inga kombinationer av den totala sekvensen som är<br />

uppenbart felaktiga.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 51(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Olika nivåer av data flow testing<br />

Liksom <strong>för</strong> control flow testing, där pathtäckning är den starkaste nivån, finns olika<br />

nivåer <strong>för</strong> data flow testing. Den starkaste nivån <strong>testa</strong>r samtliga vägar <strong>för</strong> samtliga<br />

definitioner <strong>för</strong> samtliga variabler och <strong>för</strong> samtliga användningsområden. Det säger<br />

sig självt <strong>att</strong> det blir många varianter. En strategi som ofta används är <strong>att</strong> <strong>testa</strong><br />

åtminstone en väg från varje definition till varje användning av variabeln som kan<br />

kopplas till den definitionen. Ytterligare nivåer som är svagare än de två ovan<br />

existerar.<br />

Statisk eller dynamisk data flow<br />

Data flow testing kan sägas vara antingen en statisk- eller dynamisk analys. Med<br />

statisk analys, till skillnad från dynamisk analys, menas <strong>att</strong> källkoden analyseras utan<br />

<strong>att</strong> exekveras. I vissa fall kan den statiska analysen byggas in i<br />

programmeringsspråken så <strong>att</strong> onödiga fel undviks. Sekvenser som -a och fa kan då<br />

hittas automatiskt innan sekvensen exekveras.<br />

3.3.4 Looptestning<br />

En loop uppstår när en nod exekveras flera gånger. Det finns fyra kategorier av<br />

loopar: enkla, omslutna, efterföljande och ostrukturerade [Pre97].<br />

enkel loop omsluten loop efterföljande loop ostrukturerad loop<br />

Figur 3-18. Fyra olika typer av loopar.<br />

Då loopar <strong>testa</strong>s antas liksom vid pathtesting <strong>att</strong> fel enbart existerar i looparnas flöde.<br />

Det <strong>för</strong>utsätts <strong>att</strong> specifikationer är korrekta och <strong>att</strong> variabler är korrekt definierade<br />

samt <strong>att</strong> inte några beräkningsfel existerar. Fel i loopar brukar uppstå runt minvärdet<br />

och maxvärdet av de antal iterationer som är möjliga [Sco95].<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 52(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Enkel loop<br />

Följande tester bör göras <strong>för</strong> enkla loopar, där n är maximala antalet itterationer<br />

[pre97].<br />

1. Hoppa över loopen.<br />

2. En itteration genom loopen.<br />

3. Två itterationer genom loopen.<br />

4. m itterationer genom loopen, där m < n.<br />

5. n – 1, n, n + 1 itterationer genom loopen.<br />

Omsluten loop<br />

Då en omsluten loop ska <strong>testa</strong>s kan <strong>testa</strong>ren utgå från de teststeg som presenterades<br />

<strong>för</strong> den enkla loopen. Antalet tester kommer <strong>att</strong> öka exponentiellt med antalet loopar<br />

då jäm<strong>för</strong>elsen görs med en enkel loop. [Bei90] <strong>för</strong>eslår följande arbetsgång.<br />

1. Börja med <strong>att</strong> göra tester <strong>för</strong> den innersta loopen. Testerna kan vara uppbyggda på<br />

liknande sätt som <strong>för</strong> den enkla loopen. Övriga loopar sätts till sitt minvärde.<br />

2. Arbeta utåt och gör tester <strong>för</strong> nästkommande loop. Sätt övriga loopar till deras<br />

respektive minvärden.<br />

3. Arbeta utåt tills alla loopar har <strong>testa</strong>ts.<br />

Efterföljande loop<br />

Efterföljande loopar är något mellanting mellan enkla loopar och omslutna loopar.<br />

Om de efterföljande looparna är oberoende av varandra kan de <strong>testa</strong>s på liknande sätt<br />

som en enkel loop. Om de däremot beror av vartandra måste ett liknande <strong>för</strong>farande<br />

som <strong>för</strong> de omslutna looparna genom<strong>för</strong>as.<br />

Ostrukturerad loop<br />

En loop blir ostrukturerad då den t.ex. hoppar in mitt i en annan loop. För <strong>att</strong> <strong>testa</strong> en<br />

ostrukturerad loop krävs det i regel alldeles <strong>för</strong> många testfall <strong>för</strong> <strong>att</strong> de ska vara<br />

igenom<strong>för</strong>bara. Sådana loopar ska där<strong>för</strong> om möjligt undvikas [Sco95].<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 53(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

3.3.5 Logikbaserad testning (villkorstestning)<br />

Logikbaserad testning kan klassas som både en strukturell- och funktionell testteknik.<br />

Den är strukturell om testfallen bygger på programmets design och funktionell om<br />

testfallen är uppbyggda efter de krav som ställs på systemet i specifikationer. För<br />

funktionell logikbaserad testning, se kapitel 3.4.3.<br />

Strukturell logikbaserad testning, här även kallat villkorstestning, är ett sätt <strong>att</strong><br />

designa testfall som verifierar de logiska villkoren i en programmodul. En <strong>för</strong>del med<br />

villkorstestning är <strong>att</strong> det relativt lätt går <strong>att</strong> uppsk<strong>att</strong>a hur många testfall som krävs<br />

<strong>för</strong> <strong>att</strong> <strong>testa</strong> villkoren. Det är en stor <strong>för</strong>del eftersom det då går <strong>att</strong> få en uppf<strong>att</strong>ning<br />

om hur stor del av programmet som har <strong>testa</strong>ts. När t.ex. path testing används är det<br />

väldigt svårt <strong>att</strong> göra en sådan bedömning eftersom det är så svårt <strong>att</strong> uppskata alla<br />

möjliga vägar genom programmet.<br />

Villkoren kan antingen vara av enkel eller sammans<strong>att</strong> karaktär. Enkla villkor består<br />

av en boolsk operator (t.ex. OCH, ELLER) eller en relationsoperator (t.ex. >, ≤, ═).<br />

Sammans<strong>att</strong>a villkor är uppbyggda av två eller flera enkla villkor, boolska uttryck och<br />

parenteser.<br />

Fel kopplade till villkor kan enligt [Pre97] och [Bei90] bero av följande<br />

• Boolsk operator<br />

• Boolsk variabel<br />

• Boolsk parentes<br />

• Relationsoperator<br />

• Fel operand används, t.ex. A > X istället <strong>för</strong> A > Z.<br />

• Processen längs den interna väg som leder till villkoret är felaktig.<br />

När det gäller de två sista punkterna lämpar sig data flow testing bättre, se kapitel<br />

3.3.3.<br />

En relativt enkel nivå av villkorstestning <strong>för</strong>espråkar <strong>att</strong> alla rimliga varianter samt <strong>att</strong><br />

varje enkelt villkor <strong>testa</strong>s minst en gång. Paralleller kan dras till begreppet fullständig<br />

täckning som introducerades under kapitlet control flow testing, vilket innebär <strong>att</strong> det<br />

ovanstående exemplet motsvaras av fullständig grentäckning.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 54(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

3.4 Funktionell testning<br />

Funktionell testning går ut på <strong>att</strong> funktionaliteten hos <strong>mjukvara</strong>n <strong>testa</strong>s gentemot de<br />

funktionella krav som ställs i krav- och designspecifikationer. Då funktionell testning,<br />

som också kallas ”black-box”-testning, ut<strong>för</strong>s på <strong>mjukvara</strong> kan programmet liknas vid<br />

en svart låda. Olika värden matas in i den svarta lådan och utdatan kontrolleras<br />

huruvida den överensstämmer med specifikationer. Det som undersöks med<br />

funktionell testning är alltså inte hur programmet är designat och implementerat, utan<br />

istället om programmet kan ut<strong>för</strong>a rätt saker.<br />

Funktionell testning innef<strong>att</strong>ar inte bara tester <strong>för</strong> <strong>att</strong> verifiera korrekta inmatningar.<br />

Även s.k. negativ testning räknas till de funktionella testerna. Den negativa testningen<br />

undersöker <strong>att</strong> felaktiga inmatningar inte accepteras av systemet.<br />

För <strong>att</strong> funktionaliteten ska kunna <strong>testa</strong>s måste programmet vara körbart vilket i sin<br />

tur kan innebära <strong>att</strong> hela programmet måste vara färdigimplementerat. Där<strong>för</strong> lämpar<br />

sig användandet av funktionell testning fram<strong>för</strong>allt i senare delar av<br />

implementationsfasen. I vissa fall kan dock funktionell testning även användas <strong>för</strong> <strong>att</strong><br />

<strong>testa</strong> enskilda moduler, vilket då kan göras innan programmet är färdigimplementerat<br />

[Sco95].<br />

Styrkor<br />

Många av <strong>för</strong>delarna med funktionell testning kan härledas till <strong>att</strong> koden inte behöver<br />

vara bekant <strong>för</strong> <strong>testa</strong>ren. Den tilltänkta användaren av <strong>mjukvara</strong>n är troligen enbart<br />

intresserad av programmets funktionalitet och inte hur det är implementerat.<br />

Funktionell testning ut<strong>för</strong>s alltså ur användarens perspektiv, vilket möjliggör <strong>för</strong><br />

användarna <strong>att</strong> vara med och skapa testfall utifrån sina krav på <strong>mjukvara</strong>n [Hei97].<br />

Dessa tester lämpar sig också väl som acceptanstester. Ytterligare en <strong>för</strong>del med <strong>att</strong><br />

testningen genom<strong>för</strong>s utan kännedom om implementationen är <strong>att</strong> oberoende <strong>testa</strong>re<br />

kan stå <strong>för</strong> ut<strong>för</strong>andet.<br />

Funktionella tester kan användas <strong>för</strong> <strong>att</strong> <strong>testa</strong> flera egenskaper hos <strong>mjukvara</strong>, t.ex.<br />

noggrannheten i <strong>mjukvara</strong>ns resultat, prestanda och <strong>att</strong> <strong>mjukvara</strong>n kan samverka med<br />

annan <strong>mjukvara</strong> på ett korrekt sätt. Många av dessa egenskaper kan vara svåra <strong>att</strong><br />

<strong>testa</strong> med t.ex. strukturell testning. Om gammal funktionalitet ska finnas kvar i nya<br />

versioner av ett program kan gamla testfall utnyttjas eftersom dessa utgår från<br />

funktionaliteten. Där<strong>för</strong> lämpar sig funktionella tester bra <strong>för</strong> <strong>att</strong> kontrollera huruvida<br />

programmet fortfarande fungerar efter genom<strong>för</strong>da <strong>för</strong>ändringar.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 55(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Svagheter<br />

Även en del begränsningar kan kopplas till <strong>att</strong> <strong>testa</strong>ren inte har någon kännedom om<br />

implementationen. Om det t.ex. finns funktionalitet implementerad som inte finns<br />

med i specifikationer kan den inte <strong>testa</strong>s [Hei97]. Ytterligare en nackdel med <strong>att</strong> inte<br />

känna till koden är <strong>att</strong> samma kodavsnitt kan <strong>testa</strong>s onödigt många gånger. Testningen<br />

visar inte heller hur stor del av kodrymden som verkligen har <strong>testa</strong>ts.<br />

Disposition<br />

Följande funktionella testtekniker kommer <strong>att</strong> tas upp mer ingående i kapitlet. Domän<br />

och logikbaserad testning kan även fungera som strukturella testtekniker beroende på<br />

hur de används.<br />

• Domäntestning<br />

• Tillståndstestning<br />

• Logikbaserad testning<br />

• Syntaxtestning<br />

• Transaction flow testing<br />

3.4.1 Domäntestning<br />

Ett mjukvaruprogram kan ofta ses som en funktion beroende av ett antal variabler,<br />

d.v.s. programmets indata [Sco95]. Programmet beter sig på olika sätt beroende på<br />

vilka indata som det matas med. Många program beter sig på ett liknande sätt <strong>för</strong><br />

vissa typer av indata. I dessa fall kan indatan delas upp i domäner.<br />

Indata kan sägas ha en viss dimension som är lika med antalet invariabler. Som<br />

exempel kan styrfunktionen av en termostat användas. Exemplet är enkelt eftersom<br />

indatan bara består av en variabel, nämligen den rådande temperaturen. Beroende på<br />

den rådande temperaturen ska termostaten slå på eller av kyl- och värmeaggregatet. I<br />

exemplet utgör vänsterkolumnen tre domäner där utsignalen från termostaten är<br />

densamma <strong>för</strong> respektive domän.<br />

Temperaturens (t) Utsignal från termostat<br />

uppdelning i domäner Värmeaggregat Kylaggregat<br />

t < 20º PÅ AV<br />

20º ≤ t < 30º AV AV<br />

t ≥ 30º AV PÅ<br />

Tabell 3-5. Exempel på domäner och funktionalitet <strong>för</strong> en termostat.<br />

Domäntestning (domain testing) innebär <strong>att</strong> tester genom<strong>för</strong>s <strong>för</strong> <strong>att</strong> visa <strong>att</strong><br />

programmet upp<strong>för</strong> sig korrekt inom respektive domän och <strong>att</strong> domänens gränser är<br />

rimliga. Domäntestningen brukar koncentreras till områdena runt domängränserna.<br />

Studier har nämligen visat <strong>att</strong> de flesta domänfelen uppträder nära domängränserna<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 56(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

[Bei90]. För <strong>att</strong> domän<strong>testa</strong> den lägre domängränsen i exemplet ovan skulle<br />

fokuseringen kunna ligga på temperaturerna runt 20º.<br />

Då domäntestning genom<strong>för</strong>s <strong>för</strong>utsätts <strong>att</strong> programmets funktionalitet är korrekt<br />

implementerad [Bei90]. Huruvida det är rätt <strong>att</strong> klassificera domäntestning som en<br />

funktionell testteknik beror till stor del på hur tekniken används. Om de domäner som<br />

<strong>testa</strong>s härrör direkt från de krav som ställs i specifikationen är det fråga om<br />

funktionell testning. Däremot skulle tekniken kunna räknas till strukturell testning om<br />

de domäner som <strong>testa</strong>s uppkommit som en följd av den valda designen [Sco95]. Det<br />

<strong>för</strong>utsätts här <strong>att</strong> de gränser som definierar domänerna är linjära, vilket är ett vanligt<br />

antagande inom domäntestningen eftersom det har visat sig <strong>att</strong> en övervägande del av<br />

alla domäner begränsas av linjära villkor [Bei95].<br />

En domän är som tidigare nämnts en del av den rymd som spänns upp av de variabler<br />

som utgör programmets indata. Utseendet på domänen beror av vilka villkor som sätts<br />

upp <strong>för</strong> dessa variabler. Domänens dimension överensstämmer med antalet variabler<br />

som utgör indatan. Nedan visas exempel <strong>för</strong> en- respektive tvådimensionella domäner.<br />

Det endimensionella fallet grundar sig på termostatexemplet ovan.<br />

A<br />

Figur 3-19. A,B och C utgör här domäner med en dimension. Gränserna härrör till domän B.<br />

Den vita cirkeln är den övre gränsen i domän B. Att gränsen är öppen betyder <strong>att</strong> 30º<br />

inte ingår i domänen. Den svarta cirkeln, som utgör den lägre domängränsen, ingår<br />

däremot i domänen. För de båda angränsande domänerna A och C råder mots<strong>att</strong><br />

<strong>för</strong>hållande till de båda gränserna, d.v.s. C:s gräns mot B är sluten och A:s gräns mot<br />

B är öppen. Domän B begränsas alltså av 20º ≤ t < 30º.<br />

Figur 3-20. En domän i två dimensioner.<br />

t = 20º t = 30º<br />

2<br />

y<br />

B<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 57(124) Industriella informations och styrsystem<br />

2<br />

x<br />

C<br />

t


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

I en tvådimensionell domän beror indata av två variabler. För Figur 3-20 gäller <strong>att</strong> de<br />

båda koordinataxlarna och den lutande linjen ingår i domänen. Det innebär <strong>att</strong><br />

domänens alla tre gränser är slutna, vilket här markeras med <strong>att</strong> strecken på linjen<br />

pekar åt det håll som gränsen är sluten åt. Domänen begränsas av villkoren x ≥ 0, y ≥<br />

0 och y + x ≤ 2.<br />

För den kommande framställningen kan det vara bra <strong>att</strong> känna till följande begrepp.<br />

Omsluten punkt – En punkt som ligger i samma domän som alla punkter i ett<br />

godtyckligt litet område runt punkten. En omsluten punkt har med andra ord ingen<br />

kontakt med någon domängräns.<br />

Gränspunkt – En punkt som har kontakt med en domängräns. Alla punkter i ett<br />

godtyckligt litet område runt punkten ligger alltså inte i samma domän.<br />

Domänfel i en domän med en dimension kan bero av flera olika anledningar.<br />

• Domängränserna kan vara <strong>för</strong> höga eller <strong>för</strong> låga.<br />

• Gränsen kan vara sluten i fel riktning.<br />

• Det kan finnas en gräns <strong>för</strong> mycket eller en <strong>för</strong> lite.<br />

Nedan <strong>för</strong>klaras hur de två <strong>för</strong>stnämnda felen kan identifieras. Markeringen x i<br />

tabellerna visar vilken punkt som <strong>testa</strong>s. Den till testpunkten hörande pilen markera<br />

vilken domän testpunkten hör till och en cirkel markerar domängränsen.<br />

A B<br />

Figur 3-21. Ett korrekt exempel. Punkten x tillhör domän B som var avsikten.<br />

x<br />

Gränspunkten ovan öppen med avseende på domän A. Gränspunkten tillhör därmed<br />

domän B, vilket också var avsikten. Domängränsen är således korrekt utplacerad.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 58(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

A B<br />

x<br />

Figur 3-22. Felaktigt sluten domängräns. Punkten x tillhör felaktigt domän A, istället <strong>för</strong> domän B som<br />

var avsikten.<br />

Avsikten är <strong>att</strong> punkten x, som sammanfaller med domängränsen, ska tillhöra domän<br />

B. Domängränsen har felaktigt stängts vilket med<strong>för</strong> <strong>att</strong> gränspunkten istället tillhör<br />

domän A. Det går dock inte <strong>att</strong> med endast denna testpunkt säkert fastställa <strong>att</strong> felet<br />

beror på <strong>att</strong> domänen är stängd. Samma resultat kan uppkomma med ett domänfel<br />

enligt exemplet i Figur 3-23.<br />

A B<br />

Figur 3-23. En felaktigt uts<strong>att</strong> domängräns. Punkten x tillhör nu domän A istället <strong>för</strong> domän B.<br />

Figur 3-23 är ett exempel på en <strong>för</strong> högt uts<strong>att</strong> domängräns. Om domängränsen hade<br />

varit uts<strong>att</strong> där det var tänkt, d.v.s. den streckade cirkeln, hade punkt x istället tillhört<br />

domän B som var avsikten.<br />

Exemplen från Figur 3-22 och Figur 3-23 visar <strong>att</strong> det påvisade felet kan bero av flera<br />

olika anledningar. Det är där<strong>för</strong> inte alltid möjligt <strong>att</strong> med endast ett test avgöra var<strong>för</strong><br />

det är fel. Genom <strong>att</strong> <strong>testa</strong> en punkt nära punkten x i Figur 3-23 kan slutsatsen dras <strong>att</strong><br />

det inte rör som om en felaktigt sluten gräns, utan i stället en <strong>för</strong> högt uts<strong>att</strong> gräns.<br />

Exemplen ovan illustrerar tillvägagångssättet <strong>för</strong> domäntestning. En dimension är<br />

naturligtvis det enklaste fallet vilket är det enda som kommer <strong>att</strong> exemplifieras här. Är<br />

antalet dimensioner fler än två bör istället någon form av hjälpverktyg användas<br />

[Bei90]. Fler dimensioner kräver fler testfall <strong>för</strong> <strong>att</strong> kontrollera <strong>att</strong> en domän är<br />

korrekt. Om n är dimensionen på indatan och p är antalet domängränser så krävs det<br />

som mest (n+1)p testpunkter <strong>för</strong> <strong>att</strong> visa <strong>att</strong> en domäns gränser är korrekta. I vissa fall<br />

kan man utnyttja skärningspunkter mellan olika gränserna <strong>för</strong> <strong>att</strong> få ned antalet<br />

testfall. På så sätt kan man i bästa fall reducera antalet nödvändiga testpunkter till 2p<br />

[Bei90].<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 59(124) Industriella informations och styrsystem<br />

x


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Figur 3-24 visar hur testpunkterna ska placeras <strong>för</strong> <strong>att</strong> <strong>testa</strong> en domän i två<br />

dimensioner. De svarta cirklarna är gränspunkter och de vita är omslutande punkter,<br />

d.v.s. de är inte i kontakt med någon domängräns. Enligt beräkningen nedan krävs då<br />

12 testpunkter.<br />

( n + 1 ) ⋅ p = ( 2 + 1)<br />

⋅ 4 = 12<br />

I den högra bilden utnyttjas skärningspunkterna mellan gränserna <strong>för</strong> <strong>att</strong> få ner antalet<br />

testpunkter till 2p. Reduktion av antalet testpunkter är bara möjlig i vissa fall,<br />

nämligen om båda gränserna är antingen slutna eller öppna. I exemplet är gränserna<br />

slutna var<strong>för</strong> en reduktion är möjlig. Enligt [Bei90] uppträder domänfelen i högre<br />

utsträckning vid skärningar mellan olika gränser, var<strong>för</strong> det kan visa sig <strong>för</strong>delaktigt<br />

<strong>att</strong> ut<strong>för</strong>a tester i just dessa punkter.<br />

Figur 3-24.Exempel på testpunkternas placering <strong>för</strong> två likadana tvådimensionella domäner.<br />

Avslutningsvis presenteras några termer som kan vara bra <strong>att</strong> känna till <strong>för</strong> vidare<br />

litteraturökning. Domäntestning är enligt [Bei90] en testteknik som grundas på<br />

partition testing. Partition testing <strong>för</strong>söker, precis som domäntestning, dela upp<br />

programmets indata i domäner där programmet upp<strong>för</strong> sig likartat. Genom <strong>att</strong> <strong>testa</strong><br />

funktionaliteten en gång i varje domän antas sedan programmet vara korrekt <strong>för</strong> all<br />

indata. Partition testing är således inte lika omf<strong>att</strong>ande som domäntestning<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 60(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

3.4.2 Tillståndstestning<br />

Tillståndstestning (state testing) innebär <strong>att</strong> det program som ska <strong>testa</strong>s <strong>för</strong>st<br />

modelleras med hjälp av tillstånd och övergångarna mellan dessa tillstånd. För <strong>att</strong><br />

återknyta till <strong>för</strong>egående avsnitt exemplifieras tillståndstestning med<br />

termostatexemplet från kapitel 3.4.1. Ett programs tillstånd representeras antingen<br />

med ett tillståndsdiagram som i Figur 3-25, eller med en tillståndstabell, Tabell 3-6.<br />

För kallt Lagom För varmt<br />

t < 20º<br />

Värme PÅ<br />

t < 20º<br />

Värme PÅ<br />

t ≥ 20º<br />

Värme AV<br />

20º ≤ t < 30º<br />

Värme & Kyla AV<br />

Figur 3-25. Exempel på ett tillståndsdiagram <strong>för</strong> en termostat.<br />

De tre fyrkantiga rutorna markerar de tre tillstånd som termostaten kan befinna sig i.<br />

Pilarna representerar övergångar (transitions) mellan de olika tillstånden. Till varje pil<br />

hör ett villkor och en utsignal. Villkoret talar om vid vilken insignal som<br />

transaktionen ska utlösas och utsignalen talar om vad som i sådana fall ska ske.<br />

Samtliga tre tillstånd har en övergång <strong>för</strong> alla värden som insignalen kan anta. Notera<br />

<strong>att</strong> en övergång inte behöver med<strong>för</strong>a <strong>att</strong> tillståndet <strong>för</strong>ändras. Om pilen börjar och<br />

slutar i samma tillstånd har ingen <strong>för</strong>ändring skett.<br />

Ett program kan ha ett stort antal insignaler med många möjliga värden. Att rita ett<br />

tillståndsdiagram <strong>för</strong> ett större system är svårt och brukar resultera i oöverskådliga<br />

tillståndsdiagram. Där<strong>för</strong> lämpar sig tillståndsdiagram främst <strong>för</strong> enklare modeller<br />

med några tiotals tillstånd och bara några få insignaler. Om tillståndsdiagrammen blir<br />

<strong>för</strong> komplexa kan det vara bättre <strong>att</strong> använda tillståndstabeller [Bei90]. Nedan<br />

presenteras en tillståndstabell med samma innehåll som tillståndsdiagrammet i Figur<br />

3-25.<br />

Tillstånd t < 20 20 ≤ t < 30 t ≥ 30<br />

För kallt För kallt<br />

Lagom<br />

-<br />

värme PÅ kyla & värme AV<br />

Lagom För kallt<br />

Lagom<br />

För varmt<br />

värme PÅ kyla & värme AV kyla PÅ<br />

För varmt - Lagom<br />

För varmt<br />

kyla & värme AV kyla PÅ<br />

Tabell 3-6. Exempel på en tillståndstabell <strong>för</strong> en termostat.<br />

t < 30º<br />

Kyla AV<br />

t ≥ 30º<br />

Kyla PÅ<br />

t ≥ 30º<br />

Kyla PÅ<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 61(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

I tillståndstabellen representerar varje rad ett tillstånd och varje kolumn ett visst<br />

villkor <strong>för</strong> insignalen. Rutorna inne i tabellen innehåller nästa tillstånd (dit pilen hade<br />

pekat i ett tillståndsdiagram) och utsignalen.<br />

Modellen över tillstånden och deras övergångar arbetas fram utifrån designspecifikationen,<br />

vilket möjliggör <strong>att</strong> modellen kan tas fram redan innan själva<br />

programmet är skrivet. Det med<strong>för</strong> <strong>att</strong> vissa fel kan hittas redan innan programmet är<br />

körbart [Bei90]. Då tillståndsdiagrammet eller en tillståndstabell ska tas fram är det<br />

lämpligt <strong>att</strong> följa arbetsgången nedan.<br />

1. Börja <strong>att</strong> analysera indatan och undersök vilka villkor som programmets tillstånd<br />

kan utsättas <strong>för</strong>. I tillståndstabellen innebär det <strong>att</strong> kolumnerna identifieras.<br />

2. Identifiera de olika tillstånden som modellen ska bestå av, vilket motsvarar<br />

raderna i tillståndstabellen.<br />

3. Identifiera utdatan, d.v.s. <strong>att</strong> tillståndstabellens inre rutor fylls i med avseende på<br />

kommande tillstånd och resultatet därav.<br />

Efter <strong>att</strong> modellen tagits fram ska testfall skrivas. Enligt [Bei90] ska testningen<br />

genom<strong>för</strong>as på likartat sätt som <strong>för</strong> control flow testing, se kapitel 3.3.2, d.v.s.<br />

åtminstone alla tillstånd och övergångar ska genomlöpas minst en gång. Liksom <strong>för</strong><br />

control flow testing är flera enkla testfall <strong>att</strong> <strong>för</strong>edra fram<strong>för</strong> ett stort och mycket<br />

komplext.<br />

Innebörden i följande tre punkter ska kontrolleras <strong>för</strong> varje exekverat testfall [Sco90].<br />

• Den sekvens indata som behövs <strong>för</strong> <strong>att</strong> genomlöpa den önskade vägen i<br />

tillståndsdiagrammet.<br />

• De övergångar eller tillstånd som genomlöps vid användandet av ovan nämnda<br />

sekvens av indata.<br />

• Den sekvens av utdata som testfallet är tänkt <strong>att</strong> generera.<br />

Mycket av vinsten med <strong>att</strong> genom<strong>för</strong>a tillståndstestning visar sig redan innan koden är<br />

skriven och innan testfallen är redo <strong>att</strong> köras. En <strong>för</strong>klaring är <strong>att</strong> konstruerandet av<br />

tillståndsdiagram och tillståndstabeller tvingar <strong>testa</strong>ren <strong>att</strong> analysera designspecifikationerna.<br />

Uppenbara fel, som <strong>att</strong> tillstånd är omöjliga <strong>att</strong> nå eller lämna, kan<br />

då hittas genom <strong>att</strong> enbart titta på diagrammet eller tabellen. Det är dock viktigt <strong>att</strong><br />

inte ta sig v<strong>att</strong>en över huvudet och tro <strong>att</strong> ett stort och komplext program kan<br />

moduleras på en detaljrik nivå. [Bei95] hävdar <strong>att</strong> insignalerna maximalt ska räknas i<br />

tiotal och tillstånden i dussin snarare än tusental.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 62(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

3.4.3 Logikbaserad testning<br />

Logikbaserad testning kan klassas som både en strukturell- och funktionell testteknik.<br />

Den är strukturell om testfallen bygger på programmets design och funktionell om<br />

testfallen är uppbyggda efter de krav som ställs på systemet i specifikationer. För<br />

strukturell logikbaserad testning, se kap 3.3.5.<br />

När det gäller funktionell logikbaserad testning tas ingen hänsyn till hur programmet<br />

är designat. Fokus läggs istället på vilka krav som ställs på systemet. Testningen<br />

innebär <strong>att</strong> alla olika kombinationer av villkor, som programmet kan ställas in<strong>för</strong>,<br />

genomlöps. Under testningen kontrolleras <strong>att</strong> varje kombination av villkor resulterar i<br />

<strong>att</strong> programmet handlar på ett korrekt sätt enligt specifikationen.<br />

Ett vanligt sätt <strong>att</strong> formulera de logiska villkor som ställs på systemet är <strong>att</strong> generera<br />

en s.k. villkorstabell. Syftet med villkorstabellen är <strong>att</strong> underlätta framtagandet av de<br />

testfall som ska verifiera <strong>att</strong> villkoren fungerar som det var tänkt. Nedan följer ett<br />

exempel på en sådan tabell, hämtad från [Sco95].<br />

Beteckning Regel 1 Regel 2 Regel 3 Regel 4 Regel 5 Regel 6<br />

Villkor 1 J J J N N N<br />

Villkor 2 J N N J N N<br />

Villkor 3 N J N - J N<br />

Handling 1 X<br />

Handling 2 X X X<br />

Handling 3 X X<br />

Handling 4 X X X X<br />

Tabell 3-7. Villkorstabell som används i den funktionella logikbaserade testningen. “X” innebär <strong>att</strong><br />

den handlingen ska ut<strong>för</strong>as <strong>för</strong>uts<strong>att</strong> <strong>att</strong> kombinationen av villkor är uppfylld.<br />

I tabellen representeras de olika kombinationerna av villkor som olika regler.<br />

Reglerna ska täcka in samtliga fysikaliskt möjliga kombinationer av villkor. Regeln<br />

specificerar också programmets upp<strong>för</strong>ande <strong>för</strong> en viss kombination av villkor. Notera<br />

<strong>att</strong> regeln som representerar <strong>att</strong> samtliga tre villkor är uppfyllda (J, J, J) inte finns i<br />

tabellen. Det kan t.ex. bero på <strong>att</strong> den kombinationen av villkor är fysikaliskt omöjlig.<br />

Strecket i regel 4 innebär <strong>att</strong> programmets upp<strong>för</strong>ande är oberoende av om villkoret är<br />

uppfyllt eller inte.<br />

Innebörden i följande tre punkter ska kontrolleras <strong>för</strong> varje exekverat testfall [Sco90].<br />

• Samtliga villkors kombinationer finns representerade i tabellen.<br />

• Programmet uppfyller de handlingar som specificeras av respektive regel i<br />

tabellen.<br />

• Omöjliga fysikaliska villkorskombinationer, som (J, J, J) i exemplet ovan, inte kan<br />

<strong>för</strong>ekomma.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 63(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Då testning ut<strong>för</strong>s med hjälp av villkorstabeller bör <strong>testa</strong>ren börja med <strong>att</strong> verifiera <strong>att</strong><br />

samtliga villkors kombinationer finns representerade i tabellen. Därefter ska testfall<br />

skrivas som <strong>för</strong>säkrar <strong>att</strong> programmet uppfyller de handlingar som specificeras av<br />

respektive regel i tabellen. Det bör också kontrolleras <strong>att</strong> fysikaliskt omöjliga<br />

villkorskombinationer som (J, J, J) ovan verkligen inte kan <strong>för</strong>ekomma [Sco95].<br />

3.4.4 Syntaxtestning<br />

Ett system kan utsättas <strong>för</strong> stora påfrestningar i form av underliga indata. Det gäller<br />

särskilt system som har ett gränssnitt ut mot användare. Av någon anledning finns det<br />

alltid användare som lyckas mata in de mest osannolika indata. I de flesta fall är det<br />

inte medvetna felinmatningar från användarnas sida. Problemet är <strong>att</strong> ett fåtal <strong>testa</strong>re,<br />

ofta under tidspress, ska <strong>testa</strong> allt som dessa användare tillsammans kan tänkas utsätta<br />

systemet <strong>för</strong> under dess livslängd. Man brukar tala om apfenomenet [Bei90]. Om en<br />

miljon apor sitter vid en miljon skrivmaskiner i en miljon år, kommer kanske någon<br />

av dem <strong>att</strong> skriva ordet Hamlet. Eventuellt är det just det ordet som får systemet <strong>att</strong><br />

krascha. Att <strong>testa</strong> allt är <strong>att</strong> betrakta som en omöjlig uppgift. I ett stort system finns<br />

det alltid någon liten kombination av olika indata som <strong>för</strong>blir o<strong>testa</strong>d.<br />

Syntaxtestning handlar om <strong>att</strong> <strong>testa</strong> systemets externa inmatningar, från t.ex.<br />

användare, operatörer eller sensorer, samt alla interna inmatningar mellan olika<br />

gränssnitt. Syftet med syntaxtestningen är <strong>att</strong> mata in en mängd korrekta och felaktiga<br />

inmatningar till systemet och på så sätt upptäcka <strong>för</strong> vilka inmatningar systemet inte<br />

reagerar i överensstämmelse med specifikationen. Oönskade händelser kan gestalta<br />

sig på följande tre sätt [Sco95].<br />

• Korrekta inmatningar accepteras inte av systemet.<br />

• Korrekt inmatning accepteras men behandlas felaktigt.<br />

• Felaktiga inmatningar accepteras av systemet.<br />

• Systemet kraschar vid behandling av inmatning, oavsett om denna är korrekt eller<br />

felaktig.<br />

Det är inte svårt <strong>att</strong> <strong>för</strong>stå <strong>att</strong> det kan <strong>för</strong>ekomma oändligt många varianter på<br />

felaktiga eller korrekta inmatningar <strong>för</strong> komplexa system. Enbart några enkla<br />

inmatningar kan ge många kombinationer av tester. Där<strong>för</strong> finns mycket <strong>att</strong> vinna om<br />

testerna kan automatiseras. Som tidigare har påpekats finns det ringa möjligheter <strong>för</strong><br />

ett fåtal <strong>testa</strong>re <strong>att</strong> <strong>testa</strong> allt som samtliga användare kan tänka utsätta systemet <strong>för</strong>.<br />

Syntaxtestning brukar vara en del av de systemtester som görs t.ex. in<strong>för</strong> ett<br />

acceptanstest. Det är bra om oberoende <strong>testa</strong>re, vars beteendemönster liknar den<br />

riktiga användarens, kan deltaga i testet.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 64(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

3.4.5 Transaction flow testing<br />

Utifrån användaren kan en transaktion bestå av ett enkelt kommando. Det kan t.ex.<br />

vara en variabel som ges ett nytt värde vilket resulterar i <strong>att</strong> ett par parametrar<br />

<strong>för</strong>ändras på monitorn. Även om det kan tyckas vara en liten händelse kan det ligga en<br />

hel del arbete bakom det som syns på monitorn. En enkel instruktion från användaren<br />

kan resultera i <strong>att</strong> en mängd processer på många olika datorer påbörjas. En transaktion<br />

har liksom ett liv en begränsning i tiden. Transaktionen föds via en intern eller extern<br />

händelse och dör efter <strong>att</strong> den har åstadkommit det som den var skapad <strong>för</strong> <strong>att</strong> göra.<br />

De flöden, som transaktionerna genererar genom programmet, gestaltas i flödesgrafer<br />

liknande de som beskrevs i kapitel 3.3.1. En stor skillnad mellan transaktionsflöden<br />

och de flöden som beskrevs i kapitlet om strukturella testtekniker är <strong>att</strong><br />

transaktionsflöden är uppbyggda efter programmets beteende och inte efter dess inre<br />

struktur. Det är alltså inte programmets källkod som ska ligga till grund <strong>för</strong> flödet<br />

utan istället de krav som ställs på programmet i specifikationer.<br />

Transaction flow testing görs lämpligast med tekniker liknande de som används vid<br />

den strukturella control flow testningen, se kapitel 3.3.2. Ett krav är givetvis <strong>att</strong><br />

flödena bygger på transaktionsflöden och inte på de interna strukturerna som i de<br />

strukturella fallen. Det största arbetet ligger ofta i <strong>att</strong> ta fram alla möjliga<br />

transaktionsflöden. Om transaktionsflöden är en del av systemets specifikationer är en<br />

stor del av arbetet redan gjort [Bei90].<br />

Vilka testvägar ska då väljas genom programmet? Svaret skiljer sig en aning från de<br />

som gavs <strong>för</strong> control flow testing. Till <strong>att</strong> börja med bör åtminstone fullständig nod-<br />

och grentäckning uppfyllas, enligt det arbetssätt som finns <strong>för</strong>klarat i kapitel 3.3.2.<br />

Dessa vägar brukar utgöra 80 – 95 % av de totala transaktionsflödesvägarna. Tyvärr<br />

ligger de flesta felen utan<strong>för</strong> dessa testvägar. För <strong>att</strong> komma åt dessa fel bör istället de<br />

längsta och mest obegripliga vägarna tas fram och undersökas [Bei90].<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 65(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

3.5 Statistisk testning<br />

Statistisk testning avser här testverksamhet som syftar till <strong>att</strong> resultera i någon form av<br />

kvalitetsmått på <strong>mjukvara</strong>n. Tre olika tekniker kommer <strong>att</strong> presenteras nedan;<br />

felinjicering, random testing och feluppsk<strong>att</strong>ning med hjälp av dubbla testlag. Både<br />

random testing och felinjicering ger en uppsk<strong>att</strong>ning om hur många kvarvarande fel<br />

som finns i koden. Random testing kan även användas <strong>för</strong> <strong>att</strong> få uppsk<strong>att</strong>ade värden<br />

angående <strong>mjukvara</strong>ns till<strong>för</strong>litlighet och tillgänglighet [Gar99].<br />

Dessa metoder kan användas <strong>för</strong> <strong>att</strong> hitta fel. Det bör dock påpekas <strong>att</strong> om teknikerna<br />

enbart används i detta syfte, och inte <strong>för</strong> <strong>att</strong> få ett kvalitetsmått, finns det antagligen<br />

effektivare tekniker <strong>att</strong> använda.<br />

3.5.1 Felinjicering<br />

Målet med felinjicering är <strong>att</strong> få ett mått på testteknikers <strong>för</strong>måga <strong>att</strong> påvisa fel och <strong>att</strong><br />

få ett mått på hur många fel som kan tänkas finnas kvar i den <strong>testa</strong>de koden [IEC<br />

61508]. Tekniken bygger på <strong>att</strong> kända fel injiceras i koden. Programmet exekveras<br />

och <strong>testa</strong>s med ett antal testtekniker. Antalet injicerade fel och det antal av dessa som<br />

hittas efter exekveringen används sedan tillsammans med resultatet från testet <strong>för</strong> <strong>att</strong><br />

bedöma hur många riktiga fel som finns i koden.<br />

Antal injicerade fel som hittas<br />

Totala antalet injicerade fel<br />

Antal verkliga fel som hittas<br />

Totala antalet verkliga<br />

fel<br />

Antag <strong>att</strong> testningen hittar 100 av de 200 injicerade felen och dessutom 100 verkliga<br />

fel. Det ger ett <strong>för</strong>hållande på 0,5 <strong>för</strong> de felinjicerade felen, vilket innebär <strong>att</strong> det<br />

borde finnas ytterligare ungefär 100 verkliga fel i koden.<br />

Det är viktigt <strong>att</strong> felen som injiceras liknar de fel som programmerare kan tänkas göra.<br />

Om lättidentifierade fel injiceras i en kod innehållande mer komplicerade fel kommer<br />

inte resultatet <strong>att</strong> bli till<strong>för</strong>litligt [Fri95]. Teknikens största svaghet ligger i svårigheten<br />

<strong>att</strong> bedöma vilka fel som ska injiceras.<br />

Felinjicering kan också innebära <strong>att</strong> fel injiceras <strong>för</strong> <strong>att</strong> se hur systemet reagerar. De<br />

fel som påträffas med detta <strong>för</strong>farande kan annars vara svåra <strong>att</strong> hitta [Kee95].<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 66(124) Industriella informations och styrsystem<br />

=


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

3.5.2 Random testing<br />

Det primära i en statistisk testteknik är inte <strong>att</strong> hitta fel utan snarare <strong>att</strong> ge ett mått på<br />

sannolikheten <strong>att</strong> det finns fel. Random testing är en testteknik som kan räknas till de<br />

statistiska testteknikerna, men som dessutom används med målsättningen <strong>att</strong> hitta fel.<br />

Till skillnad mot många andra tekniker lämnar random testing vissa beslut åt slumpen.<br />

Tekniken garanterar t.ex. inte <strong>att</strong> ett visst antal tillstånd exekveras, eller <strong>att</strong> ett antal<br />

vägar genomlöps. Istället är det slumpen som får avgöra vilka delar av<br />

programrymden som ska exekveras. I många andra testtekniker är det <strong>testa</strong>ren själv<br />

som på det ena eller andra sättet bestämmer vilka indata som ska användas i testerna.<br />

Random testing bygger istället på <strong>att</strong> <strong>testa</strong>rnas val ersätts med slumpade värden från<br />

någon effektiv algoritm.<br />

Innan en lämplig slumpgenerator slumpar fram värden måste den domän i vilka<br />

värdena ska gälla bestämmas. De genererade värdena används sedan som indata till<br />

programmet eller den del av programmet som ska <strong>testa</strong>s. Random testing kan således<br />

ses som både ett systemtest och ett modultest. Resultatet från det exekverade<br />

programmet jäm<strong>för</strong>s slutligen med specifikationer som beskriver hur programmet ska<br />

fungera. Testet sägs misslyckas om något indata leder till ett inkorrekt resultat.<br />

Exempel på ramdom testing<br />

Tekniken illustreras med ett enkelt exempel [Ham94]. En funktion som beräknar<br />

kubikroten av ett heltal garanterar en noggrannhet på 2·10 -5 i intervallet X = [1, 10 7 ].<br />

Värdena antas vara likformigt <strong>för</strong>delade över intervallet, d.v.s. alla heltal i intervallet<br />

kan <strong>för</strong>ekomma lika ofta i beräkningen. Ett test som bygger på slumpmässighet och<br />

som består av 3000 testfall kan då ut<strong>för</strong>as på följande sätt.<br />

3000 likformigt <strong>för</strong>delade heltal genereras i intervallet X med en lämplig algoritm.<br />

Varje heltal sätts som indata t till funktionen. För varje värde på t beräknas därefter<br />

kubiken av funktionens utdata, vilket sedan jäm<strong>för</strong>s med t. Om något av de 3000<br />

testfallen får en mindre noggrannhet än det utlovade 2·10 -5 bör funktionen rättas till.<br />

Att åtgärda koden och därefter <strong>testa</strong> bör sedan göras iterativt till målet uppnås och alla<br />

3000 fall hamnar inom tillåten felmarginal.<br />

Exemplet ovan är något orealistiskt av två anledningar [Ham94].<br />

1. För det <strong>för</strong>sta är det sällan så enkelt <strong>att</strong> slumpa fram lämpliga indata. Ofta är<br />

indata mer komplexa än heltal inom ett givet intervall. Det är inte heller säkert <strong>att</strong><br />

det finns någon lämplig <strong>för</strong>delning som beskriver hur sannolikheten <strong>för</strong> indata<br />

varierar längs intervallet.<br />

2. Det är sällan lika enkelt som i exemplet ovan <strong>att</strong> jäm<strong>för</strong>a utdata med det tänkta<br />

beteendet. I många fall kan det bero på <strong>att</strong> specifikationerna är otydligt<br />

formulerade, men systemets beteende kan i sig vara så komplext <strong>att</strong> en jäm<strong>för</strong>else<br />

i stort sätt är omöjlig.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 67(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Förutsättningar <strong>för</strong> random testing<br />

Det finns vissa <strong>för</strong>utsättningar som bör gälla <strong>för</strong> <strong>att</strong> resultatet från testerna ska bli<br />

till<strong>för</strong>litliga.<br />

• Modulen eller programmet som <strong>testa</strong>s måste <strong>för</strong>ses med tillräckligt många indata,<br />

ju fler desto bättre. Många indata leder till <strong>att</strong> en större del av programrymden<br />

exekveras, vilket ger ett mer heltäckande resultat.<br />

• Ett effektivt orakel är ett måste. Eftersom det ofta rör sig om många testfall måste<br />

oraklet, utan mänsklig inblandning, kunna avgöra om testets utdata<br />

överensstämmer med det <strong>för</strong>väntade beteendet.<br />

• En känd profil över användandet bör finnas som kan översättas till någon lämplig<br />

sannolikhets<strong>för</strong>delning.<br />

Vissa kritiker menar <strong>att</strong> det ofta är svårt <strong>att</strong> få fram en <strong>för</strong>delning som visar hur<br />

värdena ska slumpas fram. I de fall då det inte finns någon känd <strong>för</strong>delning <strong>att</strong> tillgå,<br />

brukar istället en likformig <strong>för</strong>delning användas. Om antalet värden är tillräckligt stort<br />

kan denna <strong>för</strong>delning till och med visa styrkor som en mer ”riktig” <strong>för</strong>delning inte<br />

gör. Anledningen är <strong>att</strong> även mindre sannolika värden <strong>testa</strong>s. Erfarenheten visar <strong>att</strong> en<br />

nybörjare kan krascha ett program som experter har använt långa tider utan problem<br />

[Ham94]. Slumpmässiga värden från en likformig <strong>för</strong>delning bryr sig inte om vilka<br />

indata som är mest sannolika. Skumma indata, som representerar nybörjares mindre<br />

vanliga inmatningar, <strong>för</strong>eträds då också i testet.<br />

Random testing som statistisk metod<br />

Vissa standarder kräver t.ex. <strong>att</strong> 80 % av programmets alla vägar genomlöps i ett test,<br />

men det finns ingen information om vilka av alla dessa vägar som ska genomlöpas.<br />

Ett sådant test kan enbart påvisa <strong>att</strong> 80 % av alla vägar fungerar tillfredsställande.<br />

Testet visar inte hur resterande 20 % fungerar.<br />

Ett argument <strong>för</strong> random testing är <strong>att</strong> ett lyckat test kan ses som ett statistiskt mått på<br />

programmets pålitlighet. Eftersom programmet eller funktionen körs i sin helhet, med<br />

slumpmässiga indata som ska spegla användarprofilen, kan ett mått fås på hur<br />

programmet fungerar. För mindre avancerade program kan ett test t.ex. visa <strong>att</strong> fel till<br />

99 % sannolikhet kommer <strong>att</strong> uppstå en gång på 10 000 körningar. För ett<br />

realtidssystem skulle ett test kunna visa <strong>att</strong> medeltiden mellan fel till 99 % sannolikhet<br />

kommer vara större än 10 000 timmar. I dessa fall brukar testtekniken även gå under<br />

namnet Monte Carlo-testning.<br />

Random testings effektivitet<br />

Hur effektiv denna testteknik är tvistar de lärde om. [Ham94] menar <strong>att</strong> random<br />

testing har visat sig vara en nog så bra teknik som många av de strukturella och<br />

funktionella testteknikerna när det gäller <strong>att</strong> påvisa fel. Förf<strong>att</strong>aren påpekar dock<br />

vikten av <strong>att</strong> många testfall körs <strong>för</strong> <strong>att</strong> få ett vedertaget resultat. [Sco95] skriver å<br />

andra sidan <strong>att</strong> tekniken är mindre effektiv på <strong>att</strong> hitta fel än de strukturella och<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 68(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

funktionella testteknikerna. Något som de verkar vara överens om är <strong>att</strong> tekniken kan<br />

vara ett bra komplement till andra testtekniker. Att enbart använda random testing är<br />

inte <strong>att</strong> rekommendera.<br />

3.5.3 Feluppsk<strong>att</strong>ning med hjälp av dubbla testlag<br />

En ytterligare möjlighet <strong>att</strong> få ett mått på antalet fel i en <strong>mjukvara</strong> är <strong>att</strong> låta två testlag<br />

<strong>testa</strong> koden oberoende av varandra varefter de upptäckta felen jäm<strong>för</strong>s. Antag <strong>att</strong> ett<br />

program har en viss mängd fel i sig, vilka representeras av den stora cirkeln i Figur<br />

3-26. De två oberoende testlagen A och B hittar felen inom respektive mindre cirkel.<br />

Om testlagen hittar samma fel kan det kännas logiskt <strong>att</strong> de troligen har hittat en stor<br />

del av det totala antalet fel i <strong>mjukvara</strong>n. Om testlagen däremot hittar olika fel är<br />

sannolikheten stor <strong>att</strong> det kan finnas ytterligare fel i <strong>mjukvara</strong>n som ännu inte<br />

upptäckts.<br />

Totala felrymden<br />

Av A hittade<br />

fel<br />

Av B hittade<br />

fel<br />

Figur 3-26. Exempel på en <strong>mjukvara</strong>s totala felrymd, samt de fel som hittas av testlag A respektive B.<br />

Tekniken lämpar sig antagligen bäst <strong>för</strong> <strong>att</strong> göra grova uppsk<strong>att</strong>ningar angående hur<br />

stor del av antalet fel som upptäckts. Det finns dock en allvarlig brist med tekniken,<br />

det är inte rimligt <strong>att</strong> anta <strong>att</strong> de fel som hittas av testlagen är oberoende av varandra<br />

eftersom vissa fel är lättare <strong>att</strong> hitta än andra. Om båda testlagen hittar alla<br />

lättupptäckta fel var <strong>för</strong> sig kan det ändå finnas många fel kvar som är svåra <strong>att</strong> hitta.<br />

Det är då naturligtvis felaktigt <strong>att</strong> dra slutsatsen <strong>att</strong> en stor del av testrymden skulle<br />

vara täckt.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 69(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

3.6 Statisk analys<br />

Att <strong>testa</strong> <strong>mjukvara</strong> är <strong>för</strong>knippat med <strong>att</strong> kod på ett eller annat sätt exekveras, d.v.s.<br />

testning är ett dynamiskt <strong>för</strong>lopp. Statisk analys innebär <strong>att</strong> ett program undersöks<br />

utan <strong>att</strong> det exekveras, var<strong>för</strong> det inte är någon egentlig testteknik [Bei90]. Analysen<br />

kan vara såväl manuell som automatisk. I modernare programmeringsspråk finns<br />

mycket av den automatiska analysen inbyggd, t.ex. om ett semikolon glöms av<br />

programmeraren påpekas det av kompilatorn.<br />

Styrkor<br />

Eftersom det inte bara är kod som inspekteras så behöver inte analysen knytas till<br />

någon av projektets faser. Specifikationer kan t.ex. inspekteras långt innan<br />

implementationsarbetet påbörjas. Det med<strong>för</strong> <strong>att</strong> fel och misstag kan upptäckas i ett<br />

tidigt skede och åtgärdas innan de fått några större konsekvenser.<br />

Svagheter<br />

Den största svagheten med statisk analys är <strong>att</strong> den inte ger någon information om<br />

<strong>mjukvara</strong>ns beteende vid exekvering. Statiska analysen kan där<strong>för</strong> knappast ersätta<br />

den dynamiska testningen utan bör istället ses som ett komplement till denna. Den<br />

statiska analysen kan också kräva stora arbetsresurser, vilket särskilt gäller i de fall då<br />

projektspecifika ändamål ska översättas till något automatiskt testverktyg [Sco95].<br />

3.6.1 Granskning och walkthrough<br />

Syftet med granskning och walkthrough är <strong>att</strong> identifiera problem och fel som kan<br />

uppstå i projektets <strong>för</strong>sta faser. Syftet är således inte <strong>att</strong> lösa problemen, utan snarare<br />

<strong>att</strong> identifiera dem [Kan93].<br />

Granskningen äger rum under ett möte ofta bestående av fem till tio deltagare. För <strong>att</strong><br />

inte mötesdeltagarna ska vara partiska är det en <strong>för</strong>del om de inte är allt<strong>för</strong> ins<strong>att</strong>a i<br />

projektet. Under mötet får t.ex. en systemdesigner redogöra <strong>för</strong> hur en viss del av<br />

systemet är tänkt <strong>att</strong> fungera. Mötesdeltagarna ställer frågor och gör kommentarer på<br />

eventuella svagheter [Sco95].<br />

Standarden IEC 61508 rekommenderar <strong>att</strong> en granskning ska göras så fort något i<br />

systemet <strong>för</strong>ändras som kan påverka systemets funktionalitet. Det kan t.ex. handla om<br />

skapandet av nya applikationer, revisioner i befintlig programvara, prestanda och<br />

säkerhetsaspekter.<br />

En <strong>för</strong>del med granskningen är <strong>att</strong> den kan göras i ett tidigt skede av projektet, t.o.m.<br />

innan koden är skriven. Ju tidigare brister upptäcks, desto lättare och billigare är det<br />

<strong>att</strong> åtgärda dem.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 70(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

3.6.2 Inspektion<br />

Inspektion, även ibland kallat Fagan Inspection efter Michael Fagan, är en effektiv<br />

teknik <strong>för</strong> <strong>att</strong> upptäcka fel i projektets tidiga faser. Michael Fagan började skissa på<br />

tekniken på 70-talet och den har sedan dess utvecklats till <strong>att</strong> bli en av de effektivaste<br />

teknikerna <strong>för</strong> <strong>att</strong> hitta fel. Det har visats <strong>att</strong> så mycket som 50 – 70 procent av felen<br />

kan upptäckas under inspektionsprocessen [Gil93].<br />

IEEE Standard Glossary of Software Engineering Terminology definierar inspektion<br />

som en formell metod där <strong>mjukvara</strong>ns systemkrav, design eller kod detaljgranskas av<br />

en oberoende person eller grupp <strong>för</strong> <strong>att</strong> hitta fel, konflikter med standarder eller andra<br />

problem.<br />

Det finns tre olika varianter av inspektioner [Sco95]. En överblick av de tre<br />

varianterna finns presenterade i Figur 3-27.<br />

I0: Inspektionen brukar kallas I0 om arbetet fokuserar på <strong>att</strong> verifiera <strong>att</strong> funktioners<br />

beteende överensstämmer med de krav som ställs på systemet. Det är särskilt<br />

dataflödet mellan olika delar av programmet som undersöks <strong>för</strong> <strong>att</strong> påvisa <strong>att</strong><br />

flödena genom systemet är korrekta och <strong>att</strong> inga deadlock existerar.<br />

I1: Dessa inspektioner behandlar den översiktliga designstrukturen som t.ex. logiska<br />

uttryck.<br />

I2: De inspektioner som ut<strong>för</strong>s under implementationsfasen går under benämningen<br />

I2. Inspektionen, som även kallas code inspection, fokuserar på översättningen av<br />

den detaljerade designen till kod.<br />

Systemkrav<br />

Inspektion I0<br />

Översiktlig design<br />

Inspektion I1<br />

Detaljerad design<br />

Inspektion I2<br />

Kod<br />

Modul-<br />

test<br />

Figur 3-27. Olika typer av inspektioner under projektets livscykel.<br />

Integrationstest<br />

System-<br />

test<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 71(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Samtliga inspektioner ska följa en väl definierad arbetsgång som t.ex. innehåller steg<br />

som planering, <strong>för</strong>beredelser, inspektion och uppföljning. Om det behövs kan<br />

uppföljningen bestå av en helt ny inspektion.<br />

Inspektion av koden kan även med<strong>för</strong>a andra <strong>för</strong>delar än <strong>att</strong> specifika fel upptäcks<br />

[Kan93]. En utomstående som läser igenom koden kan tala om huruvida koden är<br />

begriplig eller inte. Är koden svår <strong>att</strong> <strong>för</strong>stå kan det bero på <strong>att</strong> den som skrivit koden<br />

haft problem med <strong>att</strong> lösa uppgiften och kanske inte lyckats göra det på ett bra sätt.<br />

Om så är fallet är det stor risk <strong>att</strong> fel finns i koden. Är dessutom koden svår <strong>att</strong> <strong>för</strong>stå<br />

<strong>för</strong> en utomstående kommer den vara svår <strong>att</strong> underhålla och uppdatera eftersom det<br />

arbetet ofta ut<strong>för</strong>s av andra än de som skrivit koden.<br />

Inspektion jäm<strong>för</strong>t med testning<br />

Både inspektion och testning syftar till <strong>att</strong> hitta eventuella fel så <strong>att</strong> <strong>mjukvara</strong>ns<br />

kvalitet kan säkerställas innan den når användaren. Tillvägagångssätten <strong>för</strong> <strong>att</strong> nå<br />

målet skiljer sig dock en aning från varandra. En stor styrka med inspektion är <strong>att</strong> den<br />

kan genom<strong>för</strong>as en lång tid innan kod har producerats. Det går på så sätt <strong>att</strong> i ett tidigt<br />

stadium hitta fel, fel som hade varit dyra <strong>att</strong> åtgärda om de hade hittats i ett senare<br />

skede av projektet. För <strong>att</strong> genom<strong>för</strong>a ett test måste krav- och designspecifikationer<br />

vara skrivna eftersom specifikationerna ska avgöra huruvida testet har lyckats eller ej.<br />

Testning å andra sidan har den styrkan <strong>att</strong> systemet verifieras utefter dess verkliga<br />

beteende.<br />

3.6.3 Formella metoder<br />

Formella metoder används <strong>för</strong> <strong>att</strong> utveckla mjukvarusystem genom <strong>att</strong> till<strong>för</strong>a en<br />

matematisk beskrivning av systemets egenskaper. En formell metod tillhandahåller ett<br />

ramverk - regler och syntax - <strong>för</strong> <strong>att</strong> kunna specificera, utveckla och verifiera ett<br />

system enligt ett systematisk tillvägagångssätt [Pre97].<br />

Formella metoder används fram<strong>för</strong> allt på följande två sätt [Joh96].<br />

• För <strong>att</strong> producera en korrekt och tydlig specifikation.<br />

• Först <strong>för</strong> <strong>att</strong> producera en korrekt och tydlig specifikation, men sedan också <strong>för</strong> <strong>att</strong><br />

sätta upp bevis <strong>för</strong> <strong>att</strong> designen av systemet överensstämmer med specifikationen.<br />

Användandet av formella metoder syftar till <strong>att</strong> underlätta framtagandet av otvetydiga<br />

och konsistenta specifikationer, d.v.s. specifikationer som inte säger emot sig själva.<br />

Den syntax som används i formella specifikationer är mer lämpad <strong>för</strong> <strong>att</strong> skriva<br />

otvetydigt än vid vanliga textbeskrivningar. För <strong>att</strong> övertyga sig om <strong>att</strong> en<br />

specifikation är konsistent ska matematiska bevis konstrueras. Bevis<strong>för</strong>ingen<br />

möjliggörs även den av de formella notationer som används i formella metoder<br />

[Pre97].<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 72(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Förutom <strong>att</strong> användas <strong>för</strong> specificering och verifiering kan formella metoder,<br />

åtminstone teoretiskt, användas <strong>för</strong> <strong>att</strong> påvisa frånvaron av vissa typer av fel. Exempel<br />

på fel som kan visas vara obefintliga är de som härrör från implementationsfasen<br />

[Lit94]. Däremot går det inte <strong>att</strong> bevisa frånvaron av alla fel. Det går till exempel inte<br />

<strong>att</strong> visa <strong>att</strong> översättningen från en specifikation som är skriven med vanlig text har<br />

blivit korrekt övers<strong>att</strong> till den formella notationen som används.<br />

Det finns en rad olika formella metoder som tillsammans kan delas upp i två<br />

huvudgrupper. Den ena gruppen består av metoder som används främst <strong>för</strong> formell<br />

bevis<strong>för</strong>ing. Den andra gruppen, s.k. model checkers, används <strong>för</strong> <strong>att</strong> kontrollera olika<br />

typer av modeller [Bra00], se också kapitel 3.7.4. Den <strong>för</strong>sta gruppen av formella<br />

metoder ställer höga krav på <strong>att</strong> användaren är väl ins<strong>att</strong> i hur formella metoder<br />

används eftersom utbudet av automatiska hjälpmedel är litet. En av anledningarna till<br />

<strong>att</strong> det har varit så svårt <strong>att</strong> etablera användandet av formella metoder inom industrin<br />

kan vara <strong>att</strong> det krävs goda matematiska kunskaper <strong>för</strong> <strong>att</strong> få <strong>för</strong>ståelse <strong>för</strong> metoderna<br />

[Bow93].<br />

I de fall formell verifiering av program har tillämpats har det enligt [Lev95] visat sig<br />

vara mycket resurskrävande trots relativt enkla program. Dessutom är de bevis som<br />

konstruerats så komplexa och omf<strong>att</strong>ande <strong>att</strong> de i sig kan innehålla fel. Även<br />

publicerade bevis av små algoritmer har visat sig innehålla fel. Matematiska bevis av<br />

ett programs egenskaper kan vara lika stora som själva programmet, dessutom svåra<br />

<strong>att</strong> framställa och <strong>för</strong>stå [Lev 95]. [Joh96] poängterar dock <strong>att</strong> formella metoder kan<br />

ha en positiv inverkan eftersom den framtvingar ett rationellt och disciplinerat<br />

tänkande.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 73(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

3.7 Övriga tekniker<br />

Här presenteras de tekniker som inte har sorterats in under ovanstående kapitel.<br />

3.7.1 Stresstestning<br />

Syftet med stresstestning är <strong>att</strong> undersöka hur systemet beter sig då det utsätts <strong>för</strong><br />

belastningar utöver det normala. Om systemet fungerar under onormala belastningar<br />

bör det även göra det under mer normala omständigheter. Den här typen av testning är<br />

särskilt viktig <strong>för</strong> säkerhetskritiska system som behandlar stora mängder indata<br />

[Sco95].<br />

Områden som är möjliga <strong>att</strong> stressa kan t.ex. vara<br />

• Mängden indata<br />

• Diskutrymme<br />

• Minne<br />

• Mängden utdata<br />

• Kapacitet på kommunikationslänkar<br />

• Användaren<br />

Det primära målet med stresstestning är <strong>att</strong> verifiera <strong>att</strong> systemets prestanda- och<br />

kapacitetskrav uppfylls. Genom <strong>att</strong> stress<strong>testa</strong> runt gränsvärden kan information<br />

erhållas huruvida de kapacitetskrav som ställs på systemet är uppfyllda. Ofta räcker<br />

det dock inte <strong>att</strong> <strong>testa</strong> runt gränsvärden. Ett sätt <strong>att</strong> ut<strong>för</strong>a ett stresstest är <strong>att</strong> belasta<br />

systemet mer och mer tills det inte längre klarar av <strong>att</strong> fungera som det var tänkt.<br />

Genom <strong>att</strong> undersöka var<strong>för</strong> och vid vilka belastningar systemet slutar fungera fås<br />

information om eventuella fel, belastningsgränser, systemets beteende runt dessa<br />

gränser och systemets <strong>för</strong>måga <strong>att</strong> återhämta sig.<br />

Att återupprepa samma stresstester är i stort sätt omöjligt <strong>för</strong> lite större system. Det<br />

kan bero på <strong>att</strong> flera simultana aktiviteter sker samtidigt och <strong>att</strong> de interna tiderna <strong>för</strong><br />

aktiviteterna varierar från gång till gång. Att testerna inte går <strong>att</strong> återupprepa med<strong>för</strong><br />

<strong>att</strong> identifieringen av mjukvarufel kan bli besvärligt. Typiska fel som påträffas under<br />

stresstestning är snarare relaterade till designfrågor än till rena<br />

programmeringsmisstag [Sco95].<br />

En <strong>för</strong>utsättning <strong>för</strong> <strong>att</strong> resultatet ska bli trovärdigt är <strong>att</strong> testningen ut<strong>för</strong>s i en miljö<br />

som liknar den som systemet är tänkt <strong>att</strong> operera i. Om systemet är under utveckling<br />

kan det där<strong>för</strong> vara mycket kostsamt och svårt <strong>att</strong> bygga upp en sådan miljö. Det kan<br />

dessutom vara svårt <strong>att</strong> generera så stora mängder indata till systemet som behövs <strong>för</strong><br />

<strong>att</strong> testet ska bli till<strong>för</strong>litligt. För lite större system är det nödvändigt <strong>att</strong> dessa indata<br />

kan genereras på automatisk väg. Att genom<strong>för</strong>a ett stresstest kräver stora resurser<br />

och <strong>för</strong>beredelser. Hur verklighetstrogna dessa tester blir är där<strong>för</strong> ofta en<br />

kostnadsfråga [Per95].<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 74(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

3.7.2 Cleanroom testing<br />

Cleanroom testing är en del av IBM:s utvecklingsmetod <strong>för</strong> <strong>mjukvara</strong>. Denna<br />

omdiskuterade metoden skiljer sig en hel del från ett vanlig utvecklingsprojekt med<br />

faser som t.ex. planering, design, implementation och test. Tanken med cleanroom är<br />

<strong>att</strong> koden ska göras rätt från <strong>för</strong>sta början. Koden utvecklas utan <strong>att</strong> exekveras, vilket<br />

istället görs i en separat fas efter utvecklingen.<br />

Testningen går till på ett annorlunda sätt. Istället <strong>för</strong> <strong>att</strong> ut<strong>för</strong>a tester som ska hitta fel i<br />

design och kod, är målet med cleanroom testing <strong>att</strong> validera systemkraven utefter ett<br />

statistiskt urval av användarfall. För <strong>att</strong> kunna <strong>testa</strong> systemet på ett sådant sätt måste<br />

testgruppen <strong>för</strong>st undersöka hur systemets funktioner kommer <strong>att</strong> användas och hur<br />

stor sannolikheten är <strong>att</strong> respektive funktion exekveras. I följande tabeller ges ett<br />

exempel hämtat ur [Pre97].<br />

Aktivitet Fördelning Intervall<br />

A 50 % 1-49<br />

B 15 % 50-63<br />

C 15 % 64-78<br />

D 15 % 79-94<br />

E 5 % 95-99<br />

Tabell 3-8. Exempel på aktiviteter och deras sannolikhets<strong>för</strong>delning.<br />

Aktiviteterna delas upp i intervall utifrån sannolikhets<strong>för</strong>delningen. För <strong>att</strong> generera<br />

en sekvens av tester slumpas en serie nummer fram med en algoritm, se Tabell 3-9.<br />

Testerna ut<strong>för</strong>s och resultatet jäm<strong>för</strong>s med systemets specifikationer.<br />

Slumpad sekvens Sekvens av testfall<br />

12-94-22-24-45-56 A-D-A-A-A-B<br />

81-19-31-69-45-9 T-A-A-A-C-A-A<br />

Tabell 3-9. Två serier av testfall genererade utifrån en slumpad sekvens.<br />

Det finns motstridiga uppgifter om huruvida cleanroom är en bra metod eller ej.<br />

Tyvärr finns det inte så mycket empirisk information som visar hur tekniken fungerar<br />

i verkligheten. De flesta kritiker verkar tycka <strong>att</strong> tekniken är mycket intressant, men<br />

som alltid finns det undantag. Boris Beizer, ett välkänt namn inom testning, skriver ”I<br />

am confident that Cleanroom is, and will remain, an underdeveloped and<br />

overexposed minority practice.” [Bei97].<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 75(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Fördelen med cleanroom testing är <strong>att</strong> den bygger på statistiska data utifrån<br />

användarfall, d.v.s. den ska spegla hur systemet är tänkt <strong>att</strong> användas. Mindre arbete<br />

ut<strong>för</strong>s under utvecklingsfasen, men istället måste mer omf<strong>att</strong>ande arbete läggas ner <strong>för</strong><br />

<strong>att</strong> identifiera användarfall och de sannolikhets<strong>för</strong>delningar som ska kopplas till dem.<br />

En nackdel, liksom i många andra testtekniker, är svårigheten <strong>att</strong> ta fram ett pålitligt<br />

orakel [Hei97].<br />

3.7.3 N-version programmering<br />

N-version-, multiversion- och diversifierad programmering är alla namn på en<br />

designteknik som använts till <strong>att</strong> utveckla <strong>mjukvara</strong> <strong>för</strong> säkerhetskritiska system. I den<br />

kommande framställningen används endast termen N-version programmering.<br />

Tekniken innebär <strong>att</strong> samma funktionalitet utvecklas i flera olika versioner av olika<br />

utvecklare. Indata exekveras sedan parallellt av de olika versionerna. Resultaten från<br />

körningarna skickas till en omröstningsfunktion som utifrån de olika resultaten<br />

bestämmer utdatan från systemet, se Figur 3-28. I vissa fall, då inte exakta värden<br />

erhålls från de olika versionerna, kan det vara svårt <strong>att</strong> ta fram en ändamålsenlig<br />

omröstningsfunktion.<br />

Indata<br />

Version 1<br />

Version 2<br />

Version 3<br />

…<br />

Version N<br />

Omröstningsfunktion<br />

Figur 3-28. Schematisk beskrivning av ett N-version system [Hat97].<br />

Utdata<br />

Det kan diskuteras huruvida N-version programmering ska klassificeras som en<br />

testteknik eller ej. Vanligtvis brukar den klassificeras som en designteknik, men<br />

beroende på hur tekniken tillämpas kan den också användas <strong>för</strong> testning. Med testning<br />

avses ofta arbete som görs <strong>för</strong> <strong>att</strong> hitta fel i en redan skriven kod. N-version<br />

programmering innebär <strong>att</strong> extra arbete läggs ned på <strong>att</strong> skriva själva koden eftersom<br />

det görs flera gånger, vilket alltså motsäger <strong>att</strong> det är en testteknik. Ett argument som<br />

talar <strong>för</strong> <strong>att</strong> en klassificering som testteknik är <strong>att</strong> de olika versionerna <strong>testa</strong>s mot<br />

varandra under exekveringen av systemet.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 76(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

N-version programmering går dock <strong>att</strong> använda som en ren testteknik. Det görs<br />

genom <strong>att</strong> konstruera flera versioner av ett program och testköra dessa mot varandra.<br />

När programmet sedan ska användas exekveras bara en version. Användningssättet<br />

benämns även som comparison testing och back-to-back testing.<br />

Idén med <strong>att</strong> köra delsystem med samma funktionalitet parallellt har använts i<br />

säkerhetskritiska hårdvarusystem under en längre tid. Denna idé grundar sig på<br />

antagandet <strong>att</strong> de komponenter som bildar delsystemen går sönder oberoende av<br />

varandra. Antagandet är visserligen inte helt korrekt eftersom yttre omständigheter<br />

kan slå ut systemen samtidigt, men tekniken har ändå visat sig framgångsrik [Hat97].<br />

Det är nog inte ett allt<strong>för</strong> vågat påstående <strong>att</strong> hårdvarukomponenter åtminstone till<br />

viss del går sönder oberoende av varandra, se kapitel 3.2.8.<br />

[Lit87] framställer N-version programmering som en teknik som verkligen lämpar sig<br />

<strong>för</strong> säkerhetskritiska system och då även vad gäller <strong>mjukvara</strong>n. Framställningen görs<br />

via räkneexempel där de olika programversionerna antas vara oberoende av varandra<br />

[Lit87]. Antagandet är dock antagligen felaktigt då det gäller <strong>mjukvara</strong>. Ett av de mest<br />

omf<strong>att</strong>ande experimenten som genom<strong>för</strong>ts på området visar <strong>att</strong> antagandet är felaktigt<br />

med 99 % säkerhet [Kni90], se kapitel 3.2.8.<br />

N-version programmering ut<strong>för</strong>s efter <strong>att</strong> designspecfikationen är skriven, vilket<br />

med<strong>för</strong> <strong>att</strong> fel i specifikationen inte hittas. Dessa fel är enligt [Lev95] i majoritet av de<br />

totala antalet fel som uppkommer under utvecklingen. I [Kni90] påpekas <strong>att</strong> det inte<br />

hjälper <strong>att</strong> utveckla de olika versionerna i olika programmeringsspråk eftersom felen<br />

ändå tycks bli beroende. Det hjälper inte ens <strong>att</strong> använda olika algoritmer eftersom fel<br />

ändå tycks uppstå på samma ställe, nämligen vid domängränser.<br />

Den differentierade designen kan leda till ett mer till<strong>för</strong>litlig system, men det finns<br />

också vissa negativa aspekter som bör uppmärksammas. Det krävs större resurser <strong>för</strong><br />

<strong>att</strong> tillämpa denna teknik, inte enbart vad gäller design och kodning, utan även<br />

underhåll, uppgradering etc. Systemet blir också komplexare och svårare <strong>att</strong> <strong>för</strong>stå sig<br />

på. Det som vinns i minskat antal inträffade fel får alltså ställas i proportion till de<br />

ytterligare resurser som krävs <strong>för</strong> den differentierade designen [Gar99].<br />

En ytterligare aspekt är omröstningsfunktionen. Finns inte en effektiv omröstningsfunktion,<br />

som på lämpligt sätt beräknar det gemensamma utdatat från de olika<br />

versionerna, kan hela tekniken ifrågasättas. Utbildningen på de personer som ingår i<br />

teamet är också av betydelse. Om alla har samma bakgrund är risken stor <strong>att</strong> dessa<br />

personer gör liknande fel.<br />

[Lev95] hävdar också <strong>att</strong> den ökade komplexiteten i sig kan med<strong>för</strong>a <strong>att</strong> nya fel<br />

uppkommer. Trots den ökade komplexiteten kan i vissa fall, där mycket höga krav<br />

ställs på systemet, N-version programmering vara befogad, men det ska inte ställas<br />

allt<strong>för</strong> hög tilltro till tekniken.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 77(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

3.7.4 Modellbaserad verifiering (MBV)<br />

Den grundläggande avsikten med modellbaserad verifiering är <strong>att</strong> med hjälp av en<br />

selektiv och resultatinriktad användning av formella metoder skapa <strong>för</strong>enklade<br />

modeller som används <strong>för</strong> <strong>att</strong> identifiera fel snarare än <strong>att</strong> skapa formella bevis <strong>för</strong> <strong>att</strong><br />

ett program är korrekt [Glu98]. Tanken med modellbaserad verifiering är följaktligen<br />

<strong>att</strong> <strong>för</strong>söka ta tillvara på många av <strong>för</strong>delarna med formella metoder, men samtidigt<br />

undvika dess nackdelar. Fördelen med formella metoder är <strong>att</strong> de tillhandahåller ett<br />

sätt <strong>att</strong> beskriva funktionaliteten som gör <strong>att</strong> den kan uttryckas på ett exakt sätt.<br />

Nackdelen är <strong>att</strong> det är tidsödande <strong>att</strong> skapa de bevis som de formella metoderna<br />

kräver. Modellbaserad verifiering eftersträvar <strong>att</strong> med hjälp av formella notationer<br />

konstruera en modell över det program eller den funktionalitet som ska undersökas.<br />

Den modell som byggs är tänkt <strong>att</strong> avspegla de aspekter som ska undersökas på ett så<br />

exakt sätt som möjligt utan <strong>att</strong> arbete läggs ned på <strong>att</strong> modellera resterande<br />

funktionalitet.<br />

Modellbaserad verifiering kan tillämpas tidigt i utvecklingen. Fördelen är <strong>att</strong> det då<br />

går <strong>att</strong> hitta designfel innan de implementerats. Dessutom kan värdefull information<br />

erhållas angående vilka delar av programmet som kan bereda svårigheter och därmed<br />

behöva utsättas <strong>för</strong> mer rigorös testning [Glu98].<br />

Modellen ska återspegla väsentliga drag hos det som modelleras. Att skapa dessa<br />

<strong>för</strong>enklade modeller innebär <strong>att</strong> de viktiga delarna ska avbildas så exakt som möjligt<br />

medan de mindre viktiga ska abstraheras bort så långt det går. Följande fyra punkter<br />

bör beaktas innan modellen konstrueras [Glu98]:<br />

• Formalism – Hur exakta regler ska tillämpas <strong>för</strong> <strong>att</strong> beskriva modellen, alltså hur<br />

formell ska beskrivningen vara? Ökad formalism rekommenderas <strong>för</strong><br />

säkerhetskritiska system. Det är dock dyrt och bör där<strong>för</strong> inte överdrivas.<br />

• Abstraktion – Vilka delar ska modelleras noggrant och vilka ska abstraheras bort?<br />

• Perspektiv – Vems perspektiv av den modellerade funktionaliteten ska modellen<br />

återspegla?<br />

• Inskränkningar – Hur stor del av systemet ska modellen omf<strong>att</strong>a?<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 78(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Model checking är ett exempel på hur modellbaserad verifiering kan användas där<br />

någon form av automatiska verktyg vanligtvis utnyttjas. Verktyget undersöker en<br />

modell utifrån ett antal specificerade krav som ställts på modellen. Om modellen<br />

uppfyller kraven svarar verktyget <strong>att</strong> modellen var korrekt, annars meddelas vad i<br />

modellen som orsakade <strong>att</strong> kraven inte uppfylldes.<br />

Modell<br />

Förväntade<br />

egenskaper<br />

Figur 3-29. Model checking<br />

Model<br />

checking<br />

Acceptans/<br />

ej acceptans<br />

3.7.5 Regressionstestning<br />

Regressionstestning syftar till <strong>att</strong> undersöka huruvida <strong>för</strong>ändringar i <strong>mjukvara</strong> med<strong>för</strong><br />

nya fel. Testningen görs genom <strong>att</strong> ut<strong>för</strong>a redan gjorda tester ytterligare en gång.<br />

Syftet med regressionstestning är alltså inte <strong>att</strong> <strong>testa</strong> den nya eller <strong>för</strong>ändrade delen av<br />

<strong>mjukvara</strong>n, det som istället ska <strong>testa</strong>s är om delar av <strong>mjukvara</strong>n som inte borde<br />

påverkas av <strong>för</strong>ändringarna trots allt gör det.<br />

Regressionstestning med<strong>för</strong> inte lika mycket arbete utöver själva genom<strong>för</strong>andet av<br />

testningen som annan testverksamhet. Anledningen är <strong>att</strong> de testfall som ska användas<br />

redan är skrivna eftersom testerna ut<strong>för</strong>ts tidigare. Det här gör <strong>att</strong> arbetsinsatsen kan<br />

fokuseras kring genom<strong>för</strong>andet av testerna. Om kostnaderna <strong>för</strong> regressionstestning<br />

ska minskas är det således antalet tester som måste minskas. Ett sätt <strong>att</strong> göra detta kan<br />

vara <strong>att</strong> samla ihop flera ändringar som behöver göras, ut<strong>för</strong>a dessa, och sedan<br />

genom<strong>för</strong>a regressionstestningen. Fördelen är <strong>att</strong> det räcker med <strong>att</strong> genom<strong>för</strong>a<br />

regressionstesterna en gång. En nackdel kan vara <strong>att</strong> om fel upptäcks så är det inte lika<br />

lätt <strong>att</strong> veta vilken ändring i <strong>mjukvara</strong>n som orsakade felet ifråga [Sco95].<br />

Det är svårt <strong>att</strong> veta vilka testfall som kan hitta möjliga nya fel. Följaktligen är det<br />

också svårt <strong>att</strong> minska antalet testfall utan <strong>att</strong> <strong>för</strong>sämra möjligheterna <strong>att</strong> upptäcka fel.<br />

En rad olika tillvägagångssätt <strong>för</strong> detta analyseras i [Gra98]. De mest effektiva (flest<br />

upptäckta fel per testfall) teknikerna benämns ”Safe Techniques”. Grundtanken<br />

bakom dessa är <strong>att</strong> alla testfall som exekverar delar av koden som har <strong>för</strong>ändrats,<br />

raderas eller lagts till ska <strong>testa</strong>s igen. Det är dock inte givet <strong>att</strong> det blir billigare med<br />

dessa tekniker. Det krävs nämligen en betydande arbetsinsats <strong>för</strong> <strong>att</strong> få fram vilka<br />

tester som ska ingå i regressionstesterna. I vissa fall kan det bli billigare <strong>att</strong> <strong>testa</strong> om<br />

alla testfallen, detta gäller speciellt om testerna i hög grad kan ut<strong>för</strong>as automatiskt. Ett<br />

annat sätt <strong>att</strong> minska antalet tester är <strong>att</strong> göra en bedömning huruvida fel i den<br />

<strong>mjukvara</strong> som ändrats kan få allvarliga konsekvenser. Om bedömningen blir <strong>att</strong> det<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 79(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

inte kan få allvarliga konsekvenser behöver inte lika rigorös regressionstestning<br />

genom<strong>för</strong>as [Sco95]. Ett enkelt och billigt sätt <strong>att</strong> välja ut vilka testfall som ska<br />

användas i en sådan situation är <strong>att</strong> låta slumpen avgöra.<br />

De testtekniker som används vid regressionstestning är desamma som används vid<br />

tidigare testning av <strong>mjukvara</strong>n. Mycket av de arbete som gjordes då kan återanvändas,<br />

t.ex. testplaner, testfall, miljön som användes till testning och automatiserade tester.<br />

Det är där<strong>för</strong> viktigt <strong>att</strong> testfall m.m. uppdateras då de in<strong>för</strong>da <strong>för</strong>ändringarna till<strong>för</strong><br />

ny funktionalitet.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 80(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

3.8 Sammanf<strong>att</strong>ning<br />

För <strong>att</strong> få en överblick av alla presenterade testtekniker finns i detta kapitel en<br />

sammanf<strong>att</strong>ning i form av några tabeller.<br />

3.8.1 Vilka teststrategier används på vilka mjukvarudelar<br />

Testteknikerna delades upp i fyra grupper, där varje grupp benämns som en strategi,<br />

samt en grupp <strong>för</strong> de tekniker som inte kan sorteras in i de övriga fyra grupperna. I<br />

Tabell 3-10 visas vilka av de fyra strategierna som är lämpliga <strong>att</strong> använda i olika<br />

skeden av utvecklingen. Generellt sett kan sägas <strong>att</strong> någon form av statisk analys bör<br />

användas under hela utvecklings<strong>för</strong>loppet. Strukturell testning görs i samband med <strong>att</strong><br />

koden skrivs. För <strong>att</strong> göra funktionell testning måste det finnas körbara program eller<br />

moduler. Där<strong>för</strong> ut<strong>för</strong>s de funktionella testerna i utvecklingens slutskede. Även den<br />

statistiska testningen bygger på <strong>att</strong> programmet eller systemet körs i sin helhet, var<strong>för</strong><br />

också den testningen ut<strong>för</strong>s i utvecklingens slutskede.<br />

Modul Program System<br />

Statisk analys Bör Bör Bör<br />

Strukturell testning Bör<br />

Funktionell testning Kan Bör Bör<br />

Statistisk testning Bör Bör<br />

Tabell 3-10. Vilka strategier som bör/kan användas under mjukvaruutvecklingen.<br />

3.8.2 Vem bör <strong>testa</strong> på vilken nivå<br />

Eftersom modulerna oftast <strong>testa</strong>s med strukturella testtekniker, vilket innebär <strong>att</strong><br />

djupare kunskaper krävs om kodens uppbyggnad, är det ofta programmeraren själv<br />

som <strong>testa</strong>r på modulnivå. Då körbara program eller system ska <strong>testa</strong>s görs det<br />

vanligen med funktionella testtekniker. De funktionella testerna innebär <strong>att</strong> program<br />

<strong>testa</strong>s med avseende på vad de kan göra, inte hur de gör det. Eftersom de funktionella<br />

testerna inte kräver någon större kodkännedom om hur koden är implementerad kan<br />

det vara lämpligt <strong>att</strong> lägga ut den testningen på en oberoende <strong>testa</strong>vdelning.<br />

Modul Program System<br />

Programmerare Bör Kan<br />

Oberoende <strong>testa</strong>re Kan Bör Bör<br />

Tabell 3-11. Tabellen visar när programmerare och oberoende <strong>testa</strong>re bör/kan delta i testningen.<br />

3.8.3 Sammanställning över testtekniker<br />

Innehållet i kapitel 3.3 till 3.7 kan vid <strong>för</strong>sta anblicken kännas en aning tungt. Av den<br />

anledningen har de testtekniker som beskrivs där sammanställts i Tabell 3-12 nedan.<br />

Tabellen informerar om syftet med respektive testteknik, vad som krävs <strong>för</strong> <strong>att</strong> kunna<br />

använda sig av tekniken samt hur omf<strong>att</strong>ande testning som är lämplig <strong>att</strong> genom<strong>för</strong>a<br />

med den aktuella tekniken. Idén med tabellen är hämtad från [Sco95].<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 81(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Teknik Kapitel Syfte Krävs <strong>för</strong><br />

Föreslagen grad av<br />

genom<strong>för</strong>ande testning/analys<br />

Strukturella tester<br />

Control flow 3.3.2 Kontrollera interna flödet. Källkod, detaljerad Grentäckning<br />

testing (path)<br />

designspecifikation<br />

Data flow 3.3.3 Kontrollera <strong>att</strong> data används och Källkod, detaljerad Alla dubbla och enkla<br />

testing<br />

<strong>för</strong>ändras på rätt sätt.<br />

designspecifikation sekvenser<br />

Looptestning 3.3.4 Kontrollera interna loopar. Källkod, detaljerad Fokusering på loopens<br />

designspecifikation gränsvärden<br />

Logikbaserad 3.3.5 Kontrollera intern logik. Källkod, detaljerad Alla kombinationer av<br />

testning<br />

designspecifikation villkor<br />

Funktionella tester<br />

Domäntestning 3.4.1 Kontrollera beteendet inom givna Exekverbar kod, Värden inom domänen,<br />

domäner och <strong>att</strong> domängränser är kravspecifikation gränsvärden och<br />

korrekta.<br />

otillåtna värden<br />

Tillstånds- 3.4.2 Kontrollera <strong>att</strong> övergångar mellan Exekverbar kod, Alla tillstånd<br />

testning<br />

tillstånd stämmer överens med det<br />

verkliga användningsområdet.<br />

kravspecifikation<br />

Logikbaserad 3.4.3 Kontrollera <strong>att</strong> logiken stämmer Exekverbar kod, Alla kombinationer av<br />

testning<br />

överens med det verkliga<br />

användningsområdet.<br />

kravspecifikation realistiska villkor<br />

Syntaxtestning 3.4.4 Kontrollera externa indata och Exekverbar kod, Alla klasser av indata<br />

information mellan interna<br />

gränssnitt.<br />

kravspecifikation och information<br />

Transaction 3.4.5 Kontrollera transaktionsflödet. Exekverbar kod, Grentäckning<br />

flow testing<br />

Statistisk testning<br />

kravspecifikation<br />

Felinjicering 3.5.1 Estimera testteknikers <strong>för</strong>måga <strong>att</strong> Exekverbart kod, Iterativt tills<br />

påvisa fel samt antalet fel i koden. kravspecifikation, systemkraven är<br />

profiler över<br />

tänkbara fel från<br />

programmerare<br />

uppfyllda<br />

Random testing 3.5.2 Estimera antalet fel samt <strong>att</strong> hitta Exekverbar kod, Iterativt tills<br />

fel.<br />

kravspecifikation, systemkraven är<br />

användningsprofil,<br />

effektivt orakel<br />

uppfyllda<br />

Dubbla testlag 3.5.3 Estimera antalet fel samt <strong>att</strong> hitta Exekverbar kod, Tekniken<br />

Statisk analys<br />

fel.<br />

kravspecifikation rekommenderas endast i<br />

mindre omf<strong>att</strong>ning<br />

Granskning 3.6.1 Identifiera felaktigheter i projektets Kravspecifikation Ska göras så fort något i<br />

och<br />

<strong>för</strong>sta faser.<br />

systemet <strong>för</strong>ändras som<br />

walkthrough<br />

kan påverka systemets<br />

funktionalitet<br />

Inspektion 3.6.2 Undersöka kod <strong>för</strong> särskilda Källkod En eller flera<br />

egenskaper eller <strong>för</strong> <strong>att</strong> se om<br />

inspektioner,<br />

standarder följs.<br />

gruppbeslut om<br />

ytterligare granskning<br />

ska ske<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 82(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Inspektion (I0) 3.6.2 Undersöka den översiktliga<br />

designspecifikationen med<br />

kravspecifikationen som referens.<br />

Inspektion (I1) 3.6.2 Undersöka den detaljerade<br />

designspecifikationen med den<br />

översiktliga designspecifikationen<br />

som referens.<br />

Inspektion (I2) 3.6.2 Undersöka källkod med den<br />

detaljerade designspecifikationen<br />

som referens.<br />

Formella<br />

metoder<br />

3.6.3 Producera en korrekt och tydlig<br />

specifikation och eventuellt också<br />

bevis <strong>för</strong> <strong>att</strong> designen av systemet<br />

överensstämmer med<br />

specifikationen.<br />

Övriga<br />

Stresstestning 3.7.1 Undersöka hur robust systemet är<br />

och hur det beter sig vid ökade<br />

påfrestningar.<br />

Stresstestning 3.7.1 Hitta svagheter där systemet inte<br />

längre kan operera och undersöka<br />

återuppstartmekanismer.<br />

Cleanroom 3.7.2 Skapa korrekt kod redan innan<br />

testningen tar vid.<br />

N-version<br />

programming<br />

Modellbaserad<br />

verifiering<br />

(MBV)<br />

Regressionstestning<br />

3.7.3 Minska risken <strong>för</strong> feltolkningar i<br />

specifikationer och minska risken<br />

<strong>för</strong> <strong>att</strong> felaktigheter uppstår i<br />

driften.<br />

3.7.4 Skapa <strong>för</strong>enklade modeller som<br />

används <strong>för</strong> <strong>att</strong> identifiera fel.<br />

3.7.5 Kontrollera <strong>att</strong> <strong>för</strong>ändringar inte<br />

har påverkat <strong>mjukvara</strong>n på något<br />

oväntat sätt.<br />

Tabell 3-12. Sammanställning över testtekniker.<br />

Kravspecifikation,<br />

översiktlig<br />

designspecifikation<br />

Detaljerad<br />

designspecifikation<br />

och översiktlig<br />

designspecifikation<br />

Källkod, detaljerad<br />

designspecifikation<br />

Specifikationer,<br />

goda matematiska<br />

kunskaper<br />

Exekverbar kod,<br />

kravspecifikation<br />

Exekverbar kod,<br />

kravspecifikation<br />

Statistiska data<br />

utifrån användarfall<br />

En eller flera<br />

inspektioner,<br />

gruppbeslut om<br />

ytterligare granskning<br />

ska ske<br />

En eller flera<br />

inspektioner,<br />

gruppbeslut om<br />

ytterligare granskning<br />

ska ske<br />

En eller flera<br />

inspektioner,<br />

gruppbeslut om<br />

ytterligare granskning<br />

ska ske<br />

Beror på hur högt<br />

ställda kraven är på<br />

systemet<br />

En körning <strong>för</strong> varje<br />

omarbetning<br />

Testa tills svagheter<br />

inom kravens gränser är<br />

kartlagda<br />

Inga rekommendationer<br />

ges då det finns vitt<br />

skilda uppf<strong>att</strong>ningar i<br />

frågan<br />

Specifikationer Beror på hur högt<br />

ställda kraven är på<br />

systemet<br />

Specifikationer,<br />

kunskaper om<br />

formella metoder<br />

Beror på vilka<br />

teststrategier som<br />

används<br />

Beror på hur högt<br />

ställda kraven är på<br />

systemet<br />

Fortsätt tills inga nya<br />

fel påträffas<br />

3.8.4 Sammanställning över vad som uppnås med hjälp av olika testtekniker<br />

I Tabell 3-13 listas en rad olika egenskaper som kan uppnås genom <strong>att</strong> <strong>testa</strong> med olika<br />

typer av testtekniker. Innehållet i tabellen ska inte ses som en exakt rekommendation<br />

utan endast som en form av vägledning <strong>för</strong> vad olika testtekniker kan bidra med. Idén<br />

till tabellen är hämtad från [Sco95].<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 83(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Karaktärsdrag Frågor som ska besvaras Föreslagna testtekniker<br />

Acceptans Klarar systemet av de händelser som det kommer <strong>att</strong> Funktionella<br />

utsättas <strong>för</strong> i verkligheten?<br />

(Do, Ti, Lb, Sy, Tf)<br />

Tillgänglighet Hur mycket kommer systemet <strong>att</strong> vara nere p.g.a.<br />

• dålig pålitlighet? Statistiska (Fi, Ra)<br />

• överbelastning? Övriga (St)<br />

Pålitlighet Hur stor är sannolikheten <strong>att</strong> det inträffar en incident under<br />

en given exekveringstid?<br />

Robusthet Finns tillräckligt stöd <strong>för</strong> återhämtning efter inträffad<br />

incident?<br />

Statistiska (Ra)<br />

Statisk analys (In, Gw)<br />

Övriga (St)<br />

Tolereras felaktiga transaktioner? Funktionella (TF, Sy)<br />

Tolereras felaktiga inmatningar? Funktionella (Do, Sy)<br />

Behandlas oväntade tillstånd riktigt? Funktionella (Lb, Sy)<br />

Hur klarar systemet hög belastning? Övriga (St)<br />

Prestanda Är tidskrav på enskilda moduler uppfyllda? Strukturella (Cf, Lo)<br />

Hur påverkar extremvärden prestanda? Funktionella (Do)<br />

Är tidskrav på enskilda moduler uppfyllda? Strukturella (Cf, Lo)<br />

Fullständighet Behandlas alla krav i designen? Statisk analys<br />

(Gw, In, Fm)<br />

Är implementationen fullständig med avseende på<br />

designspecifikationer?<br />

Statisk analys (In)<br />

Noggrannhet och<br />

riktighet<br />

Har alla kombinationer av villkor och domängränser<br />

behandlats?<br />

Funktionella (Do, Lb, Sy)<br />

Behandlas alla möjliga transaktioner? Funktionella (Tf)<br />

Behandlas alla möjliga tillstånd? Funktionella (Ti)<br />

Är interna beräkningar tillräckligt noggranna och riktigt<br />

gjorda?<br />

Strukturella (Df)<br />

Är slutresultaten riktigt beräknade och tillräckligt exakta? Funktionella (Tf)<br />

Komplexitet Är implementationslösningar onödigt komplexa? Statisk analys (Gw, In, Fm)<br />

Validering Råder spårbarhet mellan krav, design och implementation? Statisk analys (In, Fm)<br />

Har lämpliga implementationslösningar valts? Statisk analys (In, Fm)<br />

Överensstämmer programstruktur med designen? Strukturella (Cf, Df, Lo, Lb)<br />

Överensstämmer programmets funktionalitet med de<br />

funktionalitetskrav som finns i kravspecifikationen?<br />

Upp<strong>för</strong> sig systemet korrekt vid hög belastning? Övriga (St)<br />

Har <strong>för</strong>ändringar i <strong>mjukvara</strong>n med<strong>för</strong>t oönskade effekter? Övriga (Rg)<br />

Funktionella<br />

(Do, Ti, Lb, Sy, Tf, Nv, Mb)<br />

Cf Control flow testing In Inspektion Rg Regressionstestning<br />

Df Data flow testing Lb Logikbaserad testning Sy Syntaxtestning<br />

Do Domäntestning Lo Looptestning St Stresstestning<br />

Fi Felinjicering Mb Modellbaserad verifiering Ti Tillståndstestning<br />

Fm Formella metoder Nv N-version programmering Tf Transaction flow testing<br />

Gw Granskning och walkthrough Ra Random testing<br />

Tabell 3-13. Sammanställning över vad som uppnås med hjälp av olika testtekniker.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 84(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

4 Testteknikers inverkan på felsannolikhet<br />

IEC 61508 (Functional safety of PE safety-related systems) är en standard som<br />

behandlar aspekter som bör beaktas då programmerbar elektronik används i<br />

säkerhetskritiska system. Standarden behandlar hela den säkerhetskritiska livscykeln,<br />

från krav till verifiering- och valideringsarbete. Det ges bl.a. <strong>för</strong>slag på vilka typer av<br />

testtekniker som bör användas <strong>för</strong> <strong>att</strong> uppnå en önskad felsannolikhet i systemet. Det<br />

är på sin plats <strong>att</strong> påpeka <strong>att</strong> standarden är mycket kontroversiell och <strong>att</strong> den version<br />

som använts <strong>för</strong> denna rapport inte är en färdigreviderad utgåva av standarden. I den<br />

här rapporten kommer endast vissa delar av standarden <strong>att</strong> presenteras. För <strong>att</strong> få en<br />

helhetsbild hänvisas till den fullständiga standarden.<br />

Anledningen till <strong>att</strong> standarden tas upp här är <strong>att</strong> den speglar aspekter som kan vara<br />

viktiga <strong>att</strong> ha i åtanke vid utveckling av ett mjukvarubaserat börssystem. I kapitel 4.3<br />

presenteras en koppling mellan vilka testtekniker som bör användas <strong>för</strong> riskanalysens<br />

olika frekvensgrader. Tanken är <strong>att</strong> kopplingen ska ge <strong>för</strong>slag och rekommendationer<br />

på vilka typer av testtekniker som bör tillämpas <strong>för</strong> <strong>att</strong> nå en acceptabel felsannolikhet<br />

i systemet. Det kan sägas <strong>att</strong> i detta kapitel kopplas riskanalysen i kapitel 2 ihop med<br />

sammanställningen av testtekniker i kapitel 3. Kopplingen är gjord utifrån IEC 61508.<br />

Det bör påpekas <strong>att</strong> en sådan koppling är svår <strong>att</strong> göra. De siffror och resultat som<br />

presenteras ska inte ses som exakta eller som den enda möjliga lösningen.<br />

4.1 Uppdelning i kritikalitetsnivåer enligt IEC 61508<br />

För <strong>att</strong> kunna ge rekommendationer <strong>för</strong> hur utvecklingsarbetet bör ske delar<br />

standarden <strong>för</strong>st upp kritikaliteten i fyra olika nivåer. Kritikalitetsnivåerna, som<br />

härefter benämns SIL (Safety Integrity Level), anger sannolikheten <strong>för</strong> en allvarlig<br />

incident per timme.<br />

Safety Integrity Sannolikhet <strong>för</strong> en allvarlig<br />

Level<br />

incident per timme<br />

4 ≥ 10 -9 till < 10 -8<br />

3 ≥ 10 -8 till < 10 -7<br />

2 ≥ 10 -7 till < 10 -6<br />

1 ≥ 10 -6 till < 10 -5<br />

Tabell 4-1. Uppdelning i kritikalitetsnivåer enligt IEC 61508.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 85(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

4.2 Mjukvaruverifiering delvis baserad på IEC 61508<br />

I detta kapitel ges rekommendationer huruvida olika testtekniker kan vara användbara<br />

under olika skeden av mjukvaruutvecklingen. Rekommendationerna är delvis<br />

grundade på standarden IEC 61508. I vissa fall har justeringar gjorts <strong>för</strong> <strong>att</strong><br />

rekommendationerna bättre ska passa upplägget i denna rapport.<br />

Det bör påpekas <strong>att</strong> en koppling mellan testtekniker och <strong>för</strong>mågan <strong>att</strong> hitta fel är<br />

mycket svår <strong>att</strong> göra. Vissa typer av testtekniker kan vara särskilt lämpade <strong>för</strong><br />

särskilda mjukvarusystem. Standarden påpekar även den svårigheten och menar <strong>att</strong><br />

det knappt är möjligt <strong>att</strong> göra en exakt analys över hur incidenter ska <strong>för</strong>hindras<br />

inträffa. Tabellerna nedan ska där<strong>för</strong> ses som en riktlinje och inte som en precis<br />

vetenskap.<br />

I tabellerna <strong>för</strong>ekommer följande <strong>för</strong>kortningar.<br />

SIL Safety Integrity Level, se Tabell 4-1 <strong>för</strong> definitioner.<br />

SR Tekniken/strategin är starkt rekommenderad <strong>för</strong> den berörda SIL-nivån.<br />

R Tekniken/strategin är rekommenderad <strong>för</strong> den berörda SIL-nivån.<br />

- Ingen rekommendation ges varken <strong>för</strong> eller emot ett användande av<br />

tekniken/strategin.<br />

4.2.1 Översiktlig mjukvaruverifiering<br />

Tabell 4-2 ger en övergripande bild av mjukvaruverifieringen. Den övre delen av<br />

tabellen visar testningens olika strategier och den undre visar testningens livscykel.<br />

Tabellen hänvisar i sin tur till andra tabeller längre ner i kapitlet.<br />

Mjukvaruverifiering<br />

Strategi Referens SIL 1 SIL 2 SIL 3 SIL 4<br />

Statistisk testning Kap 3.5 - R R SR<br />

Statisk analys Tabell 4-3 R SR SR SR<br />

Dynamisk analys Tabell 4-4 R SR SR SR<br />

Testningens livscykel<br />

Modultest Tabell 4-5<br />

Integrationstest Tabell 4-6<br />

Systemtest Tabell 4-7<br />

Tabell 4-2. Mjukvaruverifiering.<br />

I de <strong>för</strong>sta faserna av mjukvaruutvecklingen är statisk analys den viktigaste<br />

verifieringsstrategin. Då kod har producerats och någonting är exekverbart<br />

koncentreras istället testningen på den dynamiska analysen. Verifieringen blir sällan<br />

bra om enbart en av strategierna används. Det är kombinationen av flera olika<br />

strategier som leder fram till en lyckad mjukvaruverifiering. För <strong>att</strong> uppnå en SILnivå<br />

i tabellen ovan bör alla tre nämnda strategier användas.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 86(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

4.2.2 Verifiering uppdelad i statisk- och dynamisk analys<br />

Tabell 4-3 och Tabell 4-4 behandlar verifieringens uppdelning i den statiska och<br />

dynamiska analysen. Till den statiska analysen hör sådan verifiering då moduler eller<br />

program inte exekveras. <strong>Tekniker</strong> som brukar räknas till den statiska analysen är<br />

granskning, walkthrough, inspektion och formella metoder. Tabellen innehåller några<br />

tekniker som i tidigare kapitel är insorterade under den dynamiska analysen. Även om<br />

dessa tekniker vanligtvis räknas till den dynamiska analysen kan de ut<strong>för</strong>as statiskt,<br />

d.v.s. utan <strong>att</strong> moduler eller program exekveras. De kapitel som dessa tekniker<br />

hänvisar till bygger på ett dynamiskt synsätt, men teorin går hand i hand och någon<br />

närmare beskrivning under det statiska kapitlet har där<strong>för</strong> inte gjorts.<br />

Statisk analys<br />

Teknik Referens SIL 1 SIL 2 SIL 3 SIL 4<br />

Granskning och walkthrough Kap 3.6.1 SR SR SR SR<br />

Inspektion Kap 3.6.2 - R R SR<br />

Formella metoder Kap 3.6.3 - R R SR<br />

Control flow analysis Kap 3.3.2 R R SR SR<br />

Data flow analysis Kap 3.3.3 R R SR SR<br />

Domänanalys Kap 3.4.1 R R SR SR<br />

Tabell 4-3. Statisk analys.<br />

Den dynamiska analysen karaktäriseras av <strong>att</strong> en modul eller ett program exekveras. I<br />

tabellen ovan ges en översiktlig rekommendation över vilka testtekniker som bör<br />

användas <strong>för</strong> olika SIL-nivåer. Då strukturell och funktionell testning benämns syftar<br />

det till samtliga tekniker som beskrivits i kapitel 3.3 respektive 3.4. Det är således inte<br />

två specifika testtekniker utan ett samlingsnamn över ett antal testtekniker som<br />

används på liknande sätt. Den strukturella testningen grundar sig på systemets interna<br />

struktur medan funktionell testningen verifierar <strong>att</strong> systemets beteende<br />

överensstämmer med specifikationerna.<br />

Dynamisk analys<br />

Teknik Referens SIL 1 SIL 2 SIL 3 SIL 4<br />

Strukturell testning Kap 3.3 R SR SR SR<br />

Funktionell testning Kap 3.4 R SR SR SR<br />

Felinjicering Kap 3.5.1 - R R R<br />

Stresstestning Kap 3.7.1 R R R SR<br />

Tabell 4-4. Dynamisk analys.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 87(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

4.2.3 Verifiering i olika faser av testningen<br />

Följande tre tabeller ger rekommendationer <strong>för</strong> vilka tekniker/strategier som bör<br />

användas <strong>för</strong> olika kritikalitetsnivåer i de tre testfaserna modultestning,<br />

integrationstestning och systemtestning. Det är på sin plats <strong>att</strong> återigen påpeka <strong>att</strong><br />

verifieringen bör utgöras av en kombination av strategier.<br />

Modultestning<br />

Teknik Referens SIL 1 SIL 2 SIL 3 SIL 4<br />

Strukturell testning Kap 3.3 SR SR SR SR<br />

Funktionell testning Kap 3.4 R R SR SR<br />

Statistisk testning Kap 3.5 - R R SR<br />

Tabell 4-5. Modultestning.<br />

Integrationstestning<br />

Teknik Referens SIL 1 SIL 2 SIL 3 SIL 4<br />

Strukturell testning Kap 3.3 R R R SR<br />

Funktionell testning Kap 3.4 SR SR SR SR<br />

Statistisk testning Kap 3.5 - R R SR<br />

Tabell 4-6. Integrationstestning.<br />

Systemtestning<br />

Teknik Referens SIL 1 SIL 2 SIL 3 SIL 4<br />

Funktionell testning Kap 3.4 SR SR SR SR<br />

Statistisk testning Kap 3.5 R R SR SR<br />

Stresstestning Kap 3.7.1 R R R SR<br />

Tabell 4-7. Systemtestning.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 88(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

4.3 IEC 61508 kopplad till riskvärderingsmatris <strong>för</strong> börssystem<br />

De SIL-nivåer som benämns i <strong>för</strong>egående kapitel anger sannolikheten <strong>för</strong> <strong>att</strong> en<br />

allvarlig incident ska inträffa per timme. Eftersom en liknande definition används <strong>för</strong><br />

definitionen av frekvensskalan i den riskanalys som gjordes i kapitel 2.3, borde det<br />

där<strong>för</strong> gå <strong>att</strong> koppla riskvärderingsmatrisens frekvensskala till SIL-nivåerna.<br />

Figur 4-1 presenterar en koppling mellan IEC 61508:s SIL-nivåer och riskanalysens<br />

frekvensgrader i kapitel 2.3.1. Eftersom sannolikheten <strong>för</strong> <strong>att</strong> ett fel inträffar ökar om<br />

flera likadana system finns i drift samtidigt, tas även tio och hundra börssystem med i<br />

tabellen. Det är antagligen inte rimligt <strong>att</strong> hela hundra system finns i drift samtidigt,<br />

tio system är en mer rimlig siffra.<br />

10 -2 10 -3 10 -4 10 -5 10 -6 10 -7 10 -8 10 -9<br />

IEC 61508 SIL 1 SIL 2 SIL 3 SIL 4<br />

1 system Frekvent Trolig Sannolik Försumbar Osannolik<br />

10 system Frekvent Trolig Sannolik Försumbar Osannolik<br />

100 system Frekvent Trolig Sannolik Försumbar Osannolik<br />

Figur 4-1. Koppling mellan SIL-nivåer och frekvensskalan i riskanalysen <strong>för</strong> ett börssystem. Enheten i<br />

figuren är antal fel per timma.<br />

Det framgår tydligt <strong>att</strong> definitionerna av SIL-nivåerna är högt ställda i <strong>för</strong>hållande till<br />

definitionen av börssystemets frekvensskala. För <strong>att</strong> komma upp till SIL 1 då tio<br />

system är i drift måste frekvensgraden vara sannolik.<br />

Genom <strong>att</strong> applicera kapitel 4.2 på riskanalysen kan <strong>för</strong>slag erhållas som säger hur<br />

börssystemet ska <strong>testa</strong>s <strong>för</strong> <strong>att</strong> incidenter inte ska inträffa oftare än vad som<br />

accepteras. Ett exempel får illustrera hur appliceringen kan gå till.<br />

Konsekvensen av ett handelsstopp på ett par timmar klassificeras som kritiskt. Enligt<br />

riskvärderingsmatrisen i kapitel 2.3.2 måste en sådan händelse betraktas som osannolik <strong>för</strong> <strong>att</strong><br />

risken ska accepteras. Kopplingen till SIL-nivåer erhålls ur Figur 4-1. I tabellen kan det avläsas <strong>att</strong><br />

om tio system är i drift klassificeras ett handelsstopp på ett par timmar som SIL-nivå 2 eller 3.<br />

Genom <strong>att</strong> titta i kapitel 4.2 kan slutligen råd fås om vilka testtekniker som bör användas <strong>för</strong> <strong>att</strong><br />

uppnå SIL-nivå 2 eller 3, d.v.s. <strong>för</strong> <strong>att</strong> uppnå en acceptabel risknivå <strong>för</strong> den berörda konsekvensen.<br />

Liknande <strong>för</strong>farande kan användas <strong>för</strong> andra incidenter i riskanalysen. Det bör dock<br />

påpekas <strong>att</strong> resultatet enbart ska ses som en ungefärlig fingervisning.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 89(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

5 Diskussion och slutsats<br />

I detta kapitel reflekteras det över slutsatser och iakttagelser som har uppdagats under<br />

arbetets gång. Först ges några punkter som diskussionerna kretsar runt.<br />

• Börssystemets roll i samhället<br />

• Myndighetens inblandning<br />

• Begreppet felsannolikhet <strong>för</strong> <strong>mjukvara</strong><br />

• Mätetal <strong>för</strong> felbegrepp inom <strong>mjukvara</strong><br />

• Partitionering och klassificering av <strong>mjukvara</strong><br />

• Återkoppla testningen till felens ursprung.<br />

• Kommentarer och <strong>för</strong>slag på användningssätt av IEC 61508<br />

• Forts<strong>att</strong>a studier<br />

Kapitlet avslutas med ett resonemang runt den frågeställning som presenterades i<br />

början av rapporten.<br />

5.1 Diskussion av arbetet<br />

Nedan <strong>för</strong>s diskussioner som inte direkt leder fram till svaret på frågeställningen. De<br />

utgör likväl en viktig del av rapporten.<br />

5.1.1 Börssystemets roll i samhället<br />

Det kan diskuteras om ett börssystem bör klassas som ett säkerhetskritiskt system. I<br />

de flesta fall leder allvarliga incidenter i säkerhetskritiska system till fara <strong>för</strong><br />

människoliv. Enligt ovanstående är det tveksamt om ett börssystem bör klassas som<br />

säkerhetskritiskt eftersom det inte utgör någon primär fara <strong>för</strong> människoliv. Men<br />

påståendet <strong>att</strong> säkerhetskritiska system enbart ska beröra människoliv är kanske inte<br />

så väl genomtänkt. Ett säkerhetskritiskt system skulle istället kunna vara ett system<br />

som på något sätt utgör fara <strong>för</strong> människan och det samhälle hon lever i. Med den<br />

definitionen innef<strong>att</strong>as även system som på något sätt kan utsätta t.ex. miljön <strong>för</strong> fara,<br />

men även system vars konsekvenser kan utgöra ekonomisk fara <strong>för</strong> samhället.<br />

Omsättningen på Stockholmsbörsen uppgår till tiotals miljarder kronor per dag<br />

[OMy99]. Med dessa fakta i bakgrunden är det inte svårt <strong>att</strong> <strong>för</strong>stå <strong>att</strong> det finns stora<br />

ekonomiska risker <strong>för</strong>knippade med börssystem. Då fel uppstår kan de få vidsträckta<br />

konsekvenser som inte enbart drabbar börssystemets leverantör, även den enskilde<br />

människan eller hela samhället kan drabbas. Ett börssystem är således <strong>för</strong>knippat med<br />

stora ekonomiska risker var<strong>för</strong> det också kan anses vara säkerhetskritiskt.<br />

Begreppet varumärke återkommer i riskanalysens konsekvensgrader, se kapitel 2.3.1.<br />

Vissa liknelser kan göras mellan varumärket och människoliv, som är den mer vanligt<br />

<strong>för</strong>ekommande definitionen <strong>för</strong> säkerhetskritiska system. Varumärket kan liksom<br />

människan skadas och om <strong>för</strong>troendet <strong>för</strong> systemet av någon anledning skadas så<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 90(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

allvarligt <strong>att</strong> en forts<strong>att</strong> användning och <strong>för</strong>säljning blir omöjlig kan det i analogins<br />

namn sägas <strong>att</strong> varumärket dör. Dock med<strong>för</strong> inte ett dött varumärke något som är<br />

samhällskritiskt. Ett dött varumärke drabbar främst <strong>för</strong>etaget och inte samhället i<br />

övrigt.<br />

5.1.2 Myndighetens inblandning<br />

Under de senaste åren har <strong>för</strong>utsättningarna <strong>för</strong> handel med värdepapper genomgått<br />

stora <strong>för</strong>ändringar. Omsättningen ökar kraftigt från år till år samtidigt som<br />

investerarna och aktörerna blir allt fler. En av anledningarna till det ökande antalet<br />

investerare är <strong>att</strong> antalet privatpersoner som handlar över börsen tilltar. Idag har de<br />

flesta medborgarna någon form av besparing knuten till börsen. Det kan vara<br />

besparingar i en aktieportfölj men också aktierelaterade pensionsbesparingar.<br />

Eftersom så många människor på något sätt är i kontakt med börsen kan en allvarlig<br />

incident få stora konsekvenser. Ofta räcker det med <strong>att</strong> en allvarlig incident inträffar<br />

<strong>för</strong> <strong>att</strong> trycket ska öka på politiker som i sin tur påverkar myndigheterna. Detta<br />

tillsammans med det faktum <strong>att</strong> <strong>för</strong>utsättningarna <strong>för</strong> börshandeln hela tiden<br />

<strong>för</strong>ändras, kan leda till <strong>att</strong> högre krav kommer <strong>att</strong> ställas på börssystemen även från<br />

myndigheternas sida.<br />

I Sverige är det Finansinspektionen som ska bidra till finanssektorns stabilitet och<br />

effektivitet samt verka <strong>för</strong> ett gott konsumentskydd. Här kan en parallell dras till<br />

Statens kärnkraftsinspektion (SKI) vars uppgift är <strong>att</strong> agera som en övervakare och<br />

pådrivare <strong>för</strong> <strong>att</strong> kraftbolagen själva tar ansvaret <strong>att</strong> upprätthålla en hög säkerhetsnivå<br />

på kärnkraftverken. Syftet med myndigheten SKI:s arbete är fram<strong>för</strong> allt <strong>att</strong> få<br />

kraftbolagen <strong>att</strong> tänka igenom sina arbets- och utvecklingsprocesser till skillnad från<br />

Finansinspektionen som däremot inte alls lägger sig i de arbetsmetoder som används<br />

vid utvecklingen av börssystem. Det är dock inte omöjligt <strong>att</strong> finansinspektionen i<br />

framtiden kommer få ökade befogenheter och därmed agera på liknande sätt som SKI<br />

när det gäller <strong>att</strong> driva på <strong>för</strong> <strong>att</strong> säkerställa hög kvalité på mjukvaruutvecklingen av<br />

börssystemen. För <strong>att</strong> belysa vart utvecklingen är på väg följer ett citat ur<br />

Finansinspektionens verksamhetsplan <strong>för</strong> år 2001:<br />

”Värdepappershandelns samhällsekonomiska betydelse kommer allt mer i fokus<br />

samtidigt som Internet och annan ny teknik och nya metoder i handeln kräver<br />

anpassning av tillsyn och övervakning…<br />

…Tillsynsmetodiken avseende börser och andra marknadsplatser är där<strong>för</strong> under<br />

utveckling. En mycket viktig del i den nya börstillsynen är kontrollen av de<br />

operationella riskerna i börser och clearingorganisationer, främst inom OMgruppen.”<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 91(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

5.1.3 Felsannolikhet <strong>för</strong> <strong>mjukvara</strong><br />

En svaghet med kopplingen mellan riskvärderingsmatrisen och testteknikerna som<br />

görs via standarden IEC 61508 i kapitel 4.3 är <strong>att</strong> den bygger på begreppet<br />

felsannolikhet, d.v.s. incidenter per tidsenhet. Det bör påpekas <strong>att</strong> även sannolikheten<br />

<strong>för</strong> s.k. ’fail on demand’ tas upp, som används <strong>för</strong> system vilka inte är i kontinuerlig<br />

drift. Eftersom börssystem är i kontinuerlig drift används inte detta mätetal här.<br />

Det kan diskuteras om det överhuvudtaget är möjligt <strong>att</strong> ange felsannolikhet <strong>för</strong><br />

<strong>mjukvara</strong>. I kapitel 3.2.8 samt i bilaga A.2 framhävs <strong>att</strong> <strong>mjukvara</strong> inte slits på samma<br />

sätt som hårdvara. För system baserade på hårdvara beräknas felsannolikheten<br />

utgående från statistik på felsannolikhet relaterat till varje enskild komponent som<br />

ingår i systemet. Statistiken talar då om hur stor sannolikheten är <strong>att</strong> en viss<br />

komponent är utsliten, alltså innehåller fel, givet en viss användning. Sådana<br />

beräkningar är betydligt svårare <strong>att</strong> göra <strong>för</strong> <strong>mjukvara</strong> då den inte åldras och slits. Fel i<br />

<strong>mjukvara</strong> finns där redan från början vilket innebär <strong>att</strong> det alltså inte är slumpen som<br />

avgör när den slitits ut och fel uppstår. Det som däremot talar <strong>för</strong> <strong>att</strong> ange<br />

felsannolikhet <strong>för</strong> <strong>mjukvara</strong> är <strong>att</strong> <strong>mjukvara</strong> kan används på många olika sätt och<br />

utsätts <strong>för</strong> många olika värden på indatan. Där<strong>för</strong> är det en viss sannolikhet <strong>att</strong><br />

programmet ska använda en viss kombination av indata, vilket med<strong>för</strong> en viss<br />

sannolikhet <strong>för</strong> <strong>att</strong> ett fel exekveras.<br />

I bilaga A.2 framgår den syn som SAAB har på felsannolikhet <strong>för</strong> <strong>mjukvara</strong> då de<br />

utvecklar <strong>mjukvara</strong> till sina flygplan. Deras åsikt är <strong>att</strong> antingen är <strong>mjukvara</strong>n felfri<br />

vilket ger en felsannolikhet på 0 % eller så innehåller den fel vilket med<strong>för</strong> en<br />

felsannolikhet på 100 %. Vilket alternativ som antas gälla beror på hur omf<strong>att</strong>ande<br />

verifiering och validering som genom<strong>för</strong>ts. Standarden RTCA/DO-178B som används<br />

flitigt på SAAB, se bilaga A.3, <strong>för</strong>kastar dock inte begreppet felsannolikhet <strong>för</strong><br />

<strong>mjukvara</strong>. Dock påpekas <strong>att</strong> det vid tidpunkten då standarden skrevs inte fanns några<br />

metoder som var lämpliga <strong>för</strong> <strong>att</strong> uppsk<strong>att</strong>a felsannolikhet <strong>för</strong> de låga nivåer som<br />

krävs <strong>för</strong> säkerhetskritiska system.<br />

I bilaga A.1 framgår hur problemet med felsannolikhet <strong>för</strong> <strong>mjukvara</strong> tacklats av<br />

Forsmarks kraftbolag. De anser <strong>att</strong> det inte går <strong>att</strong> garantera helt felfri <strong>mjukvara</strong>. För<br />

<strong>att</strong> kringgå det problemet används inte enbart <strong>mjukvara</strong> i system som är av största vikt<br />

<strong>för</strong> kärnkraftverkets säkerhet.<br />

Felsannolikhet <strong>för</strong> <strong>mjukvara</strong> är ett begrepp som är betydligt mindre accepterat än <strong>för</strong><br />

hårdvara. Det tycks idag inte finnas några entydiga svar på frågan hur <strong>mjukvara</strong> ska<br />

utvecklas eller <strong>testa</strong>s <strong>för</strong> <strong>att</strong> möjliggöra användandet av felsannolikheter vid så låga<br />

nivåer som krävs <strong>för</strong> de mest säkerhetskritiska tillämpningarna. Av denna orsak råder<br />

viss tveksamhet till <strong>att</strong> in<strong>för</strong>a mjukvarubaserade lösningar i dessa branscher. Det blir<br />

mycket dyrt, om ens möjligt, <strong>att</strong> verifiera och validera säkerhetskritiska system i en<br />

sådan utsträckning som krävs.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 92(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

5.1.4 Mätetal <strong>för</strong> felbegrepp inom <strong>mjukvara</strong><br />

Det finns även andra mätetal än felsannolikhet, d.v.s. antal incidenter per tidsenhet,<br />

som kan användas <strong>för</strong> diskussioner kring <strong>mjukvara</strong>ns grad av verifiering och<br />

validering. Exempel på mätetal kan till exempel vara antal fel per kodrad eller om det<br />

gäller börssystem antalet incidenter per transaktion.<br />

Låt oss jäm<strong>för</strong>a mätetalet antal incidenter per transaktion med mätetalet som används<br />

i rapporten, d.v.s. antal incidenter per tidsenhet. Antag <strong>att</strong> det finns två identiska<br />

börssystem som används under lika lång tid. Antag också <strong>att</strong> samma fel finns i den<br />

kod som utgör systemen. Om det <strong>för</strong>sta systemet utsätts <strong>för</strong> mycket hårdare belastning<br />

än det andra är det troligt <strong>att</strong> sannolikheten ökar <strong>för</strong> <strong>att</strong> fel exekveras i det <strong>för</strong>sta<br />

systemet. Om belastningen varierar kraftigt är det måhända bättre med ett mätetal som<br />

tar mer hänsyn till hur mycket systemet verkligen används. Ett sådant mätetal kan då<br />

vara antal incidenter per transaktion. Anledningen till <strong>att</strong> mätetalet incidenter per<br />

tidsenhet ändå används i rapporten är dels <strong>att</strong> framställningen blir mer generell, men<br />

fram<strong>för</strong>allt är det mätetalet betydligt mer <strong>för</strong>ekommande i litteraturen.<br />

Vi har i denna rapport fokuserat på mätetal kring till<strong>för</strong>litligheten <strong>för</strong> ett börssystem,<br />

d.v.s. fel gentemot specifikationen. Andra mätetal som kan vara av intresse är<br />

systemets tillgänglighet, d.v.s. uptime, och medeltiden till fel. Uptime är ett mätetal<br />

som kunder ofta ställer krav på. Att <strong>för</strong>söka påvisa vad testtekniker kan tänkas få <strong>för</strong><br />

inverkan på uptime är dock något som ligger utan<strong>för</strong> denna rapport. För <strong>att</strong> göra en<br />

sådan koppling krävs inte bara <strong>att</strong> testteknikers inverkan på felsannolikheter kartläggs,<br />

det krävs också kunskaper om hur mycket de fel som <strong>för</strong>ekommer eventuellt påverkar<br />

uptime. Ett fel behöver ju inte leda till <strong>att</strong> systemet går ner.<br />

5.1.5 Partitionering och klassificering av <strong>mjukvara</strong><br />

En gemensam nämnare <strong>för</strong> mjukvaruutvecklingen, som framkom under studiebesök<br />

inom flyg- och kärnkraftbranschen, är <strong>för</strong>delarna med <strong>att</strong> klassificera <strong>mjukvara</strong> efter<br />

kritikalitetsnivå. För <strong>att</strong> det ska vara givande bör <strong>mjukvara</strong>n <strong>för</strong>st partitioneras, d.v.s.<br />

delas upp i olika delar. Varje partition kan sedan klassificeras efter hur kritisk<br />

funktionalitet som ingår i den partitionen. Syftet med <strong>att</strong> partitionera <strong>mjukvara</strong> är <strong>att</strong><br />

fel som finns i en partition inte ska sprida sig vidare och påverka funktionalitet inom<br />

andra partitioner. Felens konsekvenser ska alltså begränsas till den egna partitionen.<br />

Ett resultat av detta är <strong>att</strong> olika nivåer av felsannolikhet kan accepteras <strong>för</strong> olika<br />

partitioner av <strong>mjukvara</strong>n.<br />

Kan inte <strong>mjukvara</strong>n partitioneras, d.v.s. om följderna av eventuella fel inte går <strong>att</strong><br />

kapsla in, kan det vara farligt <strong>att</strong> <strong>för</strong>söka klassificera <strong>mjukvara</strong>n efter olika<br />

kritikalitetsnivåer. Anledningen är <strong>att</strong> det kan uppstå en falsk säkerhet <strong>att</strong> kritisk<br />

funktionalitet är väl <strong>testa</strong>d fast så inte är fallet. Incidenter kan tänkas inträffa i den<br />

kritiska funktionaliteten eftersom den är beroende av annan mindre kritisk<br />

funktionalitet som genomgått mindre rigorös testning.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 93(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Efter resonemanget om felsannolikheter i kapitel 5.1.3 är det kanske inte rimligt <strong>att</strong><br />

klassificera olika delar av <strong>mjukvara</strong>n efter klasser med exakta definitioner av<br />

felsannolikhet, som t.ex. SIL-nivåerna i kapitel 4.1. Däremot kan olika delar av<br />

<strong>mjukvara</strong>n klassificeras efter hur allvarliga konsekvenser ett eventuellt fel i den<br />

partitionen kan leda till. Sådana klassificeringar görs t.ex. både i flyg- och<br />

kärnkraftbranschen. En vinst med <strong>att</strong> klassificera <strong>mjukvara</strong>n är <strong>att</strong> den kan bidra till en<br />

effektivisering genom <strong>att</strong> inte onödigt mycket arbete läggs ner på <strong>att</strong> verifiera och<br />

validera mindre viktiga partitioner. Om en klassificering inte är möjlig måste<br />

verifiering och validering göras <strong>för</strong> hela <strong>mjukvara</strong>n på den nivån som krävs <strong>för</strong> den<br />

mest kritiska delen av systemet.<br />

5.1.6 Återkoppla testningen till felens ursprung<br />

När tester genom<strong>för</strong>ts på ett program och ett antal fel har lokaliserats som<br />

<strong>för</strong>hoppningsvis också åtgärdats är det viktigt <strong>att</strong> följa upp felen. Bara <strong>för</strong> <strong>att</strong> felen är<br />

åtgärdade ska de inte falla i glömska utan <strong>att</strong> man lärt sig något av de misstag som<br />

begåtts. Går det <strong>att</strong> reda ut var<strong>för</strong> felen uppstod kan brister i utvecklingsarbetet lyftas<br />

fram. På så sätt kan testningen användas till <strong>att</strong> <strong>för</strong>bättra utvecklingsarbetet så <strong>att</strong> inte<br />

samma fel görs om i framtiden.<br />

5.1.7 Kommentarer och <strong>för</strong>slag på användningssätt av IEC 61508<br />

I kapitel 4.3 relateras SIL-nivåer till en riskvärderingsmatris genom <strong>att</strong> dess<br />

frekvensgrader mappas mot den definition som IEC 61508 använder <strong>för</strong> de olika SILnivåerna.<br />

Det kan argumenteras huruvida det är rätt <strong>att</strong> använda standarden på ett<br />

sådant sätt. Definitionen av SIL-nivå 4 anger <strong>att</strong> en allvarlig incident endast får<br />

inträffa 10 -9 gånger per timme, se Tabell 4-1. I rapporten har det påpekats <strong>att</strong> det inte<br />

går <strong>att</strong> nå en lägre felsannolikhet än 10 -5 incidenter per timme enbart grundat på<br />

testning. Det finns där<strong>för</strong> inte några bevis <strong>för</strong> <strong>att</strong> en användning av SIL-nivåerna<br />

verkligen ger de låga felsannolikheterna som standarden hävdar. Standarden är<br />

dessutom inte enbart utformad <strong>för</strong> mjukvarubaserade börssystem vilket <strong>för</strong>ordar en<br />

restriktiv användning.<br />

Med ovanstående resonemang i åtanke är det kanske lämpligare <strong>att</strong> använda SILnivåerna<br />

på ett annat sätt. Ett sätt <strong>att</strong> dra nytta av SIL-nivåerna kan vara <strong>att</strong> jäm<strong>för</strong>a<br />

IEC 61508:s rekommendationer med de testtekniker som används under testningen.<br />

På så sätt kan en uppf<strong>att</strong>ning fås om var på SIL-skalan testningen ligger. Om det<br />

uppenbaras <strong>att</strong> vissa delar av verifierings- och valideringsarbetet inte uppnår den<br />

önskade SIL-nivåns rekommendationer kan det vara lämpligt <strong>att</strong> lägga mer resurser på<br />

just den delen. Går det inte <strong>att</strong> identifiera några speciella delar av utvecklingsarbetet<br />

som avviker från eftersträvad SIL-nivå kan nivåerna ändå utnyttjas. Detta genom <strong>att</strong><br />

antingen höja eller sänka målsättningen en SIL-nivå. Istället <strong>för</strong> <strong>att</strong> stirra sig blind på<br />

de siffror som anger de olika SIL-nivåerna borde således nivåerna jäm<strong>för</strong>as mot<br />

varandra. Det kan göras utan hänsyn till SIL-nivåernas felsannolikheter eftersom<br />

nivåerna då används relativt varandra.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 94(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

5.1.8 Forts<strong>att</strong>a studier<br />

I några av kapitlen bereder rapporten väg <strong>för</strong> nya frågeställningar. Anledningen till <strong>att</strong><br />

svaren till dessa frågeställningar inte behandlats mer ingående beror helt på <strong>att</strong> tiden<br />

<strong>för</strong> genom<strong>för</strong>andet av examensarbetet inte tillåter sådana utsvävningar. Nedanstående<br />

punkter är <strong>för</strong>slag på områden där forts<strong>att</strong> arbete kan vara av intresse.<br />

• Partitionera systemet och klassificera de olika partitionerna efter kritikalitatsnivå.<br />

• Undersök vilka aktiviteter som görs idag angående verifiering och validiering.<br />

Koppla eventuellt resultatet av undersökningen till någon standard som<br />

klassificerar <strong>mjukvara</strong> efter kritikalitetsnivå.<br />

• Testning, som den här rapporten fokuserar på, är en av aktiviteterna <strong>för</strong> <strong>att</strong><br />

verifiera och validera. En liknande studie kan kanske göras <strong>för</strong> andra aktiviteter<br />

såsom design eller kravhantering.<br />

• Kartlägga fel som uppkommit i produktionen. Hur upptäcktes dessa fel, finns<br />

några gemensamma nämnare som kan tas tillvara i <strong>testa</strong>rbetet. Går det <strong>att</strong> utifrån<br />

en sammanställning av gamla fel identifiera områden som borde genomgå<br />

ut<strong>för</strong>ligare testning.<br />

5.2 Diskussion runt frågeställning<br />

Det finns vitt skilda meningar om hur <strong>mjukvara</strong> ska <strong>testa</strong>s. Hur stora resurser som<br />

används till testningen skiljer sig fram<strong>för</strong>allt mellan olika branscher, men även mellan<br />

<strong>för</strong>etag inom samma bransch. Något som reglerar testningens omf<strong>att</strong>ning är vilka krav<br />

som ställs på <strong>mjukvara</strong>n. Hemsidor på Internet har vi t.ex. vant oss vid <strong>att</strong> de inte<br />

alltid fungerar. I börssystem, och andra system som bygger på säkerhetskritisk<br />

funktionalitet, ger kravbilden helt andra <strong>för</strong>utsättningar. Användarna, men även<br />

samhället som på ett eller annat sätt påverkas av systemet, <strong>för</strong>väntar sig <strong>att</strong> det<br />

fungerar.<br />

Även om vi bortser från branschernas skilda <strong>för</strong>utsättningar finns det ändå många<br />

olika tillvägagångssätt <strong>för</strong> <strong>att</strong> kontrollera <strong>mjukvara</strong>ns beskaffenhet. Hur testningen ska<br />

gå till och vilka tekniker som ska användas finns det delade uppf<strong>att</strong>ningar om. Det<br />

finns inte någon teknik som ensam kan hitta alla felen i <strong>mjukvara</strong>n, d.v.s. inga ’silver<br />

bullets’ existerar [Bei90]. Det finns inte heller någon universallösning i form av en<br />

kombination av testtekniker som skulle vara mest lämpad <strong>för</strong> olika typer av<br />

mjukvarusystem. Anledningen är <strong>att</strong> <strong>för</strong>utsättningarna <strong>för</strong> hur systemen ska fungera<br />

skiljer sig så mycket från varandra. En kombination av testtekniker som lämpar sig<br />

mycket bra <strong>för</strong> en typ av system är inte automatiskt lämplig <strong>för</strong> ett annat.<br />

Om tidsbrist uppstår under mjukvaruutvecklingen kan det vara lätt hänt <strong>att</strong> det slarvas<br />

med den statiska analysen. Projektledaren vill snabbt komma upp på banan och sätta<br />

igång. En uppenbar risk med ett sådant arbetssätt är <strong>att</strong> de specifikationer, som ligger<br />

till grund <strong>för</strong> implementationen, blir tvetydiga och oklara. Utvecklarna skapar då<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 95(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

något som de själva anser är korrekt men som i själva verket kanske inte alls<br />

överensstämmer med den egentliga avsikten. En diffus formulering i en specifikation<br />

kan leda till <strong>att</strong> fel uppstår i kommande faser. Felen kan i sin tur <strong>för</strong>orsaka fler fel<br />

vilket resulterar i en kaskad av nya fel, se Figur 5-1.<br />

Kravidentifiering<br />

Figur 5-1. Om ett fel uppstår tidigt i utvecklingen kan det leda till <strong>att</strong> flera följdfel uppstår i kommande<br />

utvecklingsfaser. Det bör också poängteras <strong>att</strong> dessa fel kan vara svåra <strong>att</strong> hitta eftersom testerna<br />

ut<strong>för</strong>s mot de eventuellt felaktiga specifikationerna.<br />

Att i ett senare skede av projektet gå tillbaka och rätta till fel som uppstått i de tidigare<br />

faserna har visat sig vara mycket kostsamt [Per95], se Figur 5-2. Det är där<strong>för</strong> särskilt<br />

viktigt <strong>att</strong> det statiska analysarbetet i projektets <strong>för</strong>sta faser tas på fullaste allvar.<br />

Relativ kostnad <strong>för</strong> <strong>att</strong> åtgärda ett fel<br />

1<br />

Kravidentifiering<br />

Översiktlig design<br />

3-6X<br />

10X<br />

Design Implementation<br />

Detaljerad design<br />

15-70X<br />

Implementationsfas<br />

40-1000X<br />

Testning Drift<br />

Figur 5-2. Kostnaden <strong>för</strong> <strong>att</strong> åtgärda ett fel ökar ju längre utvecklingen pågår utan <strong>att</strong> felet hittas<br />

[Gil93]. Kostnaden anges relativt kostnaden <strong>för</strong> ett fel som hittas i kravidentifieringen.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 96(124) Industriella informations och styrsystem


<strong>Tekniker</strong> <strong>för</strong> <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong> –<br />

Analys av testtekniker samt risker med ett<br />

mjukvarubaserat börssystem.<br />

___________________________________________________________________________<br />

Även om stora resurser satsas på den statiska analysen räcker antagligen inte det <strong>för</strong><br />

<strong>att</strong> erhålla en pålitlig <strong>mjukvara</strong> med en acceptabel felintensitet. Den statiska analysen<br />

bör följas av en dynamisk analys, d.v.s. testning som utgår från exekvering av<br />

programkod. Här finns en uppsjö av olika testtekniker som alla är mer eller mindre<br />

bra på sina respektive områden. Trots <strong>att</strong> det under lång tid har tvistats om vilka<br />

tekniker som är <strong>att</strong> <strong>för</strong>edra finns ännu inte något entydigt svar <strong>att</strong> tillgå. De flesta<br />

verkar vara eniga om <strong>att</strong> de funktionella testerna är en viktig del av verifieringsarbetet<br />

eftersom det är via dessa som systemet <strong>testa</strong>s mot de ursprungliga kraven.<br />

Användandet av de strukturella testerna, som verifierar kodens uppbyggnad, behöver<br />

t.ex. enligt standarden RTCA/DO-178B inte vara lika omf<strong>att</strong>ande <strong>för</strong> mindre kritisk<br />

funktionalitet.<br />

Var i projektets skede som tyngdpunkten i verifieringen ska läggas ner skiljer sig från<br />

<strong>mjukvara</strong> till <strong>mjukvara</strong>. Det viktiga är <strong>att</strong> ha en kontinuerlig verifieringsprocess, från<br />

<strong>att</strong> arbetet med kravspecifikation påbörjas till <strong>att</strong> den slutgiltiga produkten är färdig,<br />

och <strong>att</strong> hitta en kombination av testtekniker som passar det specifika systemet.<br />

5.2.1 Slutsats<br />

Rapportens frågeställning lyder,<br />

Vilka testtekniker <strong>för</strong>ordas givet en viss kritikalitet på <strong>mjukvara</strong>n?<br />

Rapporten innehåller inte några klara och tydliga svar på frågeställningen eftersom<br />

det inte finns någon universallösning som passar alla mjukvarubaserade börssystem.<br />

Testtekniker är mer eller mindre bra på sina respektive användningsområden.<br />

<strong>Tekniker</strong>na hittar olika typer av fel var<strong>för</strong> det är viktigt <strong>att</strong> <strong>testa</strong> <strong>mjukvara</strong>n på olika<br />

sätt. Det är <strong>för</strong>st när en kombination av testtekniker används som en någorlunda<br />

heltäckande verifiering är möjlig. Att fullständigt <strong>testa</strong> <strong>mjukvara</strong>n är som tidigare<br />

påpekats dock omöjligt.<br />

Svårigheten med begreppet felsannolikhet <strong>för</strong> <strong>mjukvara</strong> har redan diskuterats. Det är<br />

naturligtvis svårt <strong>att</strong> ange hur en <strong>mjukvara</strong> ska <strong>testa</strong>s <strong>för</strong> <strong>att</strong> en viss felsannolikhet ska<br />

uppnås. Från den koppling som presenteras i kapitel 4.3 kan rekommendationer av<br />

lämpliga testtekniker fås <strong>för</strong> olika kritikalitetsnivåer. Det bör påpekas <strong>att</strong> kopplingen<br />

mellan felsannolikhet och testtekniker inte ska ses som varken en exakt eller den enda<br />

möjliga lösningen på frågeställningen. Kopplingen och mjukvaruavsnittet ska mer ses<br />

som en guide över befintliga testtekniker samt hur dessa kan användas.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 97(124) Industriella informations och styrsystem


Bilaga A<br />

A. Studie av säkerhetskritiska system<br />

I denna bilaga presenteras de studier som gjorts inom flyg- och kärnkraftbranschen. Syftet<br />

med studierna är <strong>att</strong> få en inblick i hur verifiering och validering av <strong>mjukvara</strong> går till i andra<br />

säkerhetskritiska branscher och <strong>att</strong> se om de kunskaper som inhämtats från<br />

litteraturundersökningar även är gångbara i verkligheten.<br />

Kärnkraftbranschen representeras här främst av Forsmarks kraftgrupp som driver Forsmarks<br />

kärnkraftverk i norra Uppland. Inom kärnkraften ställs det mycket höga krav på säkerheten<br />

eftersom ett kärnkrafthaveri skulle kunna få mycket allvarliga konsekvenser och drabba<br />

många människor. Ett besök på SKI, Statens Kärnkraftsinspektion, har också gjorts <strong>för</strong> <strong>att</strong> få<br />

myndighetens syn på verifiering och validering av <strong>mjukvara</strong>.<br />

Flygbranschen representeras av SAAB i Linköping där utvecklingen av JAS 39 Gripen sker.<br />

Ett militärt flygplan består av en hel del <strong>mjukvara</strong> som det ställs höga krav på. Styrsystemet är<br />

ett exempel på en kritisk applikation som genomgår omf<strong>att</strong>ande verifiering och validering<br />

under utvecklingsarbetet. Bilagan avslutas med en sammanf<strong>att</strong>ning av RTCA/DO-178B som<br />

används som en standard inom flygbranschen.<br />

A1. Kärnkraftbranschen<br />

Eftersom dagens kärnkraftreaktorer har en konstruktion som härstammar från 60-talet har nu<br />

säkerhetssystemen börjat moderniserats. En konsekvens av detta är <strong>att</strong> en viss övergång börjar<br />

ske från hårdvarubaserade till mjukvarubaserade system. De hårdvarubaserade<br />

säkerhetssystemen kommer fortfarande <strong>att</strong> finnas kvar som en backup ifall de<br />

mjukvarubaserade slutar fungera. Datorsystemen är mer <strong>att</strong> betrakta som hjälpsystem. Idag<br />

finns det inte någon säkerhetskritisk kärnkraftfunktionalitet som enbart bygger på<br />

mjukvarulösningar.<br />

Att ha flera olika system som ska ut<strong>för</strong>a samma uppgift är något som är vanligt inom<br />

kärnkraften. På Forsmarks kärnkraftverk finns det fyra uppsättningar av det mesta som är<br />

säkerhetskritiskt. Uppsättningarna har olika tekniska lösningar <strong>för</strong> <strong>att</strong> inte samma fel ska<br />

drabba flera system. Säkerhetssystemen är dessutom placerade på olika platser i anläggningen<br />

<strong>för</strong> <strong>att</strong> t.ex. en brand inte ska slå ut samtliga system.<br />

Säkerhet i tre nivåer<br />

Säkerheten i kärnkraftanläggningarna brukar delas upp i olika nivåer. Med dessa nivåer i<br />

åtanke ska kärnkraftanläggningar konstrueras och drivas efter bästa möjliga skydd mot dels<br />

tekniska fel och dels icke kontrollerbara yttre händelser som brand, blixtnedslag, sabotage<br />

mm. Om något oväntat inträffar har operatörerna relativt gott om tid <strong>för</strong> <strong>att</strong> vidta åtgärder.<br />

Skulle ett fel uppstå kan säkerhetssystemen automatiskt stoppa reaktorn vilket ger<br />

operatörerna möjlighet <strong>att</strong> analysera situationen innan manuella åtgärder vidtas.<br />

Säkerheten är uppbyggd i tre nivåer. Om den <strong>för</strong>sta nivån passeras ska säkerheten<br />

upprätthållas av den andra nivån och på liknande sätt ska den tredje nivån upprätthålla<br />

säkerheten om den andra nivån passeras.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 98(124) Industriella informations och styrsystem


Bilaga A<br />

• Förebygga fel<br />

Den mest grundläggande nivån innebär <strong>att</strong> anläggningens konstruktion är bra och noga<br />

kontrollerad, <strong>att</strong> personalen är välutbildad och <strong>att</strong> arbetsrutinerna <strong>för</strong> drift och underhåll<br />

fungerar som de ska. Syftet är <strong>att</strong> <strong>för</strong>ebygga felen så <strong>att</strong> de inte uppstår.<br />

• Motverka <strong>att</strong> fel leder till haveri<br />

Om det trots allt finns fel som exekveras så <strong>att</strong> den <strong>för</strong>sta nivån passeras ska felet ändå inte<br />

leda till ett haveri. För <strong>att</strong> motverka felet finns övervaknings- och säkerhetssystem som<br />

alltid är dubbla eller ofta flerdubbla. Om det <strong>för</strong>sta inte fungerar tar något av<br />

reservsystemen vid.<br />

• Lindra konsekvenserna av ett haveri<br />

Den sista nivån ska ta vid om de båda <strong>för</strong>sta passerats. Även om alla säkerhetssystem slås<br />

ut och om bränslehärden smälter ska reaktorinneslutningen, som är en kraftig byggnad av<br />

stål och betong, hålla kvar alla de radioaktiva ämnena i inneslutningen.<br />

Standarder och klassificering<br />

Det är huvudsakligen två standarder som används inom kärnkraftbranschen <strong>för</strong> utveckling av<br />

<strong>mjukvara</strong>, IEC 60880 och IEC 61226. IEC 60880 behandlar aspekter då datorer används <strong>för</strong><br />

säkerhetskritiska funktioner i kärnkraftverk. Standarden tillhandahåller krav <strong>för</strong> varje steg i<br />

utvecklingsprocessen.<br />

I standarden IEC 61226 presenteras en metod <strong>för</strong> <strong>att</strong> klassificera olika kritiska delar av<br />

systemen. Inga sannolikhetsuppdelningar liknande SIL-nivåerna i IEC 61508 görs, klasserna<br />

definieras istället utefter vilken inverkan funktionaliteten har på säkerheten. Klassificeringen<br />

görs i fyra nivåer som benämns med en bokstav från A till D, där A betecknar klassen med de<br />

högsta kraven. Ett annat sätt <strong>att</strong> dela upp funktionaliteten är <strong>att</strong> använda en annan standard<br />

som bl.a. används på Forsmarks kärnkraftverk. Klasserna benämns här 1E, 2E och 3E där 1E<br />

är den mest kritiska. Definitionerna av dessa klasser och IEC 61226 påminner om varandra,<br />

men de är inte direkt jäm<strong>för</strong>bara. På Forsmarks kärnkraftverk har beslut tagits om <strong>att</strong> inte<br />

tillämpa klassificeringen enligt IEC 61226. Det blir helt enkelt <strong>för</strong> dyrt och komplicerat <strong>att</strong><br />

klassa om anläggningen. Vid kärnkraftverket i Oskarshamn är målsättningar däremot <strong>att</strong><br />

använda IEC 61226 vid större moderniseringar.<br />

Forsmarks brandlarmsystem<br />

På kärnkraftverket i Forsmark är en stor del av säkerhetssystemen fortfarande<br />

hårdvarubaserade, även om det finns en hel del <strong>mjukvara</strong> kopplat till hårdvaran. Det finns inte<br />

så mycket säkerhetskritisk funktionalitet som nästan helt är mjukvarubaserade. Ett exempel<br />

där <strong>mjukvara</strong>n har en avgörande betydelse är dock brandlarmsystemet. Systemet är klassat<br />

som 3E, d.v.s. det är inte så kritiskt <strong>för</strong> verksamheten. En brand är givetvis mycket allvarlig,<br />

men eftersom inte brandlarmsystemet är involverat i själva styrsystemet klassas det efter<br />

mindre kritikalitet. I figur 1 visas den utvecklingsmodell som <strong>mjukvara</strong>n är framtagen efter.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 99(124) Industriella informations och styrsystem


Systemtestspecifikation<br />

Specifikation Systemtest<br />

Övergripande<br />

konstruktion<br />

Moduldesign<br />

Integrationstestspecifikationer<br />

Modultestspecifikationer<br />

Implementation<br />

Modultest<br />

Integration<br />

Figur 1. Utvecklingsmodell <strong>för</strong> brandlarmsystem i Forsmarks kärnkraftverk.<br />

Bilaga A<br />

Mjukvaran är inte utvecklad av Forsmarks kraftgrupp själva utan inköpt från ett annat <strong>för</strong>etag,<br />

vilket med<strong>för</strong> <strong>att</strong> modul- och integrationstester inte ut<strong>för</strong>s av Forsmarks kraftgrupp. Även om<br />

Forsmark enbart deltar aktivt i början och slutet av utvecklingen så ställs ändå höga krav på<br />

<strong>att</strong> utvecklings<strong>för</strong>etaget arbetar efter lämpliga och väl definierade metoder, vilka kontrolleras<br />

av Forsmarks kraftgrupp.<br />

Det avsätts relativt stora resurser på <strong>att</strong> granska och ta fram tydliga specifikationer. Det har<br />

visat sig <strong>att</strong> det finns mycket <strong>att</strong> vinna både i tid och resurser om specifikationer är tydliga.<br />

Det gäller särskilt kravspecifikationen. Om tvetydigheter smyger sig in redan i<br />

kravspecifikationen fortplantas felen i det forts<strong>att</strong>a arbetet. Dessa felaktigheter är mycket<br />

svåra <strong>att</strong> upptäcka eftersom verifieringen då sker mot en felaktig specifikation. Ett sätt <strong>att</strong> få<br />

entydiga specifikationer skulle kunna vara <strong>att</strong> använda formella metoder, vilket dock inte är<br />

något som används i dagsläget på Forsmarks kärnkraftverk. Anledningen är främst <strong>att</strong> de<br />

standarder som används ännu inte behandlar sådana tekniker. Om formella metoder stöds av<br />

kommande standarder finns ett stort intresse <strong>för</strong> <strong>att</strong> börja använda dem hos Forsmark.<br />

Myndigheten SKI:s arbete<br />

Eftersom kärnkraftverksamheten kan få så allvarliga konsekvenser <strong>för</strong> samhället finns det en<br />

myndighet som ska se till <strong>att</strong> arbetet på kärnkraftverken håller en hög säkerhetsnivå. Eftersom<br />

det nu sker en moderniseringen av säkerhetssystemen arbetar SKI, Statens<br />

kärkraftsinspektion, även en hel del med säkerhetsfrågor <strong>för</strong> <strong>mjukvara</strong>.<br />

SKI:s arbete skiljer sig mycket från motsvarande amerikanska myndighet NRC, Nuclear<br />

Regulatory Commission. Den amerikanska myndigheten lägger sig i arbetet och ska t.ex.<br />

godkänna säkerhetslösningarna, vilket innebär <strong>att</strong> kraftbolagen kan lägga över en del av<br />

konstruktörsrollen på myndigheten. Det är inget arbetssätt som SKI eftersträvar eftersom det<br />

kräver mycket stora resurser från myndighetens sida.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 100(124) Industriella informations och styrsystem<br />

SAT


Bilaga A<br />

SKI tar inte något ansvar <strong>för</strong> <strong>att</strong> kärnkraftverken uppnår en tillräcklig säkerhet. Myndighetens<br />

uppgift är istället <strong>att</strong> agera som en övervakare och pådrivare <strong>för</strong> <strong>att</strong> kraftbolagen själva tar det<br />

ansvaret. SKI är således ingen myndighet som ska godkänna säkerhetslösningar eller som ger<br />

tydliga krav på hur saker ska göras. De ställer t.ex. inga särskilda krav på vilka typer av<br />

testtekniker som ska användas vid test<strong>för</strong>farandet. Syftet med myndighetens arbete är snarare<br />

<strong>att</strong> få kraftbolagen <strong>att</strong> tänka igenom sina arbets- och utvecklingsprocesser än <strong>att</strong> göra en<br />

heltäckande granskning av deras verksamhet.<br />

Istället <strong>för</strong> <strong>att</strong> grunda undersökningar på till<strong>för</strong>litlighetssiffror koncentrerar sig SKI på<br />

kraftbolagens utvecklingsprocesser. Anledningen är <strong>att</strong> det enligt SKI inte går <strong>att</strong> räkna fram<br />

till<strong>för</strong>litlighet <strong>för</strong> <strong>mjukvara</strong>.<br />

Concept<br />

Requirements<br />

Hazard analysis Planning<br />

Realisation<br />

Figur 2. Faser som ligger till grund <strong>för</strong> SKI:s granskning av utvecklingsprocessen.<br />

Installation<br />

Specifikation Design<br />

Validation Maintenance<br />

Ovanstående faser, som är framtagna med hjälp av IEC 61508, fungerar som stöd <strong>för</strong> SKI då<br />

de undersöker huruvida ett kraftbolag följer en tillräckligt väldefinierad utvecklingsprocess.<br />

SKI ställer <strong>för</strong> var och en av de ovanstående faserna lämpliga frågor till kraftbolagen. Genom<br />

<strong>att</strong> kraftbolagen får motivera var<strong>för</strong> de gör på ett visst sätt tvingas de mer eller mindre <strong>att</strong> se<br />

över sina egna processer samtidigt som SKI kan kontrollera <strong>att</strong> processen är väl genomtänkt.<br />

Bo Liwång på SKI framhäver två anledningar till var<strong>för</strong> de tre <strong>för</strong>sta faserna är särskilt<br />

viktiga; dels <strong>att</strong> det är dyrt <strong>att</strong> i ett sent skede av utvecklingen rätta till fel som uppkommer<br />

tidigt i utvecklingen men också <strong>att</strong> så mycket som tre fjärdedelar av alla fel härstammar från<br />

dessa tre faser.<br />

A2. Flygbranschen<br />

Under studiebesöket på SAAB diskuterades verifierings- och valideringsprocessen <strong>för</strong><br />

styrsystemet till JAS 39 Gripen. Utvecklingen av flygplanets <strong>mjukvara</strong> sker i<br />

överensstämmelse med den militära standarden RTCA/DO-178B som i valda delar beskrivs<br />

kortf<strong>att</strong>at i kapitel A3. Standarden delar upp <strong>mjukvara</strong>n i fem kritikalitetsnivåer beroende på<br />

hur allvarliga konsekvenser ett fel i respektive mjukvarudel kan tänkas få. Styrsystemet har<br />

klassificerats som kritikalitetsnivå A, vilket är den nivå som det ställs högst krav på.<br />

SAAB använder sig av haveririskbidrag <strong>för</strong> <strong>att</strong> <strong>för</strong>dela resurserna till utvecklingen. Det<br />

med<strong>för</strong> <strong>att</strong> mer resurser anslås till delar av systemet som bedöms ha hög kritikalitetsnivå. För<br />

A-klassificerad <strong>mjukvara</strong> antas felsannolikheten vara noll medan den <strong>för</strong> <strong>mjukvara</strong> av klass B<br />

och lägre antas vara 100 procent. Anledningen till <strong>att</strong> <strong>mjukvara</strong>n antingen anses vara felfri<br />

eller behäftad med fel till 100 procents sannolikhet beror på svårigheten <strong>att</strong> bedöma<br />

felsannolikhet <strong>för</strong> <strong>mjukvara</strong>. Svårigheten beror främst på <strong>att</strong> <strong>mjukvara</strong> inte åldras och slits ut<br />

på samma sätt som hårdvara.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 101(124) Industriella informations och styrsystem


Bilaga A<br />

Verifierings- och valideringsprocess <strong>för</strong> styrsystemet<br />

Figur 3 visar utvecklingsprocessen <strong>för</strong> <strong>att</strong> ta fram en ny version av styrsystemet. Det <strong>för</strong>sta<br />

steget är <strong>att</strong> definiera kraven som anger vad den nya versionen ska innehålla. Därefter ska<br />

utvecklings- och implementationsarbetet påbörjas. Utvecklingsarbetet sker med ett visst mått<br />

av diversifiering genom <strong>att</strong> två versioner av <strong>mjukvara</strong>n produceras. Den ena versionen består<br />

av automatgenererad C-kod och den andra är manuellt skriven ADA-kod. Det är endast ADAkoden<br />

som används i det riktiga styrsystemet <strong>för</strong> JAS planen, C-koden används bara <strong>för</strong><br />

automatiska tester på ADA-koden. Efter implementeringen genom<strong>för</strong>s verifiering av<br />

<strong>mjukvara</strong>n vilket innebär kontroller av <strong>att</strong> in<strong>för</strong>da ändringar verkligen har avsedd effekt och<br />

<strong>att</strong> ändringarna inte med<strong>för</strong> några oönskade effekter. Under verifieringen kontrolleras även <strong>att</strong><br />

all kod har exekverats. Utvecklingsfasen omf<strong>att</strong>ar också modultester och kontinuerlig<br />

granskning av arbetet.<br />

Utvecklingsfas Valideringsfas Flygprov<br />

Modultest och kodgranskning<br />

Krav och definitioner<br />

Verifiering<br />

Utveckling / Implementering<br />

Validering<br />

Flygprov<br />

Figur 3. Utvecklingsprocess som används av SAAB <strong>för</strong> <strong>att</strong> utveckla en ny version av styrsystemet.<br />

Utmärkande <strong>för</strong> utvecklingsprocessen är <strong>att</strong> de mjukvarubaserade modellsimuleringarna har<br />

möjliggjort en högre grad av automatisering. En övergång från manuell till automatisk<br />

simulering gör <strong>att</strong> simuleringarna kan ut<strong>för</strong>as i icke-realtid. Det i sin tur med<strong>för</strong> <strong>att</strong> mer<br />

omf<strong>att</strong>ande simulering kan hinnas med. Simuleringarna har blivit billigare och<br />

teckningsgraden högre. Simuleringarna har också kunnat göras i ett tidigare skede än <strong>för</strong>ut,<br />

vilket har resulterat i <strong>att</strong> fel konstateras och åtgärdas innan de fortplantats i utvecklingen.<br />

Efter utvecklingsfasen tas ett beslut om projektet är moget <strong>för</strong> <strong>att</strong> övergå till valideringsfasen.<br />

I valideringsfasen genom<strong>för</strong>s både felsimuleringar och simuleringar av flygegenskaper. Under<br />

de senaste åren har simuleringarna av flygegenskaperna övergått från <strong>att</strong> ha ut<strong>för</strong>ts med hjälp<br />

av en prov<strong>för</strong>are och simulator med hårdvara till <strong>att</strong> mer och mer ut<strong>för</strong>as med hjälp av<br />

mjukvarubaserade modellsimuleringar av styrsystemet tillsammans med pilotmodeller. Det<br />

har inneburit en högre grad av automatisering av både genom<strong>för</strong>ande och utvärdering av<br />

simuleringarna. Under den ca tre månader långa valideringsfasen är ytterligare <strong>för</strong>ändringar av<br />

koden inte tillåten. Skulle några oacceptable fel hittas måste utvecklingsfasen genomlöpas<br />

ytterligare en gång. Om det skulle ske är det <strong>att</strong> betrakta som ett misslyckande.<br />

Efter valideringen är det slutligen dags <strong>för</strong> flygprovet som är det sista steget innan leverans.<br />

Där kontrolleras den nya versionen tillsammans med de övriga systemen.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 102(124) Industriella informations och styrsystem


Bilaga A<br />

A3. RTCA/DO-178B<br />

RTCA är en sammanslutning av amerikanska organisationer som alla är relaterade till<br />

flygbranschen. Sammanslutningen verkar <strong>för</strong> <strong>att</strong> hitta pålitliga tekniska lösningar rörande<br />

problem med tillämpningar av telekommunikation och elektronik inom flygbranschen.<br />

RTCO/DO-178B, ”Software Considerations in Airborn Systems and Equipment<br />

Certification”, är ett dokument som används som en standard inom den militära flygindustrin<br />

där den tillhandahåller riktlinjer <strong>för</strong> hur utvecklingen av <strong>mjukvara</strong> bör gå till.<br />

Rekommendationerna ska underlätta framtagandet av <strong>mjukvara</strong> med rätt funktionalitet<br />

samtidigt som <strong>mjukvara</strong>n ska uppfylla de högt ställda säkerhetskraven.<br />

Anledningen till <strong>att</strong> RTCO/DO-178B nämns i denna bilaga är <strong>att</strong> den behandlar utvecklingen<br />

av säkerhetskritisk <strong>mjukvara</strong>. Dessutom används den av SAAB vid utvecklingsarbetet av JAS<br />

39 Gripen. Eftersom SAAB:s verifierings- och valideringsprocess <strong>för</strong> flygplanets styrsystem<br />

presenterades i <strong>för</strong>egående avsnitt är det lämpligt <strong>att</strong> även presentera det dokument som ligger<br />

till grund <strong>för</strong> deras arbetsprocess. Standarden behandlar utvecklingsarbetet från specifikation<br />

till och med <strong>att</strong> produkten är färdig och levererad. I denna bilaga avgränsas dock<br />

framställningen till <strong>att</strong> gälla verifikationsprocessen med ett klart fokus på själva testprocessen.<br />

I övrigt hänvisas läsaren till hela RTCO/DO-178B.<br />

Uppdelning i kritikalitetsnivåer<br />

Standarden <strong>för</strong>espråkar <strong>att</strong> olika delar av <strong>mjukvara</strong>n klassificeras efter kritikalitetsnivå. Ju<br />

högre kritikalitetsnivå en mjukvarudel anses ha desto högre krav ställs på<br />

utvecklingsprocessen av den <strong>mjukvara</strong>n. Med kritikalitetsnivå avses här hur allvarliga de<br />

tänkbara konsekvenserna kan bli om systemet går in i ett felaktigt tillstånd. Ett felaktigt<br />

tillstånd inträder då ett fel exekveras och innebär <strong>att</strong> systemet inte upp<strong>för</strong> sig som <strong>för</strong>väntat.<br />

Fem olika nivåer av <strong>mjukvara</strong> definieras med benämningarna A till E, där A är den mest<br />

kritiska och E den minst kritiska. En <strong>mjukvara</strong> som kan leda till flera olika felaktiga tillstånd<br />

ska klassificeras efter det allvarligaste av dessa tillstånd. Om en mjukvarudel som<br />

klassificerats med A går in i ett felaktigt tillstånd innebär det <strong>att</strong> en forts<strong>att</strong> flygning eller<br />

landning inte längre kan genom<strong>för</strong>as på ett säkert sätt. Ett felaktigt tillstånd i en mjukvarudel<br />

som klassificerats enligt nivå E får ingen effekt på möjligheterna <strong>att</strong> manövrera planet och<br />

med<strong>för</strong> inte heller någon fara <strong>för</strong> den forts<strong>att</strong>a flygningen.<br />

Notera <strong>att</strong> de olika kritikalitetsnivåerna inte är kopplade till siffror angående felsannolikhet <strong>för</strong><br />

de olika mjukvarudelarna. Då RTCO/DO-178B togs fram undersöktes metoder <strong>för</strong> <strong>att</strong><br />

uppsk<strong>att</strong>a felsannolikheten i <strong>mjukvara</strong> efter verifieringsprocessen. Denna undersökning<br />

resulterade i konstaterandet <strong>att</strong> de då kända metoderna <strong>för</strong> <strong>att</strong> uppsk<strong>att</strong>a felsannolikhet inte var<br />

tillräckligt pålitliga vid de höga nivåer som krävdes.<br />

Kort om verifiering enligt RTCO/DO-178B<br />

Det övergripande syftet med verifieringsprocessen är <strong>att</strong> upptäcka och rapportera fel som<br />

uppkommit under utvecklingsprocessen. Att åtgärda felen hör inte till verifieringen utan är en<br />

aktivitet som ingår i utvecklingsprocessen.<br />

Verifiering av <strong>mjukvara</strong>n uppnås genom en kombination av granskning, analys, framtagandet<br />

och exekverandet av testfall. Granskningen resulterar i en bedömning angående noggrannhet,<br />

fullständighet och verifierbarhet. Samma aspekter verifieras genom analysarbetet men<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 103(124) Industriella informations och styrsystem


Bilaga A<br />

resultatet blir inte en bedömning utan en repeterbar beviskedja. Framtagandet av testfallen kan<br />

ge ytterligare information huruvida kraven är fullständigt uppfyllda. Exekveringen av<br />

testfallen erbjuder en möjlighet <strong>att</strong> demonstrera en överensstämmelse med kraven.<br />

Verifieringsprocessen kan brytas ned i mindre delar, en <strong>för</strong> varje fas i utvecklingsarbetet från<br />

det <strong>att</strong> kraven specificeras till implementationsfasen. Det gäller oavsett hur många faser<br />

utvecklingsarbetet har. Målet med varje del är <strong>att</strong> verifiera arbetet i respektive fas. I de tidiga<br />

faserna består verifieringsarbetet av <strong>att</strong> granska och analysera resultatet av det arbete som<br />

gjorts i respektive fas. Då koden är skriven tillkommer även <strong>testa</strong>rbetet som en<br />

verifieringsaktivitet.<br />

För <strong>att</strong> uppfylla kraven <strong>för</strong> de högsta kritikalitetsnivåerna rekommenderas <strong>att</strong> både omf<strong>att</strong>ande<br />

strukturell och funktionell testning genom<strong>för</strong>s. På de lägre nivåerna läggs mindre vikt på<br />

strukturell testning, den är dock inte helt borttagen men den behöver inte ha samma höga<br />

teckningsgrad. Funktionell testning bör däremot användas även på de lägre nivåerna. På den<br />

lägsta nivån räcker det <strong>att</strong> endast genom<strong>för</strong>a övergripande funktionella tester som verifierar <strong>att</strong><br />

systemkraven är täckta.<br />

Generellt kan sägas <strong>att</strong> det görs lättnader <strong>för</strong> de lägre kritikalitetsnivåerna vad gäller bl.a.<br />

• Verifikation av lågnivåkrav.<br />

• Verifikation av mjukvaruarkitekturen.<br />

• Testningens täckningsgrad.<br />

• Graden av oberoende <strong>för</strong> de olika verifieringsaktiviteterna.<br />

• Verifieringsaktiviteter som överlappar varandra genom <strong>att</strong> de hittar samma typer av fel.<br />

• Tester angående störningskänslighet.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 104(124) Industriella informations och styrsystem


Bilaga B<br />

B. Enkätsammanställning<br />

Syftet med enkätundersökningarna är <strong>att</strong> öka rapportens trovärdighet genom <strong>att</strong> till<strong>för</strong>a<br />

synpunkter och bedömningar från ett flertal ins<strong>att</strong>a personer. Den här bilagan innehåller en<br />

sammanställning och utvärdering av resultaten från de två enkäter som använts <strong>för</strong> <strong>att</strong> styrka<br />

vissa delar i riskanalysen. Dessa delar är<br />

• riskvärderingsmatrisens specifika utseende <strong>för</strong> <strong>för</strong>etaget.<br />

• vissa incidenters uppdelning i konsekvensgrader.<br />

Två typer av enkäter har använts; en riskvärderingsmatrisenkät och en konsekvensenkät. De<br />

båda enkäterna behandlas var <strong>för</strong> sig i de två kommande kapitlen.<br />

Riskvärderingsmatrisenkäten återfinns i sin helhet som bilaga C och konsekvensenkäten i<br />

bilaga D.<br />

B1. Resultat och tillvägagångssätt <strong>för</strong> riskvärderingsmatrisenkät<br />

Då en risk uppsk<strong>att</strong>ats efter både frekvens och konsekvensgrad kan den placeras in i en<br />

riskvärderingsmatris. Matrisen talar om vilka kombinationer av konsekvensgrader och<br />

frekvenser som är acceptabla och vilka som är oacceptabla. Utseendet på<br />

riskvärderingsmatrisen bör där<strong>för</strong> återspegla de krav som ställs på börssystemet. Syftet med<br />

enkätundersökningen är <strong>att</strong> få fram en trovärdig riskvärderingsmatris som kan sägas<br />

representera <strong>för</strong>etagets syn på vilka risker som är acceptabla och vilka som är oacceptabla.<br />

Undersökningens deltagare<br />

Enkäten skickades främst till personer som har inblick i vad incidenter kan få <strong>för</strong> ekonomiska<br />

följder <strong>för</strong> <strong>för</strong>etaget. Som exempel på bef<strong>att</strong>ningar hos deltagarna kan nämnas linjechefer,<br />

avdelningschefer och projektledare. Enkäten skickades ut till åtta personer varav fem svarade.<br />

Strategi <strong>för</strong> utvärdering<br />

Det har varit ett mål <strong>att</strong> samtliga av undersökningens deltagare ska vara så ins<strong>att</strong>a i hur olika<br />

incidenter påverkar <strong>för</strong>etaget <strong>att</strong> de kan göra en värdefull ekonomisk bedömning av dessa<br />

incidenter. Svaren från undersökningens deltagare viktas där<strong>för</strong> lika mycket.<br />

Nedan följer en beskrivning i tre steg hur utvärderingen går till.<br />

1. Efter <strong>att</strong> enkäterna har samlats in sammanställs alla svar i en tabell. Varje cell i tabellen<br />

kommer <strong>att</strong> innehålla O, A och B (oacceptabel, acceptabel eller <strong>att</strong> en bedömning måste<br />

ske från fall till fall) i samma antal som enkätundersökningens deltagare.<br />

2. Från varje cell tas två extremvärden bort <strong>för</strong> <strong>att</strong> på så sätt eliminera svar som skiljer sig <strong>för</strong><br />

mycket från mängden.<br />

3. Det slutgiltiga svaret blir det alternativ som flest respondenter har valt, efter <strong>att</strong><br />

extremvärdena eliminerats. Om det inte finns något alternativ som är i majoritet klassas<br />

resultatet som ett B.<br />

I efterhand kunde det konstateras <strong>att</strong> enkäten antagligen inte var konstruerad på bästa tänkbara<br />

sätt. En anledning är <strong>att</strong> riskvärderingsmatrisen innef<strong>att</strong>ar <strong>för</strong> få valbara alternativ. Det borde<br />

funnits fler alternativ <strong>att</strong> välja mellan på båda axlarna <strong>för</strong> <strong>att</strong> inte respondenterna skulle<br />

påverkas så mycket av enkätens utformning.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 105(124) Industriella informations och styrsystem


Bilaga B<br />

Resultat<br />

I tabellen nedan redovisas svaren från undersökningens deltagare. De två extremvärdena som<br />

inte ska ingå i värderingen har sorterats bort och det är således de tre bokstäverna i mitten som<br />

kommer <strong>att</strong> användas i värderingen enligt steg tre.<br />

Frekvent Trolig Sannolik Försumbar Osannolik<br />

Katastrof OOOOO OOOOO OOOOO OOOOB OBBAA<br />

Kritisk OOOOO OOOOO OOOBB OBBAA OBAAA<br />

Marginell OOOOO OOOOB BBBAA AAAAA AAAAA<br />

Obetydlig OOOBA BAAAA BAAAA AAAAA AAAAA<br />

Tabell 8. Samtliga respondenters svar.<br />

Eftersom det alltid är ett av alternativen i varje cell som är i majoritet råder det aldrig några<br />

tveksamheter över vilket alternativ som ska bli slutresultatet. Den slutgiltiga riskvärderingsmatrisen<br />

som enkätundersökningen skulle resultera i redovisas i Tabell 9.<br />

Frekvent Trolig Sannolik Försumbar Osannolik<br />

Katastrof Oacceptabel Oacceptabel Oacceptabel Oacceptabel Bedömning<br />

Kritisk Oacceptabel Oacceptabel Oacceptabel Bedömning Acceptabel<br />

Marginell Oacceptabel Oacceptabel Bedömning Acceptabel Acceptabel<br />

Obetydlig Oacceptabel Acceptabel Acceptabel Acceptabel Acceptabel<br />

Tabell 9. Riskvärderingsmatrisen som enkätundersökningen resulterade i.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 106(124) Industriella informations och styrsystem


Bilaga B<br />

B2. Resultat och tillvägagångssätt <strong>för</strong> konsekvensenkät<br />

Det är svårt <strong>att</strong> avgöra hur allvarliga följder en viss incident kan få <strong>för</strong> ett <strong>för</strong>etag. Där<strong>för</strong><br />

involverades några mer ins<strong>att</strong>a personer <strong>för</strong> <strong>att</strong> hjälpa med denna bedömning.<br />

Enkätundersökningen omf<strong>att</strong>ar inte riskanalysens samtliga incidenter. De incidenter som inte<br />

är medtagna i enkäten bedöms av examensarbetarna själva utgående från den referensbild som<br />

enkätundersökningen resulterar i.<br />

Undersökningens deltagare<br />

Enkäten skickades till personer med olika typer av bef<strong>att</strong>ningsområden inom <strong>för</strong>etaget.<br />

Anledningen till <strong>att</strong> så vitt skilda personer deltar i undersökningen är <strong>att</strong> incidenter kan tolkas<br />

på så olika sätt, dels vad de får <strong>för</strong> tekniska följder <strong>för</strong> systemet och dels vad de får <strong>för</strong><br />

ekonomiska följder <strong>för</strong> <strong>för</strong>etaget. Personer med höga bef<strong>att</strong>ningsområden har sällan lika<br />

ingående <strong>för</strong>ståelse som t.ex. utvecklare vad konsekvenser, som bygger på tekniska fel, kan få<br />

<strong>för</strong> inverkan på systemet. De kan däremot ha en bättre ekonomisk <strong>för</strong>ståelse <strong>för</strong> vad<br />

konsekvenser kan ha <strong>för</strong> inverkan på <strong>för</strong>etaget. Tanken är <strong>att</strong> resultatet från deltagarna ska<br />

komplettera varandras bidrag och ge en mer rimlig bedömning av incidenter.<br />

Enkäten skickades ut till 20 personer och hade en svarsfrekvens på ungefär 50 procent. Det<br />

var främst personer med lite högre bef<strong>att</strong>ningar som tog sig tid och svarade.<br />

Berörda incidenter<br />

De incidenter som har använts i enkätundersökningen har valts med tanke på <strong>att</strong> de ska utgöra<br />

en referensbild <strong>för</strong> bedömningen av de övriga incidenterna i riskanalysen.<br />

Incidenterna är i stort sett direkt tagna från rapportens riskanalys. I några fall har vissa<br />

justeringar gjorts <strong>för</strong> <strong>att</strong> de bättre ska kunna anpassas till enkäten, men innebörden av<br />

incidenterna har dock inte ändrats. De berörda incidenterna från kapitel 2.3.3 är; I1.1, I1:3,<br />

I2:1, I3:1 och I4:1.<br />

Strategi och sammanställning av enkäternas resultat<br />

Sammanställningen av resultaten redovisas i de sex tabellerna nedan som är tagna direkt från<br />

enkäten. Varje tabell motsvarar en av riskanalysens incidenter. I tabellerna presenteras hur<br />

svaren är <strong>för</strong>delade mellan de olika konsekvensgraderna. I och med <strong>att</strong> det är tillåtet <strong>att</strong> sätta<br />

flera kryss <strong>för</strong> varje rad i tabellerna kan antalet kryss på varje rad variera. Antalet kryss i en<br />

ruta delas med det totala antalet kryss som finns <strong>för</strong> den aktuella raden och resultatet<br />

presenteras i procent.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 107(124) Industriella informations och styrsystem


I.nr Incident Förklaring och bedömning<br />

I1.1 Handelsstopp<br />

på grund av<br />

tekniskt fel<br />

Fråga 1 – Handelsstopp på grund av tekniskt fel.<br />

Bilaga B<br />

Under drift inträffar ett fel i systemet som leder till <strong>att</strong> handeln<br />

stoppas i samtliga orderböcker. Nya ordrar kan ej läggas och<br />

ordrar som befinner sig i systemet kan ej matchas. Incidenten<br />

innef<strong>att</strong>ar däremot inte <strong>att</strong> information som finns i systemet går<br />

<strong>för</strong>lorad.<br />

Bedöm hur allvarlig incidenten är utifrån handelsstoppets varaktighet.<br />

Katastrof Kritisk Marginell Obetydlig<br />

Flera dagar 70 % 30 %<br />

En dag 11 % 89 %<br />

Ett par timmar 78 % 22 %<br />

30 min 11 % 89 %<br />

5 min 56 % 44 %<br />

Respondenterna är tämligen överens i sina bedömningar. Vid bedömningen av ”flera dagar” är<br />

personer med högre bef<strong>att</strong>ning i majoritet på bedömningen katastrof. Desamma gäller <strong>för</strong><br />

bedömningen obetydlig på ”5 min”. Generellt sett kan sägas <strong>att</strong> personer med högre bef<strong>att</strong>ning<br />

i större utsträckning vågar använda hela spannet av konsekvensgrader i sina bedömningar,<br />

medan de andra håller sig till de två mittalternativen.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 108(124) Industriella informations och styrsystem


I.nr Incident Förklaring och bedömning<br />

I1.3 Prestanda<strong>för</strong>sämringar<br />

Fråga 2 – Prestanda<strong>för</strong>sämringar.<br />

Systemets prestanda <strong>för</strong>sämras så <strong>att</strong> användaren upplever<br />

<strong>för</strong>dröjningar vid t.ex. orderläggning.<br />

Bilaga B<br />

En prestanda<strong>för</strong>sämring kan uppstå av flera olika anledningar.<br />

Dimensioneringen av systemet kan vara dåligt tilltagen. Även om<br />

systemet fungerar till hundraprocent av normal tps-nivå kan köer<br />

uppstå vid ovanligt hård belastning. Fördröjningar kan också<br />

uppkomma p.g.a. <strong>att</strong> över<strong>för</strong>ingskapaciteten mellan användare och<br />

systemet är liten. Användaren bryr sig troligen inte om var<strong>för</strong><br />

<strong>för</strong>dröjningen uppstår, bara <strong>att</strong> den existerar.<br />

Bedöm konsekvensgraden då en viss del av antalet ordrar under en dag utsätts<br />

<strong>för</strong> <strong>för</strong>seningar. Med <strong>för</strong>seningar menas <strong>att</strong> det tar några sekunder mer än<br />

vanligt <strong>att</strong> lägga en order.<br />

Andel ordrar som<br />

<strong>för</strong>senas<br />

Katastrof Kritisk Marginell Obetydlig<br />

100 % 25 % 75 %<br />

50 % 22 % 67 % 11 %<br />

10 % 22 % 78 %<br />

Majoriteten är överens. Där bedömningen avviker kan inga särskilda slutsatser dras.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 109(124) Industriella informations och styrsystem


I.nr Incident Förklaring och bedömning<br />

I2.1 Order matchas<br />

felaktigt<br />

Fråga 3 – Order matchas felaktigt.<br />

Bilaga B<br />

Användaren köper/säljer någonting annat än vad ordern omf<strong>att</strong>ar.<br />

Det kan t.ex. bero på <strong>att</strong> informationen har <strong>för</strong>vanskats i systemet<br />

eller fel i matchning mellan köp- och säljorder.<br />

Om ordrar börjar matchas felaktigt kan det få mycket allvarliga<br />

konsekvenser eftersom det då ofta rör sig om stora belopp.<br />

Omsättning under en normal handelsdag brukar uppgå till tiotals<br />

miljoner kronor per minut.<br />

Bedömningen ska göras <strong>för</strong> två fall. I det <strong>för</strong>sta fallet <strong>för</strong>utsätts <strong>att</strong> det är<br />

möjligt <strong>att</strong> backa tillbaka alla felaktiga ordrar.<br />

Katastrof Kritisk Marginell Obetydlig<br />

30 min 25 % 75 %<br />

10 min 88 % 12 %<br />

1 min 55 % 45 %<br />

Enstaka order 12 % 63 % 25 %<br />

I det andra fallet ska bedömningen göras då det inte är möjligt <strong>att</strong> backa tillbaka<br />

ordrarna.<br />

Katastrof Kritisk Marginell Obetydlig<br />

30 min 100 %<br />

10 min 83 % 17 %<br />

1 min 33 % 67 %<br />

Enstaka order 67 % 33 %<br />

Hur incidenten ska bedömas då ordrar matchas felaktigt går något isär. Vissa upplever<br />

incidenten, då det inte är möjligt <strong>att</strong> backa tillbaka ordrarna, något överflödig. De menar <strong>att</strong> en<br />

sådan incident inte kan inträffa. Här bör det påpekas <strong>att</strong> risken alltid finns. Den kanske inte är<br />

så stor, men <strong>att</strong> säga <strong>att</strong> det inte kan inträffa är <strong>att</strong> lova <strong>för</strong> mycket. Eftersom dessa personer<br />

inte har bedömt incidenten utefter dess verkliga mening har svaret från dessa personer inte<br />

vägts in i bedömningen. Antalet deltagande <strong>för</strong> den undre tabellen är således något lägre än<br />

<strong>för</strong> de övriga tabellerna. Respondenterna är mer överens i sina bedömningar av<br />

felmatchningar som får råda under en lite längre tidsrymd än <strong>för</strong> enbart några enstaka ordrar.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 110(124) Industriella informations och styrsystem


I.nr Incident Förklaring och bedömning<br />

I3.1 Användaren<br />

ger oavsiktliga<br />

kommandon<br />

Fråga 4 – Användaren ger oavsiktliga kommandon.<br />

Bilaga B<br />

Dåligt användargränssnitt. Knappar och menyer ligger på fel<br />

ställen jäm<strong>för</strong>t med vad användaren <strong>för</strong>väntat sig, vilket orsakar<br />

felinmatningar från användaren. Tvetydigheter vad gäller<br />

funktionalitet i användarapplikationen kan med<strong>för</strong>a <strong>att</strong> användaren<br />

ger kommandon som resulterar i oavsiktliga inmatningar.<br />

Hur allvarligt är det om SAXESS Trade’s användargränssnitt med<strong>för</strong> en<br />

felaktig inmatning från användarens sida?<br />

Majoriteten är överens om <strong>att</strong> incidenten ska bedömas som marginell. En respondent påpekar<br />

dock <strong>att</strong> det <strong>för</strong>utsätter <strong>att</strong> en dialog finns med användaren så <strong>att</strong> bristerna i användargränssnittet<br />

kan åtgärdas.<br />

I.nr Incident Förklaring och bedömning<br />

I4.1 För mycket<br />

information<br />

når<br />

användaren<br />

Fråga 5 – För mycket information når användaren.<br />

Katastrof Kritisk Marginell Obetydlig<br />

Felaktig inmatning 78 % 22 %<br />

Information som endast är avsedd <strong>för</strong> en viss adressat skickas ut<br />

som allmän information.<br />

Det finns ett fel i systemet som gör det möjligt <strong>för</strong> en användare <strong>att</strong> få <strong>för</strong><br />

mycket information om ordrar. Hur ska ett sådant fel bedömas om det <strong>för</strong>utsätts<br />

<strong>att</strong> incidenten berör samtliga ordrar <strong>för</strong> de två övre tidsintervallen?<br />

Katastrof Kritisk Marginell Obetydlig<br />

Några veckor 89 % 11 %<br />

En dag 40 % 60 %<br />

Enstaka ordrar 55 % 45 %<br />

Meningarna går något isär <strong>för</strong> de kortare tidsintervallen. Det kan bero på <strong>att</strong> incidenten är<br />

något tvetydig. Det framgår inte lika tydligt som <strong>för</strong> de andra incidenterna vad som egentligen<br />

berörs.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 111(124) Industriella informations och styrsystem


Bilaga C<br />

C. Riskvärderingsmatrisenkät<br />

Syftet med riskvärderingsmatrisen är <strong>att</strong> den ska representera BU SAXESS syn på risker.<br />

Genom <strong>att</strong> applicera de risker som uppdagas på riskvärderingsmatrisen, kan en vägledning fås<br />

huruvida risken är acceptabel eller ej. Tabell-1 nedan är ett exempel på en ej helt ifylld<br />

riskvärderingsmatris.<br />

Frekvent Trolig Sannolik Försumbar Osannolik<br />

Katastrof Oacceptabel<br />

Kritisk Bedömning<br />

Marginell<br />

Obetydlig Acceptabel<br />

Tabell-1. Exempel på hur en riskvärderingsmatris kan se ut. I en riktig matris ska samtliga fält vara ifyllda.<br />

Riskvärderingsmatrisen innehåller en konsekvensskala och en frekvensskala.<br />

Konsekvensskalan anger hur allvarliga följderna blir om risken inträffar och frekvensskalan<br />

anger hur ofta det kan tänkas ske. Definition av begreppen konsekvens och frekvens<br />

presenteras på nästa sida.<br />

Det bör här påpekas <strong>att</strong> även i de mest säkerhetskritiska branscher accepteras risker som kan<br />

leda till katastrofer, dock accepteras de endast på mycket låga frekvensnivåer. Inom civilflyget<br />

klassas händelsen <strong>att</strong> ett plan störtar naturligtvis som en katastrof. Ändå accepteras <strong>att</strong> plan<br />

störtar p.g.a. tekniskt fel med en frekvens på 10 -9 flygtimmar. Det är nämligen inte möjligt <strong>att</strong><br />

bedriva verksamheter utan <strong>att</strong> utsättas <strong>för</strong> någon form av risk. Risker kan i och <strong>för</strong> sig alltid på<br />

ett eller annat sätt minskas, men ofta leder det till stora kostnader. Frågan är på vilken nivå<br />

man ska lägga sig.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 112(124) Industriella informations och styrsystem


Definition av konsekvensgrad<br />

Nedan definieras begreppet konsekvens som utgör kolumnen i riskvärderingsmatrisen.<br />

Konsekvensgrad Förklaring<br />

Katastrof Förtroendet <strong>för</strong> SAXESS skadas så allvarligt <strong>att</strong> varumärket blir<br />

oanvändbart. Inga nya ordrar erhålls och befintliga kunder säger<br />

upp avtal.<br />

Kritisk Varumärket skadas så allvarligt <strong>att</strong> det inverkar negativt på<br />

möjligheten <strong>att</strong> sälja produkten. Enskilda avtal med direkt<br />

inblandade kunder riskerar <strong>att</strong> sägas upp.<br />

Marginell Ringa skada på varumärket. Leder inte till minskad <strong>för</strong>säljning<br />

men kan med<strong>för</strong>a vissa direkta kostnader.<br />

Obetydlig Ej märkbar ekonomisk konsekvens. Visst irritationsmoment <strong>för</strong><br />

enstaka kunder.<br />

Tabell-2. Definition av konsekvensgrad.<br />

Bilaga C<br />

Definition av frekvens<br />

Följande tabell innehåller <strong>för</strong>klaringar till de termer som används <strong>för</strong> <strong>att</strong> beskriva frekvens.<br />

För <strong>att</strong> ge ett exempel har ett börssystem med en uppsk<strong>att</strong>ad livslängd på totalt 20 000<br />

drifttimmar legat till grund <strong>för</strong> framtagandet av frekvenserna. I de fall då fler system finns i<br />

drift ökar sannolikheten <strong>att</strong> felen inträffar. Det är dock ingenting som ska vägas in i detta<br />

skede av riskanalysen. Denna enkät behandlar således ett SAXESS-system.<br />

Frekvens Förklaring Inträffar ungefär<br />

antal gånger per<br />

år<br />

Frekvent Inträffar många gånger under<br />

systemets livslängd<br />

Trolig Inträffar ett flertal gånger<br />

under systemets livslängd<br />

Sannolik Inträffar någon gång under<br />

systemets livslängd<br />

Försumbar Kan möjligen inträffa under<br />

systemets livslängd<br />

Osannolik Förväntas inte inträffa under<br />

systemets livslängd<br />

Tabell-3. Definition av begreppen som anger frekvens.<br />

Inträffar ungefär<br />

antal gånger per<br />

timme<br />

30 10 -2<br />

3 10 -3<br />

0,3 10 -4<br />

0,03 10 -5<br />

0,003 10 -6<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 113(124) Industriella informations och styrsystem


Bilaga C<br />

Uppgift<br />

Till <strong>att</strong> börja med vill vi veta vilken bef<strong>att</strong>ning Du har. Genom <strong>att</strong> få in svar från personer med<br />

olika bef<strong>att</strong>ningsområden kan eventuella skillnader i synen på risker påvisas. Var vänlig och<br />

beskriv med några ord Din bef<strong>att</strong>ning och Dina ansvarsområden.<br />

___________________________________________________________________________<br />

___________________________________________________________________________<br />

Uppgiften <strong>för</strong> Dig som deltar i undersökningen är <strong>att</strong> fylla i en riskvärderingsmatris <strong>för</strong> BU<br />

SAXESS, d.v.s. hur risker i systemet borde värderas då en definition av frekvens och<br />

konsekvensgrad redan finns.<br />

Fyll i de tomma rutorna i tabell-4. Definition av frekvens och konsekvensgrad finns i tabell-2<br />

och tabell-3. Markera de rutor som är acceptabla med A och rutor som är oacceptabla med O.<br />

De rutor där en bedömning är svår <strong>att</strong> göra kan klassificeras med B, vilket innebär <strong>att</strong> en<br />

bedömning får göras från fall till fall. Antalet rutor som klassificeras med B bör hållas nere.<br />

Efter tabellen finns plats <strong>för</strong> eventuella kommentarer.<br />

Katastrof<br />

Kritisk<br />

Marginell<br />

Obetydlig<br />

Frekvent Trolig Sannolik Försumbar Osannolik<br />

Tabell-4. Matris som fylls i av respondenten. Acceptabla risker markeras med A, bedömning med B och<br />

oacceptabla med O.<br />

Kommentarer:_______________________________________________________________<br />

___________________________________________________________________________<br />

___________________________________________________________________________<br />

___________________________________________________________________________<br />

Om det finns några oklarheter är Ni varmt välkomna <strong>att</strong> diskutera dessa med oss via mail eller<br />

personligen. Vi sitter i "konsultrummet", d.v.s. hörnrummet Norrlandsgatan/Kungsgatan,<br />

rumsnummer 5011.<br />

Stort tack <strong>för</strong> Er medverkan,<br />

/Stefan Särd och Dag Wester<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 114(124) Industriella informations och styrsystem


Bilaga D<br />

D. Konsekvensenkät<br />

Till <strong>att</strong> börja med vill vi veta vilken bef<strong>att</strong>ning Du har. Genom <strong>att</strong> få in svar från personer med<br />

olika bef<strong>att</strong>ningsområden kan eventuella skillnader i synen på risker påvisas. Var vänlig och<br />

beskriv med några ord Din bef<strong>att</strong>ning och Dina ansvarsområden.<br />

___________________________________________________________________________<br />

___________________________________________________________________________<br />

Nedan följer en tabell innehållande definitioner av de konsekvensgrader som används i<br />

enkäten.<br />

Konsekvensgrad Förklaring<br />

Katastrof Förtroendet <strong>för</strong> SAXESS skadas så allvarligt <strong>att</strong> varumärket blir<br />

oanvändbart. Inga nya ordrar erhålls och befintliga kunder säger<br />

upp avtal.<br />

Kritisk Varumärket skadas så allvarligt <strong>att</strong> det inverkar negativt på<br />

möjligheten <strong>att</strong> sälja produkten. Enskilda avtal med direkt<br />

inblandade kunder riskerar <strong>att</strong> sägas upp.<br />

Marginell Ringa skada på varumärket. Leder inte till minskad <strong>för</strong>säljning<br />

men kan med<strong>för</strong>a vissa direkta kostnader.<br />

Obetydlig Ej märkbar ekonomisk konsekvens. Visst irritationsmoment <strong>för</strong><br />

enstaka kunder.<br />

Tabell-1. Definition av konsekvensgrad.<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 115(124) Industriella informations och styrsystem


Bilaga D<br />

Uppgift<br />

Enkäten är uppdelad i två delar. Den <strong>för</strong>sta delen är tänkt <strong>att</strong> styrka bedömningen av vissa<br />

incidenter. Den andra delen finns med <strong>för</strong> <strong>att</strong> <strong>för</strong>slag ska kunna ges på incidenter som ännu<br />

inte är uppmärksammade.<br />

Del 1<br />

Nedan följer några incidenter som vi gärna vill ha hjälp med <strong>att</strong> bedöma. Incidenterna<br />

beskrivs kortf<strong>att</strong>at varpå själva bedömningen ska ske. Din uppgift är <strong>att</strong> sätta ett kryss <strong>för</strong><br />

varje rad i tabellerna. Om tveksamhet råder kan även flera kryss sättas per rad. Efter tabellen<br />

finns utrymme <strong>för</strong> egna kommentarer om sådana vill ges. Konsekvensgraderna är definierade i<br />

tabell-1.<br />

Incidenterna ska bedömas efter hur allvarliga de är om de inträffar en gång. Hur ofta<br />

incidenterna kan tänkas inträffa bedöms i ett annat skede av riskanalysen och således inte i<br />

denna enkät.<br />

I.nr Incident Förklaring och bedömning<br />

I1.1 Handelsstopp<br />

på grund av<br />

tekniskt fel<br />

Under drift inträffar ett fel i systemet som leder till <strong>att</strong> handeln<br />

stoppas i samtliga orderböcker. Nya ordrar kan ej läggas och<br />

ordrar som befinner sig i systemet kan ej matchas. Incidenten<br />

innef<strong>att</strong>ar däremot inte <strong>att</strong> information som finns i systemet går<br />

<strong>för</strong>lorad.<br />

Bedöm hur allvarlig incidenten är utifrån handelsstoppets varaktighet.<br />

Flera dagar<br />

En dag<br />

Ett par timmar<br />

30 min<br />

5 min<br />

Fråga 1 – Handelsstopp på grund av tekniskt fel.<br />

Katastrof Kritisk Marginell Obetydlig<br />

Kommentarer:________________________________________<br />

____________________________________________________<br />

____________________________________________________<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 116(124) Industriella informations och styrsystem


I.nr Incident Förklaring och bedömning<br />

I1.3 Prestanda<strong>för</strong>sämringar<br />

Fråga 2 – Prestanda<strong>för</strong>sämringar.<br />

Systemets prestanda <strong>för</strong>sämras så <strong>att</strong> användaren upplever<br />

<strong>för</strong>dröjningar vid t.ex. orderläggning.<br />

Bilaga D<br />

En prestanda<strong>för</strong>sämring kan uppstå av flera olika anledningar.<br />

Dimensioneringen av systemet kan vara dåligt tilltagen. Även om<br />

systemet fungerar till hundraprocent av normal tps-nivå kan köer<br />

uppstå vid ovanligt hård belastning. Fördröjningar kan också<br />

uppkomma p.g.a. <strong>att</strong> över<strong>för</strong>ingskapaciteten mellan användare och<br />

systemet är liten. Användaren bryr sig troligen inte om var<strong>för</strong><br />

<strong>för</strong>dröjningen uppstår, bara <strong>att</strong> den existerar.<br />

Bedöm konsekvensgraden då en viss del av antalet ordrar under en dag utsätts<br />

<strong>för</strong> <strong>för</strong>seningar. Med <strong>för</strong>seningar menas <strong>att</strong> det tar några sekunder mer än<br />

vanligt <strong>att</strong> lägga en order.<br />

Andel ordrar som<br />

<strong>för</strong>senas<br />

100 %<br />

50 %<br />

10 %<br />

Katastrof Kritisk Marginell Obetydlig<br />

Kommentarer:________________________________________<br />

____________________________________________________<br />

____________________________________________________<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 117(124) Industriella informations och styrsystem


I.nr Incident Förklaring och bedömning<br />

I2.1 Order matchas<br />

felaktigt<br />

Fråga 3 – Order matchas felaktigt.<br />

Bilaga D<br />

Användaren köper/säljer någonting annat än vad ordern omf<strong>att</strong>ar.<br />

Det kan t.ex. bero på <strong>att</strong> informationen har <strong>för</strong>vanskats i systemet<br />

eller fel i matchning mellan köp- och säljorder.<br />

Om ordrar börjar matchas felaktigt kan det få mycket allvarliga<br />

konsekvenser eftersom det då ofta rör sig om stora belopp.<br />

Omsättning under en normal handelsdag brukar uppgå till tiotals<br />

miljoner kronor per minut.<br />

Bedömningen ska göras <strong>för</strong> två fall. I det <strong>för</strong>sta fallet <strong>för</strong>utsätts <strong>att</strong> det är<br />

möjligt <strong>att</strong> backa tillbaka alla felaktiga ordrar.<br />

30 min<br />

10 min<br />

1 min<br />

Enstaka order<br />

Katastrof Kritisk Marginell Obetydlig<br />

I det andra fallet ska bedömningen göras då det inte är möjligt <strong>att</strong> backa<br />

tillbaka ordrarna.<br />

30 min<br />

10 min<br />

1 min<br />

Enstaka order<br />

Katastrof Kritisk Marginell Obetydlig<br />

5.2.1.1.1.1.1.1.1<br />

Kommentarer:________________________________________<br />

____________________________________________________<br />

____________________________________________________<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 118(124) Industriella informations och styrsystem


I.nr Incident Förklaring och bedömning<br />

I3.1 Användaren<br />

ger oavsiktliga<br />

kommandon<br />

Fråga 4 – Användaren ger oavsiktliga kommandon.<br />

Bilaga D<br />

Dåligt användargränssnitt. Knappar och menyer ligger på fel<br />

ställen jäm<strong>för</strong>t med vad användaren <strong>för</strong>väntat sig, vilket orsakar<br />

felinmatningar från användaren. Tvetydigheter vad gäller<br />

funktionalitet i användarapplikationen kan med<strong>för</strong>a <strong>att</strong> användaren<br />

ger kommandon som resulterar i oavsiktliga inmatningar.<br />

Hur allvarligt är det om SAXESS Trade’s användargränssnitt med<strong>för</strong> en<br />

felaktig inmatning från användarens sida?<br />

Kommentarer:________________________________________<br />

____________________________________________________<br />

____________________________________________________<br />

I.nr Incident Förklaring och bedömning<br />

I4.1 För mycket<br />

information<br />

når<br />

användaren<br />

Felaktig inmatning<br />

Information som endast är avsedd <strong>för</strong> en viss adressat skickas ut<br />

som allmän information.<br />

Det finns ett fel i systemet som gör det möjligt <strong>för</strong> en användare <strong>att</strong> få <strong>för</strong><br />

mycket information om ordrar. Hur ska ett sådant fel bedömas om det <strong>för</strong>utsätts<br />

<strong>att</strong> incidenten berör samtliga ordrar <strong>för</strong> de två övre tidsintervallen?<br />

Några veckor<br />

En dag<br />

Enstaka ordrar<br />

Fråga 5 – För mycket information når användaren.<br />

Katastrof Kritisk Marginell Obetydlig<br />

Katastrof Kritisk Marginell Obetydlig<br />

Kommentarer:________________________________________<br />

____________________________________________________<br />

____________________________________________________<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 119(124) Industriella informations och styrsystem


Bilaga D<br />

Del 2<br />

Från denna del hoppas vi kunna få <strong>för</strong>slag på ytterligare incidenter som ännu inte har<br />

uppmärksammats. Nedan ges ett antal incidenter på rubriknivå. Om Du har <strong>för</strong>slag på<br />

ytterligare incidenter som bör finnas med får Du gärna nämna dessa nedan.<br />

Störning i handel<br />

I1.1 Handelsstopp i hela systemet på grund av tekniskt fel<br />

I1.2 Handelsstopp i vissa orderböcker<br />

I1.3 Prestanda<strong>för</strong>sämringar<br />

I1.4 Användarapplikationer ej anslutna<br />

Felaktig handel<br />

I2.1 Order matchas felaktigt<br />

I2.2 Handelsregler följs ej<br />

I2.3 Felaktig avgifts- eller avrundningsavvikelse<br />

I2.4 Order <strong>för</strong>svinner innan matchning<br />

I2.5 Order <strong>för</strong>svinner efter matchning<br />

I2.6 Felaktigt ifylld order accepteras<br />

I2.7 Felaktig prissättning<br />

Användargränssnitt<br />

I3.1 Användaren ger oavsiktliga kommandon<br />

I3.2 Användaren gör felaktiga avläsningar<br />

I3.3 Svårbegriplig användarapplikation<br />

Informationsflöde<br />

I4.1 För mycket information når användaren<br />

I4.2 För lite information når användaren<br />

I4.3 Information om index m.m. uteblir<br />

Övriga incidenter<br />

I5.1 Instabilare system (det ena av de två systemen är ej i drift)<br />

I5.2 Korrekt ifylld order accepteras inte<br />

Kommentarer:________________________________________________________________<br />

___________________________________________________________________________<br />

___________________________________________________________________________<br />

Om det finns några oklarheter är Ni varmt välkomna <strong>att</strong> diskutera dessa med oss via mail eller<br />

personligen. Vi sitter i "konsultrummet", d.v.s. hörnrummet Norrlandsgatan/Kungsgatan,<br />

rumsnummer 5011.<br />

Stort tack <strong>för</strong> Din medverkan,<br />

/Dag Wester och Stefan Särd<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 120(124) Industriella informations och styrsystem


Ordlista<br />

Ord Förklaring<br />

Aktörer De personer och <strong>för</strong>etag som på något sätt kommer i kontakt med ett<br />

börssystem, se kapitel 2.1.2<br />

Användarapplikation Applikation där användaren kan lägga order i systemet.<br />

Användare En person som lägger order i systemet och som då agerar säljare eller<br />

köpare.<br />

Börssystem Ett börssystem kan sägas bestå av den mjuk- och hårdvara som<br />

tillsammans utgör en elektronisk marknadsplats <strong>för</strong> värdepapper.<br />

Deadlock Ett tillstånd då systemet låser sig vilket innebär <strong>att</strong> en forts<strong>att</strong> drift av<br />

systemet är omöjligt tills felet åtgärdas eller systemet startas om.<br />

Driver Ersätter överordnade moduler som krävs <strong>för</strong> <strong>att</strong> en funktion ska kunna<br />

kompileras. Drivers är vanliga vid bottom-up integration, se kapitel 3.2.5.<br />

Fel Fel kan med<strong>för</strong>a <strong>att</strong> <strong>mjukvara</strong>ns funktionalitet på något sätt avviker från<br />

vad som är önskvärt. Fel kan t.ex. vara implementerade i koden om<br />

programmeraren har programmerat fel eller inte programmerat vad som<br />

avsågs. Fel kan också uppstå vid tolkningen av luddiga<br />

kravspecifikationer. Ett fel är något som kvarstår tills det åtgärdas.<br />

Felintensitet Anger hur mycket fel som finns i koden. En tänkbar enhet skulle kunna<br />

vara antalet fel per kodrad.<br />

Felsannolikhet Sannolikheten <strong>att</strong> ett fel exekveras vilket kan med<strong>för</strong> <strong>att</strong> en incident<br />

inträffar.<br />

Finansiella instrument Används i rapporten med samma betydelse som värdepapper.<br />

Företaget Då ordet <strong>för</strong>etaget nämns syftar det på <strong>för</strong>etaget där examensarbetet är<br />

ut<strong>för</strong>t, d.v.s. OM Technology.<br />

GUI Graphical Unit Interface, det grafiska gränssnittet mellan användare och<br />

system.<br />

Hermeneutik Ett forskningsideal där huvudsyftet är <strong>att</strong> tolka och <strong>för</strong>stå.<br />

Incident En incident är en mer eller mindre allvarlig och ospecificerad händelse<br />

som kan inträffa då systemet befinner sig i ett felaktigt tillstånd, vilket i sin<br />

tur är en följd av <strong>att</strong> ett fel har exekverats. En incident är således skillnaden<br />

mellan det önskade och det verkliga beteendet. Se Figur 1-2.<br />

Katastrof Definition på konsekvensgrad i riskanalysen, se Tabell 2-3.<br />

Konsekvensgrad Benämning på hur allvarlig en konsekvens är. I rapporten finns fyra<br />

konsekvensgrader; katastrof, kritisk, marginell och obetydlig. Se kapitel<br />

2.2.1 <strong>för</strong> generella definitioner och kapitel 2.3.1 <strong>för</strong> definitioner anpassade<br />

till ett börssystem.<br />

Kritisk Definition på konsekvensgrad i riskanalysen, se Tabell 2-3.<br />

Mäklare Person som handlar värdepapper <strong>för</strong> någon annans räkning.<br />

Marginell Definition på konsekvensgrad i riskanalysen, se Tabell 2-3.<br />

Matchning Säljare och köpare kommer överens om en affär i ett värdepapper samt pris<br />

och andra villkor. I de fall då handeln går via en elektronisk börs sker<br />

matchningen automatiskt utan säljaren eller köparens inblandning.<br />

Bilaga D<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 121(124) Industriella informations och styrsystem


Obetydlig Definition på konsekvensgrad i riskanalysen, se Tabell 2-3.<br />

Option Avtal som sluts ögonblickligen där avtalet ger optionsinnehavaren rättighet<br />

till framtida köp eller <strong>för</strong>säljning av en underliggande vara. För denna<br />

rättighet betalar optionsspekulanten en premie till den som tar på sig<br />

skyldigheten <strong>att</strong> köpa eller sälja.<br />

Orakel Ett orakel är något som beslutar om resultatet av ett testfall är korrekt eller<br />

inte. Oraklet kan vara t.ex. en människa men båstår oftare av en automatisk<br />

och datoriserad beslutsväljare. Ett effektivt orakel är särskilt viktigt då<br />

många automatiska tester ska ut<strong>för</strong>as.<br />

Order En beställning av köp eller <strong>för</strong>säljning av värdepapper.<br />

Orderbok Innehåller samtliga order i ett visst värdepapper, sorterade efter pris och<br />

tid.<br />

Prisspread Skillnaden mellan köp- och säljkurs <strong>för</strong> ett specifikt värdepapper.<br />

Risk Med begreppet risk avses kombinationen av sannolikheten <strong>för</strong> <strong>att</strong> en<br />

incident inträffar och konsekvensgraden av den inträffade incidenten, se<br />

Figur 2-3.<br />

Robusthet Grad av kraschbenägenhet.<br />

Säkerhetskritisk bransch Företag inom säkerhetskritiska branscher utvecklar system som på något<br />

sätt kan utgöra fara eller få allvarliga konsekvenser <strong>för</strong> människan eller<br />

samhället. Farorna kan vara både av fysisk eller ekonomisk karaktär.<br />

Stub Ersätter underordnade moduler som krävs <strong>för</strong> <strong>att</strong> en funktion ska kunna<br />

kompileras. Stubs är vanliga vid top-down integration, se kapitel 3.2.5.<br />

Termin Avtal om köp eller <strong>för</strong>säljning av en underliggande vara vid en bestämd<br />

tidpunkt i framtiden, till ett i <strong>för</strong>hand bestämt pris. Båda parter är skyldiga<br />

<strong>att</strong> fullfölja avtalet.<br />

Tps-nivå<br />

Transaktioner per sekund. Antalet transaktioner som behandlas av systemet<br />

per sekund.<br />

Transaktion Order som läggs eller ändras i systemet. Kan t.ex. innebära <strong>att</strong> en köporder<br />

läggs in i systemet men också samtliga <strong>för</strong>ändringar som berör<br />

ordern under dess behandling.<br />

Validering Kontroll av <strong>att</strong> systemet överensstämmer med beställarens <strong>för</strong>väntningar.<br />

Verifiering Kontroll av <strong>att</strong> det finns en överensstämmelse mellan varje steg i<br />

utvecklingskedjan.<br />

Värdepapper Det som handlas på börsen. Kan t.ex. vara aktier, obligationer, konvertibler<br />

och warrants.<br />

Warrant En option som sträcker sig under en längre tidsperiod.<br />

Bilaga D<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 122(124) Industriella informations och styrsystem


Referenser<br />

Böcker och Paper:<br />

[Bei90] Beizer, B: Software Testing Techniques, Van Nostrand Reinhold, 1990.<br />

[Bei95] Beizer, B: Black-Box Testing, John Wiley & Sons, 1995.<br />

[Bei97]<br />

[Bow93]<br />

[Bra00]<br />

[Fri95]<br />

Beizer, B: Cleanroom Process Model: A Critical Examination, IEEE, 1997.<br />

Bowen, J och Stavridou, V: Safety-critical systems, formal methods and standards,<br />

Software Engineering Journal, 1993.<br />

Br<strong>att</strong>eby-Ribbing, I: Handbok <strong>för</strong> Programvara i säkerhetskritiska tillämpningar, FMV,<br />

2000.<br />

Friedman, M. Voas, J: Software Assessment, John Wiley & Sons, 1995.<br />

[Gar99] Gardiner, S: Testing Safety-Related Software, Springer, 1999.<br />

[Gil93] Gilb, T: Software Inspection, Addison-Wesley, 1993.<br />

[Glu98]<br />

[Gra98]<br />

[Ham94]<br />

[Hat97]<br />

Gluch, D.S och Weinstock, C.B: Model-Based Verification: A Technology for Dependable<br />

System Upgrade, Software Engineering Institute, 1998.<br />

Graver, T.l, Harrold, M.J, Kim, J.M, Porter, A, Rothermel, G: An Empirical Study of<br />

Regression Test Selection Techniques, IEEE, 1998.<br />

Hamlet, R: Random testing, Wiley, 1994.<br />

H<strong>att</strong>on, L: N-Version Design Versus One Good Version, IEEE, 1997.<br />

[Hei97] Heiser, J.: An Overview of Software Testing, IEEE, sid 204-211, 1997.<br />

[Joh96] Johansson, E.: Safety-Critical Control System – The Challenge of Migrating from<br />

Hardware to Software, part B, Industrial Control Systems, 1996.<br />

[Jon96] Jones, C: Applied Software Measurement, McGraw-Hill, 1996.<br />

[Kan93] Kaner, C, Falk J, Quoc Nguyen H: Testing Computer Software, Sec. Edition, Van<br />

Nostrand Reinhold, 1993.<br />

[Kee95]<br />

[Kni90]<br />

Keene, S: Software Safety Initiatives, Quality and reliability engineering international, vol<br />

11, 1995.<br />

Brilliant, S.S. Knight, J.C. Leveson, N.G.: Analysis of Faults in an N-Version Software<br />

Experiment, IEEE Transactions on Software Engineering. Vol. 16 No 11, 1990.<br />

[Lev95] Leveson, N: Safeware: System Safety and Computers, Addison-Wesley, 1995.<br />

[Lit87]<br />

[Lit94]<br />

Littlewood, B: Software Reliability, Blackwell Scientific Publication, 1987.<br />

Littlewood, B: Learning to Live with Uncertainty in our Software, Centre for Software<br />

Reliability, City University Northampton Square, IEEE, 1994.<br />

[Lun99] Lundahl, S: Utredningsmetodik <strong>för</strong> samhällsvetare och ekonomer, Studentlitteratur, 1999.<br />

[OMy99] OM Gruppen: Årsredovisning 1999.<br />

Bilaga D<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 123(124) Industriella informations och styrsystem


[Per95] Perry, W: Effective Methods for Software Testing, John Wiley & Sons, 1995.<br />

[Pre97] Pressman, R.S: Software Engineering – A Practitioner´s Approach, Fourth Edition,<br />

McGraw-Hill, 1997.<br />

[Rap82] Rapps, S och Weyuker, E.J: Data flow analysis techniques for test data selection. Sixth<br />

International Conference on Software Engineering, Tokyo, Japan, 1982.<br />

[Sco95] Scott, J.A: Testing existing software for safety-related applications. Revision 7.1,<br />

Lawrence Livermore National Lab. 1995.<br />

Internet:<br />

[wwwFK] http://www.v<strong>att</strong>enfall.se/webb99, Säkerhet i tre nivåer <strong>för</strong> kärnkraftsanläggningar.<br />

Standarder:<br />

[IEC 61508] Functional Safety of PE Safety-related Systems, IEC, 1996.<br />

[RTCA/DO-178B] Software Consideration in Airborn Systems and Equipment Certification, RTCA,<br />

1992.<br />

Studiebesök:<br />

Datum Plats Kontaktperson 1<br />

010330 Saab, Linköping Johan Enhagen<br />

010405 SKI, Stockholm Bo Liwång<br />

010410 Forsmarks kärnkraftverk M<strong>att</strong>ias Hansson<br />

1 Under studiebesöken på Saab och Forsmarks kärnkraftverk <strong>för</strong>des diskussioner med ett flertal personer.<br />

Bilaga D<br />

__________________________________________________________________________________________<br />

Stefan Särd och Dag Wester 124(124) Industriella informations och styrsystem

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!