evolucija softvera

41
Evolucija softvera Uvod

Upload: moses-barton

Post on 04-Jan-2016

84 views

Category:

Documents


6 download

DESCRIPTION

Evolucija softvera. Uvod. Sadržaj. Definicija održavanja i evolucije softvera Tipovi održavanja i evolucije Zašto softver evoluira Otpornost na promene Klasifikacija aktivnosti rein ženjeringa softvera. Održavanje softvera. Održavanje softvera je - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Evolucija softvera

Evolucija softvera

Uvod

Page 2: Evolucija softvera

Evolucija softvera

Sadržaj Definicija održavanja i evolucije softvera Tipovi održavanja i evolucije Zašto softver evoluira Otpornost na promene Klasifikacija aktivnosti reinženjeringa

softvera

Page 3: Evolucija softvera

Evolucija softvera

Održavanje softvera Održavanje softvera je

Proces modifikacije softverskog sistema ili komponente nakon isporuke radi ispravljanja grešaka, poboljšanja performansi ili drugih atrubuta ili prilagodjenja novoj sredini [IEEE Std 610.12-1999]

Softverski proizvod podleže modifikaciji koda i odgovarajuće dokumentacije usled nekog problema ili potrebe za poboljšanjem. Cilj toga je da se modifikuje postojeći softverski proizvod a da se u isto vreme sačuva njegov integritet. [ISO Std 12207]

Page 4: Evolucija softvera

Evolucija softvera

Održavanje softvera Modifikacija programa nakon što je već

stavljen u upotrebu Održavanje obično ne obuhvata promenu

osnovne konstrukcije sistema. Promene se implementiraju modifikacijom

postojećih i dodavanjem novih komponenti u sistem

Page 5: Evolucija softvera

Evolucija softvera

Evolucija softvera Evolucija softvera je

niz aktivnosti, tehničkih i rukovodstvenih, koje obezbeđuju da softver nastavlja da ispunjava organizacione i poslovne ciljeve pritom iskorišćavajući poverena sredstva na najbolji način (Institut za istraživanja na polju evolucije softvera)[Research Inst. On Sw. Evolution]

svaka programerska delatnost koja je namenjena stvaranju nove verzije softvera od neke ranije verzije (Lehman i Ramil 2000)

primena mera(aktivnosti) i procesa održavanja softvera koji stvaraju novu radnu verziju softvera sa promenjenom funkcionalnošću (prema iskustvima korisnika) ili sa svojstvima prethodne radne verzije, zajedno sa odgovarajućim merama i procesima koje osiguravaju kvalitet, i rukovođenjem tim merama i procesima (Ned Chappin 1999)

Page 6: Evolucija softvera

Evolucija softvera

Sadržaj Definicija održavanja i evolucije softvera Tipovi održavanja i evolucije Zašto softveri evoluiraju Otpornost na promene Klasifikacija aktivnosti reinženjeringa

softvera

Page 7: Evolucija softvera

Evolucija softvera

Tipovi održavanja softvera Prema standardu ISO/IEC 14674 za

softverski inženjering - održavanje softvera Adaptivno održavanje

“Modifikacija softverskog proizvoda koja se izvodi nakon isporuke, a sa ciljem da se tom softverskom proizvodu sačuva upotrebna vrednost u promenjenoj sredini ili sredini koja se upravo menja."

Korektivno održavanje "Reaktivna modifikacija softverskog proizvoda

koja se vrši nakon isporuke, radi popravke otkrivenih grešaka."

Page 8: Evolucija softvera

Evolucija softvera

Tipovi održavanja softvera Prema standardu ISO/IEC 14674(…)

Perfektivno održavanje "Modifikacija softverskog proizvoda nakon

isporuke radi unapređenja performansi ili održivosti."(takođe uključuje i dodavanje novih karakteristika)

Preventivno održavanje "Modifikacija softverskog proizvoda nakon

isporuke, sa ciljem da se detektuju i isprave skrivene greške u tom softverskom proizvodu pre nego da postanu delotvorne."

Page 9: Evolucija softvera

Evolucija softvera

Tipovi održavanja softvera Prema standardu ISO/IEC 14674 za softverski

inženjering - održavanje softvera

Zašto?Kada?

Ispravka Unapređenje

Proaktivna Preventivna Perfektivna

Reaktivna Korektivna Adaptivna

Page 10: Evolucija softvera

Evolucija softvera

Tipovi održavanja softvera Klasifikacija zasnovna na objektivnom

dokazu [Chapin i drugi 2001] Klasifikuje evoluciju softvera i mere i

procese održavanja unutar softvera (uključujući dokumentaciju) koda funkcionalnosti za korisnika

poredeći softver pre i posle evolucije12 identifikovanih tipova održavanja softvera.

Page 11: Evolucija softvera

Evolucija softvera

Tipovi održavanja softvera

Da li je softver promenjen

?

1. Obuka2. Konsultacija3. Vrednovanje

Ne

Da li je izvorni kod

promenjen?

4. Reforma5. Osavremenjivanje

Da

NeDa li je funkcija

promenjena?

6. Pospremanje7. Preventiva8. Performanse9. Adaptacija

Da

Ne

10. Redukcija11. Popravka12. Unapređenje

Da

Page 12: Evolucija softvera

Evolucija softvera

Tipovi održavanja softvera Da li su ove mere izmenile softver ? Ne.

(1. Obuka) Da li su ove aktivnosti upotrebile softver kao predmet obuke korisnika?

(2. Konsultacija) Da li su ove aktivnosti upotrebile softver kao osnovu konsultacija?

(3. Vrednovanje) Da li su ove aktivnosti obuhvatile i vrednovanje softvera?

Da li su ove aktivnosti izmenile kod? Ne. (4. Reforma) Da li su ove aktivnosti učinile da se

nekodska dokumentacija bolje prilagođava korisnicima?

(5. Ažuriranje) Da li su ove aktivnosti učinile da je nekodska dokumentacija bolje prilagođena implementaciji?

Page 13: Evolucija softvera

Evolucija softvera

Tipovi održavanja softvera Da li su ove aktivnosti promenile stepen

funkcionalnosti za korisnika? Ne. (6. Pospremanje) Da li su ove aktivnosti promenile

ergonomske aspekte ili bezbednost? (7. Preventiva) Da li su ove aktivnosti zaobišle ili

smanjile posao održavanja u budućnosti? (8. Performanse) Da li su ove aktivnosti promenile

performanse softvera? (9. Adaptacija) Jesu li ove aktivnosti promenile

tehnologiju ili resurse koji se koriste? …

Page 14: Evolucija softvera

Evolucija softvera

Tipovi održavanja softvera Ako je odgovor na "C" DA.

(10. Redukcija) Da li su aktivnosti ograničile ili smanjile funkcionalnost za korisnika?

(11. Korekcija) Da li su ove aktivnosti ispravile funkcionalnost za korisnika?

(12. Unapređivanje) Da li su ove aktivnosti zamenile, dodale ili proširile funkcionalnost za korisnika?

Page 15: Evolucija softvera

Evolucija softvera

Sadržaj Definicija održavanja i evolucije softvera Tipovi održavanja i evolucije Zašto softver evoluira Otpornost na promene Taksonomija delatnosti reinženjeringa

softvera

Page 16: Evolucija softvera

Evolucija softvera

Troškovi održavanja/evolucije

Page 17: Evolucija softvera

Evolucija softvera

Glavni razlozi evolucije softvera Promene u zahtevima korisnika(potrošača)

Modifikacije i proširanja na osnovu zahteva od strane korisnika

Otklanjanje grešaka Redovne popravke Vanredne popravke - koje više koštaju usled

velikog pritiska Promene u formatima podataka

Y2K, Euro, poreske stope, poštanski kodovi, telefonski brojevi...

Novi standardi: UML, XML, wsdl, json,... promene hardvera Unapređenja efikasnosti

Changed data formats (18%)

Bug fixes (21%)

Hardware changes (6%)

Efficiency improvements

(4%)

Changed user

requirements (42%)

Page 18: Evolucija softvera

Evolucija softvera

Sadržaj Definicija održavanja i evolucije softvera Tipovi održavanja i evolucije Zašto softver evoluira Otpornost na promene Klasifikacija aktivnosti reinženjeringa

softvera

Page 19: Evolucija softvera

Evolucija softvera

Starenje softvera Moramo naučiti kako da poništimo

efekte(posledice) starenja. “Programi, kao i ljudi, stare. Ne možemo da sprečimo

zastarevanje, ali možemo razumeti njegove razloge, preduzeti korake da ograničimo njegove posledice, s vremena na vreme poništiti neke od oštećenja koje je prouzrokovalo i pripremiti se za dan kada taj softver neće više biti održiv.” (Parnas, 1994.)

Page 20: Evolucija softvera

Evolucija softvera

Starenje softvera (...) Razlozi starenja softvera

Održavanje Neuka nadogradnja i razgradnja njegove

konstrukcije nefleksibilnost od samog početka nedovoljna ili nesaglasna dokumentacija pritisak rokova dvostruka funkcionalnost (duplikacija koda) odsustvo modularnosti ...

Moguće rešenje: reinženjering

Page 21: Evolucija softvera

Evolucija softvera

Nasleđeni sistemi - definicije Svaki informacioni sistem koji odoleva

promenama. [program-transformation.org] Postojeći računarski sistem ili aplikacioni

program koji nastavlja da se koristi i dalje, zbog toga što korisnik (obično neka organizacija) da ga zameni ili ga redizajnira. Mnogi ljudi koriste ovaj izraz da označe "zastarele" sisteme. (wikipedia)

Page 22: Evolucija softvera

Evolucija softvera

Nasleđeni sistemi - definicije Iz perspektive "novih trendova u

tehnologiji" čak i potpuno funkcionalan i dobro održavan sistem se samtra nasleđenim ako je zasnovan na zastareloj tehnologiji. (Pogledi na reizgradnju nasleđenih sistema, SEI CMU 1995)

Iz ekonomske perspektive sistem se smatra nasleđenim ako ne može da prati stopu promena u domenu biznisa. (Alderson, Cacm, 1999)

Page 23: Evolucija softvera

Evolucija softvera

Problemi sa nasleđenim sistemima

Često rade na zastarelom hardveru Teško ih je održavati, poboljšati i proširiti Opšte odsustvo razumevanja sistema:

Nema nikoga da objasni kako sistem radi Dokumentacija i uputstva za upotrebu se s

vremenom izgube Teško ih je integrisati sa mlađim

sistemima

Page 24: Evolucija softvera

Evolucija softvera

Razlozi čuvanja nasleđenih sistema

Troškovi redizajniranja sistema su faktor koji ga (redizajniranje) sprečava upravo zato što je ono veliko, monolitno i/ili složeno.

Sistem mora biti dostupan skoro 100%, pa ne može tek tako da se isključi

Ljudi ne razumeju način na koji sistem radi

Korisnik očekuje da se sistem može lako zameniti novim kada to postane neophodno.

Sistem radi zadovoljavajuće, i vlasnik ne vidi razloga da ga menja.

Page 25: Evolucija softvera

Evolucija softvera

Nasleđeni sistemi - Moguće rešenje

Reinženjering jeste sistematsko transformisanje postojećeg sistema u nov oblik radi

a) ustanovljenja poboljšanja u kvalitetu rada, sposobnosti sistema, funkcionalnosti i svojstvima ili

b) mogućnosti sistema da se razvija (evolventnosti) uz manje troškove, manje planiranje ili manji rizik za korisnika.

Page 26: Evolucija softvera

Evolucija softvera

