Software-errore

thumb| Ezagutzen den lehenengo "bug" informatikoari buruzko legendaren jatorriaren argazkia.
**Software-akats** bat edo **zorri** bat (*software **bug*** ingelesez ), ordenagailu edo konputagailu-programen (softwarea) sorreraren prozesuan hutsegite edo akats baten emaitza da. Hutsegite hori softwarearen bizitzaren zikloaren edozein etapetan agertu ahal da, nabarienak garapen eta programazioaren etapan ematen diren arren. Erroreak softwarearen sorreraren edozein etapatan gertatu ahal dira.

1947.an, Mark Iiren sortzaileek ordenagailu batean gertatutako lehen errorearen berri eman zuten, intsektu batek eragindakoa. Mark Ii, 1944an eraikitako ASCC MARK I-ren ondorengo ordenagailua, hutsegite bat jasan zuen errele elektromagnetiko batean. Errele hori ikertu zenean, errelea irekita gera zedila eragin zuen sits bat aurkitu zen .

Grace Murray Hopper, Fisikan lizentziaduna eta matematikari gailena, Mark Iian programatzaile gisa lan egin zuena, intsektua bitakoran itsatsi zuen zinta itsasgarriaz (irudia) eta arazoaren kausa deskribatzeko "zomorro" hitza erabili zuen..

Gertakari hau "bug" (zomorro) ingelesezko terminoaren erabileraren iturburu bezala okerki ezaguna da, aparatu edo sistema batean arazo bat adierazteko. Egia esan, Thomas Alva Edisonek "bug" erabilia zuen dagoeneko interferentziekin eta funtzionamendu okerrarekin erlazionatutako zenbait oharretan. Gracek lehen aldiz informatikarekin lotu zuen, kasu honetan, egiazko intsektu batekin erlazionatua. Dena den, XX. mendeko 50.ko hamarkadan, Gracek "debug" terminoa ere erabili zuen programazioa-kodeetan erroreen arazketaz mintzatzean.

softwarearen programazio-erroreen detekzioan eta ezabaketan laguntzen duten programei araztaile (debugger) izena ematen zaie.

## Programen diseinuan akatsak 
* Daltonismoa duten pertsonentzat kolore desegokiekin diseinuak
* Tamainagatik edo diseinuagatik irakurketa zaileko tipografiak dituzten testuak erabiltzen dituzten diseinuak.
* Mugimendu-disfuntzioak dituzten pertsonentzat teklatu bidezko aukerarik utzi gabe, saguaren erabilera behartzen dituzten diseinuak.
* Inplikazio kulturalak dituzten diseinuak, adibidez kultura jakin batean lotsa edo isekarako objektu izan daitezkeen gorputzaren atalak, edo identitate kultural edo erlijiosoaren ezaugarriak dituzten ikurrak erabiltzean .
* Instalatuko den ekipoak ezaugarri jakin batzuk dituela estimatzea, adibidez pantailaren bereizmena, prozesadorearen abiadura, memoria-kopurua edo Internetari konektagarritasuna.

## Ohiko programazio-erroreak 
* Zeroz zatitu
* Ziklo infinitua
* Problema aritmetikoak, adibidez, gainezkatzeak (*overflow*) edo gainezkatze negatiboak (*underflow*).
* Arrayren tamaina gainditzea
* Hasieratu gabeko aldagai bat erabiltzea
* Baimendu gabeko memoriari atzitzea (access violation)
* Memoria-galera (*memory leak*)
* Pilaren gainezkatzea edo gainezkatze negatiboa ( )
* Buferraren gainezkatzea (*buffer overflow*)
* Elkar-blokeoa (*Deadlock*)
* Datu-baseetan taulen indexatze desegokia.
## Instalazio edo programazio akatsak 
* Sistemaren (DLL Hell) edo programa bat baino gehiagorako amankomunak diren liburutegien ezabaketa edo ordezkapena.
* Instalazioa egin dadin erabiltzaile baten saioa arbitrarioki berrabiarazi.
* Erabiltzaileak Internetera konexio iraunkor bat duela aurresuposatzea.

## Programazio-lengoaien errore-kodeak 
Programazio-lengoaia gehienek gutxienez bi errore mota izaten dituzte, programatzaileei aukera ematen dietenak programen akatsak maneiatzeko eraginkorra eta azken erabiltzailearekin oldarkorra ez den era batez. Errore hauek dirakonpilaziokoak eta exekuzio-denborako erroreak.

Konpilazio-erroreek normalean iturburu-kodea programa exekutagarri baten sorburu izatea eragozten dute, exekuzio-denborako erroreak, berriz, programatik kanpoko gertaera batek bere exekuzioa eragozten duen berariazko egoerak dira. Normalean programatzaile eraginkor batek imajinatzen saiatu behar du gertaera horien aurrean nola erantzun behar den, programa izan dadin, eta ez erabiltzailea edo sistema eragilea, arazoa ebatz dezan. Honela, adibidez, maneiatu gabeko errore-bloke batek ondokoa egin ahal izango luke:

 "nirefitxategia" fitxategia irekitzen du idazketarako.
 Datuak idazten hasten da nire fitxategia.
 Fitxategia ixten du

"nirefitxategia" ez ba da existitzen (edo programak edo erabiltzaileak ez dute irekitzeko pribilegio nahikorik), sistema eragileak programak harrapatuko ez duen errore bat itzuliko du eta honakoa bezalako mezu bat izango dugu ""nirefitxategia" fitxategia ezin du idazketarako irekia izan" eta berriro saiatzeko, bertan-behera uzteko eta ezeztatzeko botoiak ( Windows sistema eragilean), mugagabeki errepikatzea baizik beste ekintzarik izango ez dutenak, ziklo horretatik irteteko aukerarik gabe, programa bortizki amaituz ez bada. Errorea exekuzio-garaian harrapatzeko aukera ematen duen kode bat ondokoa izango litzateke:

 "nirefitxategia" fitxategia irekitzen du idazketarako.
 Sistema eragileak aukera ematen badu
  "nirefitxategia"n datuak idazten hasten da.
 Ez ba zuen aukerarik eman 
  Erabiltzaileari gertatzen denaz informatzen dio
  Erabiltzailea itzultzen du gatazkarik ez dagoen puntu batetara (menu nagusia, adibidez)
 Normalki operatzean jarraitzen du

Programazio-lengoaia diferenteek eraikuntza logiko diferenteetarako aukera ematen diete programatzaileei exekuzio-garaian erroreak harrapatzeko eta ebazteko, adibidez, programazio-lengoaia diferenteetako ''assert, try" eta "on error" aginduak.

## Ikus, gainera 
* Last Error
* Segurtasuna-zuloa
* Bugzilla
* Hotfix
* Araztailea
* Programen arazketa
* Software Ingeniaritza
* Missingno.

## Kanpo estekak 
* INTECO-CERT-en produktuen Ahulezien Bilatzailea

## Erreferentziak