Computerprogram

Fra Wikipedia, den frie encyklopædi
(Omdirigeret fra Computerprogrampakke)
Spring til navigation Spring til søgning
Disambig bordered fade.svg For alternative betydninger, se Program.
Et diagram, der viser hvordan brugeren (engelsk User) interagerer med applikationssoftware, på en typisk computer. Applikationssoftwarens lag deler grænseflade med styresystemet (engelsk Operating System), som igen kommunikerer med hardware. Pilene indikerer datastrømme.

Et stykke computersoftware eller kortere software også kaldet programmel, udgøres af et eller flere computerprogrammer.[1] Et computerprogram eller kortere program er en samling processorinstruktioner, som sætter computeren i stand til at løse en bestemt opgave.[2] Dette er i kontrast til fysisk hardware, af hvilken systemet er bygget og faktisk udfører arbejdet. Indenfor datalogi og softwareudvikling omfatter software computerprogrammer, systemprogrammer, hjælpeprogrammer, programbiblioteker og relaterede ikke-udførbare data, såsom online dokumentation eller digitale lagringsmedier. Computerhardware og software forudsætter hinanden og ingen af dem kan realistisk set anvendes alene.

det laveste programmeringsniveau haves udførbar kode bestående af maskinsprogsinstruktioner, der afvikles af en individuel processor — typisk en central processing unit (CPU) eller en graphics processing unit (GPU). Et maskinsprog består af grupper af binære værdier, som indikerer processorinstruktioner, der under afvikling ændrer computerens tilstand fra den forgående tilstand. Fx kan en instruktion ændre værdien lagret i et bestemt lagerposition i en computer — en effekt som ikke direkte kan observeres af en bruger. En instruktion kan også udføre et kald; fx en af de mange input- eller output-operationer, fx udlæse noget tekst på en computer udlæsningsenhed; hvilket viser en tilstand som er synlig for brugeren. Processoren afvikler instruktionerne i den rækkefølge de modtages, medmindre processoren instrueres i at "hoppe" til en anden instruktion, eller bliver interruptet af styresystemet. Pr. 2015 har de fleste PCere, smartphone enheder og servere processorer med flere processorkerner.

Det meste software skrives i højniveauprogrammeringssprog. Højniveauprogrammeringssprog er lettere og mere effektive for programmører og softwareudviklere, fordi de er tættere på naturlige sprog end maskinsprog.[3] Højniveauprogrammeringssprog oversættes til maskinsprog ved at anvende en compiler eller en fortolker - eller en kombination af begge. Software kan også skrives i et lavniveau assemblersprog, som har en stærk korrespondence til computerens maskinsprogsinstruktioner og bliver oversat til maskinsprog ved at anvende en assembler.

Historie[redigér | redigér wikikode]

En skitse (algoritme) for hvad som kunne have været det første stykke skrevne software, blev skrevet af Ada Lovelace i det 19. århundrede, for den planlagte Analytical Engine.[4] Ada Lovelace lavede matematiske beviser for at vise hvordan maskinen ville beregne Bernoulli-tal.[4] Grundet beviserne og algoritmen, betragtes Ada Lovelace som den første computerprogrammør.[5][6]

Den første teori om software — før skabelsen af computere som vi kender dem idag — blev foreslået af Alan Turing i hans 1935 artikel On Computable Numbers, with an Application to the Entscheidungsproblem (decision problem).

Alan Turing teori ledte senere til oprettelsen af det akademiske område datalogi og softwareudvikling; begge områder udforsker software og dens tilblivelse.

Før 1946 var software ikke endnu programmer lagret i digital hukommelse, som vi kender det idag. De første elektroniske computerenheder blev hardwired og om-hardwired for at "omprogrammere" dem.

Typer[redigér | redigér wikikode]

På stort set alle computerplatforme kan software grupperes i nogle få brede kategorier.

Formål eller domænebrug[redigér | redigér wikikode]

Baseret på målet, kan computersoftware inddeles i:

  • Applikationssoftware - som er software, der anvender computersystemet til at yde specielle funktioner eller yde underholdningsfunktioner udover de computerens grundlæggende operationer. Der er mange forskellige typer af applikationssoftware, fordi arbejdsopgaveområdet, en moderne computer kan yde er så stor.
  • Systemsoftware - som er software til at forvalte computerhardware opførsel, som at tilbyde grundlæggende funktionaliteter, der er ønsket af brugere, eller for andet software for at køre ordentligt, hvis overhovedet. Systemsoftware bliver også designet til at yde en platform til at køre applikationssoftware,[7] and it includes the following:
    • Styresystemer - som er vigtige samlinger af software til at håndtere resurser og yde fælles services for andet software som kører "ovenpå" dem. Overvågningsprogrammer, bootloadere, shells og skrivebordsmiljøer er dele af styresystemets kernekomponenter. I praksis er et styresystem udstyret med yderligere forinstalleret software (inklusiv applikationssoftware) så en bruger har mulighed for at arbejde på en computer, der kun har et styresystem.
    • Device drivere - som betjener eller styrer en bestemt type enhed, som er koblet til en computer. Hver enhed behøver mindst én korresponderende device driver; fordi en computer typisk har minimum en input-enhed og mindst en output-enhed, behøver en computer typisk mere end en device driver.
    • Hjælpesoftware - hvilket er software designet til at assistere brugere med vedligholdelse af deres computere.
  • Skadelig software eller malware - hvilket er software, der er udviklet til at skade og forstyrre computere. Derfor er malware uønsket. Malware er tæt associeret med computer-relaterede forbrydelser, selvom nogle skadelige programmer kan være designet til at være practical jokes.

Naturlig kørsel eller kørselsdomæne[redigér | redigér wikikode]

  • Skrivebordsapplikationer såsom webbrowsere og Microsoft Office, såvel som smartphone og tablet applikationer (kaldet "mobilapps"). (Der er en vinkling i nogle dele af softwareindustrien, i en vis udstrækning, til at sammenflette skrivebordsapplikationer med mobilapps. Windows 8 og senere Ubuntu Touch, prøvede at tillade den samme applikation layout grænseflade til at blive anvendt på desktops, laptops og mobiler.)
  • JavaScript-scripts er stykker af software som traditionelt bliver indlejret i websider, der køres direkte indeni webbrowseren, når en webside hentes uden behovet for en webbrowserudvidelse. Software skrevet i andre programmeringssprog, kan også køres indeni webbrowser, hvis software er enten oversat til JavaScript eller hvis en webbrowserudvidelse, der understøtter sproget er installeret; det mest almindelige eksempel på det sidste er ActionScript-scripts, som understøttes af Adobe Flash-udvidelsen.
  • Serversoftware, inklusiv:
    • Webapplikationer, som typisk køres på en webserver og der som output dynamisk genererer websider til webbrowsere, ved at anvende fx PHP, Java, ASP.NET, eller selv JavaScript som køres på en server. In moderne tider omfatter disse typisk noget JavaScript som også køres i webbrowseren, i nogle tilfælde køres noget JavaScript på serveren og noget i webbrowseren.
  • Plugins og udvidelser er software som udvider eller modificerer funktionaliteten af andre stykker af software, og forudsætter at softwaren anvendes for at fungere;
  • Indlejret software opholder sig som firmware i indlejrede systemer, enheder dedikeret til en specielt brug eller nogle få anvendelser såsom biler og fjernsyn (selvom nogle indlejrede enheder såsom trådløse chipsets selv kan være del af en ordinær, ikke-indlejret computersystem såsom en PC eller smartphone).[8] I indlejrede system sammenhænge er der nogle gange ikke en klar forskel mellem systemsoftware og applikationssoftware. Men nogle indlejrede systemer kører indlejrede styresystemer og disse systemer bibeholder faktisk forskellen mellem systemsoftware og applikationssoftware (selvom der typisk kun er én fast applikation som altid kører).
  • Mikrokode er en speciel, relativ uigennemskuelig type af indlejret software som instruerer processor selv hvordan maskinkode skal køres, så mikrokode er faktisk på et lavere niveau end maskinkode.

Programmeringsværktøjer[redigér | redigér wikikode]

Programmeringsværktøjer er også software i form af programmer eller applikationer som softwareudviklere (også kendt som programmører, kodere, hackere eller softwareingeniører) anvendes til at skabe, debug, vedligeholde (fx forbedre eller rette) eller anden support software.

Software skrives i et eller flere programmeringssprog; der eksisterer mange programmeringssprog, og hver har mindst en implementation, hver består af sit egne mængder af programmeringsværktøjer. Disse programmeringsværktøjer kan være relativt selvtilstrækkelige programmer såsom oversættere, debuggere, fortolkere, linkere og teksteditorer, som kan kombineres sammen til at være et job; eller de kan udgøre et integreret softwareudviklingsmiljø (IDE), som kombinerer meget eller al funktionalitet af sådanne selvtilstrækkelige programmeringsværktøjer. IDEs kan gøre dette ved at kalde de relevante individuelle værktøjer eller ved at genimplementere deres funktionalitet på en ny måde. En IDE kan gøre det lettere at gøre specifikke opgaver, såsom søgning i filer i et bestemt programmeringsprojekt. Mange implementationer af programmeringssprog tilbyder denne mulighed ved at anvende både individuelle programmeringsværktøjer eller en IDE.

Emner[redigér | redigér wikikode]

Arkitektur[redigér | redigér wikikode]

Brugere ser ofte ting på en anden måde end programmører. Mennesker, som anvender moderne universelle computere (i modsætning til indlejrede systemer, analoge computere og supercomputere), ser typisk tre softwarelag som udfører forskellige former for opgaver: platform, applikation og brugersoftware.

  • Platformssoftware - platformen omfatter firmware, device drivere, et styresystem og typisk et grafisk brugergrænseflade som, samlet, tillader en bruger at interagere med computeren og dens ydre enheder. Platformssoftware er ofte forindstalleret på computer. På en PC vil man typisk have muligheden for at ændre platformssoftware.
  • Applikationssoftware - applikationssoftware eller applikationer er hvad de fleste mennesker tænker på når de tænker på software. Typiske eksempler omfatter kontorpakker og videospil. Applikationssoftware købes ofte separat fra computerhardwaren. Nogle gange er applikationer solgt med computer, men det ændrer ikke ved det faktum at applikationer kører som uafhængige applikationer. Applikationer er sædvanligvis uafhængige programmer fra styresystemet, selvom de ofte skræddersys til specifikke platforme. De fleste brugere tænker på compilere, databaser og andet "systemsoftware" som applikationer.
  • Brugerskreven software - slutbrugerudvikling skræddersyr systemer til at opfylde brugernes specifikke behov. Brugersoftware omfatter regnearkskabeloner og tekstbehandlingsskabeloner. Selv email-filtre er en form for brugersoftware. Brugere skaber selv denne software og glemmer ofte hvor vigtig det er. Afhængig af hvor kompetent brugerskreven software er blevet integreret i standard applikationspakker, vil mange brugere ikke være opmærksom på hvad der den oprindelige applikationspakker og hvad som er blevet tilføjet af fx kollegaer, superbrugere eller it-folk.

Kørsel[redigér | redigér wikikode]

Uddybende Uddybende artikel: Kørsel (datalogi)

Computersoftware skal "lægges" ind i computerens datalager (såsom harddisken eller hukommelsen). Når softwaren én gang er lagt på datalageret, er computeren i stand til at køre eller udføre softwaren. Dette omfatter at mediere processorinstruktioner fra applikationssoftware, gennem systemsoftware, til hardwaren som i sidste ende modtager instruktioner som maskinkode.

Kvalitet og pålidelighed[redigér | redigér wikikode]

Softwarekvalitet er meget vigtig, specielt for kommerciel og systemsoftware som fx Microsoft Office, Microsoft Windows og Linux. Hvis softwaren er fejlbehæftet, kan den forårsage at en brugers arbejde mistes (slettes), software computernedbrud og have andre utilsigtede virkninger. De fleste af sådanne fejl findes via "softwareaflusning", og denne proces udføres under alfatestning og betatestning.

Licens[redigér | redigér wikikode]

Uddybende Uddybende artikel: Softwarelicens

En softwarenslicens giver brugeren retten til at anvende softwaren i et licenseret miljø - og i tilfældet af frie software licenser, har man også andre rettigheder som fx at lave kopier.

Proprietær software kan inddeles i to typer:

  • freeware, hvilket omfatter kategorien af "fri prøve" software eller "freemium" software (tidligere blev termen shareware ofte anvendt for fri prøve/freemium software). Som navnet indikerer, kan freeware anvendes frit - og i tilfældet fri prøve eller freemium software, er det nogle gange kun sandt for en begrænset tidsperiode - eller med begrænset funktionalitet.
  • software tilgængelig for et gebyr, ofte ukorrekt navngivet "kommerciel software", kan kun legalt anvendes ved køb af en licens.

Open source software, på den anden side, kommer med en fri software licens, der giver modtageren rettigheder til at modificere og redistribuere softwaren.

Patenter[redigér | redigér wikikode]

Uddybende Uddybende artikel: Softwarepatent

Softwarepatenters formål, er ligesom andre typer af patenter, teoretisk tænkt til at give opfinderen en ekslusiv, tidsbegrænset licens for en detaljeret idé (fx en algoritme) på hvordan noget implementeres et stykke software. Idéer for brugbare ting som software kan gøre, og brugerkrav, er ikke tænkt til at være patentérbare og konkrete implementationer (fx den aktuelle softwarepakke der implementerer patentet) er heller ikke ment til at være patentérbare - det sidste tilfælde er allerede typisk automatisk dækket af copyright. Så softwarepatenter er ment til at dække området mellem krav og konkrete implementationer.

Design og implementation[redigér | redigér wikikode]

Design og implementation af software er afhængig af kompleksiteten af softwaren. Fx, design og skabelse af Microsoft Word tog meget længere tid end tiden for design og udvikling af Microsoft Notepad, fordi det sidstnævnte har meget simplere funktionalitet.

Software er sædvandligvis designet og skabt (også kendt som kodet/skrevet/programmeret) i integrerede softwareudviklingsmiljøer (IDE) som fx Eclipse, IntelliJ og Microsoft Visual Studio, som kan simplificere processen og compilere softwaren (hvis muligt). Som tidligere nævnt, skabes software typisk ovenpå eksisterende software og application programming interface (API) som det underliggende software tilbyder som fx GTK+, JavaBeans eller Swing. Biblioteker (APIs) kan kategoriseres efter deres formål. Fx, Spring Framework anvendes til at implementere enterprise applikationer, Windows Forms biblioteket anvendes til at designe grafisk brugergrænseflade (GUI) applikationer som fx Microsoft Word - og Windows Communication Foundation anvendes til at designe webservices. Når et program er designet, støtter det sig APIen. Fx, en Microsoft Windows skrivebordsapplikation kan kalde API-funktioner i .NET Windows Forms library som fx Form1.Close() og Form1.Show()[9] til at lukke eller åbne applikationen. Uden disse APIer, skal programmøren selv programmere alle disse funktionaliteter. Selskaber som fx Oracle og Microsoft tilbyder deres egne APIer så mange applikationer bliver skrevet ved at anvende deres programbiblioteker som typisk har talrige APIer i sig.

Datastrukturer såsom hashtabeller, tabeller og binære søgetræer og algoritmer såsom quicksort, kan være nyttige ved skabelsen af software.

Computersoftware har specielle økonomiske kendetegn som gør dets design, skabelse og distribution forskellig fra de fleste andre økonomiske varer.[10][11]

En person som skaber software kaldes for en programmør, softwareingeniør eller softwareudvikler, termer som alle har omtrent samme betydning. Mere uformelle termer for programmører eksisterer også såsom "koder" og "hacker" – selvom brug af sidstnævnte term kan skabe forvirring, fordi det oftere anvendes til at betyde nogen som illegalt bryder ind i computersystemer.

Industri og organisationer[redigér | redigér wikikode]

Der er en stor diversitet af softwarefirmaer og programmører i verden og de udgør en softwareindustri. Software kan fatisk være en meget profitabel industri: Bill Gates, medgrundlæggeren af Microsoft var den rigeste person i verden i 2009, mest grundet hans ejerskab af mange aktier i Microsoft, selskabet som er ansvarlig for Microsoft Windows og Microsoft Office softwareprodukterne - begge markedsledende i deres respektive produktkategorier.

Almennyttige softwareorganisationer omfatter Free Software Foundation, GNU Project og Mozilla Foundation. Softwarestandard organisationer som fx W3C, IETF udvikler anbefalede softwarestandarder såsom XML, HTTP og HTML, så software kan have interoperabilitet ved at understøtte disse standarder.

Andre velkendte store softwareselskaber omfatter Google, IBM, TCS, Infosys, Wipro, HCL Technologies, Oracle, Novell, SAP, Symantec, Adobe Systems, Sidetrade og Corel, mens små selskaber ofte yder innovation.

Se også[redigér | redigér wikikode]

Wikipedia-logo.pngSøsterprojekter med yderligere information:

Kilder/referencer[redigér | redigér wikikode]

  1. ^ ordnet.dk: software
  2. ^ ordnet.dk: computerprogram
  3. ^ "Compiler construction". Arkiveret fra originalen 2 November 2013. 
  4. ^ a b Evans 2018, s. 21.
  5. ^ Fuegi, J.; Francis, J. (2003). "Lovelace & Babbage and the creation of the 1843 'notes'". Annals of the History of Computing. 25 (4): 16–26. doi:10.1109/MAHC.2003.1253887. 
  6. ^ "Ada Lovelace honoured by Google doodle". The Guardian. December 10, 2012. Hentet 25 November 2018. 
  7. ^ "System Software". The University of Mississippi. Arkiveret fra originalen 30 May 2001. 
  8. ^ "Embedded Software—Technologies and Trends". IEEE Computer Society. May–June 2009. Arkiveret fra originalen 28 October 2013. Hentet 6 November 2013. 
  9. ^ "MSDN Library". Arkiveret fra originalen 11 June 2010. Hentet 14 June 2010. 
  10. ^ v. Engelhardt, Sebastian (2008). "The Economic Properties of Software". Jena Economic Research Papers. 2 (2008–045). Arkiveret fra originalen 5 January 2016. 
  11. ^ Kaminsky, Dan (1999). "Why Open Source Is The Optimum Economic Paradigm for Software". Arkiveret fra originalen 22 May 2012. 

Eksterne henvisninger[redigér | redigér wikikode]