Ohjelmistot - Software

Kaavio, joka osoittaa, miten käyttäjä on vuorovaikutuksessa sovellusohjelmiston kanssa tyypillisessä pöytätietokoneessa . Sovellusohjelmistokerros on rajapinnassa käyttöjärjestelmän kanssa , joka vuorostaan ​​kommunikoi laitteiston kanssa . Nuolet osoittavat tiedonkulkua.

Ohjelmisto on kokoelma ohjeita, jotka kertovat tietokoneelle miten toimia. Tämä on toisin kuin laitteisto , josta järjestelmä on rakennettu ja joka todella suorittaa työn.

On alin ohjelmointi tasolla , suoritettava koodi koostuu konekieliset ohjeet tukee yksittäinen prosessori -typically keskusyksikkö (CPU) tai kuvia käsittely-yksikön (GPU). Kone kieli koostuu ryhmistä binary arvojen merkityksenannon prosessorikäskyjä että tilan muuttaminen tietokoneen sen edellisen tilan. Esimerkiksi käsky voi muuttaa tietylle tietokoneen tallennuspaikalle tallennettua arvoa - tämä vaikutus ei ole suoraan havaittavissa käyttäjälle. Käsky voi myös kutsua yhden monista syöttö- tai tulostustoiminnoista , esimerkiksi näyttää jonkin tekstin tietokoneen näytöllä; aiheuttaa tilamuutoksia, joiden pitäisi näkyä käyttäjälle . Prosessori suorittaa ohjeet siinä järjestyksessä kuin ne on annettu, ellei sitä kehoteta "hyppäämään" toiseen käskyyn tai käyttöjärjestelmä ei keskeytä sitä. Vuodesta 2015 lähtien useimmissa henkilökohtaisissa tietokoneissa , älypuhelimissa ja palvelimissa on suorittimia, joissa on useita suoritusyksiköitä tai useita suorittimia, jotka suorittavat laskennan yhdessä, ja tietojenkäsittelystä on tullut paljon samanaikaisempaa toimintaa kuin aikaisemmin.

Suurin osa ohjelmistoista on kirjoitettu korkean tason ohjelmointikielillä . Ne ovat helpompia ja tehokkaampia ohjelmoijille, koska ne ovat lähempänä luonnollisia kieliä kuin konekielet. Korkean tason kielet käännetään konekielelle kääntäjää tai tulkkia tai näiden yhdistelmää käyttäen. Ohjelmisto voidaan myös kirjoittaa matalan tason kokoonpanokielellä , joka vastaa voimakkaasti tietokoneen konekielen ohjeita ja käännetään koneen kielelle kokoonpanon avulla .

Historia

Algoritmi mitä olisi ollut ensimmäinen pala ohjelmiston on tuottanut Ada Lovelace 19th century, suunnitellun Analytical Engine . Hän loi todisteita osoittaakseen, kuinka moottori laskee Bernoullin luvut . Todisteiden ja algoritmin vuoksi häntä pidetään ensimmäisenä tietokoneohjelmoijana.

Ensimmäistä ohjelmistoteoriaa ennen tietokoneiden luomista sellaisina kuin ne tunnemme nykyään, ehdotti Alan Turing 1935 -esseessään, On Computable Numbers, ja Application to Entscheidungsproblem ( päätösongelma ). Tämä johti lopulta tietojenkäsittelytieteen ja ohjelmistotekniikan akateemisten alojen luomiseen; Molemmilla aloilla tutkitaan ohjelmistoja ja niiden luomista. Tietotekniikka on tietokone- ja ohjelmistoteoreettinen tutkimus (Turingin essee on esimerkki tietojenkäsittelytieteestä), kun taas ohjelmistotekniikka on tekniikan periaatteiden soveltaminen ohjelmistojen kehittämiseen. Ennen vuotta 1946 ohjelmistot eivät olleet vielä ohjelmia, jotka on tallennettu tallennettujen ohjelmien digitaalisten tietokoneiden muistiin, kuten nyt ymmärrämme; Ensimmäiset elektroniset tietokonelaitteet johdotettiin sen sijaan uudelleen "ohjelmoimaan" ne uudelleen.

Vuonna 2000 Yalen lakikoulun kirjastonhoitaja Fred Shapiro julkaisi kirjeen, jossa paljastui, että John Wilder Tukeyn 1958 julkaisussa "The Teaching of Concrete Mathematics" oli aikaisin tunnettu termi "ohjelmisto", joka löytyi JSTOR -hausta. sähköinen arkisto, joka edeltää OED : n viittausta kahdella vuodella. Tämä johti siihen, että monet tekivät Tukeylle termin keksimisen, etenkin samana vuonna julkaistussa muistokirjoituksessa, vaikka Tukey ei koskaan vaatinut luottoa tällaisesta kolikoista. Vuonna 1995 Paul Niquette väitti keksineensä termin alun perin lokakuussa 1953, vaikka hän ei löytänyt väitteensä tueksi asiakirjoja. Aikaisin tunnettu julkaisu termistä "ohjelmisto" tekniikan kontekstissa oli elokuussa 1953, Richard R. Carhart, Rand Corporationin tutkimusmuistiossa.

Tyypit

Blender , ilmainen ohjelma

Lähes kaikilla tietokonealustoilla ohjelmistot voidaan ryhmitellä muutamaan laajaan luokkaan.

Käyttötarkoitus tai käyttöalue

Tavoitteen perusteella tietokoneohjelmistot voidaan jakaa:

  • Sovellusohjelmisto käyttää tietokonejärjestelmää suorittaakseen erityisiä toimintoja, jotka eivät kuulu tietokoneen perustoimintoihin. Sovellusohjelmistoja on monia erilaisia, koska nykyaikaisella tietokoneella suoritettavien tehtävien valikoima on niin suuri - katso ohjelmistoluettelo .
  • Järjestelmäohjelmisto hallitsee laitteistokäyttäytymistä tarjotakseen käyttäjien edellyttämiä perustoimintoja tai muita ohjelmistoja toimimaan kunnolla, jos ollenkaan. Järjestelmäohjelmisto on myös suunniteltu tarjoamaan alustan sovellusohjelmistojen suorittamiseen, ja se sisältää seuraavat:
    • Käyttöjärjestelmät ovat olennaisia ​​ohjelmistokokoelmia, jotka hallitsevat resursseja ja tarjoavat yhteisiä palveluja muille ohjelmistoille, jotka toimivat niiden päällä. Valvontaohjelmat , käynnistyslataimet , kuoret ja ikkunajärjestelmät ovat käyttöjärjestelmien ydin. Käytännössä käyttöjärjestelmän mukana tulee lisäohjelmistoja (mukaan lukien sovellusohjelmistot), jotta käyttäjä voi mahdollisesti tehdä töitä tietokoneen kanssa, jossa on vain yksi käyttöjärjestelmä.
    • Laiteajurit käyttävät tai ohjaavat tietyntyyppistä laitetta, joka on liitetty tietokoneeseen. Jokainen laite tarvitsee vähintään yhden vastaavan laiteajurin; koska tietokoneessa on tyypillisesti vähintään yksi syöttölaite ja vähintään yksi tulostuslaite, tietokone tarvitsee tyypillisesti useamman kuin yhden laiteajurin.
    • Apuohjelmat ovat tietokoneohjelmia, jotka on suunniteltu auttamaan käyttäjiä tietokoneidensa ylläpidossa ja hoidossa.
  • Haittaohjelmisto tai haittaohjelma on ohjelmisto, joka on kehitetty vahingoittamaan tai häiritsemään tietokoneita. Haittaohjelmat liittyvät läheisesti tietokoneisiin liittyviin rikoksiin, vaikka jotkin haittaohjelmat on saatettu suunnitella käytännön vitseiksi .

