Tekniker för att testa mjukvara - AddQ
Tekniker för att testa mjukvara - AddQ
Tekniker för att testa mjukvara - AddQ
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