310 likes | 545 Views
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)
E N D
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) • 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.)
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.
Š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
Š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)
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.
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.
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
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
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
Dobar softver KorisnikProgramer funcionalan na vrijeme ispravan u okviru sredstava pouzdan jednostavan za održavanje robustan dobro dizajniran korisničko sučelje dokumentacija
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”.
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.
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.
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.
Š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)
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.
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
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.
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.
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.
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 …
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.
Životni ciklus softvera Software 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).
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.
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.
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: