02-software-development.adoc 11.2 KB
Newer Older
George Adrian Stoica's avatar
George Adrian Stoica committed
1
2
3
= Software Development 
:customcss: slides.css
:icons: font
Hallvard Trætteberg's avatar
Hallvard Trætteberg committed
4
:includedir: includes/
5
6
7
8
:LECTURE_TOPIC: Software Development
:LECTURE_NO: 3rd Lecture

include::{includedir}header.adoc[]
George Adrian Stoica's avatar
George Adrian Stoica committed
9
10
11


[.smaller-80][.center-paragraph]
12
IT1901 Fall 2020 - 3rd Lecture
George Adrian Stoica's avatar
George Adrian Stoica committed
13
14
15
16
17

[background-color = "#124990"]
[color = "#fff6d5"]
== Overview

George Adrian Stoica's avatar
George Adrian Stoica committed
18
- Administrative issues
George Adrian Stoica's avatar
George Adrian Stoica committed
19
20
21
22
23
- About software development
- Software development methods
- Software quality.
- Practices used in modern agile development

George Adrian Stoica's avatar
George Adrian Stoica committed
24
25
26
27
[background-color = "#124990"]
[color = "#fff6d5"]
== Administrative issues

28
== Group registration form
George Adrian Stoica's avatar
George Adrian Stoica committed
29

30
31
- About half of you filled in the  form
- deadline to fill in the form is Wednesday, August 26
George Adrian Stoica's avatar
George Adrian Stoica committed
32

33
https://s.ntnu.no/it1901groups
George Adrian Stoica's avatar
George Adrian Stoica committed
34

35
== Individual Assignment 1
George Adrian Stoica's avatar
George Adrian Stoica committed
36

37
38
39
40
41
- Requires that you get access to the it1901/studenter-2020 group
	** in gitlab (request access)
	** gets approved within the day  / next day
	** only about half of you did that
- the exercise is mandatory to get a grade in the course
George Adrian Stoica's avatar
George Adrian Stoica committed
42

43
== Individual Assignment 1 (cont.)
George Adrian Stoica's avatar
George Adrian Stoica committed
44

45
46
47
- deadline August 27th
- on BB post the link to the repo 
- the main deliverable is the repo itself
George Adrian Stoica's avatar
George Adrian Stoica committed
48

49
== Provided materials
George Adrian Stoica's avatar
George Adrian Stoica committed
50

51
52
53
54
55
56
- very few students did watch the materials
- they contain important information for assignments 
- relevant materials for 1st assignment
	** gitpod episodes
	** git course
	** introduction to gitlab
George Adrian Stoica's avatar
George Adrian Stoica committed
57
58
59

== Reference Group 

60
61
62
63
64
- Trenger 3-5 medlemmer til referansegruppe i faget
- Mulighet til å påvirke kurset og forbedre kurset for de som skal ta det senere år
- 3 møter / Ca. en time per møte
- Meld deg om du er interessert! (email / chat / group registration form)
- If there are not enough volunteers we will randomly select the rest 
George Adrian Stoica's avatar
George Adrian Stoica committed
65
66
67



George Adrian Stoica's avatar
George Adrian Stoica committed
68
69
70
71
72
73
[background-color = "#124990"]
[color = "#fff6d5"]
== About Software Development

== What is Software Development

George Adrian Stoica's avatar
George Adrian Stoica committed
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
[.center-paragraph]
“Software development is the process of conceiving, specifying, designing, programming, documenting, testing, and bug fixing involved in creating and maintaining applications, frameworks, or other software components.”

[.smaller-60]
https://en.wikipedia.org/wiki/Software_development

== What is Software Development (2)

[.center-paragraph]
“Software development refers to a set of computer science activities dedicated to the process of creating, designing, deploying and supporting software.”

[.smaller-60]
IBM Research

== Engineering perspective  

[.center-paragraph]
Engineering refers to the practice of organizing the design and construction of any artifice which transforms the physical world around us to meet some recognized need.

[.smaller-60]
Rogers, G.F.C. (1983)



George Adrian Stoica's avatar
George Adrian Stoica committed
98
99
100
101
[background-color = "#124990"]
[color = "#fff6d5"]
== Software development methods

George Adrian Stoica's avatar
George Adrian Stoica committed
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
== Software development method

- A set of activities, work-flows and artifacts that aim at organizing the process of designing, constructing and testing software and deploying it and maintaining it within its context of use. 

** waterfall
** agile (SCRUM)

== Waterfall model

[.center-paragraph]
image::../images/lecture02/Waterfall model.svg[width=650]

[.smaller-40]
https://en.wikipedia.org/wiki/Waterfall_model

== SCRUM model

[.center-paragraph]
image::../images/lecture02/scrum-sprint.png[width=700]

[.smaller-40]
https://www.visual-paradigm.com/scrum/what-is-sprint-in-scrum/

== Activities 

[.smaller-80]
- *Analysis* - understanding the problem 
- *Design* - describing, conceptually the software solution
- *Implementation* - creating such a solution in software.
- *Testing* - check that the software solution has certain desired properties
- *Deployment* - deliver the solution in its context of operation and use

== Activities (2) 


** Maintenance - ensure that the software solution keeps working
** The world and the context of any software solution is dynamic


== Activities (3) 

- Software needs to be updated to keep up with
** operating system updates, 
** updates of software on which the solution requires
** security vulnerabilities
** changing technology
** changing requirements

George Adrian Stoica's avatar
George Adrian Stoica committed
150
151
152
153
154
155
156

[background-color = "#124990"]
[color = "#fff6d5"]
== Software quality

== What is software quality ?

George Adrian Stoica's avatar
George Adrian Stoica committed
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
Software quality is the degree to which a software solution meets the design requirements and the user needs and expectations.


== Quality attributes

- Reliability
- Efficiency
- Security
- Maintainability 
** adaptability, 
** portability and 
** transferability (from one development team to another). 

== Quality attributes (2)

- Usability
** Effectiveness
** Efficiency
** Satisfaction

George Adrian Stoica's avatar
George Adrian Stoica committed
177
178
179
180
181
182
183
184
185
186
187
188
189

[background-color = "#124990"]
[color = "#fff6d5"]
== Practices used in modern agile development

** source code management (SCM)
** issue tracking
** continuous integration (CI)

== Source Code Management (SCM)

== SCM Tools

190
191
192
- CVS (Concurrent Versioning System, released 1990)
- SVN (Apache Subversion, released 2000)
- Git (created by Linus Torvalds , released 2005)
George Adrian Stoica's avatar
George Adrian Stoica committed
193
194
195
- Mercurial


George Adrian Stoica's avatar
George Adrian Stoica committed
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
== Kildekodehåndtering

* lagring av kode
* sporing av endringer
* versionering
* distribusjon

[.grid-left-right-50-50]
== `git`

[.smaller-60]
[.area-left]
* sporing og deling av kodeendringer i såkalte _repo_ (repository)
* både sentrale og lokale repo har all endringshistorikk
* initiell kopi hentes ved å _kloning_ (clone)
* endringer (i filer) registreres i _commits_ 
* commits deles med andre ved å _dytte_ (push) til en server
* andre kan da _dra_ (pull) endringene inn i lokalt repo

[.area-right]
image::../images/git-local-remote-repo.png[]

[.grid-left-right-50-50]
== 4 repo-"kopier"

[.smaller-60]
[.area-left]
* originalen (_origin_), hentet fra server (`pull`)
* arbeidsområdet (_working directory_), lokale filer som kan være endret
* indeksen (_staging area_ eller _index_), endringer du har lagt til med (`add`)
* lokalt repo, endringene du har commitet (`commit`)

[.area-right]
image::../images/git-repo-copies.png[]

== repo-kommandoer

image::../images/git-repo-copies.png[width="400px"]
image::../images/git-repo-commands.png[width="500px"]

== Typisk sekvens

[.smaller-80]
* `git pull` (eller `clone` første gang) - henter ned endringer fra serveren
* gjør egne endringer
* `git status` - viser hva som er endret
* `git add <fil eller mappe>` - legger endringer til fremtidig commit
* `git commit -m <melding, m/oppgavenummer>` - registrerer all endringene (lagt til med `add`)
* `git pull` - henter andres endringer, i tilfelle konflikt
* `git push` - deler endringer med andre via serveren

== Forgreining (branching)

[.smaller-60]
[.left-70]
* greiner (branches)
** sporer egne utviklingstråder
** gjør jobbing i parallell ryddigere 
* sammenslåing (merging)
** en (hoved)grein slås gjerne sammen med en annen, når den andre er ferdig (nok)
** etter sammenslåing, så deles gjerne resultatet med andre
** andre henter så ned for å være oppdatert

[.right]
image::../images/git-branching.png[width="200px"]

== Sekvens m/forgreining

[.smaller-80]
* `git pull` - henter ned endringer fra serveren
* `git checkout -b <navn på (ny) grein>` - lager ny grein, med utgangspunkt i den du jobber med
* gjør egne endringer
* `git add ...` og  `git commit ...` - registrerer all endringene
* `git checkout master` - bytter til hovedgrein
* `git merge <navn på grein>` - slår annen grein (den nye) sammen med denne (hovedgreina)
* ...

== Eclipse-støtte for git

[.smaller-60]
* Egne Eclipse-tillegg - JGit (git-impl) og EGit (UI)
* Git Repositories-panel - oversikt over repo
** klone repo fra server eller registrere lokalt repo
** utføre `pull` og `push`
** utføre `checkout` inkl. lage ny grein
** ...

