01.09.2013 Views

OnTime nr 1 2003 - Combitech.se

OnTime nr 1 2003 - Combitech.se

OnTime nr 1 2003 - Combitech.se

SHOW MORE
SHOW LESS

Create successful ePaper yourself

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

Kom igång med prediktions-<br />

och evolutionsmodeller<br />

Det behöver inte vara svårt att<br />

komma igång med prediktions- och<br />

evolutionsmodeller. Med ganska enkla<br />

medel kan man uppnå användbara<br />

resultat. Men det gäller att i förväg<br />

tänka igenom vad man vill uppnå.<br />

Största delen av dagens mjukvaruprojekt är i<br />

huvudsak vidareutveckling av befintlig mjukvara,<br />

där man utökar funktionaliteten eller<br />

uppdaterar den mot nya standarder. Många<br />

projekt utvecklas inkrementellt, vilket också<br />

kan <strong>se</strong>s som en form av vidareutveckling.<br />

Skillnaden mot att nyutveckla ligger i att<br />

strukturer och beroenden till viss del finns på<br />

plats och man måste anpassa sig och bygga<br />

efter dessa. Detta resulterar i att man hela<br />

tiden får med sig ett “arv” från de äldre<br />

delarna, med allt vad detta innebär.<br />

Förutsättningarna för vidareutvecklingen<br />

bestäms redan på ett tidigt stadium i projektet.<br />

Även om man utvecklar inkrementellt är<br />

det lätt att glömma och hålla all vä<strong>se</strong>ntlig information<br />

i huvudet. Bra dokumentation av systemet<br />

och dess arkitektur underlättar därför.<br />

Tyvärr är inte dokumentationsnivån den<br />

önskvärda i alla projekt. Många organisationer<br />

hamnar därför i en situation där man<br />

efterhand som man bygger vidare på systemet<br />

spenderar mer och mer tid på att rätta fel<br />

som uppkommer. Situationen kan även vara<br />

den att man släpper nya versioner av mjukvaran<br />

efterhand som man rättar problem man<br />

har funnit. I slutänden är det oftast bara ett<br />

fåtal fel kvar, men dessa är oftast väldigt<br />

svåra att handskas med på grund av olika<br />

anledningar. Oftast är det bara en delmängd<br />

av komponenterna som skapar de största<br />

problemen, och man har en känsla för vilka<br />

de är. Det är lätt att bli förblindad av dessa<br />

och förbi<strong>se</strong> komponenter som inte utmärker<br />

sig men som ändå kan vara problematiska.<br />

Prediktion och evolution<br />

Hur ska man då hantera dessa komponenter<br />

och hur kan man på ett tidigt stadium agera<br />

för att undvika problem längre fram i utveck-<br />

Nr 1 mars <strong>2003</strong><br />

<strong>Combitech</strong> Systems AB<br />

lingen? Att arbeta preventivt kan låta självklart,<br />

men är inte alltid enkelt om man inte<br />

vet var man ska börja. Om man redan har<br />

hamnat i en nedåtgående spiral av ständiga<br />

rättningar och uppdateringar kan man behöva<br />

hjälp. Ett hjälpmedel för att foku<strong>se</strong>ra sina<br />

resur<strong>se</strong>r (till exempel granskningar och test)<br />

på de mest problematiska komponenterna är<br />

prediktionsmodeller. Dessa kan användas i<br />

förebyggande syfte för att tidigt peka ut komponenter<br />

som är på väg att bli problematiska.<br />

Beroende på hur de appliceras, och med vilka<br />

förutsättningar, kan de användas i både kortoch<br />

långsiktigt syfte.<br />

När man arbetar med prediktionsmodeller<br />

finns det två avvägningar man måste ta hänsyn<br />

till, förhållandet mellan hur lättanvänd<br />

och hanterbar den ska vara kontra hur exakt<br />

prediktionen ska bli. Man måste även ha en<br />

