evolucija softvera
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 PresentationTRANSCRIPT
Evolucija softvera
Uvod
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
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]
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
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)
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
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."
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."
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
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.
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
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?
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? …
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?
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
Evolucija softvera
Troškovi održavanja/evolucije
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%)
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
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.)
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
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)
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)
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
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.
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.
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
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)
Evolucija softvera
Normalan razvoj Uobičajeni softverski proces koji teče od
funkcionalne specifikacije i dizajna ka fizičkoj implementaciji sistema
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
Evolucija softvera
Reverzni inženjering u odnosu na druge delatnosti
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.
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.
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)
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
Evolucija softvera
Reinženjering softvera - model potkovice
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
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
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
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.
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
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.