Sadržaj Definicija održavanja i evolucije softvera Tipovi održavanja i evolucije Zašto softver evoluira Otpornost na promene Klasifikacija aktivnosti reinženjeringa

softvera

Page 27: Evolucija softvera

Evolucija softvera

Domen reinženjeringa softvera Normalan razvoj softvera (forward engineering) Reverzni inženjering Redokumentacija Obnova projekta Razumevanje programa Restrukturiranje Reinženjering Reverzna specifikacija Rekodiranje (ponovno kodiranje) Redizajn (otkrivanje projekta) Respecifikacija (ponovna specifikacija)

Page 28: Evolucija softvera

Evolucija softvera

Normalan razvoj Uobičajeni softverski proces koji teče od

funkcionalne specifikacije i dizajna ka fizičkoj implementaciji sistema

Page 29: Evolucija softvera

Evolucija softvera

Softversko reverzno inženjerstvo Def. Dvofazni proces

Izvlačenje informacija Apstrakcija informacija

Def. Trofazni proces [Tilley95] Prikupljanje informacija Organizacija znanja Upravljanje, analiza i prezentacija informacijama

Def. Sistem koji anlizira temu [CC90] Da bi se identifikovale njegove trenutne komponente

i njihova međuzavisnost da bi se izvukle i stvorile sistemske apstrakcije i

informacija za dizajn Dotični sistem se ne menja: međutim, menja

se dodatno znanje o sistemu koji se proizvodi

Page 30: Evolucija softvera

Evolucija softvera

Reverzni inženjering u odnosu na druge delatnosti

Page 31: Evolucija softvera

Evolucija softvera

Razumevanje programa Razumevanje ili tumačenje programa je izraz koji

je u vezi sa reverznim inženjeringom. Razumevanje programa uvek podrazumeva da se počinje sa izvornim kodom dok se reverzni inženjering može zasnivati na binarnoj i izvršnoj formi sistema ili na opisima konceptualnog dizajna. Cela doktrina razumevanja programa obuhvata znanja o ljudskim mentalnim procesima prilikom razumevanja programa (programerska psihologija). Razumevanje programa može se ostvariti na neki adhok način, bez da se napravi spoljni opis.

Dok je reverzni inženjering sistematski pristup razvoju spoljašnjeg opisa sistema, razumevanje programa se može uporediti sa obnovom dizajna zato što oboje polaze od nivoa izvornog koda.

Page 32: Evolucija softvera

Evolucija softvera

Redokumentacija Redokumentacija je stvaranje ili revizija

semantički ekvivalentng prikaza unutar istog nivoa apstrakcije. Prikazuju se obično različiti aspekti sistema (npr. protok podataka, struktura podataka, kontrola protoka) namenjenih ljudima.

Redokumentacija je najjednostavniji i najstariji oblik reverznog inženjeringa i može se smatrati jednom od nenametljivih, mekših oblika restrukturiranja.

Page 33: Evolucija softvera

Evolucija softvera

Restrukturiranje Transformacija jednog nivoa prikaza u

drugi na istom nivou relativne apstrakcije, dok se u isto vreme čuva spoljašnje ponašanje dotičnog sistema (tj. funkcionalnost i semantika)

Page 34: Evolucija softvera

Evolucija softvera

Reinženjering Reinženjering je ispitivanje i izmena

datog sistema radi radi ponovnog konstituisanja u nekom novom obliku i kasnija implementacija tog novog oblika.

Proces reinženjeringa računarskih sistema obuhvata tri glavna koraka: reverzni inženjering, funkcionalno restrukturiranje i progresivni inženjering

Page 35: Evolucija softvera

Evolucija softvera

Reinženjering softvera - model potkovice

Page 36: Evolucija softvera

Evolucija softvera

Kategorije renženjeringa Automatsko restrukturiranje Automatska transformacija Poluautomatska transformacija Obnova i reimplementacija dizajna Reverzni i progresivni inženjering koda Reverzni inženjering podataka i migracija

