29
PROGRAMSKO INŽENJERSTVO Maja Štula

PROGRAMSKO INŽENJERSTVO

Embed Size (px)

DESCRIPTION

PROGRAMSKO INŽENJERSTVO. Maja Štula. PROGRAMSKO INŽENJERSTVO - Definicija. Izvor - IEEE Stdandard br. 610 ( IEEE Standard Computer Dictionary ) iz 1990. god. (IEEE – Institute of Electronics and Electrical Engineering) - PowerPoint PPT Presentation

Citation preview

Page 1: PROGRAMSKO INŽENJERSTVO

PROGRAMSKO INŽENJERSTVO

Maja Štula

Page 2: PROGRAMSKO INŽENJERSTVO

2

PROGRAMSKO INŽENJERSTVO - Definicija

• Izvor - IEEE Stdandard br. 610 (IEEE Standard Computer Dictionary) iz 1990. god. (IEEE – Institute of Electronics and Electrical Engineering)

• je primjena sistematskog, mjerljivog pristupa u razvoju, radu i održavanju softvera; tj. primjena inženjerstva na softver. (The application of a systematic, disciplined, quantifiable approach to the development, operation, and maintenance of software; that is, the application of engineering to software.)

• Izvor - http://en.wikipedia.org/wiki• je područje kreiranja i održavanja softverskih aplikacija primjenom

tehnologije i prakse iz područja računalne znanosti, upravljanja projektima, inženjerstva, područja primjene i drugih područja. (Software engineering is the profession that creates and maintains software applications by applying technologies and practices from computer science, project management, engineering, application domains, and other fields.)

Page 3: PROGRAMSKO INŽENJERSTVO

3

Početak• Pojam programsko inženjerstvo (software engineering) je

kreiran 1968. godine na konferenciji o softverskim tehnologijama u Njemačkoj, Garmisch-Partenkirschen (1968 NATO Conf. On Software Technology).

“What we need is software engineering.” – F.L.Bauer

• Na konferenciji je ukazano da je kvaliteta razvijene programske podrške na nedopustivo niskoj razini.

• Dogovoreno je konsenzusom da je potrebno ustanoviti novu inženjersku disciplinu tj. područje (engineering disciplines) koje će se baviti razvojem softvera tzv. software engineering.

• Programsko inženjerstvo, kao i tradicionalna inženjerska područja, bavi se pitanjima razvoja proizvoda kroz prizmu pouzdanosti i troškova razvijenog proizvoda.

Page 4: PROGRAMSKO INŽENJERSTVO

4

Što je inženjerstvo?

• Tradicionalno poimanje:– rješavanje stvarnih, realnih problema (kako prijeći

određenu udaljenost → auto)

– razumna rješenja po pitanju cijene, korištenja resursa, performansi proizvoda, ponovnog korištenja

– zasniva se na znanosti:• matematičko modeliranje

• mogućnost ponavljanja rezultata

Page 5: PROGRAMSKO INŽENJERSTVO

5

Što je inženjerstvo?

• koristi kodirano znanje; znanje i iskustvo se prenosi:– zapisano u priručnicima– organizirano za razumijevanje i ponovno korištenje

• postoji profesionalna odgovornost:– profesionalna etika– kodovi ponašanja– akreditacije i nadgledanje od strane profesionalnih

udruženja (IEEE)

Page 6: PROGRAMSKO INŽENJERSTVO

6

NAČELA ETIKE I PROFESIONALNOG RADA U PROGRAMSKOM INŽENJERSTVU• Prema preporuci IEEE-CS/ACM Joint Task Force on Software Engineering Ethics and Professional

Practices te zajednički usvojena od udruga ACM i IEEE-CS kao norma za podučavanje i stručni rad u programskom inženjerstvu.

• Izvorni dokument: Software Engineering Code of Ethics and Professional Practice (Version 5.2)

• PREDGOVOR• Kratka verzija načela ponašanja predstavlja sažetak vrlo uopćenih težnji, dok puna verzija daje

primjere i pojedinosti načina na koji te težnje mijenjaju ponašanje nas kao profesionalnih programskih inženjera. Bez ovih težnji pojedinosti ostaju pravnički suhoparne i zamorne, bez pojedinosti težnje bivaju zvučne ali isprazne, zajedno, međutim, težnje i pojedinosti tvore povezana načela ponašanja.

• Programski inženjeri obvezuju se da će analizu, specifikaciju, oblikovanje, razvoj, provjeru i održavanje programskih proizvoda učiniti korisnom i poštovanom strukom. U skladu sa svojom obvezom prema zdravlju, sigurnosti i dobrobiti javnosti, programski inženjeri se obvezuju pridržavati slijedećih osam načela:

• 1. JAVNI INTERES - Programski inženjeri djeluju u skladu s javnim interesom.• 2. KLIJENT I POSLODAVAC - Programski inženjeri djeluju u skladu s interesima njihovog

klijenta ili poslodavca, a koji nisu u suprotnosti s javnim interesom.• 3. PROIZVOD - Programski inženjeri obvezuju se osigurati da njihovi proizvodi i prateće izmjene

zadovoljavaju najviše moguće standarde struke.• 4. PROSUDBA - Programski inženjeri održavaju integritet i neovisnost u svojim stručnim

prosudbama• 5. UPRAVLJANJE - Menedžeri i voditelji programskog inženjeringa potiču i promiču etički pristup

upravljanju programskim razvojem i održavanjem.• 6. STRUKA - Programski inženjeri unapređuju čestitost i ugled struke u skladu s javnim interesom.• 7. KOLEGIJALNOST - Programski inženjeri međusobno se podržavaju i ophode pošteno.• 8. ODNOS PREMA SEBI - Programski inženjeri se kontinuirano stručno unapređuju i promiču

etički pristup radu u svojoj struci.

Page 7: PROGRAMSKO INŽENJERSTVO

7

Programsko inženjerstvo• Procjenjuje se (izvor U.S. Bureau of Labor Statistics)

da je u SAD-u zaposleno oko 675000 programskih inženjera i oko pola milijuna u EU i Aziji.• Otprilike polovica zaposlenih imaju diplomu iz

tzv. računalnih znanosti (computer science), ali programsko inženjerstvo se počinje odvajati na način da danas već možete dobiti i diplomu iz računalnog inženjerstva.

• Od 2004 u SAD-u oko 2000 fakulteta nudi diplomu iz računarstva, a oko 50 i diplomu iz softverskog inženjerstva.

Page 8: PROGRAMSKO INŽENJERSTVO

8

Programsko inženjerstvo

• Programsko inženjerstvo bavi se razvojem, implementacijom i održavanjem VELIKIH softverskih sustava uz ispunjenje osnovnih zahtjeva:– na vrijeme u okviru sredstava– prihvatljive performanse– ispravan, pouzdan, robustan

Page 9: PROGRAMSKO INŽENJERSTVO

9

Veliki sustavi

• više ljudi organiziranih u timove

• pažljiva analiza, dizajn, implementacija i testiranje

• > 100 KLOC (LOC – line of code)

• cijena softvera nadmašuje cijenu hardvera

• sustav je u uporabi više godina i mijenja se s vremenom

Page 10: PROGRAMSKO INŽENJERSTVO

10

Zašto je važno?

• Cijena pogreške može biti velika: – bankrot proizvođača softvera– bankrot klijenata koji ovise o softveru– financijski gubici zbog bug-ova, nefleksibilnosti sustava ili

vremena “nerada” sustava (downtime)– ljudski gubici u sigurnosno kritičnim sustavima

• Profitabilnost softvera ovisi znatno o troškovima održavanja i upgrade softvera– zahtjevi za promjenjivim dizajnom– modularnost, evolucija, portabilnost, odvajanje podataka

od funkcionalnosti

Page 11: PROGRAMSKO INŽENJERSTVO

11

Dobar softver

Korisnik Programer

funcionalan na vrijeme

ispravan u okviru sredstava

pouzdan jednostavan za održavanje

robustan dobro dizajniran

korisničko sučelje

dokumentacija

Page 12: PROGRAMSKO INŽENJERSTVO

12

Programsko inženjerstvo

• U SAD-u tijekom 90-tih softver utječe na ¼ porasta BDP (oko 90 milijardi $ godišnje) i na šestinu porasta produktivnosti (oko 33 milijarde $ godišnje).

• Programsko inženjerstvo dovelo je do porasta od $1 triliona u produktivnosti i svijetskoj ekonomiji.

• Na svakih šest projekata iz područja razvoja programske podrške dva se napuštaju.

• 75% velikih softverskih sustava imaju “operativne pogreške”.

Page 13: PROGRAMSKO INŽENJERSTVO

13

Programsko inženjerstvo

• U lipnju 1994. godine IBM Consulting Group je pregledala 24 vodeće kompanije koje su razvijale velike i raspodijeljene programske sustave – 55% razvijenog softvera je premašilo projektiranu

(planiranu) cijenu– 68% je razvijeno s vremenom većim nego

predviđenim– 88% razvijenog softvera je trebalo redizajnirati.

Page 14: PROGRAMSKO INŽENJERSTVO

14

Programsko inženjerstvo

• 1994. godine je Standish Group (http://standishgroup.com/index.php) izvršila analizu 8.380 projekata u državnom i privatnom sektoru u SAD-u i ustanovila: – 31% projekata razvoja programske podrške je obustavljeno

prije završetka– 53% je kompletirano s prosječnom cijenom koja je za oko

189% premašila predviđenu cijenu– od ovih 53% samo 42% projekata je zadržalo njihove

izvorne (originalne) značajke i funkcije– samo 9% projekata je kompletirano na vrijeme i s

predviđenim budžetom.

Page 15: PROGRAMSKO INŽENJERSTVO

15

FBI – Virtual Case File

• U IEEE Spectrumu od 9 mjeseca ova godine opisan je jedan takav projekt (koji spada u onih 31% obustavljenih).

• Zašto je projekt propao?

• VCF – Virtual Case File case-managment softver za pohranu podataka o slučajevima, za unakrsno pretraživanje podataka i sl.

Page 16: PROGRAMSKO INŽENJERSTVO

16

Što je softver?• Česta je pojava da se pojam programska podrška (software) izjednačava

s pojmom računalni program (computer programs). To je dosta restriktivan – ograničen pogled.

• Softver nisu samo programi već je to također pridružena dokumentacija kao i konfiguracijski podaci neophodni da bi ovi programi korektno radili.

• Sustav programske podrške (kao konačni produkt) obični sadrži i brojne izdvojene programe primjerice: konfiguracijske datoteke, datoteke s dokumentacijom, datoteke s dokumentacijom za korisnika, adrese za “download” dokumentacije s posljednjim informacijama o produktu (configuration files, system documentation, user documentation,download recent product information).

• Programski inženjeri su okupirani s razvojem softvera-a kao produkta za kojeg je zainteresirana korisnička populacija.

• Dva su tipa softver produkata i to:– Generički produkti (Generic product). – Produkti po narudžbi ili po mjeri korisnikovih zahtjeva (Bespoke or

customized product)

Page 17: PROGRAMSKO INŽENJERSTVO

17

Generički softver

• U načelu to je samostalan– zaseban (stand-alone system) sustav koji je proizveden u nekoj software tvrtki i prodajnom mrežom isporučen korisnicima koji su spremni za svoje potrebe taj produkt kupiti. Ponekad se za ovu programsku podršku kaže da je to “shrink-wrapped software”.

• Brojni su primjeri ovakvih produkata, primjerice: databases, word processors, drawing packages and project management tools.

Page 18: PROGRAMSKO INŽENJERSTVO

18

Produkti po mjeri korisnikovih zahtjeva

• To su programski sustavi razvijeni po potrebama kupca.

• Programska je podrška razvijena u funkciji posebnih zahtjeva kupca.

• Brojni su primjeri ovakvih sustava. Evo nekih: control systems for electronic devices, systems written to support a particular business process, air traffic control systems

Page 19: PROGRAMSKO INŽENJERSTVO

19

Razlika između programskog inženjerstva i računalne znanosti

• U suštini se računalna znanost (computer science) bavi teorijama i metodama koje se odnose na računalne i programske sustave, dok se programsko inženjerstvo (software engineering) bavi praktičkim problemima povezanim s proizvodnjom programske podrške.

• Uspoređujući zanimanje programskog inženjera i inženjera elektrotehnike mogli bi zaključiti sljedeće:– Neka znanja iz domene računalnih znanosti su od izuzetne

važnosti za programske inženjere, isto tako kako su i neke domene iz fizike od posebne važnosti za inženjere elektrotehnike.

Page 20: PROGRAMSKO INŽENJERSTVO

20

Razlika između programskog inženjerstva i sistemskog inženjerstva

• Sistemsko inženjerstvo (system engineering) ili još preciznije na računalu utemeljeno sistemsko inženjerstvo je orijentirano na sve aspekte razvoja (development) i kasnije evolucije (evolution) složenih sustava u kojima software ima glavnu ulogu.

• Sistemsko inženjerstvo se dakle odnosi na razvoj tehničke podrške (hardware development), oblikovanje procesa (process design), uspostavljanje sustava (system deployment) te konačno na programsko inženjerstvo.

• Sistemski inženjeri su uključeni u specifikaciju sustava, definiranje svekolike arhitekture sustava, te konačno integracije – povezivanje različitih dijelova sustava u cjelinu. Oni su manje uključeni u inženjering komponenata sustava (primjerice: hardware, software...).

• System engineering je dakle “starija” disciplina u odnosu na software engineering.

Page 21: PROGRAMSKO INŽENJERSTVO

21

Softverski proces• Skup aktivnosti kao i pridruženi im rezultati što se javljaju pri

produkciji - proizvodnji programske podrške nazivamo procesom programske podrške ili softverskim procesom.

• To su:• Specifikacija programske podrške (software specification)

obuhvaća definiranje funkcionalnosti programske podrške i ograničenja u operativnom radu.

• Razvoj programske podrške (software development) dovodi do konačnog produkata, a mora se odvijati u skladu sa specifikacijom programske podrške.

• Legaliziranje programske podrške (software validation) odvija se u suglasju s željama kupca i odraz je njegovih zahtjeva.

• Evolucija programske podrške (software evolution) mora se moći odvijati u suglasju s zahtjevima i potrebama kupca programske podrške.

Page 22: PROGRAMSKO INŽENJERSTVO

22

Model softverskog procesa• Model procesa programske podrške predstavlja pojednostavljeni opis

procesa programske podrške koji je obično predstavljen za svaki posebni slučaj. Osim toga, model je uvijek pojednostavljeni opis fizikalne predodžbe, pa je tako i model procesa programske podrške apstrakcija aktualnog procesa kojega opisujemo.

• Neki primjera tipova modela procesa programske podrške su:• Vodopadni model (workflow model) koji prikazuje dijelove aktivnosti u

procesu s pripadnim ulazima, izlazima i međuzavisnostima. Aktivnosti i takvom modelu u načelu

• predstavljaju aktivnosti čovjeka.• Tijeka podataka ili model djelatnosti (dataflow or activity model)

predstavlja proces kao skup aktivnosti koje za posljedicu imaju podatkovnu transformaciju. Primjerice, ono prikazuje kako se ulazi u proces kao recimo specifikacija transformiraju u izlaz kao recimo oblikovanje.

• Brojni su i različiti modeli ili paradigme za razvoj programske podrške. Primjerice: the waterfall approach, evolutionary development, formal transformation, system assembly from reusable components …

Page 23: PROGRAMSKO INŽENJERSTVO

23

Requirementsdefinition

System andsoftware design

Implementationand unit testing

Integration andsystem testing

Operation andmaintenance

Vodopadni model

Page 24: PROGRAMSKO INŽENJERSTVO

24

Vodopadni model• Izvorno je model prenesen iz već postojećih metoda

inženjerskih procesa i prihvaćen u projektima programskog inženjerstva.

• Temeljna mu je odrednica vidljivost svih faza u procesu razvoja softwarea.

• Kako model osigurava kaskadni prijelaz s jedne na drugu fazu često se naziva i "waterfall" – vodopadni model. Brojne su varijante u primjenama ovog modela, ali zajednički je za sve da se proces odvija kroz faze:– definicija i analiza zahtijeva,– oblikovanje programske podrške i sustava,– implementacija i testiranje jedinica sustava,– integracija i testiranje sustava,– rad i održavanje.

• Navedene faze čine životni ciklus programske podrške.

Page 25: PROGRAMSKO INŽENJERSTVO

25

Životni ciklus softveraSoftware life-cycle

• The complete lifetime of a software system from initial conception through to final obsolescence (Dictionary of Computing, Third edition, 1991).

Životni ciklus programske podrške• Izgradnja programskog sustava može se zorno

usporediti s izgradnjom bilo kojeg inženjerskog proizvoda, npr. s izgradnjom građevinskog objekta. Njegov razvoj treba planirati, analizirati potrebe za njegovo uvođenje, zatim ga oblikovati, izraditi odnosno proizvesti, uvesti u rad, tijekom rada održavati.

• Zato se i govori o životnom ciklusu programske podrške (Grupa autora: Poslovno računarstvo, 1998).

Page 26: PROGRAMSKO INŽENJERSTVO

26

Page 27: PROGRAMSKO INŽENJERSTVO

27

Metode programskog inženjerstva• Metoda programskog inženjerstva se obično promatra kao strukturirani

pristup razvoju softvera s ciljem da se omogući proizvodnja visoke kvalitete, ali tako da ta proizvodnja u pogledu cijene bude i najprihvatljivija.

• Metode kao primjerice: Structured Analysis (DeMarco, 1978); Jackson System Development (Jackson,1983) su bile razvijene već ’70 godina prošlog stoljeća. Ove su metode nastojale identificirati temeljene funkcionalne komponente sustava. Nazivale su se i funkcijski orijentirane (function-oriented methods), a bile su dosta zastupljene u primjenama.

• U ‘80 i ’90 ove function-oriented methods su bile dopunjene s objektno-orijentiranim metodama kao što su primjerice: Booch (Booch, 1994) and Rumbaugh (Rumbaugh, Blaha et al., 1991) metoda.

• Ovi su se različiti pristupi kasnije integrirali u jedinstvene pristupe izgrađene oko Unified Modeling Language (UML) Fowler and Scott, 1997; Booch, Rumbaugh et al., 1999; Rumbaugh, Jacobson et al., 1999).

