Please enable JavaScript.
Coggle requires JavaScript to display documents.
SOFTVERSKO INŽENJERSTVO 2. kolokvijum - Coggle Diagram
SOFTVERSKO INŽENJERSTVO 2. kolokvijum
Implementacija Softvera
Uvod
Implementacija
ili
kodiranje
je softverska realizacija rešenja problema.
Rezultat je skup programa
koji ispunjavaju zadate funkcionalne zahteve
Prema projektu programa, sistem se može
realizovati na mnogo različitih načina
(različiti programski jezici, razvojna okruženja, hardverske platforme,itd.)
Problemi:
Postoji mogućnost da
projektanti nisu uzeli u obzir sve specifičnosti platforme
ili razvojnog okruženja koji će biti korišćeni
Strukture podataka
je
jednostavnije predstaviti tabelama ili graficima
nego napisati ekvivalentan programski kôd
Programi moraju da budu
razumljivi
ne samo onima koji su ihpisali, već i drugima koji učestvuju u procesurazvoja
Treba težiti ka tome da se napisani kôd može jednostavno
ponovo iskoristiti
Prema vrsti projekta, programeri mogu da:
Analiziraju
postojeći tuđi kôd
kako bi ga izmenili, dogradili, ispravili greške, ili ga iskoristili u sklopu neke druge aplikacije
Analiziraju ili generišu
sopstveni kôd
u okviru realizacije nekog novog modula
Prednosti poštovanja standrada (po pitanju stila, formata, sadržaja i dr.):
programeri uspostavljaju
sistematičnost
u svom radu
standardizovana
dokumentacija
omogućava lakše i brže tumačenje kôda
olakšano je
pronalaženje grešaka
u kôdu
novonastale izmene se mogu jednostavnije uneti u sistem,
jer je
jasno
koji deo kôda implementira koju funkcionalnost
strukturiranjem kôda prema standardima održava se
usklađenost
elemenata iz dizajna sa elementima iz implementacije
olakšan je
nastavak rada
na projektu ukoliko je iz nekog razloga projekat morao da bude prekinut na neko vreme
Pisanje programa 4
Pisanje programa
je kreativan proces u kome programer prevodi opise sistema date u projektu u programski kôd na konkretnom programskom jeziku.
Programer ima
veliku slobodu
, jer se ista funkcionalnost uvek može realizovati na različite načine
Specificirani zahtevi ili projekat mogu da
uslovljavaju
izbor programskog jezika
Smernice za pisanje programa
lokalizacija ulaza i izlaza
korišćenje pseudokôda
revidiranje kôda
višekratna upotrebljivost
Lokalizacija 5
Lokalizacija ulaza i izlaza
podrazumeva izdvajanje delova programskog kôda koji se odnose na učitavanje ulaznih podataka ili generisanje izlaznih veličina u posebne, specijalizovane komponente u okviru sistema.
Osobine lokalizacije
vodi
uopštavanju
sistema
specijalizovane komponente odražavaju osobine trenutno
korišćenog
hardvera i softvera
objedinjavanje ulaznih/izlaznih funkcija u jednu komponentu vodi
lakšem razumevanju
i
modifikovanju
sistema
ulaznim komponentama mogu se
dodati i druge funkcionalnosti
(provera ispravnosti unetih podataka, formatiranje unetih podataka i sl.), pa se ostale komponente rasterećuju
Pseudokod 6
Pre realizacije komponente, dobro je ispitati
više alternativa implementacije
primenom pseudokôda.
Pseudokôd
je kôd napisan običnim jezikom koji se koristi u datoj oblasti.
slobodan stil, brza i laka analiza
osim opisa, često koristi i sintaksne elemente postojećih
programskih jezika (zagrade, strukture za kontrolu toka, itd.)
Primer 6
Revidiranje koda 7
Prilikom pisanja koda:
najpre se pravi
gruba skica
kôd se
revidira
i ponovo piše sve dok se ne postigne željeni rezultat
ako je kôd
nerazumljiv
i zamršen, ili ne rešava neke probleme (grananja, petlji i sl.), neophodno je da se ponovo
razmotri dizajn
mora se utvrditi da li je problem u dizajnu (konsultovati projektante) ili u prevođenju dizajna u kôd
ako je problem u prevođenju, programer treba da
preispita
način predstavljanja i strukturiranja podataka, primenjene algoritme idr.
Višekratna upotreba 8,9
Dobra praksa je da se komponente realizuju tako da mogu
ponovo da se primene
, a takođe je dobro i da se
koriste ranije implementirane komponente
Višekratno upotrebljive komponente
ubrzavaju proces pisanja kôda i smanjuju broj potencijalnih grešaka (ranije realizovane komponente su već istestirane).
Generisnje višekratne komponente
komponenta treba da bude
opšta
i da radi u što
fleksibilnijim uslovima
izdvojiti delove podložne promenama
(zbog promene radnih uslova) od delova koji se najverovatnije nikada neće menjati
interfejs
treba da bude opšti i dobro definisan
pri
imenovanju veličina
, primenjivati jasne i logički intuitivne konvencije
dokumentovati
strukture podataka i algoritme korišćene pri izgradnji komponente
navesti
informacije o
otkrivenim i ispravljenim
greškama
Primena višekratne komponente
proveriti da li komponenta
obavlja funkciju
koja je potrebna
ako je potrebna
manja izmena
komponente, proceniti da li je bolje uraditi tu promenu ili
napraviti novu komponentu
proveriti da li je komponenta dobro
dokumentovana
, tako da je potpuno jasna njena funkcija
proveriti da li postoji
evidencija o testiranju
i revizijama komponente koja bi garantovala da u njoj nema grešaka
pri ugrađivanju proceniti
koliko kôda
treba napisati da bi sistem mogao da sarađuje sa višekratnom komponentom
Realizacija komponente 10
Ralizacija svake programske komponente podrazumeva utvrđivanje:
Strukture podataka 11,12,13,14
pripremna radnja za pisanje programa
- osmišljavanje
struktura podataka
u kojima će se čuvatipodaci
Izbor struktura
direktno
utiče na složenost i efikasnost
programa
vrši se tako da se podacima
lako upravlja i manipuliše
može se
preuzeti iz dizajna
(ukoliko su tamo definisane),
ili se generišu
u fazi implementacije prema smislu
može da
utiče na izbor programskog jezika
(LISP je projektovan za rad sa listama, Prolog za predikatski račun, Ada i Eiffel za obradu nedozvoljenih stanja, Pascal za implementaciju rekurzivnih struktura podataka, kao što su stabla)
Primer - komponenta koja računa porez na dohodak 12,13,14
Algoritama 15,16,17
u projektu programa
, obično su definisani
algoritmi
koje treba upotrebiti za realizaciju date komponente
primeri algoritama
: algoritmi za sortiranje, optimizaciju, višekriterijumsko odlučivanje, itd.
iako algoritmi mogu da budu dati, postoji velika
fleksibilnost
u pogledu njihove realizacije (zavisno od ograničenja koje postavljaju korišćen programski jezik i raspoloživa hardverska platforma)
različito realizovani algoritmi
imaju
različite performanse
, kao i
efikasnost
Većina programera pokušava da algoritam realizuje tako da se izvršava što je moguće
većom brzinom
Moguće posledice su:
brže izvršavanje može da prouzrokuje
složeniji kôd
koji zahteva
više vremena
za generisanje
složeniji kôd zahteva
više primera za testiranje
za koje treba obezbediti odgovarajuće ulazne podatke
potrebno je
više vremena za tumačenje
i razumevanje kôda što je on složeniji
buduće potencijalne
izmene je teže sprovesti
ako je kôd složeniji
Zaključak
: brzinu treba posmatrati
zajedno
sa postavljenim zahtevima i kvalitetom urađenog projekta
ako je brzina značajan faktor u implementaciji, potrebno je detaljno proučiti
na koji način prevodilac
za izabrani programski jezik
optimizuje kôd
tako se izbegava da optimizacija koju je programer primenio
u cilju ubrzanja, u stvari
uspori
naizgled brži kod
Primer - implementacija trodimenzionalnog niza 17
Kontrolnih struktura 18,19
Kontrolne strukture
upravljaju tokom izvršavanja programa.
pri prevođenju dizajna u programski kôd treba očuvati što je moguće više kontrolnih struktura, jer je tada lakše pratiti
usklađenost dizajna i kôda
prilikom pisanja kôda, preporučljivo je da se koriste one kontrolne strukture koje omogućavaju
lako čitanje kôda odozgo na dole
treba
izbegavati velike skokove
sa jednog na drugo mesto u programu
kontrolne strukture mogu značajno da utiču na
razumljivost
programa
Primer 19
Saveti za pisanje koda:
naredna instrukcija da bude što bliže uslovu
koji do nje vodi
kôd treba da ima opštiji karakter, ali bez ugrožavanja performansi i razumljivosti
modularnost vodi razumljivosti
konzistentnost u imenovanju parametara
Programska dokumentacija 20
Programska dokumentacija
je skup opisa u tekstualnoj formi kojima je objašnjeno šta program radi i na koji način.
omogućava kasnije korišćenje, održavanje ili unapređenje softvera
Unutrašnja (interna)
opisi pridruženi programskom kôdu u vidu
komentara
nalaze se u
datotekama sa programima
Spoljašnja (eksterna)
ostali opisi
(van datoteka) koji se odnose na dati sistem
Unutrašnja dokumentacija 21
Unutrašnja dokumentacija
sadrži informacije koje treba da pomognu da se kôd lakše shvati i protumači.
značajna
ne samo za programera koji je pisao program, već i za sve koji će ga u budućnosti koristiti
jasnoća i preglednost se postižu
sistematičnim pristupom
pisanju koji podrazumeva
uvlačenje redova
u zavisnosti od mesta naredbe u hijerarhiji programa
Primer 21
Zaglavlje 22
Zaglavlje
je komentar na početku svakog dokumenta sa izvornim kôdom u kojem se opisuje funkcionalnost programskog kôda koji sledi, njegove veze sa okruženjem, očekivani ulazni i izlazni podaci.
Zaglavlje obično sadrži sledeće informacije:
ulogu komponente i njeno mesto u sistemu
naziv komponente
ime autora komponente
datum kada je komponenta napisana ili revidirana
način na koji se pristupa komponenti
Primer 22
Prednosti pisanja zaglavlja:
informacije o funkcionalnosti
kôda koji sledi pomažu onima koji održavaju softver
kada se traži
gotova komponenta
koja bi se ponovo iskoristila, na osnovu zaglavlja može se zaključiti da li kôd koji sledi realizuje traženu komponentu
u slučaju otkaza, zaglavlje daje dovoljno elemenata za procenu da li je
uzrok otkaza
u posmatranom dokumentu ili ne
Komentari 24
Komentari
predstavljaju tekst koji usmerava čitaoca u tumačenju programa.
pomažu da se shvati kako su
navodi iz zaglavlja implementirani u kôdu
količina komentara zavisi od procene sâmog programera
mali broj komentara
- ako se u programu koriste ilustrativna imena promenljivih, ako su naredbe jasne i dobro strukturirane
u dobro napisanom kôdu, komentarima se mogu opisati dodatne informacije koje
nisu vidljive iz kôda
(ako kôd implementira neki postupak, u komentaru se može navesti odakle je taj postupakpreuzet)
Primer 24
osnovna uloga komentara je da daje
korisnu informaciju
o delu programskog kôda kome je pridružen
korisna informacija
je informacija koja nije očigledna iz kôda, već daje neko važno objašnjenje.
Primer 25
svaka
promena
u kôdu zahteva
ažuriranje
postojećeg komentara
komentari se pišu
istovremeno
sa kôdom, da se nešto ne zaboravi
ako programer teško komentariše kod, znači da dizajn treba uprostiti
Imenovanje 26
Imena struktura podataka
se biraju tako da opisuju ulogu strukture.
Primer 26
programski kôd i komentari
ne treba da se mešaju
(1971.g.)
preporučuje se da se u dokumentu
kôd
nalazi na
levom delu
stranice, a
komentari
na
desnom
Primer 26
Spoljašnja dokumentacija 27
opisuje sistem sa
opšteg aspekta
i daje odgovore na pitanja ko, šta, kako, zašto, kada i gde u sistemu nešto radi
osim
programerima
,
namenjena
je i
projektantima
(mogu da analiziraju sistem i predlažu njegove buduće izmene i unapređenja)
sadrži znatno
šire i detaljnije
opise od onih koji se mogu naći u unutrašnjoj dokumentaciji
Sadržaj spoljašnje dokumentacije 28:
pregled svih komponenata
u sistemu
podelu komponenata
sa sličnom funkcijom
po grupama
(komponente korisničkog interfejsa, komponente za pristup bazama podataka, komponente za obradu podataka, ulazno/izlazne komponente, itd.)
dijagrame
kojima se opisuju
pojedinačne komponente
sa odgovarajućim tekstualnim objašnjenjima
dijagrame
iz kojih se jasno vidi
kako se podaci koriste
u sistemu, tj. koje komponente koriste koje podatke, kako ih razmenjuju i modifikuju
opis klasa objekata
i njihovu
hijerarhiju nasleđivanja
(ukoliko se primenjuje objektno-orijentisani pristup u rešavanju problema)
Opis komponente 29
Opis komponente
se piše u skladu sa strukturom komponente datom u dizajnu sistema, uz dodavanje tekstualnih opisa o pojedinostima iz programskog kôda kojim je komponenta realizovana.
Spoljašnja dokumentacija komponente sadrži:
opis problema koji komponenta rešava (kada se komponenta poziva i zašto je ona potrebna)
razmatranja opcija mogućih rešenja , uz navođenje razloga zbog kojih je konkretno rešenje izabrano
detaljni
opis algoritama
koji se koriste u komponenti (primenjene formule, uslovi i ograničenja, reference na korišćenu literaturu);
na primer
, ako se u nekom algoritmu javlja formula sa deljenjem dve promenljive, u dokumentaciji bi trebalo navesti u kom slučaju imenilac može da ima vrednost 0, i kako se u kôdu reaguje nanjega
tok podataka
na nivou komponente, što se obično predstavlja odgovarajućim dijagramima
Kvalitet programiranja 30
na osnovu dobrog dizajna
ne može
svaki programer da napiše dobar kôd
kvalitet programskog kôda mnogo zavisi i od
znanja
,
veštine
,
maštovitosti
i
iskustva
programera u rešavanju problema
Pronalaženje dobrog rešenja
zahteva prolazak kroz faze:
Razumevanje problema
31
Razumevanje problema
podrazumeva njegovu detaljnu analizu, tj. precizno utvrđivanje uslova u kojima problem mora da se rešava.
Potrebno je:
ustanoviti gde je
granica sistema
u odnosu na okruženje, tj. šta su
ulazni podaci
(u kom su obliku i kako se do njih možedoći), a šta
izlazni
(u kom obliku i kome se oni isporučuju)
uočiti sva
organičenja
i uslove
Programeri često koriste
dijagrame
kako bi bolje razumeli problem (dijagrami im pomažu u prepoznavanju različitih uslova i ukazuju na mogućnost dekomponovanja problema na jednostavnije podprobleme koji se lakše rešavaju).
Osmišljavanje plana rešenja
(Planiranje) 32
problem dobro shvaćen
- plan se lako pravi jer se zna kako se postavljeni uslovi mogu ispuniti
problem nije jasan i ima nepoznanica
- za pronalazak pravog plana, koriste se sledeće tehnike:
prepoznavanje sličnih problema
(da li se već postojeći algoritmi, bibliotečke funkcije, podaci mogu upotrebiti za rešavanje problema)
preformulisanje problema
(da li se mogu uvesti neke pretpostavke koje bi pojednostavile rešenje, da li se problem može konkretizovati, ili čak uopštiti u istom cilju)
razlaganje problema
(da li se mogu izdvojiti delovi koji bi se obrađivali zasebno jedan od drugog)
Prilikom pravljenja plana, treba omogućiti
grupnu diskusiju učesnika
Izvršavanje plana i provera rešenja
(Izvršavanje i provera plana) 33
Sprovođenje plana
u delo podrazumeva
proveru ispravnosti rešenja
korak po korak.
za svaki korak se procenjuje
da li se on može sprovesti na osnovu prethodnog koraka
i da li omogućava
postizanje uslova
za izvršenje narednog koraka
kada se dođe do rešenja, ponovo se pregleda svaki deo plana i analizira da li je rešenje
višekratno
; ako jeste, u kojim situacijama je korisno, da li može da postane osnova za neki šablon, itd.