2. Om foredraget
ALM avdelingen har siden 2012 jobbet med innføring av smidig
metoder hos Stortinget. Foredraget oppsummere våre erfaringer og
vil spesifikt adressere hvordan data-modellering, persistens av data
og kontinuerlig leveranse bidro til endring av utviklingsprosessen.
3. Bakgrunn
• Stortingets IKT-avdeling har en utviklergruppe på seks personer.
• Inmeta (ALM) kom inn via en rammeavtale på et
kompetansehevings prosjekt.
• Fomålet med prosjektet var å løfte IKT-avdelingen over på
moderne utvikling med ALM via opplæring og coaching.
• En web applikasjon skulle utvikles som en del av prosjektet.
• Prosjektet varte halv annet år.
4. Utgangspunktet
Prosess
• Ingen definert eller smidig prosess (litt ITIL…)
• Ingen produkteiere
• Tekniske kravspekker
• Fossefall
• Fragmentert ansvar
Teknologi
• Database-sentrisk (business logikk i lagrede prosedyrer)
• Web-Forms med datareader i code-behind
• Bruker TFS, men kun som source control
• Ikke erfaring med smidig, enhetstester, bygg, test, QA
6. Learning by doing
Opplæring ved å praktisere
Litt om applikasjonen
• En web-applikasjon for administrasjon av ansatte/eksterne
• Integrasjon mot eksterne applikasjoner.
Teknologi
• ASP.Net MVC / jQuery
• Entity Framework (Code First)
7. Hvor begynner man?
class StortingsInfo
Avdeling
Id* :int
Navn :string
Kortnavn :string
Beskrivelse :string
Sporing :Sporing
Seksjon
Id* :int
Avdeling :Avdeling
Navn :string
Kortnavn :string
Beskrivelse :string
Sporing :Sporing
Parti
Id* :int
Partikode :string
Navn :string
Kortnavn :string
Sporing :Sporing
Seksjonsgruppe
Id* :int
Seksjon :Seksjon
Navn :string
Kortnavn :string
Beskrivelse :string
Sporing :Sporing
OrgEnhet
Id* :int
Navn :string
Kortnavn :string
Beskrivelse :string
Rom
Id* :int
RomType :id
RomNr :string
Beskrivelse :String
Merknad :string
TlfIntern :string
Bygningskode :id
OrgEnhet :id
Sporing :Sporing
Firma
Id* :int
Navn :string
BransjeId :int
Orgnr :string
Postadresse :string
Postnr :string
Kontaktpersoner :List<Person>
Telefon :string
OrgEnheter :List<OrgEnhet>
Sporing :Sporing
Komite
Id* :int
Kode :string
Navn :string
Kortnavn :string
Beskrivelse :string
Eksempel på merknad:
"Kun betjent i et gitt
tidsrom"
RomType
Id* :int
Type :int
Brukskode :string
Beskrivelse :string
FunksjonerOgTjenester
Id* :int
Navn :int
OrgEnhet :id
Rom :Rom
Sporing :Sporing
Beskrivelse :string
Epostadresse :string
TlfIntern :string
Status :string
Sluttdato :date
Startdato :date
Postmottak :Postmottak
Postmottak
Id :int
Navn :string
Etternavn :string
Beskrivelse :string
OrgEnhet :IOrgEnhet
Avdeling :Avdeling
Seksjon :Seksjon
Epostadresse :string
AdBrukernavn :string
0..*
0..*
0..*
Kravhåndtering
Arkitektur
UtviklingTesting
Installasjon
Forvaltning
composite structure Person
Person
Id* :int
Sporing :Sporing
Personalia :Personalia
Fasiliteter :Fasiliteter
Status :PersonStatus
Stortingsansatt :Stortingsansatt
Gruppeansatt :Gruppeansatt
EksternPerson :EksternPerson
EposPerson :EposPerson
TiltredelsesPerioder :List<TiltredelsesPeriode>
Fodselsdato :string
EpostPrivat :string
Stortingsansatt
PersonId* :int
Person :Person
PersonKategori :PersonKategori
Status :PersonStatus
Ansettelsesforhold :Ansettelsesforhold
TiltredelsesPeriode :TiltredelsesPeriode
Stilling :Stilling
OrgEnhet :OrgEnhet
Avdeling :Avdeling
Seksjon :Seksjon
SeksjonsGruppe :SeksjonsGruppe
Permisjon :Permisjon
VikarFor :Person
Komite :Komite
Idkort :Idkort
Fasiliteter
AdBrukernavn :string
SkalHaRom :bool
Rom :Rom
InternTlf :string
BiblioteksId :int?
Personalia
Etternavn :string
Fornavn :string
Fodselsdato :DateTime
AdressePrivat :Adresse
TlfMobil :string
TlfHjemme :string
TlfArbeid :string
Adresse
Linje :string
PostNr :string
Poststed :string
Land :string
Permisjon
Fra :DateTime
Til :DateTime
PermAarsak :string
Ansettelsesforhold
Id* :int
Navn :string
ForStortingsansatt :bool
ForGruppeansatt :bool
PersonStatus
Kommer
Aktiv
Permisjon
Sluttet
StortingsansattEndring
Id* :int
Stortingsansatt :Stortingsansatt
EndringFra :DateTime
Ansettelsesforhold :Ansettelsesforhold
Stilling :Stilling
Avdeling :Avdeling
Seksjon :Seksjon
SeksjonsGruppe :SeksjonsGruppe
1 1
1
0..1
1
0..1
1
10..*
8. Domene-modellering
Før
• Domene-språket reflekterte relasjonsdata i database (SQL)
• Fokus på optimalisering
• Tekniske diskusjoner uten innhold
Etter
• Domene-språket reflekterte virkeligheten
• Fokus på innhold
• Objekt-orientert
• Domene-modell != Database, Domene-modell => Database
Om optimalisering
“… We should forget about small efficiencies, say about
97% of the time: premature optimization is the root of
all evil. Yet we should not pass up our opportunities in
that critical 3%”
- Donaldt Knuth
Kravhåndtering
Arkitektur
UtviklingTesting
Installasjon
Forvaltning
9. Mapping med ORM (EF)
EF tilbyr tre måter å mappe objekter /
relasjonsdata:
• Database First (Generering)
• Model First (POCO/Generering)
• Code First (POCO)
Kravhåndtering
Arkitektur
UtviklingTesting
Installasjon
Forvaltning
10. Database First – Erfaringer
Positivt
• Valgfri database-modelleringsverkøy
• Visualisering i designer
• Enkelt, lav læringskurve
• Optimalisering av database
Negativt
• Database-sentrisk domene modell
• Generering/Partial classes
• Ikke 100% sporbarhet
Kravhåndtering
Arkitektur
UtviklingTesting
Installasjon
Forvaltning
11. Model First - Erfaringer
Positivt
• Visualisering av mapping i designer
• GUI for mapping
• Sporbarhet
Negativt
• Dårlig tooling (bugs i designer)
• Generering/Partial classes
• Merging av XML
Kravhåndtering
Arkitektur
UtviklingTesting
Installasjon
Forvaltning
12. Code First - Erfaringer
Positivt
• POCO, OOP-sentrisk
• Convensions over configuration
• Merge-vennlig
• 100% sporbarhet
• (Migrations)
Negativt
• Mapping ikke visualisert
• Høy læringskurve ved komplisert mapping
Kravhåndtering
Arkitektur
UtviklingTesting
Installasjon
Forvaltning
15. Testing
Før
• Ad-hoc testing i ikke-sporbare (multiple) testmiljø
• Ingen test-planer
• Ingen enhetstester
Etter
• Automatisert testmiljø
• Testplaner (delvis)
• Enhetstester
Utfordring
• Manuelle testere / Tid
Kravhåndtering
Arkitektur
UtviklingTesting
Installasjon
Forvaltning
16. Continous Integration
Før
• Ingen bygg
• Ingen feedback
• “Works on my machine”
Etter
• Automatisert feedback
• Sporbarhet
Kravhåndtering
Arkitektur
UtviklingTesting
Installasjon
Forvaltning
18. Infrastruktur
Før
• Database pr. utvikler/miljø
• Endringer direkte i test/prod
• Lite dokumentasjon
Etter
• Alt i kildekode, 100% sporbarhet
• Automatisering, repeterbarhet
• Dokumentasjon via installasjons-diagrammer
Kravhåndtering
Arkitektur
UtviklingTesting
Installasjon
Forvaltning
19. Oppsumering
• Domenespråk fremfor teknologispråk Effektiv og tydelig kommunikasjon
• OOP fremfor database-sentrisk Synlig og tydelig forretningslogikk
• Automatisering fremfor waste Smidighet, kvalitet, effektivitet
• Team fremfor individer Samarbeid, effektivitet, engasjement
• Kildekode fremfor databaser Sporbarhet, tigjengelighet, effektivitet, kvalitet
Utfordringer
• Endring tar tid!
• Forvent mostand og endringsfrykt!
• Indentifiser champions