Toteutuksen luonne tai alue

  • Työpöytäsovellukset , kuten verkkoselaimet ja Microsoft Office , sekä älypuhelimet ja tablet -sovellukset (nimeltään " sovellukset ").
  • JavaScript -komentosarjat ovat ohjelmistoja, jotka on perinteisesti upotettu verkkosivuille ja jotka ajetaan suoraan verkkoselaimen sisällä, kun verkkosivu ladataan ilman verkkoselaimen laajennusta. Muilla ohjelmointikielillä kirjoitettuja ohjelmistoja voidaan käyttää myös selaimessa, jos ohjelmisto on käännetty JavaScriptiksi tai jos kyseistä kieltä tukeva verkkoselainlaajennus on asennettu. yleisin esimerkki jälkimmäisestä on ActionScript -komentosarjat, joita Adobe Flash -laajennus tukee .
  • Palvelinohjelmisto , mukaan lukien:
  • Laajennukset ja laajennukset ovat ohjelmistoja, jotka laajentavat tai muokkaavat toisen ohjelmiston toimintoja ja edellyttävät ohjelmiston käyttöä.
  • Sulautetut ohjelmistot asuu, niin firmware sisällä sulautetut järjestelmät , laitteiden omistettu kertakäyttöisiä tai muutamia käyttää kuten autojen ja televisioiden (vaikka jotkut sulautetut laitteet, kuten langattomat piirisarjoja voi itse olla osa tavallista, ei-upotettu tietokonejärjestelmä kuten PC tai älypuhelin). Sulautetun järjestelmän yhteydessä ei toisinaan ole selvää eroa järjestelmäohjelmiston ja sovellusohjelmiston välillä. Jotkut sulautetut järjestelmät käyttävät kuitenkin sulautettuja käyttöjärjestelmiä , ja nämä järjestelmät säilyttävät eron järjestelmäohjelmiston ja sovellusohjelmiston välillä (vaikka tyypillisesti on vain yksi kiinteä sovellus, joka on aina ajettu).
  • Mikrokoodi on erityinen, suhteellisen hämärä sulautetun ohjelmiston tyyppi, joka kertoo prosessorille itse kuinka suorittaa konekoodia, joten se on itse asiassa alempi taso kuin konekoodi. Se on tyypillisesti suorittimen valmistajan omaisuutta, ja kaikki tarvittavat korjaavat mikrokoodin ohjelmistopäivitykset toimittavat ne käyttäjille (mikä on paljon halvempaa kuin korvaavan suoritinlaitteiston toimittaminen). Näin ollen tavallinen ohjelmoija ei odota joutuvansa koskaan käsittelemään sitä.

Ohjelmointityökalut

Ohjelmointityökalut ovat myös ohjelmistoja ohjelmien tai sovellusten muodossa, joita kehittäjät käyttävät ohjelmistojen luomiseen, vianetsintään , ylläpitoon tai muuhun tukemiseen .

Ohjelmisto on kirjoitettu yhdellä tai useammalla ohjelmointikielellä; ohjelmointikieliä on olemassa monia, ja jokaisella on vähintään yksi toteutus, joista jokainen koostuu omista ohjelmointityökaluistaan. Nämä työkalut voivat olla suhteellisen itsenäisiä ohjelmia, kuten kääntäjiä , virheenkorjaimia , tulkkeja , linkittäjiä ja tekstieditoria , jotka voidaan yhdistää tehtävän suorittamiseen; tai ne voivat muodostaa integroidun kehitysympäristön (IDE), joka yhdistää suuren osan tai kaikki tällaisten itsenäisten työkalujen toiminnallisuudesta. IDE: t voivat tehdä tämän joko käyttämällä asiaankuuluvia yksittäisiä työkaluja tai ottamalla niiden toiminnot uudelleen käyttöön uudella tavalla. IDE voi helpottaa tiettyjen tehtävien suorittamista, kuten hakua tietyn projektin tiedostoista. Monet ohjelmointikielten toteutukset tarjoavat mahdollisuuden käyttää sekä yksittäisiä työkaluja että IDE: tä.

Aiheet

Arkkitehtuuri

