Bättre sätt att hitta buggar

​Programvara blir allt viktigare överallt i samhället. Det betyder att konsekvenserna och kostnaderna vid programfel kan bli skrämmande höga. Det var ren nyfikenhet och experimentlust som fick forskare på Chalmers att utveckla testverktyget QuickCheck. Nu används det av stora företag för att hitta och åtgärda allvarliga buggar i programvara innan den släpps.

​Programfel beräknas kosta över en biljon dollar varje år i hela världen. Det kan vara ett av skälen till att företag som utvecklar programvara ägnar hälften av tiden åt testning. Forskning om nya testmetoder för programvara leder inte bara till bättre och effektivare testning. Dessutom är det roligt. Åtminstone enligt professor John Hughes vid institutionen för data- och informationsteknik. Han är en av hjärnorna bakom det som kallas egenskapsbaserad testning. 

– Du jobbar inte med ett testfall i taget utan med hela familjer av testfall. Du tänker inte på vilken nytta din kod kan ha för den här indatan utan vad den skulle kunna ha för allmän effekt. Det är bara en högre abstraktionsnivå. Därför är en av styrkorna med egenskapsbaserad testning att den faktiskt är väldigt rolig att hålla på med.

Vid traditionell testning av programvara måste varje testfall utvecklas individuellt. Det är en väldigt omfattande manuell process, även om körningen av testerna är automatiserad. Vid egenskapsbaserad testning specificerar programutvecklaren allmänna egenskaper som programvaran ska kunna uppvisa i många olika fall. Sedan väljs exempelfall för att testa de egenskaperna automatiskt. Därför går det fort att köra ett stort antal tester och att hitta fler buggar.

– Och när det finns buggar dröjer det inte några veckor att hitta dem från att man skrivit koden. Du hittar dem bara så här, säger John och knäpper med fingrarna.

– Du ser ett exempel på buggen och inser något du inte hade tänkt på. Sedan kan du gå tillbaka och fixa koden medan du har den i färskt minne.

Video: John Hughes förklarar funktionell programmering

John har ägnat nästan tjugo år åt att utveckla idén med egenskapsbaserad testning. Tillsammans med Koen Claessen utvecklade han det första verktyget för egenskapsbaserad testning, QuickCheck, som bygger på öppen källkod. Det följdes av en kommersiell version som utvecklades av Johns företag Quviq. Men framgången var ingen självklarhet. Om det inte hade varit för att John är nyfiken och hade befunnit sig i rätt rum vid rätt tidpunkt hade idén kanske inte fått samma slagkraft.

Rätt idé i rätt rum

1999 hade John Hughes just klarat en viktig deadline för sin forskning. Han beskriver det själv som att han var ”helt slutkörd”. Han hade ingenting brådskande han måste göra och började leka med några idéer.

– Jag satt bara och hackade på mitt rum. En idé jag hade var att skriva egenskaper och sedan generera slumpmässig indata och kanske kunna upptäcka vilka som var falska.

Just då knackade Koen Claessen, som var doktorand på Johns institution, på dörren och frågade vad John pysslade med. Koen förslog olika sätt att förbättra idén, och nästa dag kom han med lite kod som han hade skrivit.

– Jag använde den, fortsatte hacka och gjorde en ny version som jag visade Koen, och så höll vi på. Vi jobbade på idén tillsammans, och i slutet av veckan hade vi en första grundversion i gång”, berättar John.

De skrev gemensamt en artikel om forskningen. Den refuserades först men publicerades sedan 2000 vid ICFP,  International Conference on Functional Programming. Tio år senare mottog de utmärkelsen Most Influential Paper på samma konferens.

– Det är ganska lustigt. Nu är artikeln den mest citerade från ICFP någonsin, tillägger John.

Idén accepterades vetenskapligt, men det var först vid ett möte 2005 med programkommittén hos SSF, som finansierade deras forskning, som John Hughes verkligen insåg vilken viktig metod de hade skapat. Stiftelsen bad forskarna presentera sitt arbete för företrädare för svensk industri. I rummet fanns både Johns första kund och en av Sveriges ledande entreprenörer. John inledde sin presentation med en kort demonstration av QuickCheck-verktyget innan han förklarade övriga delar av sitt pågående forskningsprojekt.

– Efter presentation sade Mike Williams från Ericsson bara "den där QuickCheck-grejen vill vi ha".

Även serieentreprenören Jane Walerud fanns på plats. Hon såg idéns potential och rekommenderade starkt att John skulle starta ett företag baserat på QuickCheck.

– Jag tyckte det var väldigt spännande. Jag hade hållit på med min forskning länge och ville att den skulle få industriellt genomslag. Det här var en möjlighet att lyckas med det.

Följden blev att John Hughes och hans kollega Thomas Arts grundade företaget Quviq AB med syftet att utveckla, licensiera och sälja tjänster kring den kommersiella versionen av QuickCheck. Under de följande tio åren hjälpte företaget kunder inom telekom, fordonsindustrin, sjukvården, blockkedjeteknik, onlinespel och andra internettjänster att hitta buggar i deras programvara.

Forskning som sätts i arbete

Den första kommersiella applikationen av QuickCheck var hos Ericsson 2006, för deras produkt Media Proxy. Flera buggar hittades, bland annat en som var tämligen bisarr men som visade styrkorna hos egenskapsbaserad testning. Buggen utlöstes genom att två uppringare först lades till i ett multimediasamtal, sedan togs en bort och en annan lades till, därefter togs den tredje bort och en fjärde lades till, sedan togs den fjärde bort, och då kraschade produkten.

– Ett så ovanligt specifikt scenario skulle aldrig tas med i en handskriven uppsättning tester. QuickCheck upptäckte däremot inte bara detta scenario utan även ett allvarligt underliggande fel som innebar att data korrumperades varje gång en uppringare togs bort från ett samtal, berättar John.

Tack vare detta blev Ericsson en långvarig kund hos Quviq.

2010 jobbade personal från Ericsson hos betalningslösningsföretaget Klarna. De hade ägnat sex veckor åt att försöka förstå varför huvudservern kraschade gång på gång med några månaders mellanrum. Det var Ericsson som ansvarade för den felande komponenten som orsakade krascherna, och efter varje krasch måste databasen återställas från en säkerhetskopia, en process som tog flera timmar varje gång. Efter flera veckors sökande efter den vid det laget ökända buggen i databasen Mnesia kontaktade Ericsson Quviq.

– Vi kunde utlösa buggarna i databasen med högst sex funktionsanrop. När dessa enkla testfall hade hittats kunde Ericsson åtgärda varenda bugg på mindre än en dag, säger John.

Under de senaste två åren har Quviq samarbetat med företaget IOHK, som står bakom den trettonde största kryptovalutan, Cardano. Blockkedjan byggdes till en början upp av konsulter, men när den var igång insåg IOHK snabbt att det fanns kvalitetsproblem med koden. Quviq togs in för att hjälpa till att utbilda de 25 utvecklarna, som redan använde QuickCheck. Fel hittades i en av blockkedjans viktigaste funktioner, tilldelningen av nya block, som används för registreringen av transaktioner. För Cardano fastställs detta genom något som kallas bevis för insats, PoS (proof of stake).

–  Du har ett antal personer som är kandidater för nästa block, du väljer ut någon som och valet ska stå i proportion till kandidaternas insatser. Vi upptäckte att det inte fungerade så, på grund av den dåliga testningen. Avvikelsen av proportionaliteten var så liten att den inte var signifikant, men det ansågs ändå vara en allvarlig bugg eftersom en så viktig funktion påverkades. Nu har de förbättrat sin testning rejält, tack vare vårt samarbete, och de kan koppla funktionen direkt till den teori som blockkedjan bygger på.

Egenskapsbaserad testning har visat sig vara lite svårare än normal testning och kräver testare som har fått grundlig utbildning.

– Men om du har det skulle jag påstå att du sparar massor av tid och får kod av mycket högre kvalitet, säger John.

För honom har syntesen mellan forskning och företagande varit givande.

–  Det är fantastiskt att se sin forskning användas i praktiken ute hos kunder. Då inser du vad som fungerar bra och vad som behöver förbättras. Det gillar jag verkligen!


Sidansvarig Publicerad: to 31 okt 2019.