bra uppfattning om vad syftet med modellen<br />

är för att den ska bli ändamål<strong>se</strong>nlig.<br />

Datainsamling<br />

Grunden för att bygga modeller är tillgången<br />

till data från mjukvaran och proces<strong>se</strong>n samt<br />

om resur<strong>se</strong>rna. Många organisationer ställs<br />

ofta inför dilemmat att inte ha en såpass<br />

utvecklad process att data samlas in kontinuerligt.<br />

Detta behöver inte hindra byggandet<br />

och användandet, då man oftast med en relativt<br />

enkel insats kan samla in nödvändig<br />

information. Det är ett av de ställningstaganden<br />

man måste göra när det gäller avvägningen<br />

mellan användbarhet och prediktionsprecision.<br />

Oftast finns möjlighet att på ett<br />

smidigt sätt inhämta data från befintliga<br />

verktyg och proces<strong>se</strong>r. Man kan till exempel<br />

från versionshanteringsverktygen extrahera<br />

information om komponenterna som ingår i<br />

systemet, hur ofta det har gjorts ändringar i<br />

dem och vilka ändringar som har gjorts.<br />

Vidare kan man nyttja informationen i tidrapporteringssystemen<br />

för att <strong>se</strong> hur mycket tid<br />

som har använts till olika aktiviteter.<br />

Ett fel man bör undvika för att ge en rättvisande<br />

prediktion är att samla in data från de<br />

<strong>se</strong>na processfa<strong>se</strong>rna. Till exempel bör man<br />

AV MAGNUS OHLSSON<br />

inte samla in information om hur mycket tid<br />

man har lagt på att testa olika komponenter,<br />

för att prediktera hur felintensiva de är. Det<br />

är dock rimligt att göra detta om man vill<br />

arbeta med evolution eller prediktion för<br />

nästa relea<strong>se</strong>. Istället bör man foku<strong>se</strong>ra på att<br />

använda sig av data från till exempel designfa<strong>se</strong>n.<br />

Man måste ha klart för sig vad syftet<br />

med modellen är och vilken information som<br />

är relevant att samla in. När det gäller prediktions-<br />

och evolutionsmodeller finns ett<br />

antal måttyper som man bör foku<strong>se</strong>ra på:<br />

• Storleksmått<br />

Till exempel rader kod eller antalet if-sat<strong>se</strong>r.<br />

Antalet if-sat<strong>se</strong>r (och även vissa andra mått)<br />

kan <strong>se</strong>s som ett storleksmått eftersom antalet<br />

bidrar till storleken. En annan möjlighet<br />

är att använda dem som strukturmått.<br />

• Strukturmått<br />

Cyklomatisk komplexitet, mängden modifierad<br />

kod och interface-karakteristika är<br />

exempel på strukturmått. Mängden modifierad<br />

kod kan <strong>se</strong>s som ett strukturmått med<br />

av<strong>se</strong>ende på att det indikerar mängden<br />

strukturella förändringar i koden.<br />

• Processmått<br />

Till exempel frekven<strong>se</strong>n för vissa aktiviteter<br />

i olika utvecklingsfa<strong>se</strong>r, eller tiden att utföra<br />

vissa förändringar.<br />

• Feldata<br />

Klassificering av olika fel och antalet fel<br />

funna i olika fa<strong>se</strong>r är exempel på olika<br />

typer av feldata.<br />

Alla dessa mått kan dessutom kombineras för<br />

att få fram andra intressanta, så kallade indirekta,<br />

mått. Det är till exempel möjligt att<br />

kombinera antalet funna fel med antalet<br />

rader kod för att räkna ut feldensiteten. Detta<br />

mått kan i sin tur <strong>se</strong>dan kombineras med<br />

mängden modifierad kod i olika komponenter<br />

för att ta reda på hur förändringarna<br />

påverkar feldensiteten.<br />

En sak som har utelämnats är kvalitativa<br />

19

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!