strukturnog opisa baze podataka Migracija nasleđenih sistema ka

modernim platformama

Page 37: Evolucija softvera

Evolucija softvera

Kategorije reinženjeringa... Automatsko restrukturiranje

Radi dobijanja čitljivijeg koda Primena standarda u kodiranju

Automatska transformacija Radi dobijanja boljeg koda HTML-izacija izvornog koda Pojednostavljenje kontrolnih naredbi (dead

code, goto) Refaktorisanje i remodularizacija Popravka Y2K

Page 38: Evolucija softvera

Evolucija softvera

Kategorije reinženjeringa...

Poluautomatska transformacija Kako bi se dobio bolje građen sistem (npr,

ponovo konstruisati kod i podatke) Poluautomatska konstrukcija strukturnih i

funkcionalnih apstakcija Ponovno konstruisanje ili reimplementiranje

dotičnog sistema iz tih apstrakcija

Page 39: Evolucija softvera

Evolucija softvera

Obnova dizajna Obnova dizajna ili reverzno projektovanje je

podgrupa aktivnosti u sklopu reverznog inženjeringa u čijem se domenu znanje, spoljašnje informacije i dedukcija pridodaju opservacijama na dotičnom sistemu radi identifikacije apstrakcija višeg nivoa od onih koje se dobijaju direktno iz ispitivanja samog sistema.

Obnova dizajna nanovo stvara projektne apstrakcije iz kombinacije koda, postojeće projektne dokumentacije (ukoliko je dostupna), ličnog iskustva, i opšteg znanja o problemu i domenu aplikacije.

Page 40: Evolucija softvera

Evolucija softvera

Nivoi apstrakcija u okviru obnove dizajna

Aplikacija Koncept, poslovna pravila, politika

Funkcija Logička i funkcionalna specifikacija, ne-funkcionalni

zahtevi Struktura

Protok kontrole i podataka, dijagram zavisnosti Skica strukture i podsistema Arhitektura softvera

Implementacija Aps. Sint. stabla, tabela simbola, izvorni kod

Page 41: Evolucija softvera

Evolucija softvera

Ostale RE- aktivnosti(mere) Reverzna specifikacija je vrsta reverznog inženjeringa kod koje se

specifikacija izvlači iz izvornog koda ili opisa dizajna. Termin specifikacija u ovom kontekstu znači bilo kakav apstraktni opis onoga što softver zapravo radi. U progresivnom inženjeringu, specifikacija nam govori šta bi softver TREBALO da radi. Međutim, izvorni kod ne sadrži ovakvu informaciju. Samo u retkim slučajevima, ona se može povratiti(rekonstruisati) iz komentara unutar izvornog koda i od ljudi koji su bili uključeni u proces originalnog progresivnog inženjeringa.

Rekodiranje(ponovno kodiranje) obuhvata promenu implementacionih karakteristika izvornog koda. Restrukturiranje jezičkog prevoda i protoka kontrole su izmene na nivou izvornog koda. Ostale moguće izmene obuhvataju prilagođavanje standardima kodiranja, poboljšanje čitkosti koda, i promena imena programskih stavki.

Redizajn obuhvata izmene karakteristika projekta. Moguće izmene obuhvataju restrukturiranje konstrukcije dizajna, izmenu modela sistemskih podataka onako kako su ugrađeni u strukturi podataka ili u bazi podataka, i poboljšanje algoritma.

Respecifikacija (ponovna specifikacija) obuhvata izmene karakteristika traženog kvaliteta. Ovaj tip izmena se može odnositi na izmenu same forme postojećih zahteva(tj. uzimanje neformalnih zahteva izraženih na engleskom i stvaranje formalne specifikacije na nekom formalnom jeziku Y). Ovaj tip izmena može se odnositi i na izmenu sistemskih zahteva, kao što je dodavanje nekih novih zahteva, ili brisanje nekih starih.