Donald Knuth ei kai aina testannut koodiaan vaan todisti sen oikeaksi. Missä oppisi tällaista testaamista välttävää ja todistamiseen perustuvaa ohjelmointia? Olen koulutukseltani matemaatikko ja ajattelin, että voisiko minulla olla annettavaa IT-alalla todistamisen puolella. Vai onko koodin todistajia jo tarpeeksi? Ei kai, kun äskettäin oli juttua prosessorien bugeista.
Miten koodia todistetaan bugittomaksi?
matemaatikkomies
174497
0Äänestä
Muut lukivat myös
Odottaa vastausta
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
Vastaukset 17
Vanhimmat
Näin: https://fi.wikipedia.org/wiki/Matemaattinen_todistus
Koodia ei useinkaan todisteta oikeaksi kustannussyistä. Prosessorit on niitä joissa sitä todistusta juurikin tehdään mutta onnistuivat sössimään kun siellä semmoiset liukuhihnat ja tilat, ja homma menee juuri siinä kohtaa hankalaksi jos on jotain tiloja jossain joita pitää huomioida.
Parasta varmasti todistaa debuggaamalla koodi bugittomaksi.
Mielivaltaisen koodin todistaminen oikeaksi on ratkeamaton, undecidable, ongelma matemaattisesti. Käytännössä esim suuria mikropiirejä on onnistuttu verifioimaan logiikalla. Mutta tuo tutkimus on liikesalaisuuden alla.
Tuosta syystä en tule koskaan hyppäämään kuskittoman itseajavan kulkuneuvon kyytiin.
Ihminen ei osaa tehdä täydellistä poikkeuksenkäsittelijää.
"Mielivaltaisen koodin todistaminen oikeaksi on ratkeamaton, undecidable, ongelma matemaattisesti."
Ei ole.
Koodi voidaan todistaa oikeaksi ja sellaiseksi, että tietyt virheet ovat mahdottomia mutta se mikä on se haastavuus on se, että mistä saadaan oikea määrittely.
Aina tarvitaan sitä inputtia myös määrittelyksi, että niin kauan kun määrittely on oikein, saadaan toteutuskin oikein.
"Käytännössä esim suuria mikropiirejä on onnistuttu verifioimaan logiikalla. Mutta tuo tutkimus on liikesalaisuuden alla."
Kyllä logiikalla tehtävävä verifiointi on hyvin tunnettua.
Kun koodia todistetaan oikeaksi, on aika tavallista, että ei jouduta käsittelemään poikkeuksia.
Että et joutuisi poikamieslihasta kättelemään, sido se jeesusteipillä reiteen, riittävän tiukasti, hypotermian varalta putsaa vanhat savet puntista pois.
"Ihminen ei osaa tehdä täydellistä poikkeuksenkäsittelijää."
mutta kuitenkin paremman ja nopeamman kuin mitä itse on..
Voidaan myös todistaa että useimpia poikkeuksia ei ole mahdollista tulla joten niitä ei myöskään tarvitse käsitellä.
Uskoisin,+että+yli+90%+kaikesta+koodista+on+bugista+-+jollakin+tavalla.
Tämä+on+todellakin+hämmentävää+mielestäni+mutta+ymmärrän+koodaajia+-+heidän+on
pakko+tehdä+tulosta+nopeasti+ja+käytännöksi+on+vakiintunut+erilaiset+jälkeenpäin+pätsäykset,
eli+kun+koodi+julkaistaan,+sen+arvellaankin+olevan+bugista+ja+sitten+tulee+pätsejä+ja+taas+pätsejä.
Sitä+se+on+kun+pitää+saada+nopeaa+tulosta..
"Uskoisin,+että+yli+90%+kaikesta+koodista+on+bugista+-+jollakin+tavalla."
Enemmän.+Lähes+100%.+Vain+harvoin+halutaan+bugitonta+koodia.+Sen+haluamisen+päättää+se+kuka+rahoittaa+koodin+tekemisen.
"Tämä+on+todellakin+hämmentävää+mielestäni+mutta+ymmärrän+koodaajia+-+heidän+on
pakko+tehdä+tulosta+nopeasti+ja+käytännöksi+on+vakiintunut+erilaiset+jälkeenpäin+pätsäykset,
eli+kun+koodi+julkaistaan,+sen+arvellaankin+olevan+bugista+ja+sitten+tulee+pätsejä+ja+taas+pätsejä."
Ei+pätsäykset+tarkoita+välttämättä+mitään+bugia.+Ennemminkin+kyse+on+siitä,+että+ohjelmia+ei+käsitetä+olevan+mitenkään+muuttumattomia+vaan+jatkuvassa+muutoksessa.
Kyllähän sitä yleensä halutaan bugitonta koodia, mutta budjetti asettaa rajan sille, mille tasolle käytännössä päästään.
Harvapa sitä haluaa varta vasten bugista koodia . . .
No sehän se kun ei ole maksuhaluja.
Jokainen saa kyllä vapaasti tehdä itse bugitonta koodia.
Prosessorien verifiointia tehdään usein SAT-ratkaisijoilla (SAT Solvers):
www.satlive.org
Mitenkähän tieteessä? Kuulemma ainakin tilastolliseen päättelyyn saa vain käyttää jollain tapaa "standardoituja" ohjelmistoja. Aika moni tieteilijä on todella pedanttinen ja tarkka. Onko tieteen tekemisessä koodi virheetöntä?
Ei siellä mitään standardointia ole sovelluksissa. Ohjelmointikieliä on standardointu ja niillä voi sitä tilastollista päättelyä ohjelmoida ja silloin sitä ihan itse voidaan huolehtia että koodissa ei ole bugeja.
Ohjelmointikielten totetuksissa voi tietysti olla bugeja, onhan sitä kääntäjäbugejakin olemassa. Aika olennaista on pitää se oma koodi selkeänä niin noihin ei käytännössä törmää. Niillä kuitenkin ajetaan kaikennäköistä koodia valtavia määriä. Joitakin ohjelmointivälineitä on kyllä perusteellisesti varmistettu riittävän laadukkaiksi että niitä voidaan käyttää sairaalavehkeissä tai lentokoneissa. Niissä nimittäin on vaatimuksia koodin laadulle, tieteen tekemisessä ei ole.
Itseasiassa tieteentekemisessä tilanne on usein päinvastoin mitä tulee koodin laatuun. Tieteentekijät yleensä vain kyhäisee jotain kasaan mikä tekee jotain uutta ja jännää ja lopputulos on kyllä helposti ihan kuraa. Sovellusohjelmoijat yleisesti ottaen tekevät paljon laadukkaampaa koodia ja varsinainen ohjelmistokehitys vähän vaativampaa.
Näitä sanotaan formaaleiksi menetelmiksi.