Skip to content
Snippets Groups Projects
Commit 5a528a4a authored by George Adrian Stoica's avatar George Adrian Stoica
Browse files
parents bd644e48 7f526dc4
No related branches found
No related tags found
No related merge requests found
Pipeline #138868 passed
......@@ -19,7 +19,6 @@ include::{sourcedir}/ci.adoc[leveloffset=+2]
link:slides/04-lecture.html[Lysarkene] gir en oversikt over SCRUM og Gitlab elementer som kan brukes i prosjektet.
=== 5. Forelesning
link:slides/05-lecture.html[Lysarkene] Q&A.
......@@ -28,6 +27,15 @@ link:slides/05-lecture.html[Lysarkene] Q&A.
link:slides/06-lecture.html[Lysarkene] Pair programming + more on Git.
=== 7. Forelesning
==== Oppsummering av øving 1
link:slides/individuell-oblig.html[Lysarkene] oppsummerer den individuelle, obligatoriske øving 1
==== Kodestank
link:slides/kodestank.html[Lysark] om såkalt "kodestank" (code smell)
== 2020
......
= Individuell obligatorisk øving
:customcss: slides.css
:icons: font
:includedir: includes/
:LECTURE_TOPIC: Øving 1
:LECTURE_NO:
include::{includedir}header.adoc[]
== Læringsmål for øvingen
* grunnleggende git-ferdigheter
* oppsett av java-prosjekt med maven
* sammenheng mellom navn, struktur og innhold
* oppfriskning om javafx og fxml
* generell feilfinning
== Hensikt
Alle skal kunne bidra til prosjektet!!!
== Grunnleggende git-ferdigheter
* opprett kodelager på gitlab
* klone mal-kodelager (`git clone`)
* knytte kodelager til annet fjernlager (`git remote`)
* overføre til fjernlager (`git push`)
* lage nye versjoner (`git add` og `git commit`)
== Java-prosjektoppsett m/maven
* kildekodemapper og pakkehierarki
** **src/main/java** og **src/main/resources**
** **src/test/java** (og **src/test/resources**)
* pakkehierarki og mappestruktur
** pakkenavn(segmenter) tilsvarer mappestruktur
** både kode og ressurser hører til pakker
** `getClass().getResource(...)`
== Navn, struktur og innhold
* klasser og filer, pakker og mapper
* konfigurasjon i pom.xml
** klassenavn (og modulnavn)
** kommandolinje-argumenter
* **module-info.java**
** modulnavn i deklarasjon og `requires`
** pakkenavn i `exports` og `opens`
== Navn, struktur og innhold
* **pom.xml**
** konfigurasjon av maven-tillegg
** inkl. kjøring av tester og app
** klassenavn (og modulnavn)
** kommandolinje-argumenter
== Oppfriskning om javafx og fxml
[.smaller-80]
* rollefordeling mellom domene- og kontroller-klasse(r)
* kobling mellom fxml og kontroller-klasse
** **fx:id** og **onXyz**-attributter i fxml-fil
** felt og metoder i kontroller-klasse
* programflyt i kontroller
** initiell visning av tilstand
** reaksjon på hendelser
** oppdatering av visning
== Generell feilfinning
[.smaller-80]
* tolke symptomer
** hvorfor reagerer ikke appen?
** hvordan finne ledetråder i "stacktracen"?
** hvorfor kalles ikke metoden?
* løse problemet
** utvikle hypoteser om årsaker
** validere (eller falsifiere) hypoteser
** prøve ut løsninger
== Hva nå?
[.smaller-80]
* rigging av gruppeprosjekt
** nytt fjernkodelager (satt opp av oss)
** tilpasning av https://gitlab.stud.idi.ntnu.no/it1901/javafx-template/-/tree/main/modules-template[**modules-template**]
* fler-modul-prosjekt
** mye det samme, men litt mer komplisert
** enklere å skille utviklingsoppgaver
* større brukergrensesnitt
** flere kontroller-klasser og fxml-filer
include::{includedir}footer.adoc[]
\ No newline at end of file
= Kodestank
:customcss: slides.css
:icons: font
:includedir: includes/
:LECTURE_TOPIC: Kodestank
:LECTURE_NO:
include::{includedir}header.adoc[]
== Kodestank (code smell)
Fra https://en.wikipedia.org/wiki/Code_smell[wikipedia]:
"Smells are certain structures in the code that indicate violation of fundamental design principles and negatively impact design quality"
== Kodestank
* suspekt kode
** virker nå, men kanskje ikke på sikt
** vanskelig å jobbe med
** bryter med god skikk og designprinsipper
== Lukt fra i fjor
* innkapsling og tilstand (8)
* bruk av typer og collection-rammeverket (12)
* testing (8)
* avhengigheter og fordeling av klasser/logikk (3)
* app (5)
* IO (4)
== Innkapsling og tilstand
* bruk av `public`, ikke bruk av `final`
* manglende validering
* direkte bruk eller returnering av samlinger
* uheldig bruk av **equals**
== direkte bruk eller returnering
[source, java]
----
public Nicknames(Collection<String> nicknames) {
this.nicknames = nicknames;
}
public Collection<String> getNicknames() {
return this.nicknames;
}
----
== Typer og collection-rammeverket
* feil typer for representasjon av tilstand
** **String**, **java.util.Date**, wrapper-klasser
** kunne brukt **enum**- og **record**-typer
* manglende typeargumenter (såkalt "rå" typer)
* implementasjon i stedet for (riktig) grensesnitt
* implisitt bruk av feil listetyper
* bruk av uhensiktsmessige metoder på samlinger
== Testing
* testing av uviktige eller trivielle metoder
* poengløs og feil testing av unntak
* lite informative feilmeldinger
* test av overflatedetaljer i GUI
* rydder ikke opp etter filbehandling
== Avhengigheter og fordeling av kode
* IO-kode blandet med domenelogikk
* avhengigheter på feil sted
** til JavaFX-klasser i ikke-UI-moduler
** til REST-tjeneste-klasser
== App
* statisk variabler for app-global tilstand
* manglende oppdeling av kontroller-klasser
* uhensiktsmessig håndtering av unntak
* feil implisitt bruk av **toString()** i GUI
== IO
* for mye bruk av **File**/**Path** i metodesignaturer
* "try-with-resources" brukes for lite
* bruk av **File**/**Path** for ressurs-filer
* bruk av ikke-flyttbare absolutt stier ved fillagring
== Hva gjør dere?
[.smaller-60]
* la flere "lukte" på koden
** parprogrammering
** kodegjennomgang
*** av andre på gruppa
*** læringsassistent
*** tilbakemelding på innlevering
*** verktøy (!)
* tenk dere om: er dette riktig/best måten?
* ikke-funksjonell omstrukturering (refactoring)
* diskuter koden!
include::{includedir}footer.adoc[]
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment