Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Kvanttitietokoneen käyttö ohjelmistojen testaamiseen

Jaska [29.06.2017 12:12:38]

#

Jos onnistuttaisiin rakentamaan kvanttitietokone, niin voisiko sillä löytää helposti kaikkien ohjelmien bugit ihan vaan testaamalla ohjelman suoritus kaikilla mahdollisilla syötteillä? Tai voisiko ohjelmat todistaa virheettömiksi brute forcella?

groovyb [29.06.2017 15:26:53]

#

Mitä tulee ohjelmien testaamiseen, siihen on ihan olemassaolevia mekanismeja nytkin. Lähtökohtaisesti oli kenttä mikä tahansa, aika pitkälle pärjää hasValue, minimi, maksimi, numeraali, range 0-100 jne -tarkastuksilla. Mikäli haluttu arvo on jokin spesifi, ei yleensä kauaakaan mene tarkistusten tekemiseen ellei arvossa itsessään ole useita laskennallisia tarkistusmerkkejä joita tarkistetaan vaihe vaiheelta. Jos epäilet riskiä validointisi tarkkuuteen, suosittelisin ajamaan näitä validointeja vastaan vaikka laajoja yksikkötestejä, joissa tarkistat asian. Mitä tarkempi speksi, sitä tarkemmin voidaan tehdä validoinnit. Se, ajetaanko testejä kvanttitietokoneella vai tavallisella, on mielestäni aika turha. Kyllä ne syöteviat löytyy aika helposti tavallisilla yksikkötesteilläkin. Esimerkiksi pelien syötetestaus onkin sitten eri asia, kun syöte voi olla vaikka asentotietoa virtuaalilaseista. siinä syöte voi olla validi vain tietyn hetken tietyssä tilanteessa.

Mutta otetaan nyt vaikka esimerkiksi se hetu validoinneista esimerkiksi.

Step 1: Onko merkkejä oikea määrä (11)
Step 2: Onko seitsemäs merkki validi (-+aA)
Step 3: onko loppuosan ensimmäiset kolme merkkiä validi (002–899, jos tilapäisiä ei tueta)
Step 4: Tarkistetaan viimeinen merkki (tarkistusmerkki) loppuosasta. Mikäli lopputulos on välillä 0-30, ok
Step 5: Tarkistetaan, onko annetun hetun tarkistusmerkki sama, kuin mikä on laskettu hetun loppuosasta.

Bugeista sen sijaan, kaikki bugit eivät liity syötteisiin. Esimerkiksi ulkoasulliset bugit eivät ilmene välttämättä suoraan syötteitä antamalla. Näitä varten on olemassa hyvksyntätestit (acceptance tests), joissa voit tarkistella sovellusta käyttäjän näkökulmasta käyttäjätarinoilla, ja tarkistaa onko tarvittavat palikat näkyvissä, ja että tiettyjen syöttöjen ja toimintojen jälkeen näkyy seuraavat palikat ja tekstit. Tämä nyt oli karrikoitu esimerkki tietenkin. Erikseen sitten tietoturvatestaus, jossa tarkistetaan että tällä hetkellä tiedossa olevat haavoittuvuudet (vaikka nyt esimerkiksi OWASP Top 10) on testatusti tarkastettu.

Brute Force periaatteessa testaa tietysti myös syötekentän haavoittuvuudet, jossain vaiheessa se arvo on vaikka XSS scripti, sql injektio tai vaikka binäärivalokuva kissasta. Onko se järkevää on sitten asia erikseen.

Grez [29.06.2017 16:25:15]

#

Vaikka olisi 8 miljardin bitin kvanttitietokone, jolla siis pystyisi kerralla testaamaan kaikki syötteet gigatavuun asti, niin toimii oikein / väärin arviointi ei ole yhtä yksinkertaista kuin vaikkapa lukua tekijöihin jaettaessa.

Metabolix [29.06.2017 16:31:39]

#

Teoriassa kvanttitietokoneella ehkä voisi saada vastauksen kysymykseen, onko olemassa syöte, jolla ohjelma tuottaa jonkin tietyn tuloksen. Tästä on silti paljon matkaa bugien löytämiseen, koska pitäisi vielä määritellä, mikä se virheen osoittava tulos on.

Kaatumisia voisi ehkä löytää (tosin niitä voi etsiä nykyisilläkin menetelmillä), mutta logiikkavirheitä ei voi koneellisesti löytää, koska kone ei tiedä, mikä tulos on ”oikea” ja mikä ”väärä”.

Esimerkiksi seuraavassa koodissa on selvä bugi: ohjelma tulostaa lukujen erotuksen, vaikka ohjelman pitäisi tulostaa summa. Silti tietokoneen näkökulmasta ohjelma toimii aivan oikein. Eihän edes ihminen voi varmasti tietää, onko ohjelmaan tehty tarkoituksella tällainen jekku.

x = 12
y = 45
print("%d + %d = %d" % (x, y, x-y))

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta