Starenje Softvera

Download Report

Transcript Starenje Softvera

Starenje Softvera
Sadržaj







Proces starenja softvera
Uzroci za starenje softvera
Posledice starenja softvera
Ublažavanje efekta starenja
Neizbežnost starenja softvera
lemanovi zakoni starenja softvera
Literatura
Proces starenja softvera (1)


Programi, kao i ljudi, stare. Mi ne možemo zaustaviti
starenje, ali možemo da shvatimo uzroke starenja
softvera, preduzmemo korake koji bi ogranicili efekte
ovog procesa, privremeno popravimo neke od
posledica koje je starenje uzrokovalo i pripremimo se
za dan kada taj softver više nije održiv. Ne smemo da
se koncentrišemo samo na prvu prdstavu softvera već
i na dugoročno zdravlje našeg prizvoda.
D.L. Parnas
Proces starenja softvera (2)

Da li ima smisla pricati o starenju softvera?
 Softver
je matematički proizvod, a matematika se ne
menja vremenom
 Ako je teorema bila tačna pre 200 godina ona će biti
tačna i sutra
 Ako program radi ispravno sada, radiće ispravno i za
100 godina
 Ako se za 100 godina utvrdi da program ne radi
ispravno, mora biti da nije radio ispravno ni kada je
napisan

Ovi iskazi su tačni ali ne i relevantni
Proces starenja softvera (3)




Starenje softvera je neizbežan proces
U mnogome je sličan procesu starenja ljudi
Moguće je usporiti proces
Ponekad, možemo čak da obrnemo proces starenja
(revitalizacija)
Starenje softvera (4)

Sa vremenom raste značaj starenja softvera
 Rast
ekonomske važnosti softvera
 Softver predstavlja veliki deo kapitala mnogih
modernih kompanija
 Mnogi programi su postali oslonac današnjeg društva
 Zastarevanje programa koči dalji razvoj sistema koji ih
koriste
Starenje softvera (5)



Autori i vlasnici novog softvera na proces starenja
softvera često gledaju sa prezirom
Svaki program ima svoj vek
Starenje softvera nije nov fenomen
Uzroci starenja softvera

Postoje dva glavna razloga starenja softvera
 Izostanak
napredka – starenje kao posledica
nemogućnosti programera da izvrši potrebne izmene
programa kako bi išao u korak sa vremenom
 Narušavanje dizajna – promene u kodu programa koje
uzrokuju narušavanje originalnih pricipa dizajna

Rapidno dovode do degradacije vrednosti softvera
Izostanak napretka (1)

Potreba za konstantnim izmenama programa
 Dodavanje
novih funkcionalnosti
 Praćenje trendova

Usled nedostatka izmena
 Smanjuje
se konkurentnost softvera
 Smanjuje se zadovoljstvo korisnika
 Korisnik prelazi na novo rešenje
Izostanak napretka (2)



Odličan softver napravljen šezdesetih godina će
raditi savršeno dobro i danas ali ga niko neće
koristiti
Taj softver je zastareo iako ga niko nije menjao
Zapravo on je i zastareo jer ga niko nije menjao
Narušavanje dizajna (1)


Iako neophodne, izmene softvera mogu dovesti do
starenja
Svaka izmena zahteva izmenu dokumentacije
 Ovaj
korak se često preskače u praksi
 Dokumentacija vremenom postaje netačna

Izmene u kodu napravljene od strane ljudi koji u
potpunosti ne razumeju koncept uglavnom dovode
do degradacije strukture programa
Narušavanje dizajna (2)

Nakon više ovakvih izmena skoro je nemoguće
razumeti koncept
 Programeri
koji su dizajnirali i razvili originalni koncept
ne razumeju modifikovani proizvod
 Oni koji su pravili izmene i dalje ne razumeju koncept



Kod programa postaje “nečitljiv”
Nove izmene dovode do pojavljivanja novih
grešaka (eng. bugs)
Povećava se cena održavanja softvera
Posledice starenja softvera



Neodrživost
Gubitak performansi
Smanjena pouzdanost
Neodrživost (1)


Dok stari, softver postaje sve veći
Najlakši način da se doda nova funkcionalnost u već
postojeći softver je dodavanje novog koda
Neodrživost (2)

Modifikacije postaju sve teže sa povećanjem
veličine softvera
 Raste
veličina koda koji treba promeniti
 Sve je teze naći delove koje treba promeniti

Kao rezultat dešava se to da se korisnik prebaci na
mlađi softver u potrazi za novim funkcijama
Gubitak performansi (1)


Kako se veličina programa povećava on zahteva
više memorije za rad
Brzina izvršavanja opada zbog lošeg dizajna
dobijenog dugoročnim ad-hoc održavanjem, što
podrazumeva brza rešenja koja nisu obavezno i
najoptimalnija
Gubitak performansi (2)


Korisnici moraju da poboljšaju svoje računare kako
bi od programa dobili prihvatljiv odziv
Mlađi softver će raditi brže i koristiti manje
memorije
Smanjena pouzdanost

Održavanje softvera dovodi do stvaranja grešaka
(eng. bugs)
 Jedna
ispravljena greška može dovesti do stvaranja
više novih grešaka
 Može doći do narušavanja postojećih funkcionalnosti

Pokušaji smanjivanja broja grešaka mogu da
izazovu kontra efekat
Ublažavanje efekta starenja (1)


Neiskusni programeri se polakome posle prvog
uspešnog kompajliranja ili demonstracije
Iskusni programeri znaju da je to tek početak…
 Svaki
ozbiljan proizvod zahteva opsežno testiranje i
rigorozne recenzije
Ublažavanje efekta starenja (2)



U razvoju softvera najviše značaja se pridaje
izbacivanju prve verzije softvera
Stvari treba posmatrati iz ugla kada softver
zastari, tj. mnogo posle izbacivanja prve verzije
Ublažavanje efekta starenja softvera zahteva
mnogo truda i iskustva
Mere prevencije



Pametno projektovanje
Pisanje dokumentacije
Traženje drugog mišljenja (recenzija)
Pametno projektovanje (1)


Softver treba projektovati tako da u budućnosti
bude pogodan za izmene (eng. design for change)
Ovaj princip je poznat i kao:
 Skrivanje
informacija
 Apstrakcija
 Odvajanje kritičnih delova
 Skrivanje podataka
 Objektno orijentisani pristup
Pametno projektovanje (2)


Da bi se primenio ovaj princip treba prepoznati
koje promene će se verovatno zahtevati u toku
životnog veka programa.
Kako stvarne promene ne možemo da predvidimo,
naša predviđanja delimo u klase:
 Promene
u korisničkom interfejsu
 Promene u opisu podataka
 Promene vezane za prelazak na novi operativni sistem
Pametno projektovanje (3)

Pošto je nemoguće napisati takav kod da će svaka
izmena biti laka, najvažnije je da:
 Procenimo
verovatnoću svake klase (tipa) promene
 Organizujemo softver tako da delove za koje je
verovatno da će se menjati ograničimo na mali deo
koda

Problem: udžbenici uglavnom ne objašnjavaju
proces predviđanja učestalosti promena za razne
klase promena
Pametno projektovanje (4)
Ignorisanje loših uzora





Programeri su nestrpljivi i željni da naprave prvu
radnu verziju softvera
Dizajn koji je produkt ovog principa je drugačiji od
“prirodnog” rešenja
Sklonost ka imitiranju postojećih (loših) rešenja
Mešanje principa dizajna sa programskim jezicima
Mnogi ljudi koji pišu programe nikad nisu imali
obuku iz razvoja softvera
Pisanje dokumentacije


Inženjeri često ne dokumentuju glavne principe i odluke
donete tokom dizajniranja softvera
Kada dokumentacija postoji, ona je često
Loše organizovana
 Nedosledna
 Nepotpuna
 Pisana od strane ljudi koji nisu razimeli dati sistem


Dokumentaciju ili ne koriste oni koji vrše dalje izmene u
sistemu ili, još gore, dokumentacija nije ni napisana jer
je usporavala prvi izlazak programa na tržiste
Traženje drugog mišljenja (1)



U razvoju softvera, kao i u medicini, traženje
drugog mišljenja je neophodno
U procesu dizajniranja zgrada, brodova,
vazduhoplovnih prevoznih sredstava, postoji uvek
serija dokumentacije nad kojom se obavezno vrši
precizna recenzija od strane drugih profesionalaca
iz te oblasti
Svako rešenje mora da bude provereno od strane
osobe koja je zadužena za dugotrajnost proizvoda
Traženje drugog mišljenja (2)

Ovaj princip se često ne poštuje u softverskoj
industriji
 Mnogi
programeri nisu imali nikakvu profesionalnu
obuku
 Teško je naći ljude unutar firme koji mogu na kvalitetan
nacin da izvrše recenziju, a skupo je unajmljivati ljude
van firme
 Zadati rokovi obmanjuju programere pa im se čini da
nema nikad vremena za recenziju
 Mnogi programeri ne žele da se nad njihovim radom
vrši recenzija
Neizbežnost starenja softvera





Naša sposobnost da napravimo softver koji je lako
menjati zavisi od naše sposobnosti da predvidimo
budućnost
Napraviće se izmene koje će ugroziti originalne
predpostavke na kojima se bazira rad sistema
Dokumentacija nikad neće biti savršena
Recenzenti će sigurno prevideti neke mane
Preventivne mere se sigurno isplate ali svako ko
misli da će uspeti da eliminiše starenje softvera nije
u pravu
Softverska gerijatrija




Retroaktivna dokumentacija – poboljšanje kvaliteta
dokumentacije starog softvera
Retroaktivna modularizacija – promena strukture
tako da svaki modul sakriva delove dizajna koje će
se verovatno menjati
Amputacija – ako je neki deo koda mnogo puta
(nepromišljeno) modifikovan, nije vredan čuvanja
Restruktuiranje – identifikovati i eliminisati
redundantne komponente i nepotrebne zavisnosti
Lemanovi zakoni evolucije


Dinamika evolucije programa je studija o
procesima promene softverskih sistema
Posle značajnih empirijskih studija, Lehman i Beladi
su predložili niz “zakona” koji se mogu primeniti na
sve softverske sisteme koji evoluiraju
Lemanovi zakoni evolucije


Bazirani su na evoluciji IBM 360 mainframe OS
tokom perioda od 30 godina.
Odnose se na sisteme E tipa [leh80b] - softverski
sistemi koji rešavaju neki problem ili implemetiraju
kompijutersku aplikaciju u realnom svetu
Lemanovi zakoni evolucije








1. Zakon: Kontinualno menjanje
2. Zakon: Povećanje kompleksnosti
3. Zakon: Samoregulacija
4. Zakon: Očuvanje organizacione stabilnosti
5. Zakon: Očuvanje upoznatosti
6. Zakon: Kontinualni rast
7. Zakon: Pad kvaliteta
8. Zakon: Povratna sprega
Lemanovi zakoni evolucije


1. Kontinualno menjanje: Softver E tipa koji se
koristi u realnom okruženju je nophodno kontinualno
adaptirati. U suprotnom postaje neispravan
Softverski sistem zavisi od uticaja okruženja
 Analogija

sa živim organizmom i biološkim okruženjem
Kao rezultat napredka (evolucije) okruženja,
povećava se neusaglašenost izmedju sistema i
okruženja u kome radi
Lemanovi zakoni evolucije


2. Povećanje kompleksnosti: Ukoliko se ne preduzmu
odgovarajuće mere, evolucija softverskog sistema
dovodi do povećanja njegove kompleksnosti
Razlozi:
Nad sistemom se stalno vrše male promene kao bi se
prilagodio okruženju
 Svaka promena ima smisla sama za sebe ali globalno ona
uzrokuju povećanje kompleksnosti
 Ovim se povećava entropija (neuređenost) sistema


Stvara potrebu za optimizacijom i reorganizacijom
(refactoring) koda
Lemanovi zakoni evolucije


3. Samoregulacija: Evolucija softverskog sistema je
samo-regulativni proces
Atributi sistema kao što su veličina, vreme između
dve radne verzije i broj prijavljenih grešaka su
približno isti za svaku radnu verziju istog softvera.
 Vrednosti
ovi atributa zavise od tima koji se bavi
unapređenjem softvera
 Postavljaju se kao cilj od strane menadžmenta
kompanije
Lemanovi zakoni evolucije



4. Očuvanje organizacione stabilnosti: Prosečna
efektivna globalna stopa aktivnosti sistema koji evoluira
je nepromenljiva tokom radnog veka sistema
Uprkos verovanju, praksa je pokazala da odluke
menadžmenta nisu presudan faktor pri određivanju
napora potrebnog za razvoj softvera
Najviše uticaja imaju spoljni faktori na koje
menadžment nema uticaja
Korisnički zahtevi
 Stručnost tima koji razvija/održava softver


Navedeno u kombinaciji sa uticajima okruženja dovodi
do stabilne stope aktivnosti sistema tokom vremena
Lemanovi zakoni evolucije


5. Očuvanje upoznatosti: Tokom aktivnog radnog
veka sistema broj promena nad svakom radnom
verzijom sistema je priblizno isti
Jedan od faktora koji uticu na progres razvoja
softvera je upoznatos svih koji u tome ucestvuju sa
krajnjim ciljem razvoja datog softvera.
Lemanovi zakoni evolucije


6. Kontinualni rast: Funkcionalni aspekt softvera
mora kontinualno da se povećava (poboljšava) u
cilju održanja stope zadovoljstva korisnika
Proizilazi iz prvog zakona (Kontinualno menjanje), s
tim što se odnosi na funkcionalne zahteve
Lemanovi zakoni evolucije




7. Pad kvaliteta: Kvalitet programa E tipa će opasti
ukoliko se rigoroznim održavanjem ne adaptira
promenljivom operacionom okruženju
Proizilazi iz prvog zakona (Kontinualno menjanje),
sa fokusom na pouzdanost sistema
Ranije uvedene ograničenja ne moraju više biti
validna
Objasnjava pojavu kada posle dugotrajnog
zadovoljavajućeg rada softver odjednom ispolji
neočekivano, ranije nikad viđeno ponašanje
Lemanovi zakoni evolucije

8. Povratna sprega: Proces programiranja sistema
E tipa obrazuje višeslojni sistem sa povratnom
spregom i petljama i mora se tretirati kao takav da
bi mogao uspešno da se modifikuje i unapredjuje
Literatura


Software Aging, David Lorge Pamas
Laws of Software Evolution Revisited, M M Lehman