Software - Software

Et diagram, der viser, hvordan brugeren interagerer med applikationssoftware på en typisk stationær computer . Applikationssoftwarelaget grænseflader med operativsystemet , som igen kommunikerer med hardwaren . Pilene angiver informationsflow.

Software er en samling instruktioner, der fortæller en computer, hvordan den fungerer. Dette er i modsætning til hardware , hvorfra systemet er bygget og faktisk udfører arbejdet.

På det laveste programmering niveau , eksekverbar kode består af maskinens sprog instruktioner, der understøttes af en individuel processor -typically en central behandlingsenhed (CPU) eller en graphics processing unit (GPU). Maskinsprog består af grupper af binære værdier, der angiver processorinstruktioner, der ændrer computerens tilstand fra dens foregående tilstand. For eksempel kan en instruktion ændre værdien, der er gemt på et bestemt lagersted i computeren - en effekt, der ikke er direkte observerbar for brugeren. En instruktion kan også påberåbe sig en af ​​mange input- eller outputoperationer , f.eks. Visning af tekst på en computerskærm; forårsager tilstandsændringer, som skal være synlige for brugeren . Processoren udfører instruktionerne i den rækkefølge, de leveres, medmindre den instrueres i at "springe" til en anden instruktion eller afbrydes af operativsystemet. Som af 2015 de fleste personlige computere , smartphone enheder og servere har processorer med flere udførelse enheder eller flere processorer, der udfører beregning sammen, og computing er blevet en langt mere samtidige aktivitet end tidligere.

Størstedelen af ​​softwaren er skrevet på programmeringssproghøjt niveau . De er lettere og mere effektive for programmører, fordi de er tættere på naturlige sprog end maskinsprog. Sprog på højt niveau oversættes til maskinsprog ved hjælp af en compiler eller en tolk eller en kombination af de to. Software kan også skrives på et lavt samlingssprog , som har en stærk overensstemmelse med computerens maskinsprogsinstruktioner og oversættes til maskinsprog ved hjælp af en assembler .

Historie

En algoritme til, hvad der ville have været det første stykke software, blev skrevet af Ada Lovelace i det 19. århundrede til den planlagte Analytical Engine . Hun lavede beviser for at vise, hvordan motoren ville beregne Bernoulli -tal . På grund af beviserne og algoritmen betragtes hun som den første computerprogrammerer.

Den første teori om software forud for oprettelsen af ​​computere, som vi kender dem i dag, blev foreslået af Alan Turing i sit essay fra 1935, On Computable Numbers, med en applikation til Entscheidungsproblemet (beslutningsproblem). Dette førte til sidst til oprettelsen af ​​de akademiske felter inden for datalogi og software engineering; begge felter studerer software og dets oprettelse. Datalogi er det teoretiske studie af computer og software (Turings essay er et eksempel på datalogi), mens software engineering er anvendelsen af ​​ingeniørprincipper til udvikling af software. Før 1946 var software endnu ikke de programmer, der var gemt i hukommelsen til digitale computere med lagret program, som vi nu forstår det; de første elektroniske computerenheder blev i stedet omsluttet for at "omprogrammere" dem.

I 2000 offentliggjorde Fred Shapiro, bibliotekar ved Yale Law School, et brev, der afslørede, at John Wilder Tukeys papir "The Teaching of Concrete Mathematics" fra 1958 indeholdt den tidligste kendte brug af udtrykket "software", der blev fundet i en søgning efter JSTOR 's elektroniske arkiver, forud for OED 's henvisning med to år. Dette fik mange til at kreditere Tukey med at opfylde udtrykket, især i nekrologer, der blev offentliggjort samme år, selvom Tukey aldrig krævede kredit for en sådan mønt. I 1995 hævdede Paul Niquette, at han oprindeligt havde opfundet udtrykket i oktober 1953, selvom han ikke kunne finde dokumenter, der understøtter hans påstand. Den tidligste kendte udgivelse af udtrykket "software" i en teknisk sammenhæng var i august 1953 af Richard R. Carhart i et Rand Corporation Research Memorandum.

Typer

Blender , et gratis software -program

På stort set alle computerplatforme kan software grupperes i et par brede kategorier.

Formål eller anvendelsesdomæne

