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