tarkvara projekt–seminar 10 · 2007. 4. 26. · eriseminar: miks mõned projektid õnnestuvad ja...
TRANSCRIPT
Tarkvara projekt–seminar 10
19. aprill 2007
Ivo Mägi
Kava
� Administratiivset
� V iteratsiooni tulemite tutvustus
� Eriseminar: Miks mõned projektid õnnestuvad ja mõned ebaõnnestuvad?ebaõnnestuvad?
26.04.2007 Ivo Mägi, Webmedia AS 2
Hindamine rutiinivabaks!
Iteratsiooni plaanist:
“Neljandas iteratsioonis peab valmima rakendus mida julgeb näidata ka lõppkasutajale. Tööle peavad lõppkasutajale. Tööle peavad
hakkama vormide validatsioonid, otsingud, filtreerimised
ja logardid. Defineeritakse ja realiseeritakse arvete genereerimine
ja väljatrükk.”26.04.2007 Ivo Mägi, Webmedia AS 3
Hindamine rutiinivabaks!
� Mida nimetatakse globaliseerumiseks:global $xxxx_xxxxxxxx_xxxxxxxx;
global $xxxx_xxxxxxxx_xxxxxxxxx;
global $xxxx_xxxxxxxx_xxxxxxx;
global $xxxx_xxxxxxxx_xxxxxxxxx;
global $xxxx_xxxxxxxx_xxxxx;
global $xxxx_xxxxxxxx_xxxxxxxx;
global $xxxx_xxxxxxxx_xxxxxxxx;
global $xxxx_xxxxxxxx_xxxxxxxx_xxxxxx;
global $xxxx_xxxxxxxx_xxxxxx;
global $xxxx_xxxxxxxx_xxxx;global $xxxx_xxxxxxxx_xxxx;
global $xxxx_xxxxxxxx_xxxxxx;
global $xxxx_xxxxxxxx_xxx;
global $xxxx_xxxxxxxx_xxxxx;
global $xxxx_xxxxxxxx_xxxx;
global $xxxx_xxxxxxxx_xxxxxxx_xxxx_xxxxxxx;
global $xxxx_xxxxxxxx_xxxxxxxxx_xxxxxx_xxxxxxx;
global $xxxx_xxxxxxxx_xxxxxxx_xxxxxx_xxxxxxx;
global $xxxx_xxxxxxxx_xxxxxxxxx_xxxxxxx; global $xxxx_xxxxxxxx_xxxxxx_xxxxxxx; global$xxxx_xxxxxxxx_xxxxx_xxxxxxx; global $xxxx_xxxxxxxx_xxxxx_xxxxxx; global$xxxx_xxxxxxxx_xxxxxxxx_xxxxxx_xxxxxxx;
global $xxxx_xxxxxxxx_xxxxxxxx_xxxxxx;
global $xxxx_xxxxxxxx_xxxxxxxx_xxxxxx_xxxxxxx;
global $xxxx_xxxxxxxx_xxxxxxxx_xxxxxx_xxxxxxx;
26.04.2007 Ivo Mägi, Webmedia AS 4
Hindamine rutiinivabaks
� Tagastame!
1. return (MyClass) null;
2. return (Object) myObject;
3. return (x > 0) ? true : false;3. return (x > 0) ? true : false;
4. If (x) return 1;
else if (Y) return 2;
else if (Z) return 3;
else if (W) return 4;
26.04.2007 Ivo Mägi, Webmedia AS 5
Hindamine rutiinivabaks!
� Nõuete dokument ja EKI
Ilma igasuguse irooniata on mul hea meel et on lõpuks aine kontekstis meel et on lõpuks aine kontekstis
leitud teema mis elavat diskussiooni tekitab.
26.04.2007 Ivo Mägi, Webmedia AS 6
Risthindamisest
� Kuna AIESEC loobus, siis neid risthinnanud rühmadel on kergem elu, saate oma punktid ainult ühe rühma hindamisega kätte
� Juhul kui hinnatav rühm hilines tulemi � Juhul kui hinnatav rühm hilines tulemi esitamisega, siis pääsete selle rühma risthindamisest. Seega - ärge hilinege, teete oma konkurentidele kingituse!
� Risthindamise käigus tuleb kindlasti süsteem installeerida
26.04.2007 Ivo Mägi, Webmedia AS 7
Iteratsioonide planeerimine
� Andke oma projektijuhtidele vastu pead
� Kui raske saab olla panna kirja kes, mida ja millal iteratsiooni käigus teeb?teeb?
� Kõigil rühmadel puudu toodangusse juurutamiseks tehtavate tegevuste planeerimine
26.04.2007 Ivo Mägi, Webmedia AS 8
Iteratsioonide kokkuvõtted
� Iteratsiooni kokkuvõttest peab näha olema mida projekti juures iteratsiooni käigus tehti, nn changelog
� Iteratsiooni kokkuvõtetes ei ole � Iteratsiooni kokkuvõtetes ei ole mahte hinnatud tegevuspõhiselt
26.04.2007 Ivo Mägi, Webmedia AS 9
Tagasiside tulemitele
� Risthindamise ja tagasiside mõte on anda rühmadele võimalus oma tööd paremini teha
� See on rühmale väga hea viis saada konstruktiivset kriitikatkonstruktiivset kriitikat
� Miks te seda ei kasuta?
26.04.2007 Ivo Mägi, Webmedia AS 10
Analüüsi teema kokkuvõte
� Antud aine raames nõutu oli tegelikult suhteliselt pealiskaudne
� Tegelikult sisaldab spetsifikatsioon:� Prototüübi pilti� Reegleid andmete valideerimiseks
26.04.2007 Rein Raudjärv, Webmedia AS 11
� Reegleid andmete valideerimiseks� Võimalike tegevuste kirjeldust� Andmebaasivälju, kust loetakse ja kuhu
salvestatakse� Lisaks: õiguste kontroll, kirjete arvu
hinnangud jne
Spetsifikatsioon
� Spekke kirjutatakse selleks, et ei peaks sama asja korduvalt seletama:� Arendajale
� Testijale
� Kliendi esindajale
26.04.2007 Rein Raudjärv, Webmedia AS 12
� Kliendi esindajale
� Juhul kui keegi neist vahetub
� Päris projektis ei säästa miski teid sisulisest tööst – ei metoodika (XP) ega vahendid
Süsteemitestid
� Viimases iteratsioonis peavad olema ka mittefunktsionaalsed nõuded testitud
� Jälle sama jutt – vahend ei tähenda, et sisulist tööd ei pea
26.04.2007 Rein Raudjärv, Webmedia AS 13
tähenda, et sisulist tööd ei pea tegema� Näiteks see, et te kirjeldate testid
Changelogic’us ei tähenda, et tegelikult testima ei peaks
� PS: testjuhtumeid CL-is kirjeldama ei pea
Testide kokkuvõte
� Süsteemitestide dokument näitab väga selgelt kaugel see süsteem on� Mitu kasutussituatsiooni on tehtud, mitu
testitud jne
� Kokkuvõttes on näha süsteemi arengut
26.04.2007 Rein Raudjärv, Webmedia AS 14
� Kokkuvõttes on näha süsteemi arengut
� Testide kokkuvõte – vt rühm LAIS
Ehitusskriptid
� PHP projektide puhul nõuti ehitusskriptidelt minimaalselt funktsionaalsust.
� Seda ei ole ju raske tööle panna?
� Ehitusskriptid enamikel Java rühmadel töötasid
� Overengineering
� Copy-paste liigsete targetitega� Copy-paste liigsete targetitega
� Sõltuvuste väärkasutamine
� Snaphot ei tohi sisaldada tühje kaustu ega faile .classpath ja .project
� Veenduge et ehitusskript töötab suvalises masinas
26.04.2007 Ivo Mägi, Webmedia AS 15
Kood: üldine
� Kõige olulisem koodi hindamise kriteerium on väga lihtne:
Kood peab töötamaKood peab töötama
26.04.2007 Ivo Mägi, Webmedia AS 16
Kood: üldine
� Kuigi selles iteratsioonis installatsioonijuhendit ei hinnatud, siis koodi ometigi hinnati
� Installatsioonijuhendid ei arvesta inkrementaalse paigaldusega
� Kui teie release järgmises iteratsioonis ei tööta siis te saate 340 punktist täpselt null punkti. siis te saate 340 punktist täpselt null punkti. Pooltel rühmadel release kas üldse ei tööta või töötab pärast mõningast ennustamist.
� Testige oma installatsioon läbi! Miks ma pean ennustama mis järjekorras baasiskripte sisse lasta? Kuskohast peaksin ma ära arvama administraatori parooli? Jne ...
26.04.2007 Ivo Mägi, Webmedia AS 17
Kood: üldine
� Palju sarnast/korduvat koodi, mis keskendub madalataseme operatsioonidele ja sõltub täielikult HTTP päringutest või JDBCoperatsioonidest
26.04.2007 Rein Raudjärv, Webmedia AS 18
operatsioonidest
� Kood “räägib” ainult “kuidas teha”ja ei peegelda seda “mida tehakse”
Kood: üldine
� Raskesti loetav
� Puuduvad kommentaarid
� Pikad veaohtlikud meetodid
� Ülearused sõltuvused
26.04.2007 Rein Raudjärv, Webmedia AS 19
� Kood ei ole jaotatud loogilisteks taaskasutatavateks osadeks
Kood: kommentaarid
� ... puuduvad peaaegu täielikult
� Kood on raskesti loetav ja hallatav
� Teadmised on ainult arendaja peas
26.04.2007 Rein Raudjärv, Webmedia AS 20
� Välja kommenteeritud kood!
Kood: stiil
� Läbisegi eesti ja inglise keel
� Tühikute pealt ei tasu kokku hoida!
� Vigane treppimine
26.04.2007 Rein Raudjärv, Webmedia AS 21
Kood: struktuur
� Paketistruktuuris puudub äriloogika ja presentatsioonikihi eristus
� JSP-d ei ole jaotatud alamkaustadeks
26.04.2007 Rein Raudjärv, Webmedia AS 22
Kood: Java keel
� Staatiline vs. mittestaatiline
� Extendimine staatilise meetodi lühemaks kasutamiseks
� Kui klassi asemel saab kasutada liidest, siis kasutage!
26.04.2007 Rein Raudjärv, Webmedia AS 23
liidest, siis kasutage!
� Serialiseeruvatel klassidel puudub „serialVersionUID”
� Kasutage Generirc-uid!
Kood: Ründeohtlik
� SQL injection
� URL-ist otsitava objekti ID lugemine
26.04.2007 Rein Raudjärv, Webmedia AS 24
Kood: Hooletus
� Kasutamata kood
26.04.2007 Rein Raudjärv, Webmedia AS 25
Kood: Raskesti muudetav
� Teated kirjutatakse otse koodi
26.04.2007 Rein Raudjärv, Webmedia AS 26
Kood: PHP� Kuna kõik kasutajatelt tulev sisend on vaikimisi
ebaturvaline, tuleks sellega ka vastavalt ümber käia. $_POST[$post_key] =
� htmlspecialchars($post_value) - klassi/funktsiooni alguses sellise asja tegemine on mõttetu, kuna võib muuta töötlemisele minevate andmete väärtuseid. Varjestamist tuleb teha alles andmeid brauseris kuvama Varjestamist tuleb teha alles andmeid brauseris kuvama hakates. Ning kui koodis üritatakse dünaamiliselt midagi includeda, tuleks enne kontrollida, kas antud sisend on valiidne.
� Milleks üldse kasutada objekt orienteeritud koodi, kui alamklassid defineeritakse globaalse muutujaga ülemklassi objekt. Alamklass saab ülemklassi meetoditele ilusti ligi.
26.04.2007 Ivo Mägi, Webmedia AS 27
Kood: PHP
� Ei ole otstarbekas klassi igas meetodis luua mingist klassist objekt. Selle asemel tuleks kasutada objekti klassi atribuudina.
� Tuleb kasutada logimisraamistikku, mis pakuks võimalust logitasemeid sisse-välja lülitada
� Kuidas saadakse teada toodangus tekkivatest � Kuidas saadakse teada toodangus tekkivatest vigadest? Vigu peab logima
26.04.2007 Ivo Mägi, Webmedia AS 28
Punktiseis
200,00
250,00
300,00
350,00
400,00
450,00
Pu
nkti
d
Tulemused
Series1
26.04.2007 Ivo Mägi, Webmedia AS 29
0,00
50,00
100,00
150,00
200,00Pu
nkti
d
Rühmad
Hindamisest
� Parimal rühmal hetkel 81% maksimaalsetest võimalikest punktidest
� Nõrgim tulemus hetkel 45% maksimaalsetest võimalikest maksimaalsetest võimalikest punktidest
� Pingutage, see on viimane iteratsioon. Iga projekti esimene release ongi kõige raskem ...
26.04.2007 Ivo Mägi, Webmedia AS 30