Baseret på målet kan computersoftware opdeles i:

  • Applikationssoftware bruger computersystemet til at udføre særlige funktioner ud over selve computerens grundlæggende betjening. Der er mange forskellige typer applikationssoftware, fordi rækkevidden af ​​opgaver, der kan udføres med en moderne computer, er så stor - se liste over software .
  • Systemsoftware styrer hardwareadfærd for at levere grundlæggende funktionaliteter, der kræves af brugerne, eller for at anden software kan køre korrekt, hvis overhovedet. Systemsoftware er også designet til at levere en platform til at køre applikationssoftware, og det indeholder følgende:
    • Operativsystemer er vigtige samlinger af software, der administrerer ressourcer og leverer fælles tjenester til anden software, der kører "oven på" dem. Overvågningsprogrammer , bootloadere , skaller og vinduessystemer er centrale dele af operativsystemer. I praksis leveres et operativsystem med yderligere software (herunder applikationssoftware), så en bruger potentielt kan udføre noget arbejde med en computer, der kun har ét operativsystem.
    • Enhedsdrivere betjener eller styrer en bestemt type enhed, der er sluttet til en computer. Hver enhed har brug for mindst en tilsvarende enhedsdriver; fordi en computer typisk har mindst mindst en inputenhed og mindst en outputenhed, har en computer typisk brug for mere end en enhedsdriver.
    • Hjælpeprogrammer er computerprogrammer designet til at hjælpe brugere med vedligeholdelse og pleje af deres computere.
  • Ondsindet software eller malware er software, der er udviklet til at skade eller forstyrre computere. Malware er tæt forbundet med computerrelaterede forbrydelser, selvom nogle ondsindede programmer muligvis er blevet designet som praktiske vittigheder .

Udførelsens art eller domæne

  • Desktop -applikationer såsom webbrowsere og Microsoft Office samt smartphone- og tabletapplikationer (kaldet " apps ").
  • JavaScript -scripts er software, der traditionelt er integreret i websider , der køres direkte inde i webbrowseren, når en webside indlæses uden behov for et webbrowser -plugin. Software, der er skrevet på andre programmeringssprog, kan også køres i webbrowseren, hvis softwaren enten er oversat til JavaScript, eller hvis der er installeret et webbrowser -plugin, der understøtter dette sprog; det mest almindelige eksempel på sidstnævnte er ActionScript -scripts, som understøttes af Adobe Flash -plugin.
  • Server software , herunder:
    • Webapplikationer , der normalt kører på webserveren og udsender dynamisk genererede websider til webbrowsere, f.eks. Ved hjælp af PHP , Java , ASP.NET eller endda JavaScript, der kører på serveren . I moderne tid inkluderer disse normalt også noget JavaScript, der også skal køre i webbrowseren, i hvilket tilfælde de typisk kører dels på serveren, dels i webbrowseren.
  • Plugins og udvidelser er software, der udvider eller ændrer funktionaliteten af ​​et andet stykke software og kræver, at software bruges til at fungere.
  • Indlejret software findes som firmware i indlejrede systemer , enheder dedikeret til en enkelt brug eller få anvendelser som f.eks. Biler og fjernsyn (selvom nogle indlejrede enheder som f.eks. Trådløse chipsæt selv kan være en del af et almindeligt, ikke-integreret computersystem som f.eks. En pc eller smartphone). I den integrerede systemkontekst er der undertiden ingen klar sondring mellem systemsoftwaren og applikationssoftwaren. Nogle indlejrede systemer kører imidlertid indlejrede operativsystemer , og disse systemer bevarer skelnen mellem systemsoftware og applikationssoftware (selvom der typisk kun vil være én, fast applikation, der altid køres).
  • Mikrokode er en særlig, relativt uklar type integreret software, der fortæller processoren selv, hvordan man udfører maskinkode, så det er faktisk et lavere niveau end maskinkode. Det tilhører typisk processorproducenten, og alle nødvendige korrekte korrekte softwareopdateringer til mikrokoder leveres af dem til brugerne (hvilket er meget billigere end forsendelse af udskiftningsprocessorhardware). Således ville en almindelig programmør ikke forvente, at han nogensinde skulle håndtere det.

Programmeringsværktøjer

Programmeringsværktøjer er også software i form af programmer eller applikationer, som udviklere bruger til at oprette, fejlsøge , vedligeholde eller på anden måde understøtte software.

Software er skrevet på et eller flere programmeringssprog; der findes mange programmeringssprog, og hver har mindst en implementering, som hver består af sit eget sæt programmeringsværktøjer. Disse værktøjer kan være relativt uafhængige programmer, såsom kompilatorer , debuggere , tolke , linkere og tekstredigerere , der kan kombineres for at udføre en opgave; eller de kan danne et integreret udviklingsmiljø (IDE), som kombinerer meget eller al funktionalitet af sådanne selvstændige værktøjer. IDE'er kan gøre dette ved enten at påberåbe sig de relevante individuelle værktøjer eller ved at gen-implementere deres funktionalitet på en ny måde. En IDE kan gøre det lettere at udføre specifikke opgaver, f.eks. At søge i filer i et bestemt projekt. Mange programmeringssprogsimplementeringer giver mulighed for at bruge både individuelle værktøjer eller en IDE.

Emner

Arkitektur

Folk, der bruger moderne computere til almindelige formål (i modsætning til integrerede systemer , analoge computere og supercomputere ) ser normalt tre lag af software, der udfører en række opgaver: platform, applikation og brugersoftware.

  • Platform-software
    Den platformen indeholder firmwaren , enhedsdrivere , et operativsystem , og typisk en grafisk brugergrænseflade , som i alt, tillader brugeren at interagere med computeren og dens periferiudstyr (tilhørende udstyr). Platformssoftware følger ofte med computeren. På en pc vil man normalt have mulighed for at ændre platformsoftwaren.
  • Applikationssoftware
    Applikationssoftware er, hvad de fleste tænker på, når de tænker på software. Typiske eksempler omfatter kontorsuiter og videospil. Applikationssoftware købes ofte separat fra computerhardware. Nogle gange er programmer bundtet med computeren, men det ændrer ikke ved, at de kører som uafhængige applikationer. Applikationer er normalt uafhængige programmer fra operativsystemet, selvom de ofte er skræddersyet til bestemte platforme. De fleste brugere tænker på kompilatorer, databaser og anden "systemsoftware" som applikationer.
  • Brugerskrevet software
    Slutbrugerudvikling skræddersyr systemer til at opfylde brugernes specifikke behov. Brugersoftware inkluderer regnearksskabeloner og tekstbehandlingsskabeloner . Selv e -mail -filtre er en slags brugersoftware. Brugere opretter denne software selv og overser ofte, hvor vigtig den er. Afhængigt af hvor kompetent den brugerskrevne software er blevet integreret i standardapplikationer, er mange brugere muligvis ikke klar over sondringen mellem de originale pakker, og hvad der er tilføjet af kolleger.

Udførelse

Computersoftware skal "indlæses" i computerens lager (f.eks. Harddisk eller hukommelse ). Når softwaren er indlæst, kan computeren eksekvere softwaren. Dette indebærer at sende instruktioner fra applikationssoftwaren, gennem systemsoftwaren, til den hardware, der i sidste ende modtager instruktionen som maskinkode. Hver instruktion får computeren til at udføre en operation - flytte data, udføre en beregning eller ændre kontrolstrømmen af instruktioner.

Databevægelse er typisk fra et sted i hukommelsen til et andet. Nogle gange indebærer det at flytte data mellem hukommelse og registre, som muliggør højhastighedsdataadgang i CPU'en. At flytte data, især store mængder af det, kan være dyrt; dette undgås undertiden ved at bruge "pointers" til data i stedet. Beregninger inkluderer enkle operationer, såsom forøgelse af værdien af ​​et variabelt dataelement. Mere komplekse beregninger kan involvere mange operationer og dataelementer sammen.

Kvalitet og pålidelighed

Softwarekvalitet er meget vigtig, især for kommerciel og systemsoftware. Hvis softwaren er defekt, kan den slette en persons arbejde, crash computeren og gøre andre uventede ting. Fejl og fejl kaldes " bugs ", som ofte opdages under alfa- og beta -test. Software er ofte også et offer for det, der kaldes software aging , den progressive ydelsesforringelse som følge af en kombination af usynlige fejl.

Mange fejl opdages og rettes gennem softwaretest . Softwaretest eliminerer dog sjældent - om nogensinde - hver eneste fejl; nogle programmører siger, at "hvert program har mindst en fejl mere" (Lubarskys lov). I vandfaldsmetoden til softwareudvikling anvendes typisk separate testteam, men i nyere tilgange, der samlet kaldes agil softwareudvikling , laver udviklere ofte alle deres egne test og demonstrerer softwaren regelmæssigt for brugere/klienter for at få feedback. Software kan testes gennem enhedstest , regressionstest og andre metoder, der udføres manuelt eller oftest automatisk, da mængden af ​​kode, der skal testes, kan være stor. Programmer, der indeholder kommandosoftware, gør det muligt for hardware engineering og systemoperationer at fungere meget lettere sammen.

Licens

Softwarelicensen giver brugeren ret til at bruge softwaren i det licenserede miljø, og i tilfælde af gratis softwarelicenser giver den også andre rettigheder, såsom retten til at lave kopier.

Proprietær software kan opdeles i to typer:

  • freeware , som omfatter kategorien "gratis prøveversion" -software eller " freemium " -software (tidligere blev udtrykket shareware ofte brugt til gratis prøve-/freemium -software). Som navnet antyder, kan freeware bruges gratis, selvom det i tilfælde af gratis forsøg eller freemium -software undertiden kun er sandt i en begrænset periode eller med begrænset funktionalitet.
  • software til rådighed mod et gebyr, som kun kan bruges lovligt ved køb af en licens.

Open source-software leveres med en gratis softwarelicens, der giver modtageren rettigheder til at ændre og omfordele softwaren.

Patenter

Softwarepatenter, ligesom andre typer patenter, skal teoretisk set give en opfinder en eksklusiv, tidsbegrænset licens til en detaljeret idé (f.eks. En algoritme) om, hvordan man implementerer et stykke software eller en komponent i et stykke software. Ideer til nyttige ting at software kan gøre , og brugernes behov , der ikke formodes at være patenterbar, og konkrete implementeringer (dvs. den faktiske software pakker til gennemførelse patentet) er ikke meningen at være patenterbar enten-de sidstnævnte er allerede dækket af copyright, generelt automatisk. Så software patenter formodes at dække det midterste område, mellem krav og konkret implementering. I nogle lande kan et krav om, at den påståede opfindelse har indflydelse på den fysiske verden, også være en del af kravene for, at et softwarepatent kan holdes gyldigt - selvom al nyttig software har virkninger på den fysiske verden, kan dette krav være åben for debat. I mellemtiden blev amerikansk lov om ophavsret anvendt på forskellige aspekter af skrivningen af ​​softwarekoden.

Softwarepatenter er kontroversielle i softwareindustrien, hvor mange mennesker har forskellige holdninger til dem. En af kilderne til kontroverser er, at den ovennævnte opdeling mellem indledende ideer og patent ikke ser ud til at blive hædret i praksis af patentadvokater-for eksempel patentet på aspektorienteret programmering (AOP), der påstås at gøre krav på rettigheder over ethvert programmeringsværktøj implementering af ideen om AOP, uanset hvilken implementering. En anden kilde til kontroverser er effekten på innovation, hvor mange fornemme eksperter og virksomheder argumenterer for, at software er et så hurtigt område, at softwarepatenter blot skaber enorme ekstra sagsomkostninger og risici og rent faktisk forsinker innovation. I tilfælde af debatter om softwarepatenter uden for USA er det blevet fremført, at store amerikanske virksomheder og patentadvokater sandsynligvis vil være de primære modtagere af at tillade eller fortsat tillade softwarepatenter.

Design og implementering

Design og implementering af software varierer afhængigt af softwarens kompleksitet. For eksempel tog design og oprettelse af Microsoft Word meget mere tid end at designe og udvikle Microsoft Notesblok, fordi sidstnævnte har meget mere grundlæggende funktionalitet.

Software udvikles normalt i integrerede udviklingsmiljøer (IDE) som Eclipse , IntelliJ og Microsoft Visual Studio, der kan forenkle processen og kompilere softwaren. Som det fremgår af en anden sektion, oprettes der normalt software oven på eksisterende software og applikationsprogrammeringsgrænsefladen (API), som den underliggende software leverer som GTK+ , JavaBeans eller Swing . Biblioteker (API'er) kan kategoriseres efter deres formål. For eksempel bruges Spring Framework til implementering af virksomhedsprogrammer , Windows Forms -biblioteket bruges til at designe grafiske brugergrænseflade (GUI) applikationer som Microsoft Word, og Windows Communication Foundation bruges til at designe webtjenester . Når et program er designet, er det afhængigt af API'en. For eksempel kan et Microsoft Windows -skrivebordsprogram kalde API -funktioner i .NET Windows Forms -biblioteket som Form1.Close () og Form1.Show () for at lukke eller åbne programmet. Uden disse API'er skal programmøren helt skrive disse funktioner. Virksomheder som Oracle og Microsoft leverer deres egne API'er, så mange applikationer skrives ved hjælp af deres softwarebiblioteker, der normalt har mange API'er i sig.

Datastrukturer såsom hashtabeller , arrays og binære træer og algoritmer såsom quicksort kan være nyttige til at oprette software.

Computersoftware har særlige økonomiske egenskaber, der gør design, oprettelse og distribution anderledes end de fleste andre økonomiske varer.

En person, der skaber software, kaldes en programmør , softwareingeniør eller softwareudvikler, udtryk, der alle har en lignende betydning. Mere uformelle udtryk for programmerere findes også, f.eks. "Coder" og "hacker" - selvom brug af sidstnævnte ord kan forårsage forvirring, fordi det oftere bruges til at betyde en, der ulovligt bryder ind i computersystemer .

Se også

Referencer

Kilder

eksterne links