Ihmiset, jotka käyttävät nykyaikaisia ​​yleiskäyttöisiä tietokoneita (toisin kuin sulautetut järjestelmät , analogiset tietokoneet ja supertietokoneet ), näkevät yleensä kolme ohjelmistokerrosta, jotka suorittavat erilaisia ​​tehtäviä: alusta, sovellus ja käyttäjäohjelmisto.

  • Alustan ohjelmistojen alusta sisältää ohjelmiston , laiteohjaimet , käyttöjärjestelmä , ja tyypillisesti graafinen käyttöliittymä , joka yhteensä, jotta käyttäjä voi olla vuorovaikutuksessa tietokoneen kanssa, ja sen oheislaitteiden (niihin liittyvät laitteet). Alustaohjelmistot toimitetaan usein tietokoneen mukana. On PC yksi yleensä on kyky muuttaa ohjelmistoalustaa.
  • Sovellusohjelmistot Useimmat ihmiset ajattelevat
    sovellusohjelmistoja , kun he ajattelevat ohjelmistoja. Tyypillisiä esimerkkejä ovat toimistopaketit ja videopelit. Sovellusohjelmistot ostetaan usein erikseen tietokonelaitteista. Joskus sovellukset ovat tietokoneen mukana, mutta tämä ei muuta sitä, että ne toimivat itsenäisinä sovelluksina. Sovellukset ovat yleensä käyttöjärjestelmästä riippumattomia ohjelmia, vaikka ne on usein räätälöity tietyille alustoille. Useimmat käyttäjät ajattelevat kääntäjiä, tietokantoja ja muita "järjestelmäohjelmistoja" sovelluksina.
  • Käyttäjän kirjoittama ohjelmisto
    Loppukäyttäjäkehitys räätälöi järjestelmät vastaamaan käyttäjien erityistarpeita. Käyttäjäohjelmisto sisältää laskentataulukkomallit ja tekstinkäsittelymallit . Jopa sähköpostisuodattimet ovat eräänlainen käyttäjäohjelmisto. Käyttäjät luovat tämän ohjelmiston itse ja jättävät usein huomiotta sen tärkeyden. Riippuen siitä, kuinka asiantuntevasti käyttäjän kirjoittama ohjelmisto on integroitu oletussovelluspaketteihin, monet käyttäjät eivät ehkä ole tietoisia alkuperäisten pakettien ja työtovereiden lisäämien erojen välillä.

Toteutus

Tietokoneohjelmistot on "ladattu" levy tietokoneen varastointi (esimerkiksi kovalevy tai muisti ). Kun ohjelmisto on ladattu, tietokone pystyy suorittamaan ohjelmiston. Tämä sisältää ohjeiden siirtämisen sovellusohjelmistosta järjestelmäohjelmiston kautta laitteistoon, joka lopulta vastaanottaa ohjeet konekoodina. Jokainen käsky saa tietokoneen suorittamaan toiminnon - siirtämään tietoja, suorittamaan laskennan tai muuttamaan käskyjen ohjausvirtaa .

Tiedonsiirto tapahtuu tyypillisesti muistipaikasta toiseen. Joskus siihen liittyy tietojen siirtämistä muistin ja rekisterien välillä, jotka mahdollistavat nopean datan käytön CPU: ssa. Tietojen siirtäminen, erityisesti suuret määrät, voi olla kallista; Tämä vältetään joskus käyttämällä "osoittimia" dataan. Laskelmat sisältävät yksinkertaisia ​​toimintoja, kuten muuttuvan tietoelementin arvon lisäämisen. Monimutkaisemmat laskelmat voivat sisältää monia toimintoja ja tietoelementtejä yhdessä.

Laatu ja luotettavuus

Ohjelmistojen laatu on erittäin tärkeää erityisesti kaupallisille ja järjestelmäohjelmistoille. Jos ohjelmisto on viallinen, se voi poistaa henkilön työn, kaataa tietokoneen ja tehdä muita odottamattomia asioita. Vikoja ja virheitä kutsutaan "virheiksi ", jotka havaitaan usein alfa- ja betatestauksen aikana. Ohjelmisto on usein myös uhri niin kutsutulle ohjelmistojen ikääntymiselle , joka on progressiivinen suorituskyvyn heikkeneminen, joka johtuu näkymättömien virheiden yhdistelmästä.

Monet viat löydetään ja korjataan ohjelmistotestauksella . Ohjelmistotestaus poistaa kuitenkin harvoin - jos koskaan - kaikki virheet; Jotkut ohjelmoijat sanovat, että "jokaisessa ohjelmassa on vähintään yksi vika" (Lubarskyn laki). Vuonna vesiputous menetelmässä ohjelmistokehityksen erilliset testit joukkueet käytetään tyypillisesti, mutta uudempia lähestymistapoja, joita kutsutaan yhteisesti ketterän ohjelmistokehityksen , kehittäjät usein kaikki omat testaus-, ja osoittaa ohjelmiston käyttäjille / asiakkaille säännöllisesti saada palautetta. Ohjelmistoa voidaan testata yksikkötestauksella , regressiotestillä ja muilla menetelmillä, jotka suoritetaan manuaalisesti tai yleisimmin automaattisesti, koska testattavan koodin määrä voi olla suuri. Komento -ohjelmistoja sisältävät ohjelmat mahdollistavat laitteistosuunnittelun ja järjestelmätoimintojen toimimisen paljon helpommin yhdessä.

Lisenssi

Ohjelmiston lisenssi antaa käyttäjälle oikeuden käyttää ohjelmistoa lisensoidussa ympäristössä ja ilmaisten ohjelmistolisenssien yhteydessä myös muita oikeuksia, kuten oikeuden tehdä kopioita.

Ohjelmistot voidaan jakaa kahteen tyyppiin:

  • freeware , joka sisältää luokan "ilmainen kokeilu" -ohjelmisto tai " freemium " -ohjelmisto (aiemmin termiä shareware käytettiin usein ilmaiseen kokeilu-/freemium -ohjelmistoon). Kuten nimestä voi päätellä, ilmaisohjelmia voidaan käyttää ilmaiseksi, vaikka ilmaisten kokeilujen tai freemium -ohjelmistojen tapauksessa tämä on joskus totta vain rajoitetun ajan tai rajoitetuilla toiminnoilla.
  • ohjelmisto, joka on saatavilla maksua vastaan ​​ja jota voidaan käyttää laillisesti vain lisenssin ostossa.

Avoimen lähdekoodin ohjelmiston mukana tulee ilmainen ohjelmistolisenssi, joka antaa vastaanottajalle oikeuden muokata ja jakaa ohjelmistoa uudelleen.

Patentit

Ohjelmistopatenttien, kuten muidenkin patenttien, on teoriassa tarkoitus antaa keksijälle yksinomainen, määräaikainen lisenssi yksityiskohtaiselle idealle (esim. Algoritmille) ohjelmiston tai ohjelmiston osan toteuttamisesta. Ideoita hyödyllisistä asioista, joita ohjelmisto voisi tehdä , ja käyttäjien vaatimukset eivät ole patentoitavissa, eikä myöskään konkreettisten toteutusten (toisin sanoen patentin toteuttavien todellisten ohjelmistopakettien) pitäisi olla patentoitavissa - jälkimmäiset ovat jo tekijänoikeuden alaisia, yleensä automaattisesti. Ohjelmistopatenttien on siis tarkoitus kattaa keskialue, vaatimusten ja konkreettisen toteutuksen välissä. Joissakin maissa vaatimus keksinnöstä vaikuttaa fyysiseen maailmaan voi myös olla osa ohjelmistopatentin voimassaoloa koskevia vaatimuksia - vaikka kaikki hyödylliset ohjelmistot vaikuttavat fyysiseen maailmaan, tämä vaatimus voi olla avoin keskustelulle. Samaan aikaan Amerikan tekijänoikeuslakia sovellettiin ohjelmistokoodin kirjoittamisen eri osa -alueisiin.

