Professional Documents
Culture Documents
Requirements
Literatura:
Somerville, Software Engineering, 8th edition, Chapter 6.
Pressman, Software Engineering: A Practitioner's Approach, 6th edition, Chapter 7.
ta su zahtjevi?
Zajedniko razumijevanje problema
ta je korisniku trebalo...
Korisniki zahtjevi
(User Requirements)
Opis sistema pisan obinim
jezikom, uz dijagrame.
Namijenjen korisniku.
Sistemski zahtjevi
(System Requirements)
Strukturiran dokument sa detaljnim
opisom funkcionalnosti sistema.
Definie ta treba implementirati.
Moe biti dio ugovora.
Funkcionalni zahtjevi
(Functional Requirements)
Opis servisa koje sistem treba da prua,
reakcije na date ulaze i ponaanje u
odreenim situacijama.
Nefunkcionalni zahtjevi
(Non-Functional Requirements)
Ogranienja na servise i funkcionalnosti
kao posljedica: rokova, razvojnog
procesa, koritenih standarda itd.
Inenjering zahtjeva
Zapoinjanje (inception)
Pribavljanje (elicitation)
Elaboracija
Pregovori
Validacija
Upravljanje (management)
Zapoinjanje (inception)
Inenjer mora objasniti problem
samom sebi
Prepoznati stakeholders
Pribavljanje (elicitation)
Kolaboracija u malim timovima
Dugotrajan proces...
Pribavljanje problemi!
U idealnom svijetu razgovarate sa
kljunom osobom (stakeholderom), u
stvarnosti...
Elaboracija
Izrada modela sistema
Funkcionalni prototipi
Pregovori
...
Validacija
1.
2.
3.
4.
5.
6.
7.
Konzistentnost sa ciljevima
Nivo apstrakcije
Neophodnost
Ogranienja i dvosmislenosti
Porijeklo
Konflikti izmeu zahtjeva
Ostvarivost
Validacija [2]
8. Testabilnost
9. Informacije, funkcija i ponaanje
sistema
10. Organizacija i particionisanje
11. Primjena analitikih ablona
Upravljanje zahtjevima
Izmjene nad zahtjevima
Dokument specifikacije
1. Uvod
2. Opis
2.1. Perspektiva proizvoda - ta ovaj projekat
predstavlja za korisnika? Da li je samostalan ili dio veeg
sistema? Osnovni pregled interfejsa (npr. korisnikog).
Konceptualni dijagram.
Revision
Control
Literatura:
Fitzpatrick, Pilato, Version Control with Subversion, http://svnbook.red-bean.com
Somerville, Software Engineering, 8th edition, Chapter 29.
Pressman, Software Engineering: A Practitioner's Approach, 6th edition, Chapter 27.
Kontrola revizija
Omoguuje istovremeni rad vie ljudi
na istom kodu
Repozitorij
Historijat
rcs (revision control system)
cvs (concurrent versioning
system)
svn (subversion)
...
Copy-Modify-Merge model
1. Preuzmi kod - checkout (pravi se lokalna
kopija)
2. Napravi izmjene na lokalnoj kopiji
3. Poalji izmjene na server - commit
3a. Ako se u meuvremenu neto
promijenilo na serveru: konflikt! Razrijei
runo
Copy-Modify-Merge - primjer:
Subversion - pojmovi
trunk - glavno radno stablo (npr. verzija 4.0
alpha, nightly builds)
branch - grana koja se razvija odvojeno od
trunk stabla (npr. verzije 3.2.x, 3.1.x ...,
feature branch)
merge - spajanje: branch -> trunk ili
trunk->branch
trunk
branch
tag
branch
Distribuirani RC
Bazaar (Ubuntu)
Git (Linux)
Mercurial (Mozilla i dr.)
Budunost?
Vie o Subversion
http://svnbook.red-bean.com/
TortoiseSVN klijent:
http://tortoisesvn.tigris.org/
URL repozitorija na Forge:
http://f.etf.unsa.ba/svn/si2011-timX
gdje je X redni broj tima
TortoiseSVN
Bug tracking
ili
Issue tracking
ili
Request management
ili
Change management
ili
...
Change management
Potrebno dokumentovati svaki zahtjev
za promjenom
Potvren
Odbijen
Odobren
Nije odobren
Rijeen
Nerjeiv
Provjeren
Softversko
Prototipiranje
(beta verzija prezentacije)
Literatura:
Somerville, Software Engineering, Chapter 17.
Google.
Softverski prototip
Nepotpuna varijanta sistema koja se koristi
za demonstraciju koncepata i isprobavanje
dizajn opcija
Nije dokumentovan!
Horizontalni prototip
Vertikalni prototip
Vizualni prototip
(interaktivna animacija)
Funkcionalni prototip
Prototipanje
Prototip kao dio ivotnog
ciklusa razvoja softvera
Rapidno prototipiranje
(prototip se odbacuje)
Rapidno prototipiranje
Porijeklo iz industrije (3D tampanje)
Aktivni dokumenti
Jezici, Biblioteke
Toolkits, Frameworks
Platforms
Literatura:
McConnell, Code Complete, Chapter 4.
Nivo u odnosu na C
C
C++
Fortran
Java
Perl
Python
Smalltalk
MS VisualBasic
1
2,5
2
2,5
6
6
6
4,5
Programske paradigme
imperativno programiranje
struktuirano programiranje
objektno-orjentisano programiranje
deklarativno programiranje
funkcionalno programiranje
logiko programiranje
agent-oriented, aspect-oriented, event-driven itd.
Ada
Asembler
BASIC
jezik za uenje programiranja, nastao 1964
C++
nastao 1983 kako bi se Cu dodala objektna orijentacija
C#
kombinuje osobine C++ i Java
COBOL
Adobe Flash
dodaje multimedijalne mogunosti web stranicama
FORTRAN
Java
nastao 1995 kao dio Java platforme
JavaScript
ispravan naziv: ECMAScript
Lisp
nastao 1958, funkcionalni jezik inspirisan Lambda
kalkulusom
Pascal
Perl
skripting jezik za UNIX orjentisan na analizu teksta i
izvjetaje
PHP
jezik za razvoj web aplikacija, glavna inspiracija Perl
Python
vie-paradigmatini jezik, naglasak na itljivosti koda
Ruby
slian Pythonu i Perlu
SmallTalk
najdosljedniji objektno-orjentisani jezik, popularan u
akademiji
SQL
Google Trends
Poslovi - Craigslist
Kombinovano - Tiobe
Google Go ?
Visual F# ?
Haskell ?
D?
SmallTalk ?
Scala ?
....
Biblioteka
Skup podprograma ili klasa koji se koriste pri razvoju
softvera.
Razvoj biblioteka je najpouzdaniji pristup za ponovnu
upotrebu koda (code reuse) i kao takav je jedan od
temeljnih principa struktuiranog programiranja.
Toolkit
Biblioteka koja sadri elemente grafikog interfejsa
kao to su dugme, prozor itd. (widgets). Primjeri:
Gimp Toolkit (gtk), Fast Light ToolKit (fltk), Google
Web Toolkit (GWT), Xt (X toolkit), Standard Widget
Toolkit (SWT)
Okvir (framework)
Sveobuhvatna biblioteka koja svojim dizajnom
namee odreeni pristup dizajnu aplikacije i na taj
nain proiruje sam programski jezik.
Framework moe biti dostupan za vie jezika i time
olakati tranziciju sa jednog jezika na drugi.
(Softverska) platforma
Framework koji apstrahuje hardversku platformu, tako
da se aplikacije vie ne razvijaju za hardversku nego
za softversku platformu.
Na softverskoj platformi se implementiraju razni jezici
Toolkits
Kao primjer, napraviemo usporedbu toolkits za Javu:
Toolkits
Swing
Toolkits
SWT
Swing
SWT
Automatska dealokacija
Frameworks
to je klasa za objekat, to je okvir (framework) za
aplikaciju.
Frameworks
Java framework
.NET framework
Ova dva su ujedno i platforme.
Qt framework
Frameworks - principi
Hot Spots
Frameworks - principi
Proirivost
Design Patterns
Frameworks - principi
Treba postojati tano jedan nain da se uradi bilo ta. Ovo poboljava
itljivost i smanjuje dupliciranje koda.
OOP
Frameworks primjer - Qt
#include
#include
#include
#include
<QApplication>
<QFont>
<QPushButton>
<QWidget>
Frameworks primjer - Qt
#include
#include
#include
#include
<QApplication>
<QFont>
<QPushButton>
<QWidget>
Inversion of Control
main() ne radi gotovo nita, samo
poziva exec() metodu klase
QApplication koja preputa kontrolu
frameworku
Frameworks primjer - Qt
#include
#include
#include
#include
<QApplication>
<QFont>
<QPushButton>
<QWidget>
Proirivost (extensibility)
Poinjemo tako to emo
napraviti vlastitu podklasu
klase QWidget
MyWidget::MyWidget(QWidget *parent)
: QWidget(parent)
{
setFixedSize(200, 120);
QPushButton *quit = new QPushButton(tr("Quit"), this);
quit->setGeometry(62, 40, 75, 30);
quit->setFont(QFont("Times", 18, QFont::Bold));
connect(quit, SIGNAL(clicked()), qApp, SLOT(quit()));
}
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MyWidget widget;
widget.show();
return app.exec();
}
Inversion of Control
main() ne radi gotovo nita, samo
poziva exec() metodu klase
QApplication koja preputa kontrolu
frameworku
Frameworks primjer - Qt
#include
#include
#include
#include
<QApplication>
<QFont>
<QPushButton>
<QWidget>
Proirivost (extensibility)
Poinjemo tako to emo
napraviti vlastitu podklasu
klase QWidget
Hot Spot
U ovom sluaju implementiraemo
samo konstruktor nae klase koji
ustvari odreuje ta e se desiti
Inversion of Control
main() ne radi gotovo nita, samo
poziva exec() metodu klase
QApplication koja preputa kontrolu
frameworku
Frameworks primjer - Qt
#include
#include
#include
#include
<QApplication>
<QFont>
<QPushButton>
<QWidget>
Proirivost (extensibility)
Poinjemo tako to emo
napraviti vlastitu podklasu
klase QWidget
Hot Spot
U ovom sluaju implementiraemo
samo konstruktor nae klase koji
ustvari odreuje ta e se desiti
Hot Spot
Preko signala odreujemo druge
QPushButton *quit = new QPushButton(tr("Quit"), this);
interesantne dogaaje, npr. klik na
quit->setGeometry(62, 40, 75, 30);
dugme smo povezali sa
quit->setFont(QFont("Times", 18, QFont::Bold));
zavretkom programa
connect(quit, SIGNAL(clicked()), qApp, SLOT(quit()));
}
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MyWidget widget;
widget.show();
return app.exec();
}
Inversion of Control
main() ne radi gotovo nita, samo
poziva exec() metodu klase
QApplication koja preputa kontrolu
frameworku
Frameworks primjer - Qt
#include
#include
#include
#include
<QApplication>
<QFont>
<QPushButton>
<QWidget>
Proirivost (extensibility)
Poinjemo tako to emo
napraviti vlastitu podklasu
klase QWidget
Convention over Configuration
Default implementacija klasa
QWidget i QPushButton radi
Hot Spot
gotovo sve to nam treba, nije
U ovom potrebna
sluaju implementiraemo
konfiguracija
samo konstruktor nae klase koji
ustvari odreuje ta e se desiti
Hot Spot
Preko signala odreujemo druge
QPushButton *quit = new QPushButton(tr("Quit"), this);
interesantne dogaaje, npr. klik na
quit->setGeometry(62, 40, 75, 30);
dugme smo povezali sa
quit->setFont(QFont("Times", 18, QFont::Bold));
zavretkom programa
connect(quit, SIGNAL(clicked()), qApp, SLOT(quit()));
}
int main(int argc, char *argv[])
Inversion of Control
{
Convention over Configuration
main() ne radi gotovo nita, samo
QApplication app(argc, argv);
Ni ovo nismo morali raditi (istopoziva exec() metodu klase
MyWidget widget;
radi estetike =)
QApplication koja preputa kontrolu
widget.show();
return app.exec();
frameworku
}
Softverske platforme
Java platforma
Jezici: Java, Clojure, Groovy, JRuby, Rhino, Jython,
Scala, Web Language
.NET platforma
Jezici: C#, C++/CLR, VB.NET, F#, IronPython,
IronRuby...
User Interface
Design
(alfa verzija prezentacije)
Literatura:
Pressman, Software Engineering, Chapter 12.
Somerville, Software Engineering, Chapter 16.
2. Jednostavan za uenje
3. Pristupaan
5. Eksterno konzistentan
6. Estetika
ne treba ni to zaboraviti
...
Specifikacija UI
Sadraj dokumenta
historija izmjena
uvod
poznati problemi
opisi ekrana
CASE (Computer
Aided Software
Engineering) alati
Literatura:
McConnell, Code Complete, Chapter 30.
CASE
- nauno zasnovana
primjena alata i metoda na
softverski sistem sa ciljem
razvoja proizvoda visoke
kvalitete, bez defekata i
laganih za odravanje
CASE alati
upper CASE
(vii nivo planiranja i projektovanja sistema)
lower CASE
(podrka konkretnim aktivnostima razvoja
softvera)
generisanje koda?
upper / lower ?
navigacija koda
biblioteke
SVN (Tortoise)
CVS (sve rjee)
Git
Mercurial, Bazaar...
Visual SourceSafe
plugins za razvojna okruenja
CASE - testiranje
automatsko testiranje - unit testing (npr. JUnit,
NUnit, CppUnit itd.)
generatori testova
Nedostaci CASE
nekompatibilnost alata
Web
Tehnologije
Literatura:
Pressman, Software Engineering, Chapters 16-20.
ta je to web?
web server: na zahtjev alje fajl korisniku
koristei HTTP (HyperText Transfer Protocol) (i to
je sve (uglavnom))
ta je to web? (cont.)
statika web stranica - HTML (ili neki drugi)
dokument koji je uvijek isti
klijentske
serverske
kombinovane
JavaScript primjer
....<!-- HTML kod --> ....
<script language=JavaScript>
function PrikaziSakrij(sta){
if (sta.style.display=="none"){
sta.style.display="inline";
}
else {
sta.style.display="none";
}
}
</script>
<img src=slika.gif id=slika>
<input type=button
value=Prikai/sakrij sliku
onclick=PrikaziSakrij(document.getElem
entById['slika'])>
praktino backdoor!!!
http://www.mojserver.com/cgi-bin/skripta.cgi?ime=Vedran
#include <stdio.h>
int main(int argc, char** argv) {
printf (Content-Type:
text/html\n\n<h1>Pozdrav</h1>);
for (int i=1; i<argc; i++)
if (strncmp(argv[i], ime=, 4)==0)
printf(Zdravo, %s!, argv[i]+4);
return 0;
}
http://en.wikipedia.org/wiki/List_of_web_application_frameworks
Kako pisati
itljiv kod?
while
}
}
x = 3+4 * 2+7
Allman
Whitesmits
GNU style
....
Zagrade
Koja je vrijednost sljedeeg izraza:
12 + 4 % 3 * 8 / 2 = ?
Zagrade
Koja je vrijednost sljedeeg izraza:
12 + 4 % 3 * 8 / 2 = 16
Ako vam je za ovaj odgovor trebalo vie od 5
sekundi, znai da bi ovdje pomogle zagrade!
cursor.start = startingScanLine;
cursor.end = endingScanLine;
window.title = editWindow.title;
window.dimensions = editWindow.dimensions;
window.foregroundColor = userPreferences.foregroundColor;
cursor.blinkRate = editMode.blinkRate;
window.backgroundColor = userPreferences.backgroundColor;
SaveCursor(cursor);
SetCursor(cursor);
// Podesavanje prozora
window.dimensions = editWindow.dimensions;
window.title = editWindow.title;
window.foregroundColor = userPreferences.foregroundColor;
window.backgroundColor = userPreferences.backgroundColor;
// Podesavanje kursora
cursor.start = startingScanLine;
cursor.end = endingScanLine;
cursor.blinkRate = editMode.blinkRate;
SaveCursor(cursor);
SetCursor(cursor);
PrintMessage(++n, n+2);
Komentari
Zakljuci
Zastarjeli (i inae netani) komentari proizvode
vie tete nego koristi!
I ovo su komentari
return NULL; // TODO: nedovrseno!
Humor u komentarima
Komentar = pseudokod?
Dokumentuj iznenaenja
Izbjegavaj skraenice
int* p = GetMemory();
Komentarisanje klasa
Komentarisati osnovni dizajn pristup: koriteni
abloni (patterns), filozofija, eventualne alternative
koje su razmatrane i odbaene
JavaDoc
Alat koji generie programersku dokumentaciju
iz posebno formatiranih komentara
http://java.sun.com/j2se/javadoc/writingdoccomments/
Za C++: doxygen
www.doxygen.org
JavaDoc
Alat koji generie programersku dokumentaciju
iz posebno formatiranih komentara
http://java.sun.com/j2se/javadoc/writingdoccomments/
Za C++: doxygen
www.doxygen.org
JavaDoc
/**
* Returns an Image object that can then be painted on the screen.
* The url argument must specify an absolute {@link URL}. The name
* argument is a specifier that is relative to the url argument.
* <p>
* This method always returns immediately, whether or not the
* image exists. When this applet attempts to draw the image on
* the screen, the data will be loaded.
*
* @param url an absolute URL giving the base location of the image
* @param name the location of the image, relative to the url
argument
* @return
the image at the specified URL
* @see
Image
*/
public Image getImage(URL url, String name) {
try {
return getImage(new URL(url, name));
} catch (MalformedURLException e) {
return null;
}
}
JavaDoc
getImage
public Image getImage(URL url,
String name)
Returns an Image object that can then be painted on the screen. The url argument
must specify an absolute URL. The name argument is a specifier that is relative to
the url argument.
This method always returns immediately, whether or not the image exists. When
this applet attempts to draw the image on the screen, the data will be loaded. The
graphics primitives that draw the image will incrementally paint on the screen.
Parameters:
url - an absolute URL giving the base location of the image
name - the location of the image, relative to the url argument
Returns:
the image at the specified URL
See Also:
Image
JavaDoc
Poinje sa /**
Kljune rijei:
@author (samo za klase i interfejse)
@version (samo za klase i interfejse)
@param (samo za metode i konstruktore)
@return (ta vraa - samo za metode)
@exception (koje izuzetke baca)
@see (vidjeti - referenca)
@since (oznake verzija)
@serial (bitno za serijalizaciju)
@deprecate (prevaziena metoda ili klasa,
ostavljena radi kompatibilnosti)
JavaDoc
Poinje sa /**
Kljune rijei:
@author (samo za klase i interfejse)
@version (samo za klase i interfejse)
@param (samo za metode i konstruktore)
@return (ta vraa - samo za metode)
@exception (koje izuzetke baca)
@see (vidjeti - referenca)
@since (oznake verzija)
@serial (bitno za serijalizaciju)
@deprecate (prevaziena metoda ili klasa,
ostavljena radi kompatibilnosti)
Nomenklatura
Nazivi promjenljivih
Naziv promjenljive treba da potpuno i precizno
opisuje njenu svrhu
Izbjegavati skraenice!!!
Nomenklature
U jezicima koji razlikuju velika i mala slova,
nomenklatura olakava razlikovanje tipa
identifikatora
Nomenklatura - primjer
Ako se naziv sastoji od vie rijei, one se piu
spojeno pri emu svaka rije poinje velikim
slovom
Primjer:
NekaKlasa objekatNekeKlase;
objekatNekeKlase.metodaKlase(KONST);
Nomenklatura - nastavak
Globalne vrijednosti poinju sa g_
Statike vrijednosti sa s_
Razliiti stilovi
U C-u je obiaj da se imena promjenljivih i
funkcija piu malim slovima, uz upotrebu znaka
donja crta (_) kao razmaka
Maarska notacija
Koristi se u MS Windows bibliotekama
Prefiksi za razliite tipove podataka (l - long, i int, sz - string koji se zavrava nulom, arr - niz, p pokaziva...)
Jo savjeta
Izbjegavati globalne promjenljive zbog
neeljenih sporednih efekata
...
// Ovdje je postavljen broj_elemenata
UnesiMatricu();
// Da li je ovdje promijenjen broj_elemenata?
StepenujMatricu();
for (i=0; i<broj_elemenata; i++)
IspisiRed(matrica[i]);
Jo savjeta
Ispravno rjeenje:
...
// Ovdje je postavljen broj_elemenata
broj_elemenata=UnesiMatricu(matrica);
// Ovdje SIGURNO nije promijenjen broj_elemenata
StepenujMatricu(matrica, broj_elemenata);
for (i=0; i<broj_elemenata; i++)
IspisiRed(matrica[i]);
Jo savjeta
I jo savjeta!
C (i srodni jezici) daju mnogo prilika za
neitljiv kod, kao to su:
igra sa makro-ima
Code::Blocks!!!
Design
Patterns
Design patterns
knjiga Design patterns, autori
Gang of Four (GoF) - Gamma et al.
anti-pattern
Model-View-Controller (MVC)
Design pattern ili filozofija?
Arhitekturalni pattern
Separation of Concerns
Model-View-Controller (cont.)
Osnovni princip: sve klase su
svrstane u tri kategorije
Model-View-Controller (cont.)
Model-View-Controller (cont.)
MVC trijada klasa:
Model-View-Controller (cont.)
StudentController
sm : StudentModel
sv : StudentView
StudentView
sm : StudentModel
sc : StudentContr...
ok : Button
ime : TextEdit
update()
okClicked()
StudentModel
set*()
changed()
get*()
Model-View-Controller (cont.)
MVC frameworks nude generike
MVC klase
MVP(resenter)
MVVM (ViewModel)
MVA(dapter)
Model-View-Controller (cont.)
Da li je mogu MVC na webu?
Tronivoska arhitektura
(three-tier)
arhitekturalni pattern
ActiveRecord pattern
objektno-relaciono mapiranje
(ORM)
Factory pattern
fabrika (factory) je metoda koja
kreira novi objekat neke klase
class Nesta {
Nesta(int x);
Nesta dajNesta(int x) {
return new Nesta(x);
}
}
Krug dajKrug(Boja b) {
if (b==Crvena)
return new CrveniKrug;
if (b==Plava)
return new PlaviKrug;
...
}
Oblik
Kvadrat
Krug
CrveniKvadrat
CrveniKrug
PlaviKvadrat
PlaviKrug
class Kompleksan {
Kompleksan(double re, double im); // iz
Dekartovih koordinata
Kompleksan(double abs, double angle); //
iz polarnih koordinata
// Syntax error
// Ne mozemo imati dva konstruktora sa
istim brojem i tipom parametara
};
class Kompleksan {
Kompleksan(double re, double im);
Kompleksan izDekartovih(double re, double
im) { return new Kompleksan(re,im); }
Kompleksan izPolarnih(double abs, double
angle) { return new Kompleksan(abs*cos(angle),
abs*sin(angle); }
// Jasnije je sta koji radi
}
Kompleksan k = izPolarnih(a,b);
Singleton pattern
klasa koja ima samo jednu
instancu (de facto globalni objekat)
problemi sa redoslijedom
inicijalizacije (kod statikih
vrijednosti)
Kvadrat k;
...
// metoda ispisiKrug prima Krug, a mi
imamo samo Kvadrat... sta sad?
ispisiKrug(KvadratniKrug(k));
Decorator pattern
koristi se kada je potrebna izmjena
osobina klase ili dodavanje novih osobina
prilikom izvrenja
Iterator pattern
iterator klasa slui za kretanje
kroz elemente neke kolekcije, pri
tome ne otkrivajui internu strukturu
klase
podrka u Javi
Procesi i
metodologije
Literatura:
Pressman, Software Engineering, Chapter 3: Process Models
Debata u SI krugovima
Razliite vrste projekata
poslovni sistemi
off-the-shelf
Deployment
Odravanje
Faza 3: Implementacija
Programiranje je individualan
proces, ne postoji univerzalan metod
Faza 4: Testiranje
Pronalaenje nedostataka u kodu
(debugging)
U toku implementacije?
Automatizovani testovi
Faza 5: Dokumentovanje
Dokumentovanje finalnog
projekta a ne koda (komentari itd.)
Testiranje integracije
Obuka korisnika
Faza 8: Odravanje
(maintenance)
Ispravka nedostataka i nove
funkcionalnosti
Da li je neto nedostatak?
Verzija 1.0
Dizajn
Verzija 2.0
Implementacija
Deployment
Verifikacija
i validacija
Testiranje
Dokumentovanje
Nedostaci waterfall-a
Puno vremena se gubi u ranim
fazama (preko 50% prve dvije faze)
Modifikovani waterfall
Korisniki
zahtjevi
Dizajn
Implementacija
Testiranje
Dokumentovanje
Verifikacija
i validacija
W. Royce (1970)
Deployment
Odravanje
Iterativni pristup
Rjeenje za waterfall probleme!
Iterativni pristup
Poetni
zahtjevi
Analiza i
dizajn
Implementacija
Prototip
Zahtjevi za
slj. iteraciju
MINI IVOTNI
CIKLUS
Evaluacija
Deployment
Testiranje
Evolutivni razvoj
Poslovni sistem se mijenja, pa se i
informacioni sistem treba mijenjati
Evolutivni razvoj
Konkurentne aktivnosti
Specifikacija
Grubi opis
sistema
Razvoj
Validacija
Prva verzija
Meuverzije
Meuverzije
Meuverzije
Finalna verzija
Integracija
Implementacija
Upravljanje programom proizvoda
Precizirane varijante IP
Iterativni razvoj sa
inkrementalnom isporukom
Spiralni pristup
Agilni razvoj
Kombinacije inkremenata u
raznim stepenima dovrenosti ine
iteracije
Incremental approach
Spiralni model
Naglasak na kontroli rizika,
prototipu, top-down & bottom-up
Spiralni model
Programiranje u parovima
Jednostavnost je imperativ
Konstantan refactoring
Agilni razvoj i XP
Naglasak na ovjeku, ne na
procesu!
Jo procesa...
Ratonal Unified Process (RUP)
Scrum
Capability/Maturity Model
Integration (CMMI)
Code
refactoring
Literatura:
Martin Fowler, Refactoring
Programi se nikada ne
piu ispoetka!
Code refactoring
Transformacija koda koja ne mijenja
njegovu funkcionalnost
Razlozi:
bolja itljivost
Code refactoring
Code smells - loe prakse u
programiranju, signal da je potreban
refactoring
Testiranje nakon svake sitne izmjene nema refactoringa bez unit testova!
Code refactoring
Bez refactoringa, dizajn propada
Da li je refactoring gubljenje
vremena?
Konstantni refactoring
Izmjene baze?
Code smells
1. Ponavljanje koda!
2. Ponavljanje koda!
3. Ponavljanje koda!!!
4.
5.
...
100. Ponavljanje koda!?!?#@$!
Code smells
Komplikovano koritenje,
razumijevanje, promjena
Code smells
Code smells
Pretvoriti u klasu!
Code smells
Code smells
113. Lanci poruka
Code smells
Refactoring metode
72 metode u Fowleru
Extract Method
Refactoring metode
Extract Class
Refactoring metode
Extract Subclass
Refactoring metode
Encapsulate Field
Hide Method
Refactoring metode
Inline Class
Pull Up Method / Field
Refactoring metode
Introduce Factory
Testiranje
Literatura:
Steve McConnell, Code Complete, Chapter 21: Collaborative Construction, Chapter
22: Developer Testing, Chapter 23: Debugging
Pressman, Software Engineering, Chapter 13: Testing Strategies, Chapter 14:
Testing tactics
Somerville, Software Engineering, Chapter 23: Software Testing
Testiranje
Unit testing
Component testing
Integration testing
Regression testing
System testing
Black-box testing
White-box testing
Osnovni principi
Cilj testiranja je da se dokae da
greke postoje - ne obrnuto
ta testirati?
100% unit test coverage - sulud cilj (u
praksi je obino oko 50% sasvim ok)
Kako testirati?
Data-Flow testing
Black-Box testiranje
Equivalence partitioning
Client-server testiranje
Real-time testiranje
Testni scenariji
Model ponaanja
iz use-case dijagrama
ta oekujemo od testiranja?
U industriji prosjek je 10-20
greaka na 1000 linija koda
Programerska praznovjerja
NAUNA METODA
1. Eksperiment
2. Ponovljiv eksperiment
3. Hipoteza
4. Eksperiment koji obara hipotezu
5. Teorija
Primjena na debugging
1. Stabilizujte greku
2. Locirajte greku
a) Prikupite podatke o greci
b) Formirajte hipotezu
c) Dokaite ili oborite hipotezu
3. Popravite greku
4. Testirajte ispravku greke
5. Pronaite sline greke
Brute-force debugging
Detaljan pregled svake linije koda
Verifikacija &
validacija (V&V)
Literatura:
Somerville, Pressman, McConnel, predavanja PiKKS ...
Verification:
Is the product done right?
Validation:
Is the right product done?
Verifikacija:
Pravimo li proizvod kako
treba? (Da li je odreena funkcionalnost
korektno implementirana?)
Validacija:
Pravimo li pravi proizvod?
(Da li proizvod proizlazi iz zahtjeva korisnika?)
O verifikaciji i validaciji
Provodi se neprekidno, u svim
fazama ivotnog ciklusa
Korektnost
Upotrebljivost
Efikasnost
Pouzdanost
Integritet
Prilagodljivost
Preciznost
Robusnost
Fleksibilnost
Portabilnost
itljivost
Razumljivost
Metrike koda
LoC
SLOC, NCSS
Cyclomatic complexity (McCabe)
V&V checklist
1. SRS - Validacija
1.1. Da li svaki zahtjev slijedi iz: eksplicitnih
zahtjeva korisnika, optih ciljeva projekta,
tehnologija ili iz okruenja (relevantnih standarda i
normativa...)?
1.2. Da li je zahtjev neophodan (moe li se bez
njega)?
1.3. Da li je zahtjev dovoljno ogranien? Moe li se
protumaiti na pogrean nain?
1.4. Da li je zahtjev realno ostvariv?
2. SRS - Verifikacija
2.1. Da li je zahtjev prezentovan na odgovarajuem
nivou apstrakcije?
- Da li je dovoljno precizno specificiran kako bi
se mogao implementirati?
- Da li je zahtjev previe detaljno specificiran
tako da ograniava opcije kod implementacije?
2.2. Postoje li kontradikcije / konflikti meu
zahtjevima?
2.3. Testabilnost - moe li se pouzdano utvrditi da li
je zahtjev ispunjen?
2.4. Da li su zahtjevi logiki organizovani u cjeline?
3. OOAD - Validacija
3.1. Da li svaka modelirana funkcionalnost slijedi iz
zahtjeva korisnika?
3.2. Postoje li konflikti sa SRS dokumentom
(posebno use-case dijagram)?
3.3. Da li je modelirani sistem u stanju da ispuni sve
postavljene zahtjeve?
3.4. Da li modelirani sistem ispunjava nefunkcionalne
zahtjeve? (npr. modeliran je sistem koji je nesiguran ne ispunjava funkcionalni zahtjev sigurnost)
4. OOAD - Verifikacija
4.1. Postoje li formalne greke u dijagramima (npr.
nisu koriteni odgovarajui simboli, prezentovani su
koncepti koji su nemogui ili neizvodivi itd.)
4.2. Da li su dijagrami na odgovarajuem nivou
apstrakcije? (prekomplikovani / prejednostavni)
Slijede detaljnije provjere nekih dokumenata koji
spadaju pod OOAD.
7. UI specifikacija - Validacija
7.1. Da li UI specifikacija prikazuje sve funkcionalne
zahtjeve?
7.2. Postoje li elementi UI specifikacije koji nisu
navedeni kroz zahtjeve?
7.3. Postoje li elementi koji su realno neizvodivi uz
zahtjeve i ogranienja navedene u SRSu?
8. UI specifikacija - Verifikacija
(ujedno i verifikacija UIja u krajnjem kodu)
8.1. Da li je dizajnirani UI interno konzistentan?
8.2. Da li je dizajnirani UI eksterno konzistentan i
sukladan pravilima platforme (HIG)?
8.3. Da li je dizajnirani UI jednostavan za upotrebu?
8.4. Da li je dizajnirani UI pristupaan (pogodan za
upotrebu tastaturom, za itae ekrana itd.)?
8.5. Da li dizajnirani UI podrava osobine podruja i
jezika za koje e se koristiti prema SRS dokumentu?
8.6. Postoje li besmislene / neodgovarajue poruke?
Modifikovati SRS
Problem: korisnik mora odobriti
Modifikovati dizajn dokumente
Modifikovati kod
Problem: puno posla, kaskadni efekti
Modifikovati dokumentaciju
It's a feature!
Dokumentacija
Literatura:
???
Korisnika dokumentacija
(User documentation)
Tehnika dokumentacija
(Technical documentation)
Korisnika dokumentacija
Namijenjena krajnjem korisniku:
uposlenicima, osoblju za podrku
IEEE 1063-2001
Kontekstualna pomo
Tooltips
Agenti pomonici
Napomene izdanja (Release notes)
READ.ME datoteka
Pomo (Help)
Kontekstualna pomo
Agenti pomonici
Napomene izdanja
Tehnika dokumentacija
Namijenjena osobama koje
modifikuju ili odravaju sistem
Komentari u kodu :)
Samo-dokumentujui kod
Dokumentovanje internih APIja
Javadoc, Doxygen
Dijagrami: class, erd, component
Unit Development Folders (UDF)
Upute za instalaciju
Upute za modifikaciju - HACKING.TXT
Poznati bugovi, plan buduih izmjena
Javadoc
http://research.cs.queensu.ca/home/cisc124/2001f/Javadoc.html
Javadoc primjer
/** Opis klase MojaKlasa
*
* @author Pero Peric
* @author Meho Mehic
* @version 6.0z r475 3. Jan 1970.
*/
public class MojaKlasa {
/** opis polja mojeIntPolje */
public int mojeIntPolje;
/** Opis konstruktora MojaKlasa()
*
* @throws MojIzuzetak Opis izuzetka
*/
public MojaKlasa() throws MojIzuzetak {
// Bla Bla Bla...
}
/** Opis metode mojaMetoda(int a, String b)
*
* @param a
Opis parametra a
* @param b
Opis parametra b
* @return
Opis vrijednosti koju metoda vraca
*/
public Object mojaMetoda(int a, String b) {...
Dijagrami
OpenOffice.org dijagram meuzavisnosti
komponenti
(component dependency diagram)
INSTALL.TXT
HACKING.TXT
=========================================
D-Bus Python bindings - notes for hackers
=========================================
:Author: Simon McVittie, `Collabora`_
:Date: 2007-01-24
.. _Collabora: http://www.collabora.co.uk/
Upstream development
====================
dbus-python is developed at freedesktop.org using ``git``.
See UsingGit_ for some details.
.. _UsingGit: http://www.freedesktop.org/wiki/UsingGit
Anonymous
``git
Committer
``git
access
clone git://anongit.freedesktop.org/git/dbus/dbus-python``
access (requires freedesktop.org shell account)
clone git+ssh://git.freedesktop.org/git/dbus/dbus-python``
Modules
=======
``dbus``, ``dbus.service`` and ``dbus.mainloop`` are core public API.
``dbus.lowlevel`` provides a lower-level public API for advanced use.
``dbus.mainloop.glib`` is the public API for the GLib main loop integration.
``dbus.types`` and ``dbus.exceptions`` are mainly for backwards
compatibility - use ``dbus`` instead in new code. Ditto ``dbus.glib``.
``dbus._dbus``, ``dbus.introspect_parser``, ``dbus.proxies`` are internal
implementation details.
``_dbus_bindings`` is the real implementation of the Python/libdbus
integration, while ``_dbus_bindings`` is the real implementation of
Python/libdbus-glib integration. Neither is public API, although some
of the classes and functions are exposed as public API in other modules.
Threading/locking model
=======================
All Python functions must be called with the GIL (obviously).
Before calling into any D-Bus function that can block, release the GIL;
as well as the usual "be nice to other threads", D-Bus does its own
locking and we don't want to deadlock with it. Most Connection methods
Instalacija i
odravanje
Literatura:
???
Deployment
Skup aktivnosti koje su potrebne da
bi korisnik poeo koristiti proizvod
Deployment aktivnosti
Instalacija
Aktivacija
Adaptacija
Obuka (poetak obuke)
Update (auriranje)
Izdavanje
Release engineering
Taan skup koraka za kreiranje izdanja
Release manager
Kontrola revizija krucijalna
Alati: installers, build tools...
Problemi deploymenta
Regional settings
Problemi sa hardverom
Operativnim sistemom
Drugim softverom na sistemu
Mrenom konfiguracijom
Najbolje isporuiti kompletan sistem :)
Odravanje (maintenance)
Ispravke na sistemu radi popravki
greaka, poboljanja performansi i dr.
Odravanje (2)
Ugovor o odravanju
Zahtjev za odravanje
Odravanje (3)
Zahtjev moe rezultirati novim
projektom
Patch (zakrpa)
Automatski update?