Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
C
course-material
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
IT1901
course-material
Commits
37e065d9
Commit
37e065d9
authored
3 years ago
by
Hallvard Trætteberg
Browse files
Options
Downloads
Patches
Plain Diff
Nye lysark
parent
9e2d6ed7
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
lectures/asciidoc/index.adoc
+8
-0
8 additions, 0 deletions
lectures/asciidoc/index.adoc
lectures/revealjs/individuell-oblig.adoc
+94
-0
94 additions, 0 deletions
lectures/revealjs/individuell-oblig.adoc
lectures/revealjs/kodestank.adoc
+105
-0
105 additions, 0 deletions
lectures/revealjs/kodestank.adoc
with
207 additions
and
0 deletions
lectures/asciidoc/index.adoc
+
8
−
0
View file @
37e065d9
...
@@ -15,6 +15,14 @@ include::{sourcedir}/gitpod.adoc[leveloffset=+2]
...
@@ -15,6 +15,14 @@ include::{sourcedir}/gitpod.adoc[leveloffset=+2]
include::{sourcedir}/ci.adoc[leveloffset=+2]
include::{sourcedir}/ci.adoc[leveloffset=+2]
=== 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
== 2020
=== Programvareutvikling
=== Programvareutvikling
...
...
This diff is collapsed.
Click to expand it.
lectures/revealjs/individuell-oblig.adoc
0 → 100644
+
94
−
0
View file @
37e065d9
= 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
This diff is collapsed.
Click to expand it.
lectures/revealjs/kodestank.adoc
0 → 100644
+
105
−
0
View file @
37e065d9
= 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
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment