Gå til hovedindhold
Version2 it for professionelle
Forsiden

Hovedmenu

  • It-nyheder
  • Blogs
  • It-job
  • It-firmaer
  • Whitepapers
  • Opret bruger
  • Log ind
Du kan logge ind med din e-mail-adresse
Der er forskel på store og små bogstaver i adgangskoden.
Glemt adgangskode?
Se kommentarer (5)
Emner Uddannelse

Ny Ph.d-forskning kan gøre programmer beviselige

Matematisk grundforskning kan bringe den dag nærmere, hvor computerprogrammers rigtighed kan bevises. Det gav også en Ph.d. til Bodil Biering fra ITU.

Af Tania Andersen Mandag, 9. juni 2008 - 15:26

Det har været en gammel drøm at kunne bevise, at et computerprogram gør det, det skal. Men indtil videre har det kun kunnet lade sig gøre med meget simple, trivielle programmer.

Ny, dansk forskning kan bringe drømmen lidt tættere på. Bodil Biering, som i sidste uge med succes forsvarede sin Ph.d.-afhandling med titlen "Dialectica Interpretations: a Categorical Analysis," mener, at tiden, hvor rigtige programmer kan bevises, ligger 10 til 20 år ude i fremtiden.

Hendes egen grundforskning er med til at tage et skridt på vejen. I sin afhandling har hun brugt moderne matematik, kategoriteori, til at studere centrale aspekter af programmering og programmeringssprog. Men det vil tage noget tid endnu, inden metoderne kan bruges konkret.

»Det ligger et stykke fra rigtigt programmering. Det er grundforskning, så der går nogle år, før det kan bruges. Jeg har videreudviklet nogle matematiske værktøjer, som andre kan bruge til at bevise korrektheden af programmer - det kan være en del af det,« forklarer Bodil Biering til Version2.dk.

»Det er en måde at oversætte mellem formelle systemer. Det hele er noget syntaks-noget, og derfor er det anvendeligt i datalogi. Håbet er, at man kan lave automatiske værktøjer, som kan bruges i forbindelse med programmering.«

Til daglig er Bodil Biering systemudvikler i et softwarefirma, Edlund A/S, der leverer programmer til forsikrings- og pensionsbranchen. Her programmerer og designer hun i sprog som C# og XML. Før Bodil Biering tog sin Ph.d på IT-Universitet, studerede hun matematik og datalogi på Københavns Universitet.

Send Tweet
Udskriv

IT-job & karriere

  • Se alle it-job
  • Importer din kompetenceprofil fra LinkedIn
.Net/C# udviklere
Udgivet 16. jun 2011 14.34
IT Management konsulenter til Capgemini Business og Technology Consulting
Udgivet 17. feb 15.03
Erfaren BI konsulent til Business Information Management afdeling
Udgivet 8. dec 2011 9.44
Software Development Manager
Udgivet 13. apr 14.06

Kommentarer (5)

Opret en konto eller log ind for at følge indhold på Version2 - og bliv opdateret via e-mail eller rss

Følg kommentarer
Mark Ruvald Pedersens billede
Mark Ruvald Pedersen 9. jun. 2008 - 22.12
 
For godt til at være sandt?

Lyder lovende, men handler det her om Entscheidungsproblem'et (http://en.wikipedia.org/wiki/Entscheidungsproblem) ?

For hvis det gør, lyder det for godt til at være sandt...

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Anonym (ikke efterprøvet) 10. jun. 2008 - 09.15
 
Re: For godt til at være sandt?

[citat]
Lyder lovende, men handler det her om Entscheidungsproblem'et (http://en.wikipedia.org/wiki/Entscheidungsproblem)?
[/citat]
Det handler ikke om det generelle Entscheidungsproblem.
[citat]
For hvis det gør, lyder det for godt til at være sandt...
[/citat]
Jeg går ud fra at du spørger om Entscheidungsproblem'et nu har en generel løsning, hvilket selvføgelig ikke er tilfældet!

Jeg er ikke stærk i kategoriteori, så jeg kan ikke umiddelbart gennemskue hendes tilgangsvinkel ud fra artiklens indhold.

Bemærk dog at bevis af programmers rigtighed allerede kan foretages idag, omend (som artiklen også angiver) kun i begrænset omfang. Jeg har selv været med til at lave systemer, hvor centrale dele bevist værende korrekte. Som programmeringssprog benyttede vi SPARK (http://en.wikipedia.org/wiki/SPARK_programming_language), der understøtter bevisførelse vha. nogle bevisværktøjer.

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Jens Madsen 10. jun. 2008 - 21.00
 
Re: For godt til at være sandt?

Hvis metoden er forkert - er svaret vel forkert?

Selvom et program, er sandt, kan metoden der anvendes, være forkert.

Der er mange egenskaber, ved programmer, som du kan bevise - i nogle tilfælde, kan du konstruere sprog, som umuliggør "dårlige egenskaber", og du har da til dels løst problemet, ved intet ikke beviseligt lader sig formulere. Eller, at det er relativt simpelt at tjekke, f.eks. ved at søge på en ordre (der er bevisligt ulovligt), eller eksempelvis ved sædvanlig type og syntax tjek.

Hvordan skal vi "bevise" om et program - som et operativsystem - er "korrekt". Måske kan vi end ikke blive enige om, hvordan operativsystem deffineres.

Det vi har chancer for at bevise, er at to forskellige beskrivelser af samme problem er identisk. Dette tror jeg dog også er svært.

Vi har mulighed, for at bevise at programmer - såsom parallel problemer, er deterministiske.

Vi har mulighed for at konstruere programmeringssprog, hvor pointere ikke anvendes på sædvanligvis, og er mere nemt at håndtere beviser for, end i C++ og pascal.

Sådanne sprog, vil måske også øge programmets gennemskuelighed? Måske hænger maskninel analyse og menneskers analyseevne sammen på en måde?

Vi anvender ofte metoder, for at bevise eksempelvis hardware. Reelt, kan vi dog kun bevise det, som vi spørger om. Eksempelvis, kan vi bevise, at vores resultat er deterministisk, og ikke afhænger af skev på forsinkelser, på gates, indenfor det deffinerede. Et sådant "bevis" kræver dog i nogle tilfælde alle muligheder gennemgås.

Igen, findes en omvej til beviset: At konstruere metoder, og programmeringssprog, til at deffinere hardwaren, der ikke tillader designeren at gøre noget, som bevisprogrammet netop ikke vil lade ham gøre. Man går altså den modsatte vej - i stedet for at tillade "ulovligt input", konstrueres et sprog, som umuliggør ulovlige konstruktioner.

Og nu er det pludseligt beviseligt.

Samtidigt, kan vi bevise, at der ikke findes noget beskriveligt problem, der ikke kan indtastes - andet end hvis det vi ønsker at indtaste, ikke er lovligt jfr. det vi ønsker at bevise. Det kan så klares, hvis det absolut skal gøres, ved at analysere hvad vi ønsker, og indlægge "ulovlige ordrer". Nu er det stadigt nemt at bevise - en simpel søgning på ulovlige ordrer, fortæller om vores ting er korrekt. Da vi konstruerer sproget, til at det altid vil gå imod beviset, når en sådan ordre anvendes. Ordren skrædersyes simpelthen til, at umuligt være lovlig. Og det vises, at enhver ulovlighed, kan beskrives udfra denne ulovlighed.

Hvis vi har nogen "egenskaber", som vi ønsker at sikre, vores resultat ikke opnår, er den bedste, og mest sikre metode, at anvende et sprog, som kontrueres til, at denne egenskab umuligt kan programmeres. Er dette ikke nok, til vores normale brug, isolerer vi det farlige, og adderer til sproget. Beviset, er nu en slavisk søgning. Og det er nemt at se, hvem der har begået ulovligheden, hvis de "mærkes" med et fingeraftryk, fra programørene.

Så er det bare retsagen som venter.

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Rasmus Villemoes 10. jun. 2008 - 22.45
 
Re: For godt til at være sandt?

D.E. Knuth: ``Beware of bugs in the above code; I have only proved it correct, not tried it.''

(http://www-cs-faculty.stanford.edu/~knuth/faq.html)

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer
Jens Madsen 11. jun. 2008 - 01.14
 
Re: For godt til at være sandt?

Et typisk problem, vi ønsker at kunne bevise, er om et program afslutter - eller går i uendelig løkke.

Først - for at beviset giver mening, må vi kræve, at vores programmeringssprog netop giver mulighed for uendelig løkke, eller rekursion. Antages disse to funktioner for programmeringssproget, at være fjernet, kan det stadigt bruges til bunker af formål, men vi ved, at den umuligt kan gå i løkker, da de ikke findes. Og dermed, er altid et svar, hvis vi venter lang tid nok. Beviset er derfor gjort, på grund af vores programmeringssprogs begrænsninger.

Antages, et "sædvanligt" programmeringssprog, med mulighed for løkker - og ikke mindst uendelige løkker, og uendelig rekursion, samt mulighed for branches osv. så kan vi konstruere et program, der skal løse et problem. I programmet er indprogrammeret et NP problem, med løsningen sandt eller falsk. I tilfælde af sandt, svares ikke, og programmet går i uendelig løkke. Den svarer kun falsk og afslutter så. Kan vi bevise, om programmet afsluttes? Ikke uden, at det er et NP problem. Dog, kan vi analysere den, og sige vi ikke kan garantere for, at den ikke afsluttes. I nogle tilfælde, kan vi bevise programmer - i andre, kan vi ikke. Og det er måske et NP problem, at opdage om programmet afsluttes.

Dette illustrerer måske også idéen i, at udvikle sprog, som ikke har problemet. Dette er et mere sikkert værktøj, der altid fungerer - sammenlignet med en test, der ikke altid kan svare.

Problemet er så kun, hvis sproget "intet kan", eller "ikke kan nok".

Det er ikke altid, at en uendelig løkke, betyder så meget som man umiddelbart tror. Måske analyserer computeren programmet, og arbejder videre med det efterfølgende, hvis det ikke direkte afhænger af resultatet for den uendelige løkke. I princippet kan den uendelige løkke være forkortet bort, fordi at resultatet ikke er brugt. Det interessante er, at når vi lader computeren fortsætte, med det efterfølgende, og køre dette som et andet "task". Vi ved ikke, om vores problem afsluttes, og derfor lader vi computeren kun bruge ledigt tid, som ikke skal bruges på andet, på at løse problemet. Er således andet, kan og vil den fortsætte med dette, meddens problemet sættes nedderst på listen over det som skal bruges tid på. Sædvanligvis, giver dette computeren større svartid. Bruger vi et resultat fra en løkke, fås ikke svar, før computeren har haft tid på at udregne det. Men, det har ikke ødelagt efterfølgende koder, eller sideløbende kode. Måske sletter vi på et tidspunkt skærmen, og er ligeglad med, at feltet ikke er fyldt ud - og så behøver vi ikke at regne det ud. Computeren har måske endog indsét dette, og aldrig udført koden.

Ovenstående er dog ikke et "bevis" for, at uendelige løkker ikke er et problem, fordi at computeren bare fortsætter. Den vil stadigt, anvende resourcer på at løse det umulige. Og derfor, får den væsentligt større forbrug af strøm. Hvor den normalt kunne slappe af, og gå i power down, bruges energien på de umulige opgaver, den stadigt står og kører rundt i. Hastighedsmæssigt, er det dog et mindre problem.

Den måde - som jeg foretrækker - at "bevise" på at et program afslutter, er at kræve hver enkelt programmør opskriver timing specifikationer for deres komponent. Inden for hardware, må du ikke lave en, hvor du ikke angiver timing - både minimum delay, og maksimum delay. Der er simpelthen tekniske data, for hver enkelt komponent. Indenfor software, er analogien store O funktionen. Denne er softwaremandens "timing". Du må ikke lave en funktion, eller blok, uden at angive store O funktioner. Har du store O funktionerne, så du ved alt om, hvilke parametre delays afhænger af i dine moduler, så får du først garanti for at de svarer. Programmøren står inde for det, ved at aflevere store O funktionen.

Vi kan så diskutere, om vi kan bevise den er korrekt. Men problemet, er nu vendt om - fra at programmet skulle stå inde for timingen (store O funktionen), til at skulle bevise den påstulderede funktion, som måske står anført som del af programmeringssproget. Kan et tool undersøge, om påstanden er korrekt, er sproget måske bevist? Atter har vi da et sprog, hvor vi kan føre bevis for at programmet svarer, inden en given tid (komplekstitet). Vi skal måske sætte krav til maksimum kompleksiteten, hvis vi ønsker rimelig svartid. F.eks. en log(n) som maksimum, hvilket svarer til, at vi højst accepterer en "konstant" svartid, og dermed kan sige den svarer indenfor en given tid. Ved n * log(n), skal brugeren gøres opmærksom på dette, ved at procent udregnes, men dette bør undgås, hvis muligt. Brugere hader at vente. Over n * log(n), bør ikke være muligt. Med sådanne krav, kan naturligvis ikke løses alt, men en stor del af software programmer kan løses.

Hvis vi ønsker at bevise noget, må vi vide hvad vi går efter. I nogle tilfælde, kan konstrueres sprog, der gør, at vi er sikker på, at ethvert input, altid overholder vore krav. Hvis et sådant sprog, er nok til at beskrive vore problemer, er det måske det bedste at bruge, for så ved vi, at ingen begår ulovlighed. I tilfælde som "determinisme", kan vi i princippet have sprog, hvor alt som sædvanlige programmer kan gøre er muligt, og hvor vi står inde for determinismen. Dog, er ikke muligt med random. I tilfældet, at garentere, at der er en svartid - da vil et begrænset sprog, ofte give problem.

Det bedste - syntes jeg - er at alle programmører skal stå inde for programmets svartid, og lagerforbrug, og at disse ting dokumenteres i programmer og rutiners tekniske datablade. Bruges en C ordre, kan vi slå op i manualen, og se dens store O funktion. Den står måske også angivet i koden, hvis vi har source.

I mange sammenhænge - hvor brugere og hvemsomhelst skal have adgang til kodning, kan være en fordel at begrænse sproget, således det ikke tillades løkker og rekursion, såfremt dette er nok for brugeren, og de programmører der skal "konfigurere".

  • Stem op 0
  • Stem ned 0
  • Log ind eller opret en konto for at skrive kommentarer

Tilføj kommentar

Opret en konto eller log ind for at følge indhold på Version2 - og bliv opdateret via e-mail eller rss

Følg kommentarer
Log ind herunder eller opret en bruger for at skrive kommentarer
Du kan logge ind med din e-mail-adresse
Der er forskel på store og små bogstaver i adgangskoden.
Glemt adgangskode?

Seneste nyt

Ny blog: Offentlige it-projekter set indefra

Udgivet 24. maj 13.19Opdateret 24. maj 13.25

De 170 fyrede hos IBM Danmark får 30.000 kroner i hånden

Udgivet 24. maj 12.19Opdateret 24. maj 12.19

Google vinder patentsagen om Android: Brød ikke Oracles Java-patenter

Udgivet 24. maj 11.30Opdateret 24. maj 11.30

Danske HP-ansatte er fyringstruede: Indkaldt til stormøde

Udgivet 24. maj 10.37Opdateret 24. maj 11.56

HP fyrer 27.000 ansatte

Udgivet 24. maj 10.10Opdateret 24. maj 10.10

Flere it-nyheder »

Tilmeld dig Version2's it-nyhedsbrev og vind den nye iPad.

Whitepapers

Om eBinder

eBinder ApS

Kick-start your master data management initiative

Affecto Denmark

Affecto Data Quality Assessment: Er din indsigt og beslutning baseret på validt data?

Affecto Denmark

Framework til datamigrering i SAP miljøer - spar op til 50% på dine Data Migration udgifter

Affecto Denmark

Få et Data Warehouse (DW) review hos Affecto

Affecto Denmark
  • Flere whitepapers

Branchenyheder

Konica Minoltas stand på drupa 2012 slog besøgsrekord

Konica Minolta Business Solutions Denmark

Komplex it er blevet Brocade Premier Partner

Komplex IT

Øg din effektivitet og produktivitet med bizhub C654/C754

Konica Minolta Business Solutions Denmark

Brugerfjendtlige it-løsninger gør brugerne til en sikkerhedstrussel

Projectplace

Athena IT-Group A/S med solid indtjening

Athena IT-Group

Seneste debat

  1. GOTO - programming with the stars (F#)

    5 comments.
    Last update 1 minut 9 sekunder
    Skrevet af Jesper Louis Andersen
  2. Oracle tabte, vandt Google Java ?

    12 comments.
    Last update 8 minutter 9 sekunder
    Skrevet af Lars Lundin
  3. HTML5 – det nye sort?

    15 comments.
    Last update 9 minutter 5 sekunder
    Skrevet af Michael Lykke
  4. Danske HP-ansatte er fyringstruede: Indkaldt til stormøde

    1 comment.
    Last update 9 minutter 42 sekunder
    Skrevet af Martin R. Ehmsen
  5. Google vinder patentsagen om Android: Brød ikke Oracles Java-patenter

    1 comment.
    Last update 47 minutter 44 sekunder
    Skrevet af Thomas Løcke
  6. Sådan formaterer du tekst i debatten på Version2

    34 comments.
    Last update 1 time 2 minutter
    Skrevet af Jesper Lund Stocholm
  7. Kynisk it-guru: »Internettet er basalt set noget lort«

    5 comments.
    Last update 1 time 10 minutter
    Skrevet af Henrik Mikael Kristensen
  8. EMC: Derfor skal du undgå både public og privat cloud

    2 comments.
    Last update 2 timer 7 minutter
    Skrevet af Jesper Grønbæk

Mere debat »

It-virksomheder

Deltek Danmark
|
NetDesign
|
Rehfeld
|
Intelliglobe
|
Reload!
|
SMSnu.dk
|
Zap Technology
|
Raxco Scandinavia
|
Avenida
|
Sharkcell
|
ITX
|
EVRY Danmark A/S
 

Information

  • Kontakt redaktionen
  • Job- og annoncesalg
  • Teknisk support
  • Om Version2
  • Brugerbetingelser
  • Privatlivspolitik

Aktuelle emner

  • Agil udvikling
  • Android
  • Bruttolønsordning
  • Business Intelligence
  • Cloud computing
  • Download Windows 8
  • HTML5
  • Harddisk-priser
  • IE9
  • Intranet
  • It-sikkerhed
  • Kindle Fire
  • Multimedieskat
  • NemID
  • OS X Mountain Lion
  • Open source CMS
  • Projektledelse
  • Scrum
  • Sharepoint intranet
  • Storage
  • Ubuntu 11.10
  • Virtualisering
  • Windows 8
  • Windows Phone 7
  • iOS 5
  • iPhone 4S

Tjenester

  • Android-app
  • iPhone-app
  • RSS-feeds
Følg @version2dk
Tilmeld dig Version2's it-nyhedsbrev og vind den nye iPad.

Version2 udgives af

  • Mediehuset Ingeniøren A/S work Skelbækgade 4 1717 København V
  • Tlf. work 33265300