Ohjelmistopatentit ovat kiistanalaisia ​​ohjelmistoalalla, ja monilla ihmisillä on eri näkemyksiä niistä. Yksi kiistojen lähteistä on se, että edellä mainittua jakoa alkuperäisten ideoiden ja patentin välillä ei näytä käytännössä kunnioittavan patenttijuristit-esimerkiksi aspektisuuntautuneen ohjelmoinnin patentti (AOP), jonka väitettiin vaativan oikeuksia mihin tahansa ohjelmointityökaluun toteuttamaan AOP -ajatuksen, miten se toteutettiin. Toinen kiistojen lähde on vaikutus innovointiin, ja monet arvostetut asiantuntijat ja yritykset väittävät, että ohjelmistot ovat niin nopeasti muuttuva ala, että ohjelmistopatentit aiheuttavat vain valtavia ylimääräisiä oikeudenkäyntikustannuksia ja riskejä ja hidastavat innovointia. Ohjelmistopatenteista Yhdysvaltojen ulkopuolella käytävissä keskusteluissa on esitetty väite, että suuret amerikkalaiset yritykset ja patenttijuristit ovat todennäköisesti ensisijaisia ​​edunsaajia ohjelmistopatenttien sallimisesta tai jatkamisesta.

Suunnittelu ja toteutus

Ohjelmiston suunnittelu ja toteutus vaihtelevat ohjelmiston monimutkaisuuden mukaan. Esimerkiksi Microsoft Wordin suunnittelu ja luominen veivät paljon enemmän aikaa kuin Microsoft Notepadin suunnittelu ja kehittäminen, koska jälkimmäisessä on paljon enemmän perustoimintoja.

Ohjelmistot kehitetään yleensä integroiduissa kehitysympäristöissä (IDE), kuten Eclipse , IntelliJ ja Microsoft Visual Studio, jotka voivat yksinkertaistaa prosessia ja koota ohjelmiston. Kuten eri osassa, ohjelmisto on yleensä luotu päälle nykyisiä ohjelmistoja ja Application Programming Interface (API), jonka taustalla ohjelmisto tarjoaa kuten GTK + , JavaBeans tai Swing . Kirjastot (API) voidaan luokitella niiden tarkoituksen mukaan. Esimerkiksi Spring Frameworkia käytetään yrityssovellusten toteuttamiseen , Windows Forms -kirjastoa graafisen käyttöliittymän (GUI) sovellusten, kuten Microsoft Wordin, suunnitteluun , ja Windows Communication Foundationia käytetään verkkopalvelujen suunnitteluun . Kun ohjelma suunnitellaan, se perustuu sovellusliittymään. Esimerkiksi Microsoft Windows -työpöytäsovellus voi kutsua API -toimintoja .NET Windows Forms -kirjastoon, kuten Form1.Close () ja Form1.Show () sulkeaksesi tai avataksesi sovelluksen. Ilman näitä sovellusliittymiä ohjelmoijan on kirjoitettava nämä toiminnot kokonaan itse. Yritykset, kuten Oracle ja Microsoft, tarjoavat omat sovellusliittymänsä, joten monet sovellukset on kirjoitettu niiden ohjelmistokirjastojen avulla, joissa on yleensä useita sovellusliittymiä.

Tietorakenteet , kuten tiivistetaulukot , matriisit ja binaaripuut , ja algoritmit , kuten pikalähde , voivat olla hyödyllisiä ohjelmiston luomisessa.

Tietokoneohjelmistoilla on erityisiä taloudellisia ominaisuuksia, jotka tekevät sen suunnittelusta, luomisesta ja jakelusta erilaisen kuin useimmat muut taloudelliset hyödykkeet.

Ohjelmistoa luovaa henkilöä kutsutaan ohjelmoijaksi , ohjelmistosuunnittelijaksi tai ohjelmistokehittäjäksi, kaikilla termeillä on sama merkitys. Ohjelmoijille on olemassa myös epävirallisempia termejä, kuten "kooderi" ja "hakkeri" - vaikka jälkimmäisen sanan käyttö voi aiheuttaa sekaannusta, koska sitä käytetään useammin henkilöön, joka laittomasti murtautuu tietokonejärjestelmiin .

Katso myös

Viitteet

Lähteet

Ulkoiset linkit