# Software ingeniaritza

Software-ingeniaritza konputazio-zientzien adarretako bat da, eta software fidagarria eta kalitatezkoa sortzea aztertzen du, ingeniaritzako metodoetan eta tekniketan oinarrituta, eta eragiketa- eta mantentze-euskarriak eskainiz. Software-ingeniaritzaren azterketa-eremuak konputazio-zientziak, zientzia aplikatuak eta ingeniaritzaren euskarri diren oinarrizko zientziak biltzen ditu.
Softwarea sortzeko prozesua berez sortzailea da eta softwarearen ingeniaritza prozesu hori sistematizatzen saiatzen da. Helburua lortzeko porrot-arriskua mugatzeko, aurreko esperientzian oinarrituta, egokiak direla frogatu diren hainbat teknika erabiltzen dira.
Software-ingeniaritza softwareari aplikatutako ingeniaritzatzat har daiteke, hau da, bitarteko sistematizatuen bidez eta aurrez ezarritako tresnen bidez, horiek ahalik eta modu eraginkorrenean aplikatzea emaitza optimoak lortzeko; ingeniaritzak beti bilatzen ditu helburu horiek. Helburua ez da problemak ebaztea bakarrik, baizik eta soluzio desberdinak kontuan hartuta, egokiena aukeratzea.

## Historia

Softwarea-ingeniaritza terminoa 1950eko hamarkadaren amaieran agertu zen lehen aldiz. Softwarearen ingeniaritza 1960tik 1980ra bitarteko hamarkadetako softwarearen krisiak bultzatu zuen. Softwarearen ingeniaritzak software-sistemen garapen- eta mantentze-prozesuak printzipio eta metodologien bidez identifikatzen eta zuzentzen laguntzen du.
1980ko hamarkadarako, softwarearen jabetza eta mantentze kostua softwarearen garapena bera baino bi aldiz garestiagoa izan zen, eta 1990eko hamarkadan, jabetza eta mantentze kostuak % 30 egin zuen gora aurreko hamarkadarekin alderatuta. 1995ean, garapen-proiektu asko operazionalak ziren, baina ez ziren arrakastatsutzat hartzen. Software-proiektu ertainak % 50ean gainditzen zuen aldez aurretik egindako denbora-estimazioa; gainera, bezeroari ematen zitzaizkion software-produktu handi guztien % 75ak hain akats larriak zituztenez, ez ziren batere erabiltzen edo, besterik gabe, ez zituzten bezeroaren eskakizunak betetzen.
Interneten erabileraren gorakadak World Wide Web-ean informazioa hedatzeko nazioarteko sistemen eskaria izugarri haztea ekarri zuen.
Software ingeniaritzak 90.000 milioi dolar inguru eman zituen urtean, Internet jokoan sartu baitzen. Horren ondorioz, garatzaileek irudiak, mapak eta animazioak erabili beharra sortu zen irudien bistaratzea/biltegiratzea optimizatzeko (adibidez, miniaturazko irudien erabilera). Nabigatzaileak erabiltzeak eta HTML lengoaia erabiltzeak izugarri aldatu zuen informazioa ikustea eta jasotzea.

## Helburua

Software-ingeniaritzak hainbat arau eta metodo aplikatzen ditu emaitza hobeak lortzeko, softwarearen garapenari eta erabilerari dagokienez. Prozedura horiek behar bezala aplikatuz, software-ingeniaritzaren funtsezko helburuak egoki bete daitezke.
Software-ingeniaritzaren helburuen artean daude:
* Aplikazioen edo softwarearen diseinua hobetzea, sortu ziren erakundeen beharretara edo helburuetara hobeto egokitzeko.
* Aplikazio konplexuen bidez kalitate handiagoa sustatzea.
* Zehaztasun handiagoa ematea proiektuen kostuetan eta horiek garatzeko denboran.
* Sistemen eraginkortasuna handitzea, ahalik eta kalitaterik onena bilatuz sortu nahi diren beharrei eta emaitzei dagokienez. Horretarako, prozesuak sartuko dira, arau espezifikoen bidez garatutako softwarearen kalitatea neurtzeko.
* Lantaldeak hobeto antolatzea, softwarea garatzeko eta mantentzeko arloan.
* Proben bidez, garatutako softwareak hobeto funtziona dezan egin daitezkeen hobekuntzak antzematea.

## Inplikazio sozioekonomikoak
### Ekonomikoki

Estatu Batuetan, softwareak BPGren hazkunde osoaren zortziren bat lagundu zuen 1990eko hamarkadan. Software ingeniaritzak hazkunde ekonomikoan eta produktibitatean lagundu zuen hamarkada horretan (1 $ bilioiko irabaziekin).

### Sozialki

Software ingeniaritzak munduko kultura aldatzen du ordenagailuaren erabilera zabaltzeagatik. Posta elektronikoak (e-maila), WWWk eta berehalako mezularitzak modu berrietan elkarreragiteko aukera ematen dio jendeari. Softwareak kostua jaisten du eta osasun-zerbitzuen, suhiltzaileen departamentuen, gobernu-bulegoen eta beste gizarte-zerbitzu batzuen kalitatea hobetzen du. Software-ingeniaritzako metodoak erabili diren proiektu arrakastatsuen artean daude GNU/Linux, espazio-transbordadorearen softwarea, kutxazain automatikoak eta beste asko.

## Metodologia
### Prozesuaren etapak

Software-ingeniaritzak etapaka taldekatutako zeregin ugari egitea eskatzen du; etapa horiei guztiei bizi-zikloa esaten zaie. Bizi-zikloaren ia eredu guztien etapa komunak honako hauek dira:

#### Betekizunak lortzea