• Nema idealne metode. Različite metode imaju i različita područja na kojima se uspješno primjenjuju. Primjerice, objektno-orijentirane metode će se obično koristiti u interaktivnim sustavima, ali neće u sustavima sa strogo definiranim zahtjevima za primjenu u realnom vremenu.

Page 28: PROGRAMSKO INŽENJERSTVO

28

CASE• CASE - Computer-Aided Software Engineering obuhvaća različite

programske alate za podršku aktivnosti u softverskom procesu kao što su: requirements analysis, system modeling, debugging and testing.

• Sve metode danas raspolažu s CASE tehnologijom kao što su različiti uređivači, moduli za analizu i provjeravanje modela sustava u suglasju s postavljenim pravilima, kao i generatori izvještaja koji pomažu u izgradnji sustava dokumentacije.

• CASE alati također uključuju i generatore izvornog programskog koda.

• CASE alat ima i svoju dekompoziciju. U vezi s tim oni koji podržavaju analizu i oblikovanje se ponekad nazivaju CASE alati visoke razine, jer u suštini podržavaju rane faze u razvoju software-a. CASE alate za podržavanje implementacije i testiranja (debuggers, program analysis systems, test case generators and program editors) često nazivamo CASE alatima niske razine.

Page 29: PROGRAMSKO INŽENJERSTVO

29

Cijena

• Obično nije jednostavan generalan odgovor na ovo pitanje.

• Naime precizna raspodjela financijskih sredstava ovisi kako o primijenjenom procesu tako i o softveru koji se razvija.

• Ako je ukupna cijena razvoja složenog programskog sustava iskazana sa 100 jedinica, tada raspodjela ove cijene po sastavnim dijelovima obično bude kao na slici: