Repository navigation
Laskari 3 perus
- palautusta varten tarvitaan yksityinen repositorio, jolla collaboratorina käyttäjä mluukkai
- kannattaa käyttää samaa repoa kuin viikon 2 tehtävissä
- palautusrepositorion nimi ilmoitetaan tehtävien lopussa olevalla palautuslomakkeella
- luennolla 5 puhuttiin koodikatselmoinnin yhteydessä staattisen analyysin työkaluista, joita voidaan käyttää koodin katselmoinnin apuna
- tutustu staattisen analyysin työkaluun chekstyleen ks. http://checkstyle.sourceforge.net/
- checkstyleä on helppo käyttää maven-projekteissa, sillä checkstyle on valmiiksi konfiguroituna pluginina mavenissa, ks. http://maven.apache.org/plugins/maven-checkstyle-plugin/ checkstyleä kannattaa käyttää yhdessä http://maven.apache.org/plugins/maven-jxr-plugin/:n kanssa
- jxr:n avulla checkstylen raportista pääsee klikkaamalla vastaaville sorsakoodin riveille
mene nyt johonkin valmiiseen projektiisi, esim. viikon 2 verkkokauppaan
- kokeile suorittaa
mvn jxr:jxr checkstyle:checkstyle - avaa raportti selaimella polulta /target/site/checkstyle.html
- tutki raporttia
- oletusarvoisesti raportoidaan paljon kaikenlaista ja oleellinen uhkaa hukkua detaljien joukkoon
checkstylen tarkkailemien virheiden joukko on konfiguroitavissa erillisen koniguraatiotiedoston avulla
- hae repositiorion https://github.com/mluukkai/ohtu2015/ hakemistosta viikko3 konfiguraatiotiedoston pohja my_checks.xml, talleta se sopivaan paikkaan, kokeile:
mvn jxr:jxr checkstyle:checkstyle -Dcheckstyle.config.location=my_checks.xml - komennossa oleva polku olettaa että konfiguraatiotiedosto sijaitsee projektihakemiston juuressa
- saattaa olla, että windowsissa komentoon on lisättävä pari hipsua:
mvn jxr:jxr checkstyle:checkstyle -D"checkstyle.config.location=my_checks.xml" - huom: saattaa olla, että komento ei toimi windowsilla, ongelma ehkä vaan win 8:ssa. jos näin käy, konfiguraatiotiedoston sijainnin voi määritellä pom.xml-tiedostossa seuraavasti:
- saattaa olla, että windowsissa komentoon on lisättävä pari hipsua:
<plugins>
<!-- muut mahdolliset pluginit -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.10</version>
<configuration>
<configLocation>my_checks.xml</configLocation>
</configuration>
</plugin>
</plugins>eli lisää uusi plugin-määrittely plugins-määrittelyjen sisälle. Jos plugins:eja ei ole, joudut lisäämään myös <plugins>...</plugins>-tägit.
- tee alkuperäisestä konfiguraatiotiedostosta kopio, ja poista kopiosta kaikki elementin
tree walkersisällä olevat tarkistukset - määrittele tiedostoon seuraavat säännöt (ks. available checks ja standard checks checkstylen sivuilta):
- metodien pituus max 10 riviä (tämä ja seuraavat säännöt määritellään moduulin tree walker sisälle)
- ei yli yhtä sisäkkäisiä if:iä
- ei sisäkkäisiä for:eja
- koodi on oikein sisennettyä
- syklomaattinen koodikompleksisuus korkeinaan 3 (selvitä mitä tarkoittaa!)
- ei yli 5 rivin copy-pasteja, huom: tätä tarkastusta ei tule laittaa tree-walkerin sisälle vaan "samalle tasolle" walkerin kanssa. Tätä ei löydy enää checkstylen dokumentaatiosta, mutta se on :
<module name="StrictDuplicateCode">
<property name="min" value="tähän suurin rivimäärä joka hyväksytään"/>
</module>
- tee koodiin muutoksia, jolla testaat että rikkoutuvat ehdot huomataan
Coveralls on raportointityökalu joka on yhteensopiva Travisin kanssa.
Tämä tehtävä vaatii että sinulla on forkattu https://github.com/hy-ohtu/UutisLukija ja sille pystytetty Travis-CI, tee siis viikon 1 haastava tehtävä 10 jos ei ole.
Nyt konffaamme Uutislukijalle Coveralls -raporttityökalun. Kirjaudu sisään github-tunnuksillasi. Seuraa coverallsin ohjeita niin, että lopulta Uutislukijan sivusi näyttää tältä mutta hieman tyhjemmältä. Älä siis jätä sivua "There have been no builds for this repo." -tilaan.
Konfiguroi Uutislukijan README näyttämään coverallsin README -badge, markdown-tägi löytyy edellisen kuvan oikealta laidalta.
Lue seuraava https://github.com/mluukkai/ohtu2015/blob/master/web/easyb.md
tutustu linkin takana olevan ohjelman rakenteeseen ja aja siihen liittyvään testit.
- käynnistä ohjelma
mvn exec ...-komennolla (ks. viikon 1 laskarit) - ohjelman tuntemat komennot ovat login ja new
tee User storyn User can log in with valid username/password-combination kaikista testeistä ajettavia
tee User storyn A new user account can be created if a proper unused username and a proper password are given kaikista testeistä ajattavia.
- käyttäjätunnuksen on oltava merkeistä a-z koostuva vähintään 3 merkin pituinen merkkijono, joka ei ole vielä käytössä
- salasanan on oltava pituudeltaan vähintään 8 merkkiä ja sen tulee sisältää vähintään yksi numero tai erikoismerkki
- Täydennä ohjelmaa siten että testit menevät läpi
Testejä kannattaa tehdä yksi kerrallaan, laittaen samalla vastaava ominaisuus ohjelmasta kuntoon.
HUOM voit vähentää testikoodisi copypastea määrittelemällä testeille apumetodeja. Ohjeita metodien määrittelemiseen ym. täällä
Ennen kuin sovellus päästään käynnistämään, on se konfiguroitava:
public static void main(String[] args) {
UserDao dao = new InMemoryUserDao();
IO io = new ConsoleIO();
AuthenticationService auth = new AuthenticationService(dao);
new App(io, auth).run();
}Muuta ohjelmaa siten, että sovelluksen konfigurointi hoidetaan Springin avulla (joko xml- tai annotaatioperustaisesti), ja main:iksi riittää:
public static void main(String[] args) {
ApplicationContext ctx = new FileSystemXmlApplicationContext("src/main/resources/spring-context.xml");
App application = ctx.getBean(App.class);
application.run();
}Ohjeita löytyy lisämateriaalista
Laita ohjelma tallettamaan käyttäjätiedot tiedostoon. Hoida asia siten, että teet luokan FileUserDAO, joka toteuttaa rajapinnan UserDAO. Anna FileUserDAO:lle sen käyttämä tiedosto konstruktorin parametrina. Testatessa on edelleen mielekästä käyttää InMemoryUserDAO:a.
- Jos tiedostojen käsittely on päässyt unohtumaan, ohjeita esim. Ohjelmoinnin jatkokurssin viikoilta 9 ja 11
- jos salasanatiedosto sijaitsee projektihakemiston juuressa, sen luettavaksi avaaminen onnistuu komennolla
new Scanner(new File("salasanat.txt")); - päätä itse mitä tapahtuu tilanteessa, jossa parametrina annettua tiedostoa ei ole olemassa
- jos salasanatiedosto sijaitsee projektihakemiston juuressa, sen luettavaksi avaaminen onnistuu komennolla
Jos teit edellisen tehtävän, muokkaa Spring-konfiguraatiosi ottamaan huomioon uusi tilanne. Huom: joutunet konfiguroimaan FileUserDAO:n xml:ssä, sillä merkkijonomuotoista konstruktoriparametria ei pysty injektoimaan @Autowired-annotaatiolla. Ohje String-tyyppisen arvon injektointiin xml-konfiguraatiossa täällä
tehtävien kirjaus:
- Kirjaa tekemäsi tehtävät tänne
- huom: tehtävien palautuksen deadline on ma 21.9 klo 23.59
palaute tehtävistä:
- Lisää viikon 1 tehtävässä 11 forkaamasi repositorion omalla nimelläsi olevaan hakemistoon tiedosto nimeltä viikko3
- tee viime viikon tehtävän tapaan pull-request
- anna tehtävistä palautetta avautuvaan lomakkeeseen
- huom: jos teet tehtävät alkuviikosta, voi olla, että edellistä pull-requestiasi ei ole vielä ehditty hyväksyä ja et pääse vielä tekemään uutta requestia