Zeri buruz lan egiten ari den identifikatu behar da, hau da, azterlanaren hasiera eta software berriaren sorrera edo lehendik dagoen software baten aldaketa eragiten duen gai nagusia.

#### Betekizunen azterketa

Betekizunen azterketa lan erraza izan daiteke, baina ez, askotan bezeroek softwareak ondo funtzionatzeko behar duen guztia dakitela pentsatzen dutelako; hala ere, espezialistaren baten trebetasuna eta esperientzia behar da eskakizun osatugabeak, anbiguoak edo kontraesankorrak aitortzeko. Eskakizun horiek zehazteko, azken erabiltzailearen beharrak hartzen dira kontuan, eta lantzen diren sistemen kalitatea hobetzeko aukera emango diguten teknikak sartzen dira.

#### Mugak

Softwareek adimena emulatzeko gaitasuna dute, giza adimenaren ezaugarri jakin batzuen eredu bat sortuz. Dena den, aurrez definitutako funtzioak baino ez dituzte, eta eremu batzuetan irtenbide mugatuak eskaintzen dituzte.

#### Espezifikazioa

Betekizunen zehaztapenak garatutakoan, softwarean espero den portaera deskribatzen du espezifikazioak. Software-proiektu baten arrakastaren zati handi bat negozioaren beharrak identifikatzean eta erabiltzaile funtzionalekiko elkarreraginean datza. Elkarreragin horren bidez, softwarearen eskakizunak bildu, sailkatu, identifikatu, lehenetsi eta zehaztuko dira.

#### Arkitektura

Azpiegituren integrazioak, aplikazioen garapenak, datu-baseek eta gerentzia-tresnek gaitasuna eta lidergoa behar dute kontzeptualizatuak eta etorkizunerako proiektatuak izateko, gaur egungo arazoak konponduz. Jarduera horiek guztiak arkitektoaren esku uzten dira.

#### Programazioa

Diseinu bat kodean inplementatzea software-ingeniaritzako lanaren zatirik nabariena izan daiteke, baina ez da nahitaez lan handiena eskatzen duena, ezta zailena ere. Etapa honen konplexutasunak eta iraupenak lotura estua dute erabilitako programazio-lengoaiekin eta aurretik egindako diseinuarekin.

#### Aplikazioaren garapena

Aplikazioa garatzeko, bost fase hartu behar dira kontuan aplikazio edo programa eraginkor bat izateko:
* Azpiegituraren garapena
* Paketea egokitzea
* Interaktiboen diseinu-unitateak garatzea
* Batch diseinu-unitateak garatzea
* Eskuzko diseinu-unitateak garatzea

#### Software-probak

Softwareak arazoaren zehaztapenean adierazitako atazak behar bezala egiten dituela egiaztatzean datza. Teknika bat softwarearen modulu bakoitza bereizita probatzea da (proba unitarioa), eta, ondoren, modu integralean probatzea (integrazio-probak), helburura iristeko.

#### Inplementazioa

Software-diseinua inplementatzeko etapa sistemaren espezifikazio bat sistema exekutagarri bihurtzeko prozesua da. Softwarea diseinatzeko eta programatzeko prozesuak eskatzen ditu beti, baina garapen-ikuspegi ebolutiboa erabiliz gero, softwarearen espezifikazioa fintzea ere ekar dezake.

#### Dokumentazioa

Softwarearen garapenaren eta proiektuaren kudeaketaren dokumentazioari dagokion guztia da, modelazioak (UML), erabilera-kasuen diagramak, probak, erabiltzaile-eskuliburuak, eskuliburu teknikoak eta abar barne hartuta; hori guztia balizko zuzenketak, erabilgarritasuna, etorkizuneko mantentze-lanak eta sistemari zabalkuntzak egiteko helburuarekin.

#### Mantentze-lanak

Softwarea mantentzera eta hobetzera bideratutako fasea da, aurkitutako akatsak zuzentzeko eta betekizun berriak txertatzeko. Honek denbora gehiago behar izan dezake hasierako softwarearen garapenak baino.

### Abantailak
#### Kudeaketaren ikuspegitik

* Proiektuaren jarraipena egitea erraztea
* Baliabideen erabilera optimizatzea
* Erabiltzaileen eta garatzaileen arteko komunikazioa erraztea
* Emaitzen ebaluazioa eta helburuen betetze-maila erraztea

#### Software-ingeniarien ikuspegitik

* Arazoa ulertzen laguntzea
* Berrerabiltzeko aukera ematea
* Azken produktuaren mantentze-lanak erraztea
* Garapen-prozesuaren multzoa eta fase bakoitza optimizatzea

#### Azken bezero edo erabiltzailearen ikuspegitik

* Azken produktuaren kalitate-maila bermatzea
* Proiekturako bizi-ziklo egokia lortzea
* Proiektuaren definizioan erakutsitako denbora-epeetan konfiantza izatea

## Erreferentziak

* 1 2 (Ingelesez) Software Engineering Course (SWEBOK)| IEEE Computer Society. (Noiz kontsultatua: 2022-11-03).
* ↑ (Gaztelaniaz) dice, MODELO DE ANÁLISIS « Mundo Kramer's Blog. (2011-05-19). «Especificaciones de requerimiento, características y limitaciones del software» Mundo Kramer's Blog (Noiz kontsultatua: 2022-11-03).
* ↑ Pressman, Roger S.. (2003). Ingeniería del software, un enfoque práctico. Mexico: Mc Graw Hill.
* ↑ Daniel Sócola Escobar. (2008-06-19). MetodologíAs Y Ciclos De Vida. (Noiz kontsultatua: 2022-11-03).

## Kanpo estekak

* Datuak: Q80993
* Multimedia: Software engineering / Q80993