image::../images/git-repositories-view.png[height="200px"]

== Eclipse-støtte forts.

[.smaller-60]
* Git Staging - statusoversikt
** filer i arbeidsområdet som er endret
** filene i indeksen
** legge til (`add`) eller fjerne (`remove`) fra indeksen

image::../images/git-staging-view.png[width="800px"]

== Endringsforespørsler

[.smaller-60]
* en `pull`/`merge`-forespørsel (request) brukes for mer formell godkjenning av endringer
** Pull Request er github-termen, mens Merge Request brukes i gitlab
* brukes ofte for å inkludere endringer utenfra, f.eks.
** utviklere utenfor kjerne-teamet
** brukere av åpen kildekode som har fikset feil
* forenkler administrasjon av åpne prosjekter

== PR/MR-prosedyre

[.smaller-60]
* (utenforstående oppretter kopi på egen server)
* lager en grein for endringene og utfører dem lokalt
* i stedet for å slå sammen med egen hovedgrein
** `push` grein til egen server
** lag en  `pull`/`merge`-forespørsel (PR/MR), som (potensielt) kan inkluderes i hovedgreina
** UI for dette finnes på github/i gitlab
** forespørselen får en egen dialog/diskusjonstråd
** en utvikler med rettigheter kan så godkjenne evt. avslå forespørsel


George Adrian Stoica's avatar
George Adrian Stoica committed
318
319
== Issue Tracking

George Adrian Stoica's avatar
George Adrian Stoica committed
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
== Oppgavesporing (issue tracking)

En _oppgave_ (issue) er arbeid som skal følges opp

* ny funksjon, forbedring, feilretting, konfigurasjon ...
* hver oppgave har en dialog/diskusjonstråd
* halvautomatisk knytning til _endringer_ (commits)

== Oppgavesporing forts.

Oppgavesporing er viktig for transparens

* kunder trenger innsyn i prosess
* teamet trenger å dele kunnskap
* løse og distribuerte prosjekter (f.eks. åpen kildekode) har ekstra behov
* støtter vurdering...

== Oppgavesporing forts.

[.smaller-80]
* oppgaver opprettes ifm. planlegging av iterasjon, f.eks. fra _brukerhistorier_, _funksjonsønsker_ eller _feilrapporter_
* oppgaver knyttes til
** _milepæl_ for iterasjon
** utviklinger som jobber med den
* _merkelapper_ (labels) kan angi _fasen_ en oppgave er i
** f.eks. planlagt, utvikling, testing, godkjent
** _oppgavetavler_ (issue boards) visualiserer fremdrift

== Oppgavetavle (issue board)

image::https://about.gitlab.com/images/blogimages/workflow.png[size=80%]

== Oppgavesporing forts.

* dialog/diskusjonstråd dokumenterer prosessen
** designidéer, avgjørelser, avhengigheter, ...
** knyttes til endringer (commits) gjennom oppgavenummer (#)
** oppsummerer hva som ble gjort

[.center-paragraph]
Viktig for transparens!

== Kontinuerlig integrasjon (CI)

Automatisering av alt som fremmer kvalitet, men som tar tid, f.eks.

* kompilering og bygging av jar-filer (generelt avledete artifakter)
* kjøring av enhets- og integrasjonstester
* analyser av ulike typer kvalitet (formatering, kodingsstandarder, vanlige feil, ...)
* bygging av kjørbart system og kjøring av systemtester

== Smidig utfordring

[.smaller-60]
* Hvordan iterere raskt?
** skrive korrekt kode raskt
** være trygg på kvaliteten
** levere ofte, for å få tilbakemelding fra brukere

[.smaller-60]
* Mange nivåer av testing
** egen kode - enhetstesting
** koden innen teamet - integrasjonstesting
** hele systemet - systemtesting (og evt. deployment)
George Adrian Stoica's avatar
George Adrian Stoica committed
384

George Adrian Stoica's avatar
George Adrian Stoica committed
385
== Smidig løsning
George Adrian Stoica's avatar
George Adrian Stoica committed
386

George Adrian Stoica's avatar
George Adrian Stoica committed
387
388
389
390
391
392
[.smaller-80]
* Kontinuerlig - bygg, sett sammen og test
* Innimellom - lever (release) og sett i drift/prod. (deploy)
* Alt for mye arbeid uten støtte
** _byggeverktøy_ automatiserer prosessen
** _byggetjenere_ sikrer reproduserbar prosess
George Adrian Stoica's avatar
George Adrian Stoica committed
393
394
395
396
397

== ! 

image::../images/lecture02/doad.jpg[canvas, size=contain]

398
399

include::{includedir}footer.adoc[]