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

Kanpo estekak 

Software ingeniaritza