Kodestank

Kodestank (code smell)

"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

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?

  • 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!

Norwegian University of Science and Technology