OnTime nr 1 2003 - Combitech.se
OnTime nr 1 2003 - Combitech.se
OnTime nr 1 2003 - Combitech.se
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