Transcript Uvod

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
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? Ispravka
Kada?
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 evolucije
12 identifikovanih tipova održavanja softvera.
Evolucija softvera
Tipovi održavanja softvera
1.
2.
3.
Obuka
Konsultacija
Vrednovanje
4. Reforma
5. Osavremenjivanje
6.
7.
8.
9.
Pospremanje
Preventiva
Performanse
Adaptacija
10. Redukcija
11. Popravka
12. Unapređenje
Ne
Ne
Ne
Da li je softver
promenjen
?
Da li je
izvorni kod
promenjen
?
Da
Evolucija softvera
Da li je funkcija
promenjena
?
Da
Da
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
Hardware
changes (6%)
Efficiency
improvements
(4%)
Changed data
formats (18%)
Evolucija softvera
Bug fixes
(21%)
Changed
user
requirement
s (42%)
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.
Evolucija softvera