Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • akselsa/course-material
  • it1901/course-material
2 results
Show changes
Showing
with 3155 additions and 293 deletions
File deleted
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
#!/usr/bin/env sh
#
# Copyright 2015 the original author or authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn () {
echo "$*"
}
die () {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Escape application args
save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=$(save "$@")
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
cd "$(dirname "$0")"
fi
exec "$JAVACMD" "$@"
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem http://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
= IT1901
:customcss: slides.css
:icons: font
:includedir: includes/
:LECTURE_TOPIC: Course Introduction
:LECTURE_NO: 1st lecture
include::{includedir}header.adoc[]
[.smaller-80]
- Velkommen til IT1901 Informatikk prosjektarbeid 1
- Welcome to IT1901 Informatics, Project 1
Høst 2024 / Fall 2024
== Agenda
[%step]
- Om IT1901 Informatikk prosjektarbeid 1
- Smidig utvikling - Utviklingsmetoden Scrum
- Oppsummering
== Viktigheten av IT-systemer
“Software defines, drives, and enables innovation in the systems we use in essentially all areas of modern human activity, including science, engineering, business, government, entertainment, education, energy, defense, health and medicine. As reliance on software grows, society makes exponentially greater demands on the diversity and quality of the software being produced”
[.smaller-40]
Call for position papers, Workshop on the Future of Software Engineering Research, International Symposium on the Foundations of Software Engineering, 2010
== Introduksjon til IT1901
Smidig og moderne praksis og konstruksjon
- praksis i smidige prosjekter
- verktøy for smidig utvikling
- mer om objektorientert design
- enkle, moderne arkitekturer
** desktop
** mobil
** web
== IT1901 Goals
[.smaller-80]
- improve practical software development skills and prepare a solid base of current best practices
[.smaller-80]
[%step]
** working with various architectures
** source code management
** issue tracking
** using build tools
** automatic testing
** continuous integration
** documentation
** code quality
== Tools used in IT1901
In the course we will use several tools:
[.smaller-80]
[%step]
** Git for source code management
** GitLab for collaboration: repository sharing, issue tracking, issue boards, code review ...
** Eclipse Che - automatically spin a workspace that is accessible via a browser to work, collaborate, evaluate ...
** VSCode - recommended IDE to use as it is the same as the gitpod environment
** sdkman - recommended tool to manage JDK and Maven
== Individual and Group work
- there is one individual development assignment (mandatory to pass to get a grade)
- there are 3 group deliverables
- one individual report
- students will work in groups of 4
- fill in the form announced on Blackboard to be assigned to a group
== Deliverables and tasks
- go through the available materials
- work on individual assignments
- until you are assigned to a group you must
** set up your development environment
** checkout, build and run the todo list example
https://gitlab.stud.idi.ntnu.no/it1901/todo-list
The first task for the group is to select the domain.
== Timeline
[.smaller-60]
[%step]
- week 34 - start on individual assignment, intro
- week 35 - establish groups and start group work, git++
- week 36 - deliver individual assignment
- week 38 - Deliverable 1 (10% / group) (basic modular JavaFX application)
- week 41 - Deliverable 2 (10% / group) (improved modular application)
- week 46 - Deliverable 3 (50% / group) (final technical)
- week 47 - Deliverable 4 (30% / individual) Reflection report
== Deadlines
- the deliverables are due on Thursdays at midnight in the week indicated
- if you are late you need to inform the TA
== Evaluation and feedback
- the point of the tasks is to get you produce high quality code
- focus is placed on the repository. it is not just the end result that is evaluated but the journey as well
- deliverables 1-3 will be basically snapshots of the repository at given times
- we will strive to provide quick feedback based on the repo activity
== Using AI tools and other resources
- Each group will have to document:
[.smaller-80]
** what tools are used and for what purpose (document)
** snipets of code generated need to reference properly the source (use comments)
** snipets of code copied from stackoverflow or similar need to reference properly the source (use comments)
== About domain selection
- choose an app / service that you know well and select a couple of features to implement during the semester
- point is to learn by implementing these using the required architectures
- we are not looking for quantity but for quality, so just few core features will suffice
== About domain selection (2)
- the chosen app needs to be suitable for a cloud based service
- there must therefore be some dynamic data per user managed by the server.
- eg. a (currency) calculation will NOT fit such a project.
- one good starting point are the cases from the HCI course (MMI)
== Referansegruppe
- 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; uke 5, uke 9 og etter kursslutt
- Ca. en time per møte
- Meld deg i pausen om du er interessert!
- If until next week there are no volunteers we will randomly select 5 students
== Spørsmål underveis i kurset
- Ta opp faglige spørsmål og spørsmål om gruppene med studentassistent eller undervisningsassistent for gruppen
- Spørsmål om organisering av faget og forslag til forbedringer tas opp med medlemmer i referansegruppen
== Gruppekontrakt
- Minimumskrav til avtale:
** Tilstedeværelse
** Tidsbruk
** Forventninger til den enkeltes bidrag
** Hva som skjer ved avvik eller uenigheter
Gruppekontrakt skal godkjennes av studentassistent, signeres av alle gruppemedlemmer - og leveres på Blackboard
== Group registration form
- The form link is on Blackboard
- https://s.ntnu.no/it1901groups
- deadline for answering is on September 1st, 23:59
- in the group form you are expressing preferences
- course staff will make any changes necessary to get the best group composition possible
== Tasks for this week
[.smaller-60]
- fill in the form for group formation
- brush up and revisit Java and JavaFX (useful links on BlackBoard)
- prepare ideas for the project - so you are ready when the groups are done
- prepare your development environment - git, sdkman, vscode, maven etc
- log in to https://gitlab.stud.idi.ntnu.no/
- ask access to https://gitlab.stud.idi.ntnu.no/it1901/students-2024/sandbox and create a test repo
- start with the individual mandatory assignment as soon as it is available (probably tomorrow, latest on Monday morning)
- follow BlackBoard for updates
== !
image::../images/lecture01/teamwork.png[canvas, size=contain]
include::{includedir}footer.adoc[]
\ No newline at end of file
= Git Basics
:customcss: slides.css
:icons: font
:includedir: includes/
:LECTURE_TOPIC: Git Basics
:LECTURE_NO: 2nd lecture
include::{includedir}header.adoc[]
[.smaller-80][.center-paragraph]
IT1901 Fall 2024 - {LECTURE_NO}
== Agenda
[%step]
- Administrative issues
- 1st individual deliverable
- Why Java
- Git
- Summary
[background-color = "#124990"]
[color = "#fff6d5"]
== Administrative issues
== Groups
- fill the form to be assigned to a group
- https://s.ntnu.no/it1901groups
- deadline for answering is on September 1st, 23:59
- will announce the groups in week 36
- 70 % of grade is given by groupwork
== Referansegruppe
- 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; uke 5, uke 9 og etter kursslutt
- Ca. en time per møte
- Meld deg i pausen om du er interessert!
- If until next week there are no volunteers we will randomly select 5 students
== Getting help
- check BlackBoard
- ask your group TA - list coming soon
== Approaching Deadlines
- Søndag, 1. september / 23:59
** Fill the group form
- Torsdag, 12. september / 23:59
** 1st individual deliverable
** pushed later to week 37
[background-color = "#124990"]
[color = "#fff6d5"]
== 1st individual deliverable
== 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 - ( use fork )
* klone mal-kodelager (`git clone`)
* lage nye versjoner (`git add` og `git commit`)
* overføre til fjernlager (`git push`)
== 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
== Main steps
[.smaller-80]
- set up the repo in gitlab
** create a project under students-2024
** use the javafx-template as a starting point
- change the template
** project name
** packages
- implement the missing logic
** check by running the tests
[background-color = "#124990"]
[color = "#fff6d5"]
== Why Java
== Java
[.smaller-80]
- in top languages for many years
- general purpose
- "the COBOL of the 21st century"
- great community and tooling
- actively developed
- good job opportunities
- Scala, Kotlin, Groovy, Clojure run on JVM
[background-color = "#124990"]
[color = "#fff6d5"]
== Git
== What is git
Git is a source code management system that is lightweight, reliable, fast and fully distributed.
On top of that it is free and open source. Git was initially authored by Linus Torwalds and emerged from his troubles encountered while trying to manage the contributions to Linux kernel.
include::{includedir}scm_content.adoc[]
== Quizz
- Join at menti.com
- use code 3440 3064
[background-color = "#124990"]
[color = "#fff6d5"]
== Summary
include::{includedir}footer.adoc[]
\ No newline at end of file
= Git++
:customcss: slides.css
:icons: font
:includedir: includes/
:LECTURE_TOPIC: git++
:LECTURE_NO: 2nd lecture
include::{includedir}header.adoc[]
[.smaller-80][.center-paragraph]
IT1901 Fall 2023 - {LECTURE_NO}
== Agenda
[%step]
- Administrative issues
- Git
- Gitlab
- Demo
- 1st individual deliverable
- Summary
[background-color = "#124990"]
[color = "#fff6d5"]
== Administrative issues
== Groups
- fill the form to be assigned to a group
- https://s.ntnu.no/it1901groups
- deadline: Torsdag, 31. august 16:00
- will announce the groups in week 36
- 70 % of grade is given by groupwork
== Referansegruppe
- 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; uke 5, uke 9 og etter kursslutt
- Ca. en time per møte
- Meld deg i pausen om du er interessert!
- If until next week there are no volunteers we will randomly select 5 students
== Approaching Deadlines
- Torsdag , 31. august 16:00
** Fill the group form
- Torsdag 7. september / 18:00
** 1st individual deliverable
== Getting help
- ask your group TA
- piazza channel - coming up next week
- technical helpdesk - coming up next week
[background-color = "#124990"]
[color = "#fff6d5"]
== Git
== What is git
Git is a source code management system that is lightweight, reliable, fast and fully distributed.
On top of that it is free and open source. Git was initially authored by Linus Torwalds and emerged from his troubles encountered while trying to manage the contributions to Linux kernel.
include::{includedir}scm_content.adoc[]
[background-color = "#124990"]
[color = "#fff6d5"]
== Gitlab
== What is GitLab
Is a complete devops solution that does repository hosting, issue tracking, agile planning, code review, ci/cd and more. It started as an open source project and it still has a community edition which is free and open source
[background-color = "#124990"]
[color = "#fff6d5"]
== Demo
[background-color = "#124990"]
[color = "#fff6d5"]
== Summary
== Next week
- more on git and gitlab
- talk about containers for development
include::{includedir}footer.adoc[]
\ No newline at end of file
= Software Development
:customcss: slides.css
:icons: font
:includedir: includes/
:LECTURE_TOPIC: Software Development
:LECTURE_NO: 3rd Lecture
include::{includedir}header.adoc[]
[.smaller-80][.center-paragraph]
IT1901 Fall 2020 - 3rd Lecture
[background-color = "#124990"]
[color = "#fff6d5"]
== Overview
- Administrative issues
- About software development
- Software development methods
- Software quality.
- Practices used in modern agile development
[background-color = "#124990"]
[color = "#fff6d5"]
== Administrative issues
== Group registration form
- About half of you filled in the form
- deadline to fill in the form is Wednesday, August 26
https://s.ntnu.no/it1901groups
== Individual Assignment 1
- 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
== Individual Assignment 1 (cont.)
- deadline August 27th
- on BB post the link to the repo
- the main deliverable is the repo itself
== Provided materials
- 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
== Reference Group
- 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
[background-color = "#124990"]
[color = "#fff6d5"]
== About Software Development
== What is Software Development
[.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)
[background-color = "#124990"]
[color = "#fff6d5"]
== Software development methods
== 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
[background-color = "#124990"]
[color = "#fff6d5"]
== Software quality
== What is software quality ?
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
[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
- CVS (Concurrent Versioning System, released 1990)
- SVN (Apache Subversion, released 2000)
- Git (created by Linus Torvalds , released 2005)
- Mercurial
== 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
== Issue Tracking
== 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)
== Smidig løsning
[.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
== !
image::../images/lecture02/doad.jpg[canvas, size=contain]
include::{includedir}footer.adoc[]
\ No newline at end of file
= Software Development
:customcss: slides.css
:icons: font
:includedir: includes/
:LECTURE_TOPIC: Software development
:LECTURE_NO: 3rd lecture
include::{includedir}header.adoc[]
[.smaller-80][.center-paragraph]
IT1901 Fall 2020 - 3rd Lecture
include::{includedir}dev_content.adoc[]
include::{includedir}footer.adoc[]
\ No newline at end of file
= Git, GitLab and development environment
:customcss: slides.css
:icons: font
:includedir: includes/
:LECTURE_TOPIC: Git, GitLab and development environment
:LECTURE_NO: 3rd lecture
include::{includedir}header.adoc[]
[.smaller-80][.center-paragraph]
IT1901 Fall 2024 - {LECTURE_NO}
== Agenda
[%step]
- Administrative issues
- Git
- Gitlab
- Developmennt environment
- Summary
[background-color = "#124990"]
[color = "#fff6d5"]
== Administrative issues
== Groups
- groups will be finalized this week
- there will be a BlackBoard group and a GitLab group assigned for each team of students
- issues - contact Talha Mahboob Alam talha.m.alam@ntnu.no
== Referansegruppe
[.smaller-60]
- established - 1st meeting next week
- members
** Vebjørn Liland Drefvelin vebjorld@stud.ntnu.no Informatikk
** Jessica Shuyue Liu jessicsl@stud.ntnu.no Datateknologi
** Kristoffer Welle kristwel@stud.ntnu.no Datateknologi
** Erling Kvalvik Eriksen erlingke@stud.ntnu.no Lektorutdanning i realfag
== 1st Group deliverable
- start working on selecting the project as soon as your group is ready
- prepare group contract
- read carefully the instructions
== Approaching Deadlines
- Torsdag, 12. september / 23:59
** 1st individual deliverable
- Torsdag, 19. september / 23:59
** 1st group deliverable
- Torsdag, 19. september / 23:59
** group contract
== Getting help
- ask your group TA
- Q and A sessions every Thursday starting week 37
- some lectures will also Q and A sections
- technical help - more info coming soon
[background-color = "#124990"]
[color = "#fff6d5"]
== Git
== What is git
Git is a source code management system that is lightweight, reliable, fast and fully distributed.
On top of that it is free and open source. Git was initially authored by Linus Torwalds and emerged from his troubles encountered while trying to manage the contributions to Linux kernel.
[.grid-left-right-50-50]
== Typical sequence (share project)
[.area-left][.smaller-60]
- starting a project and sharing it on Gitlab for team collaboration
** `git init`
** `git status`
[.area-right][.smaller-60]
** `git add ...`
** `git commit ...`
** `git remote ...`
** `git push`
== Commit messages
image::../images/git_commit_2x.png[size=75%]
[.smaller-40]
https://xkcd.com/1296/
== Commit messages (seriously)
- Separate subject from body with a blank line
- Limit the subject line to 50 characters
- Capitalize the subject line
- Do not end the subject line with a period
- Use the imperative mood in the subject line
- Wrap the body at 72 characters
- Use the body to explain what and why vs. how
[.grid-left-right-50-50]
== Typical sequence (simple collaboration)
[.area-left][.smaller-60]
- working with a shared project
** `git clone`
** `git pull`
[.area-right][.smaller-60]
** `git status`
** `git add ...`
** `git commit ...`
** `git push`
== Typical sequence (with branching)
- working with branches
** `git pull`
** `git checkout -b <branch_name>`
** `git status` + `git add ...` + `git commit ...`
** `git checkout master`
** `git merge <branch_name>`
[background-color = "#124990"]
[color = "#fff6d5"]
== Gitlab
== What is GitLab
Is a complete devops solution that does repository hosting, issue tracking, agile planning, code review, ci/cd and more. It started as an open source project and it still has a community edition which is free and open source
[background-color = "#124990"]
[color = "#fff6d5"]
== Development environment
== Sdkman
- tool allowing managing several versions of frameworks and development kits
- works on linux, mac and windows (with some convincing)
- manage several Java versions and or Maven versions
- easily install different flavours and releases
== Typical development environment for the course
- VSCode + relevant extensions
- git
- sdkman - get Java 17.0.xx-tem and Maven 3.9
== Services used
- GitLab - https://gitlab.stud.idi.ntnu.no/
- Eclipse Che - https://che.stud.ntnu.no/
== Levels and approaches to the development environment for the course
- use the local machine - install on your OS
- use a virtual machine (e.g. VirtualBox)
- use a container (Docker Desktop + VSCode)
- use the cloud IDE (Eclipse Che + browser)
[background-color = "#124990"]
[color = "#fff6d5"]
== Summary
include::{includedir}footer.adoc[]
\ No newline at end of file
= Build tools
:customcss: slides.css
:icons: font
:includedir: includes/
:LECTURE_TOPIC: Build tools
:LECTURE_NO: 4th lecture
include::{includedir}header.adoc[]
[.smaller-80][.center-paragraph]
IT1901 Fall 2024 - {LECTURE_NO}
== Agenda
[%step]
- Administrative issues
- 1st Group Exercise
- Build tools
- More on development environment
** VSCode extensions
** Eclipse Che
- Agile Practices
- Summary
[background-color = "#124990"]
[color = "#fff6d5"]
== Administrative issues
== Groups
- groups have been established
- each student team got a BlackBoard group and a GitLab group
- the GitLab group contains the "standard" repository
- check if you are properly assigned to your group
== Approaching Deadlines
- Torsdag, 12. september / 23:59
** 1st individual deliverable
- Torsdag, 19. september / 23:59
** 1st group deliverable
- Torsdag, 19. september / 23:59
** group contract
== Getting help
- ask your group TA
- Q and A sessions every Thursday starting week 37
- some lectures will also Q and A sections
- technical help - helpdesk on teams starting next week
== !
image::../images/lecture04/overview.png[canvas, size=contain]
[background-color = "#124990"]
[color = "#fff6d5"]
== 1st Group Exercise
== Start group work
- finish and deliver the group contract
- discuss and select domain / aplication for group project
- discuss and agree on workflow, meetings etc
- set up your gitlab workspace and repository
- plan the sprint / iteration for the first deliverable
== About domain selection
- choose an app / service that you know well and select a couple of features to implement during the semester
- point is to learn by implementing these using the required architectures
- we are not looking for quantity but for quality, so just few core features will suffice
== About domain selection (2)
- the chosen app needs to be suitable for a cloud based service
- there must therefore be some dynamic data per user managed by the server.
- eg. a (currency) calculation will NOT fit such a project.
- one good starting point are the cases from the HCI course (MMI)
== 3 step release plan
- Minimal application
- Application with more features / improved quality
- Final technical – client server / REST API / more features / alternative client
== Minimal application
- a simple app is created with JavaFX and FXML, with relatively minimal functionality
- can save data to a file and start up again where it left off
- divided into separate modules
- good point to start could be the modules-template (from the individual exercise)
** one can also use the todo list example as inspiration
== Requirements (1)
- project must be in the group repo in gitlab
- documentation for each release is placed in a separate folder
** 1st deliverable (release)- `...groups-2024/gr24nn/gr24nn/docs/release1`
- a milestone in Gitlab should refer to the corresponding documentation and issues
== Requirements (2)
- project must build with Maven
- one root level README.md in the repo to describe the content
- another README.md file (use links) must describe expected application functionality (use at least a screen mockup / screenshot)
- there must also be at least one user story
- there must be corresponding issues in Gitlab
== Requirements (3)
- you must reference the issues in the commits
- configure Maven so that
** application runs with `mvn javafx:run`
** test can run using `mvn test`
- the build must report test coverage ( > 0% )
== Requirements (4)
- there must be at least something in each of the three architecture layers
** domain logic, user interface (JavaFX-GUI) and persistence
- project should be configured to open and run in eclipse che (link in README.md)
== Requirements (5)
- Readme.md file should include a section where requirements are specified - versions for Java, Maven, dependencies etc.
- Document usage of AI-tools. Why and what / why not
** (...groups-2024/gr24nn/gr24nn/docs/release1/ai-tools.md).
- any code taken / generated needs to reference the source in a comment
== Application description
- General description included in readme.md file
- user stories supported by additional design documents such as:
** conceptual model,
** personas,
** scenarios,
** UI mockups,
** UI protoypes
- User stories get broken down into issues and tasks
- Lead to a functional application
[background-color = "#124990"]
[color = "#fff6d5"]
== Build Tools
== Build tools (1)
[%step]
- Automate the process of building executable programs from source files
- Packaging binaries required for deployment / distribution
- Run automated tests
== Build tools (2)
[%step]
- Build automation is a necessity to enable CI/CD
- Remove the need to do redundant tasks
- Improve quality of the software
** the software builds are prepared in a consistent and predictable manner
** possible to have data to analyze issues and improve
== Make (1)
[%step]
- Designed by Stuart Feldman
- Released in 1976
- Uses makefiles to describe the actions required to produce the build
- Manages dependencies
[.smaller-40]
https://en.wikipedia.org/wiki/Make_(software)
== Make (2)
[%step]
- Has been rewriten a number of times
- Standard modern implementation is GNU Make
- Used in Linux and Mac OS
== Java world build tools
- Ant with Ivy
- Maven
- Gradle
== Apache ANT
[%step]
- modern build system
- released in 2000
- build files use XML
** tends to get unmanageable even for small projects
- Apache Ivy for managing dependencies (added later)
** download over network
[.smaller-40]
http://ant.apache.org
== Apache Maven (1)
[%step]
- released in 2004
- improves on ANT
- build files use also XML but the structure is radically different
- dependency management with automatic downloading over the network is available from release
[.smaller-40]
http://maven.apache.org
== Apache Maven (2)
[%step]
- hides complexity in build files through plugins
- customizing is hard
- dependency management has issues with conflicting versions of same library
[background-color = "#124990"]
[color = "#fff6d5"]
== Gradle
== Gradle (1)
[%step]
- released in 2012
- build scripts are written in a domain specific language based on Groovy
** Groovy ( http://www.groovy-lang.org/ )
- the build script is named `build.gradle`
- build steps are called "tasks"
[.smaller-40]
https://gradle.org
== Gradle (2)
[%step]
- easy to create own tasks
- uses plugins to hide complexity
- applying plugins allows access to additional tasks
== Gradle (3)
[.center-paragraph]
image::../images/lecture03/gradle-tree.png[width=700]
[.smaller-40]
https://guides.gradle.org/creating-new-gradle-builds/
[background-color = "#124990"]
[color = "#fff6d5"]
== More on Maven
== Maven (3)
* manages builds, dependencies, versions
* configuration file is `pom.xml`
* has good IDE support
* central repository(ies) for dependencies
== Maven - pom.xml
* modelVersion (4.0.0) config file format version
* groupId - ID of group owning the project
* artifactId - name of the final output
* version - version of the created artifact
== Maven - pom.xml (cont.)
* dependencies - list of artifacts we depend upon
* packaging - e.g. .jar (Java archive)
* description
https://maven.apache.org/pom.html#Quick_Overview
== Maven dependencies
* list of dependencies
* each dependecy has specified
** groupId
** artifactId
** version (optional, good to have)
** scope (default is `compile`)
== Maven build lifecycles
[.smaller-60]
* clean
* site
* default
** validate
** compile
** test
** package
** verify
** install
** deploy
== Maven plugins
* add functionality
* connected to a certain lifecycle phase
* provide additional goals
[background-color = "#124990"]
[color = "#fff6d5"]
== More on development environment
[background-color = "#124990"]
[color = "#fff6d5"]
== VSCode extensions
[background-color = "#124990"]
[color = "#fff6d5"]
== Eclipse Che
[background-color = "#124990"]
[color = "#fff6d5"]
== Agile Practices - Scrum
== User stories
[.smaller-80]
- short, simple descriptions for application features
- formulated from the stand point of the user / customer
- template:
** As a **< type of user >**, I want **< some goal >** so that **< some reason >**.
- they are not replacing design documents / requirements specification
- they need to be developed into specific tasks and connected to constraints and other meaningful documentation.
== Sprints
- meaningful iterations of comparable length
- they should have a clear goal
== Planning releases
- 3 deliverables - map to releases
- a release should produce a minimum viable product (MVP)
** a MVP is a version of an application with just enough features to be usable in getting feedback to guide the development process
== Meetings
- regular stand-up meetings (synchronize and commit, remove hindrances)
- retrospectives (reflect on your group work)
- sprint reviews / demos (invite TA, prepare deliverables)
[background-color = "#124990"]
[color = "#fff6d5"]
== Summary
include::{includedir}footer.adoc[]
\ No newline at end of file
= SCM - Git demo
:customcss: slides.css
:icons: font
:includedir: includes/
:LECTURE_TOPIC: Git demo
:LECTURE_NO: 4th lecture
include::{includedir}header.adoc[]
[.smaller-80][.center-paragraph]
IT1901 Fall 2020 - {LECTURE_NO}
[background-color = "#124990"]
[color = "#fff6d5"]
== Git demo
== Installing and setting up git
- Go to https://git-scm.com/downloads
- Download and install the right version for your OS
- git commands are now available
[.grid-left-right-50-50]
== Typical sequence (share project)
[.area-left]
- starting a project and sharing it on Gitlab for team collaboration
** `git init`
** `git status`
[.area-right]
** `git add ...`
** `git commit ...`
** `git remote ...`
** `git push`
== Commit messages
image::../images/git_commit_2x.png[size=75%]
[.smaller-40]
https://xkcd.com/1296/
== Commit messages (seriously)
- Separate subject from body with a blank line
- Limit the subject line to 50 characters
- Capitalize the subject line
- Do not end the subject line with a period
- Use the imperative mood in the subject line
- Wrap the body at 72 characters
- Use the body to explain what and why vs. how
[.grid-left-right-50-50]
== Typical sequence (simple collaboration)
[.area-left]
- working with a shared project
** `git clone`
** `git pull`
[.area-right]
** `git status`
** `git add ...`
** `git commit ...`
** `git push`
== Conflicts (1)
** when same files (lines) are changed by different devs
** automatic merge is not possible
** we need to solve that to be able to push our changes
== Conflicts (2) - Setup
- `git config merge.tool vimdiff`
- `git config merge.conflictstyle diff3`
- `git config mergetool.prompt false`
== Conflicts (3) - Solving
- `git mergetool`
- `:wqa` save and exit from vi
- `git commit -m "message"`
- `git clean` remove file (might remove other untracked files)
== Typical sequence (with branching)
- working with branches
** `git pull`
** `git checkout -b <branch_name>`
** `git status` + `git add ...` + `git commit ...`
** `git checkout master`
** `git merge <branch_name>`
include::{includedir}footer.adoc[]
\ No newline at end of file
= Individuell obligatorisk øving
:customcss: slides.css
:icons: font
:includedir: includes/
:LECTURE_TOPIC: Øving 1
:LECTURE_NO: 4th lecture
include::{includedir}header.adoc[]
[.smaller-80][.center-paragraph]
IT1901 Fall 2023 - {LECTURE_NO}
[background-color = "#124990"]
[color = "#fff6d5"]
== Overview
- Administrative issues
- Individual exercise
- Build tools
- Summary
[background-color = "#124990"]
[color = "#fff6d5"]
== Administrative issues
== Groups
- fill the form to be assigned to a group
- https://s.ntnu.no/it1901groups
- deadline: today, 31. august 16:00
- will announce next week
- the late comers to the course will have a bit more time
== Approaching Deadlines
- Torsdag , 31. august 16:00
** Fill the group form
- Torsdag 7. september / 18:00
** 1st individual deliverable
== Help tools
- Piazza for the course is up and running
- Helpdesk is up and running
- Relevant links and info in Blackboard
[background-color = "#124990"]
[color = "#fff6d5"]
== Individual exercise
== 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
== Main steps
- set up the repo in gitlab
** create a project under students-2023
** use the javafx-template as a starting point
- change the template
** project name
** packages
- implement the missing logic
** check by running the tests
[background-color = "#124990"]
[color = "#fff6d5"]
== Demo time
[background-color = "#124990"]
[color = "#fff6d5"]
== Build tools
== Build tools (1)
[%step]
- Automate the process of building executable programs from source files
- Packaging binaries required for deployment / distribution
- Run automated tests
== Build tools (2)
[%step]
- Build automation is a necessity to enable CI/CD
- Remove the need to do redundant tasks
- Improve quality of the software
** the software builds are prepared in a consistent and predictable manner
** possible to have data to analyze issues and improve
== Make (1)
[%step]
- Designed by Stuart Feldman
- Released in 1976
- Uses makefiles to describe the actions required to produce the build
- Manages dependencies
[.smaller-40]
https://en.wikipedia.org/wiki/Make_(software)
== Make (2)
[%step]
- Has been rewriten a number of times
- Standard modern implementation is GNU Make
- Used in Linux and Mac OS
== Java world build tools
- Ant with Ivy
- Maven
- Gradle
== Apache ANT
[%step]
- modern build system
- released in 2000
- build files use XML
** tends to get unmanageable even for small projects
- Apache Ivy for managing dependencies (added later)
** download over network
[.smaller-40]
http://ant.apache.org
== Apache Maven (1)
[%step]
- released in 2004
- improves on ANT
- build files use also XML but the structure is radically different
- dependency management with automatic downloading over the network is available from release
[.smaller-40]
http://maven.apache.org
== Apache Maven (2)
[%step]
- hides complexity in build files through plugins
- customizing is hard
- dependency management has issues with conflicting versions of same library
[background-color = "#124990"]
[color = "#fff6d5"]
== Gradle
== Gradle (1)
[%step]
- released in 2012
- build scripts are written in a domain specific language based on Groovy
** Groovy ( http://www.groovy-lang.org/ )
- the build script is named `build.gradle`
- build steps are called "tasks"
[.smaller-40]
https://gradle.org
== Gradle (2)
[%step]
- easy to create own tasks
- uses plugins to hide complexity
- applying plugins allows access to additional tasks
== Gradle (3)
[.center-paragraph]
image::../images/lecture03/gradle-tree.png[width=700]
[.smaller-40]
https://guides.gradle.org/creating-new-gradle-builds/
[background-color = "#124990"]
[color = "#fff6d5"]
== More on Maven
== Maven (3)
* manages builds, dependencies, versions
* configuration file is `pom.xml`
* has good IDE support
* central repository(ies) for dependencies
== Maven - pom.xml
* modelVersion (4.0.0) config file format version
* groupId - ID of group owning the project
* artifactId - name of the final output
* version - version of the created artifact
== Maven - pom.xml (cont.)
* dependencies - list of artifacts we depend upon
* packaging - e.g. .jar (Java archive)
* description
https://maven.apache.org/pom.html#Quick_Overview
== Maven dependencies
* list of dependencies
* each dependecy has specified
** groupId
** artifactId
** version (optional, good to have)
** scope (default is `compile`)
[background-color = "#124990"]
[color = "#fff6d5"]
== Summary
== Next week
[.smaller-80]
* set up groups
* set up repositories
* announce 1 group exercise
* start working with the group exercise and group contract
include::{includedir}footer.adoc[]
\ No newline at end of file
= Scrum / Gitlab
:customcss: slides.css
:icons: font
:includedir: includes/
:LECTURE_TOPIC: Scrum / Gitlab
:LECTURE_NO: 4th lecture
include::{includedir}header.adoc[]
[.smaller-80][.center-paragraph]
IT1901 Fall 2022 - {LECTURE_NO}
== Overview
- Administrative issues
- Group contract
- Scrum
- Gitlab
[background-color = "#124990"]
[color = "#fff6d5"]
== Administrative issues
== Administrative issues
- Reference group
- Groups
- Getting help
- Upcoming deliverables
== Reference group (1)
- Special thanks to the reference group volunteers for their interest in the course.
- we selected a representative mix in the order of volunteering
- you can see the contact info in Blackboard
- questions regarding the course organization and proposals for improvements should be communicated to the reference group
- half of the reference group has been randomly selected to have a balanced set of representatives
== Reference group (2)
- vebjorbl@stud.ntnu.no Vebjørn Falk Blom-Hagen
- hanneswi@stud.ntnu.no Hannes Witt
- johanlm@stud.ntnu.no Johannes Landmark Meldal
- adelefe@stud.ntnu.no Adele Felicia Ellingsen-Grønningsæther
- olejme@stud.ntnu.no Ole Jacob Mellgren
- elintes@stud.ntnu.no Elin Tesaker
== Groups
- groups have been formed based on the form and input from students
- will be uploaded in BlackBoard tomorrow
- for issues with groups contact Farzana Quayyum <farzana.quayyum@ntnu.no>
- several of the enrolled students have not been distributed to groups
- we will proceed to create the gitlab groups with the same composition as the Blackboard groups ASAP
== Getting help
- Use piazza instead of sending individual emails to staff
- technical help-desk will be shortly operating
- A TA will be assigned to each group
** subject matter and group related questions should be addressed to them
== Upcoming deliverables (1)
- 1st individual assignment
- deadline on this Thursday at midnight
- not all requested access for 1st individual assignment
- this is a mandatory exercise, you cannot get a grade in the course if you do not pass it
== Upcoming deliverables (2)
- group contract
- deadline one week from announcing the groups
[background-color = "#124990"]
[color = "#fff6d5"]
== Group contract
== Group contract (0)
- contact the other members of your group
- start working on the group contract
== Group contract (1)
- Minimum requirements for agreement:
** Presence
** Time spent
** Expectations for the individual contribution
** What happens in the event of deviations or disagreements
== Group contract (2)
* must be approved by the TA for the group
* signed by all group members
* and delivered this Friday by 16:00
== Group contract (3)
- more recommended items:
** handling differences in motivation level and ambition
** what quality is expected, how defines the group something to be "done"
** distribution of time between meetings / group work / individual work
** what happens if course work needs more time than expected
== Group contract (4)
- more recommended items:
** delays, sickness, absence - how does the group handle these
** meeting routines both for physical and virtual (agreement for time, agenda, meeting minutes etc)
** general communication tools (email, phone, im etc) and response time
** dealing as a group with deliverables and deadlines
== Group contract (5)
- more recommended items:
** roles
** giving feedback to the others
** dealing with conflicts and disagreements
** dealing with breach of contract
** procedure to follow if the group is not able to solve conflicts / disagreements internally
[background-color = "#124990"]
[color = "#fff6d5"]
== Scrum
== About domain selection
- choose an app / service that you know well and select a couple of features to implement during the semester
- point is to learn by implementing these using the required architectures
- we are not looking for quantity but for quality, so just few core features will suffice
== About domain selection (2)
- the chosen app needs to be suitable for a cloud based service
- there must therefore be some dynamic data per user managed by the server.
- eg. a (currency) calculation will NOT fit such a project.
- one good starting point are the cases from the HCI course (MMI)
== User stories
[.smaller-80]
- short, simple descriptions for application features
- formulated from the stand point of the user / customer
- template:
** As a **< type of user >**, I want **< some goal >** so that **< some reason >**.
- they are not replacing design documents / requirements specification
- they need to be developed into specific tasks and connected to constraints and other meaningful documentation.
== Sprints
- meaningful iterations of comparable length
- they should have a clear goal
== Planning releases
- 3 deliverables - map to releases
- a release should produce a minimum viable product (MVP)
** a MVP is a version of an application with just enough features to be usable in getting feedback to guide the development process
== Meetings
- regular stand-up meetings (synchronize and commit, remove hindrances)
- retrospectives (reflect on your group work)
- sprint reviews / demos (invite TA, prepare deliverables)
== Pair programming
- popular agile development technique
- recommended to be used in your groups
[background-color = "#124990"]
[color = "#fff6d5"]
== Gitlab
== Gitlab -Issue tracking
- Issues
- Labels
- Milestones
- Boards
[background-color = "#124990"]
[color = "#fff6d5"]
== Gitlab demo
include::{includedir}footer.adoc[]
= Scrum / Gitlab
:customcss: slides.css
:icons: font
:includedir: includes/
:LECTURE_TOPIC: Scrum / Gitlab
:LECTURE_NO: 4th lecture
include::{includedir}header.adoc[]
[.smaller-80][.center-paragraph]
IT1901 Fall 2022 - {LECTURE_NO}
== Overview
- Administrative issues
- Group contract
- Scrum
- Gitlab
[background-color = "#124990"]
[color = "#fff6d5"]
== Administrative issues
== Administrative issues
- Reference group
- Groups
- Getting help
- Upcoming deliverables
== Reference group (1)
- Special thanks to the reference group volunteers for their interest in the course.
- we selected a representative mix in the order of volunteering
- you can see the contact info in Blackboard
- questions regarding the course organization and proposals for improvements should be communicated to the reference group
== Reference group (2)
- August Sætre Aasvær augustsa@stud.ntnu.no
- Skage Klingstedt Reistad skagekr@stud.ntnu.no
- Iver Baardsgaard Brønstad iverbb@stud.ntnu.no
- Anna Østmo annaost@stud.ntnu.no
- Mats Ellingsen matsel@stud.ntnu.no
- Victoria Kjerstin Huaco Simensen vksimens@stud.ntnu.no
== Groups
- groups have been formed based on the form and input from students
- check in BlackBoard if you are in a group
- for issues with groups contact Farzana Quayyum <farzana.quayyum@ntnu.no>
- 338 out of the 353 enrolled students have been distributed to groups
- we will proceed to create the gitlab groups with the same composition as the Blackboard groups ASAP
== Getting help
- Use piazza instead of sending individual emails to staff
** 192 out of 338 students have registered in piazza
- If relevant you can use the technical help-desk
** how to access it and use it is posted in Blackboard
- A TA will be assigned to each group
** subject matter and group related questions should be addressed to them
== Upcoming deliverables (1)
- 1st individual assignment
- deadline on this Friday at 16:00
- 271 out of 338 - requested access for 1st individual assignment
- this is a mandatory exercise, you cannot get a grade in the course if you do not pass it
== Upcoming deliverables (2)
- group contract
- deadline on this Friday at 16:00
[background-color = "#124990"]
[color = "#fff6d5"]
== Group contract
== Group contract (0)
- contact the other members of your group
- start working on the group contract
== Group contract (1)
- Minimum requirements for agreement:
** Presence
** Time spent
** Expectations for the individual contribution
** What happens in the event of deviations or disagreements
== Group contract (2)
* must be approved by the TA for the group
* signed by all group members
* and delivered this Friday by 16:00
== Group contract (3)
- more recommended items:
** handling differences in motivation level and ambition
** what quality is expected, how defines the group something to be "done"
** distribution of time between meetings / group work / individual work
** what happens if course work needs more time than expected
== Group contract (4)
- more recommended items:
** delays, sickness, absence - how does the group handle these
** meeting routines both for physical and virtual (agreement for time, agenda, meeting minutes etc)
** general communication tools (email, phone, im etc) and response time
** dealing as a group with deliverables and deadlines
== Group contract (5)
- more recommended items:
** roles
** giving feedback to the others
** dealing with conflicts and disagreements
** dealing with breach of contract
** procedure to follow if the group is not able to solve conflicts / disagreements internally
[background-color = "#124990"]
[color = "#fff6d5"]
== Scrum
== About domain selection
- choose an app / service that you know well and select a couple of features to implement during the semester
- point is to learn by implementing these using the required architectures
- we are not looking for quantity but for quality, so just few core features will suffice
== About domain selection (2)
- the chosen app needs to be suitable for a cloud based service
- there must therefore be some dynamic data per user managed by the server.
- eg. a (currency) calculation will NOT fit such a project.
- one good starting point are the cases from the HCI course (MMI)
== User stories
[.smaller-80]
- short, simple descriptions for application features
- formulated from the stand point of the user / customer
- template:
** As a **< type of user >**, I want **< some goal >** so that **< some reason >**.
- they are not replacing design documents / requirements specification
- they need to be developed into specific tasks and connected to constraints and other meaningful documentation.
== Sprints
- meaningful iterations of comparable length
- they should have a clear goal
== Planning releases
- 3 deliverables - map to releases
- a release should produce a minimum viable product (MVP)
** a MVP is a version of an application with just enough features to be usable in getting feedback to guide the development process
== Meetings
- regular stand-up meetings (synchronize and commit, remove hindrances)
- retrospectives (reflect on your group work)
- sprint reviews / demos (invite TA, prepare deliverables)
== Pair programming
- popular agile development technique
- recommended to be used in your groups
[background-color = "#124990"]
[color = "#fff6d5"]
== Gitlab
== Gitlab -Issue tracking
- Issues
- Labels
- Milestones
- Boards
[background-color = "#124990"]
[color = "#fff6d5"]
== Gitlab demo
include::{includedir}footer.adoc[]
= Groupwork and more
:customcss: slides.css
:icons: font
:includedir: includes/
:LECTURE_TOPIC: Groups and groupwork
:LECTURE_NO: 5th lecture
include::{includedir}header.adoc[]
[.smaller-80][.center-paragraph]
IT1901 Fall 2023 - {LECTURE_NO}
== Overview
- Administrative issues
- Group contract
- 1st group deliverable
- Scrum
- Gitlab
- Summary
[background-color = "#124990"]
[color = "#fff6d5"]
== Administrative issues
== Groups (1)
- Groups have been assigned a TA
- We have created the groups in Blackboard
- We have added the members to each group
- Each group has assigned a TA (info in BlackBoard)
- We will create the gitlab groups ASAP
== Groups (2)
- Check in BlackBoard to see your group
- If you are not allocated contact talha.m.alam@ntnu.no
== Reference group (1)
- Special thanks to the reference group volunteers for their interest in the course.
- we selected a representative mix in the order of volunteering
- you can see the contact info in Blackboard
- questions regarding the course organization and proposals for improvements should be communicated to the reference group
== Reference group (2)
- Trygve Eriksen tryger@stud.ntnu.no (Datateknologi)
- Magnus Andreas Giverin magnusgi@stud.ntnu.no (Datateknologi)
- Noah Lund Syrdal noahls@stud.ntnu.no (Informatikk)
- Caroline Wie carolwie@stud.ntnu.no (Informatikk)
- Anine Løkken aninelok@stud.ntnu.no (Datateknologi)
== Nearing Deadlines
- First individual assignment (Thursday 07.09.2023 18:00)
** there will be a possibility to resend after the first round of feedback
- Group contract (Thursday 14.09.2022 18:00)
- First group assignment (Thursday 21.09.2022 18:00)
[background-color = "#124990"]
[color = "#fff6d5"]
== Group contract
== Group contract (0)
- contact the other members of your group
- start working on the group contract
== Group contract (1)
- Minimum requirements for agreement:
** Presence
** Time spent
** Expectations for the individual contribution
** What happens in the event of deviations or disagreements
== Group contract (2)
* must be approved by the TA for the group
* signed by all group members
* and delivered by Thursday 14.09.2022 18:00
== Group contract (3)
- more recommended items:
** handling differences in motivation level and ambition
** what quality is expected, how defines the group something to be "done"
** distribution of time between meetings / group work / individual work
** what happens if course work needs more time than expected
== Group contract (4)
- more recommended items:
** delays, sickness, absence - how does the group handle these
** meeting routines both for physical and virtual (agreement for time, agenda, meeting minutes etc)
** general communication tools (email, phone, im etc) and response time
** dealing as a group with deliverables and deadlines
== Group contract (5)
- more recommended items:
** roles
** giving feedback to the others
** dealing with conflicts and disagreements
** dealing with breach of contract
** procedure to follow if the group is not able to solve conflicts / disagreements internally
[background-color = "#124990"]
[color = "#fff6d5"]
== 1st group deliverable
== Start group work
- finish and deliver the group contract
- discuss and select domain / aplication for group project
- discuss and agree on workflow, meetings etc
- set up your gitlab workspace and repository
- plan the sprint / iteration for the first deliverable
== About domain selection
- choose an app / service that you know well and select a couple of features to implement during the semester
- point is to learn by implementing these using the required architectures
- we are not looking for quantity but for quality, so just few core features will suffice
== About domain selection (2)
- the chosen app needs to be suitable for a cloud based service
- there must therefore be some dynamic data per user managed by the server.
- eg. a (currency) calculation will NOT fit such a project.
- one good starting point are the cases from the HCI course (MMI)
== 3 step release plan
- Minimal application
- Application with more features / improved quality
- Final technical – client server / REST API / more features / alternative client
== Minimal application
- a simple app is created with JavaFX and FXML, with relatively minimal functionality
- can save data to a file and start up again where it left off
- divided into separate modules
- good point to start could be the modules-template (from the individual exercise)
** one can also use the todo list example as inspiration
== Requirements (1)
- project must be in the group repo in gitlab
- documentation for each release is placed in a separate folder
** 1st deliverable (release)- `...groups-2023/gr23nn/gr23nn/docs/release1`
- a milestone in Gitlab should refer to the corresponding documentation and issues
== Requirements (2)
- project must build with Maven
- one root level README.md in the repo to describe the content
- another README.md file (use links) must describe expected application functionality (use at leasst a screen mockup / screenshot)
- there must also be at least one user story
- there must be corresponding issues in Gitlab
== Requirements (3)
- you must reference the issues in the commits
- configure Maven so that
** application runs with `mvn javafx:run`
** test can run using `mvn test`
- the build must report test coverage ( > 0% )
== Requirements (4)
- there must be at least something in each of the three architecture layers
** domain logic, user interface (JavaFX-GUI) and persistence
- project should be configured to open and run in eclipse che (link in README.md)
== Application description
- General description included in readme.md file
- user stories supported by additional design documents such as:
** conceptual model,
** personas,
** scenarios,
** UI mockups,
** UI protoypes
- User stories get broken down into issues and tasks
- Lead to a functional application
[background-color = "#124990"]
[color = "#fff6d5"]
== Scrum
== User stories
[.smaller-80]
- short, simple descriptions for application features
- formulated from the stand point of the user / customer
- template:
** As a **< type of user >**, I want **< some goal >** so that **< some reason >**.
- they are not replacing design documents / requirements specification
- they need to be developed into specific tasks and connected to constraints and other meaningful documentation.
== Sprints
- meaningful iterations of comparable length
- they should have a clear goal
== Planning releases
- 3 deliverables - map to releases
- a release should produce a minimum viable product (MVP)
** a MVP is a version of an application with just enough features to be usable in getting feedback to guide the development process
== Meetings
- regular stand-up meetings (synchronize and commit, remove hindrances)
- retrospectives (reflect on your group work)
- sprint reviews / demos (invite TA, prepare deliverables)
== Pair programming
- popular agile development technique
- recommended to be used in your groups
[background-color = "#124990"]
[color = "#fff6d5"]
== GitLab
== GitLab
* Issues
* Milestones
* Task lists and check lists
* Labels
* Boards
* Quick actions
== Issues (1)
- collaboration and discussion
- elaborate on design and implementation
- plan work and track progress
== Issues (2)
- issues track work (not only programming work)
- examples
** new features, bugs and change requests
** other tasks - documentation, refactoring, configuration
** knowledge acquisition - (to get work done)
** etc
== Milestones
- way to organize and manage issues and merge requests
- can be used to manage releases
- can be mapped to sprints
== Task lists and check lists
- split work in finer chunks
- keep track of progress within issues
== Labels
- allow categorizing issues and other elements in gitlab
- used with boards and issues to facilitate workflow and visibility
== Boards
- tool to manage and visualize workflow for a software artifact
- combine issue tracking and project management in a single tool
- you can create a Scrum board or custom boards as needed
== Quick actions
- allow including in the text of the issue / comments commands
- assign , label, set due date etc in one go
- context dependent - options based on the state of the item
[background-color = "#124990"]
[color = "#fff6d5"]
== Summary
include::{includedir}footer.adoc[]
= GitLab
:customcss: slides.css
:icons: font
:includedir: includes/
:LECTURE_TOPIC: GitLab
:LECTURE_NO: 5th lecture
include::{includedir}header.adoc[]
[.smaller-80][.center-paragraph]
IT1901 Fall 2022 - {LECTURE_NO}
== Overview
- Administrative issues
- Gitlab
[background-color = "#124990"]
[color = "#fff6d5"]
== Administrative issues
== Administrative issues (Groups)
- Groups have been assigned a TA
- we have created the groups in gitlab
- we have added the members to each group
- the initial repositories for group exercises have been created
- check if all in the group can access the repository
- standard repository gr22nn/gr22nn
== Administrative issues (Tech support)
- Technichal support is operational
- Link and info will be published in BlackBoard
== Reference group (updated)
- vebjorbl@stud.ntnu.no Vebjørn Falk Blom-Hagen (Informatikk)
- hanneswi@stud.ntnu.no Hannes Witt (Informatikk)
- johanlm@stud.ntnu.no Johannes Landmark Meldal (Informatikk)
- jakobto@stud.ntnu.no Jakob Tøssebro (Datateknologi)
- olejme@stud.ntnu.no Ole Jacob Mellgren (Datateknologi)
- elintes@stud.ntnu.no Elin Tesaker (Lektorutdanning i realfag)
== Nearing Deadlines
- First individual assignment
** postponed to next week (Tuesday 13.09.2022 23:59)
** there will be a possibility to resend after the first round of feedback
- Group contract (Tuesday 13.09.2022 23:59)
- First group assignment (Thursday 22.09.2022 23:59)
== Start group work
- finish and deliver the group contract
- discuss and select domain / aplication for group project
- discuss and agree on workflow, meetings etc
- set up your gitlab workspace and repository
- plan the sprint / iteration for the first deliverable
== About domain selection
- choose an app / service that you know well and select a couple of features to implement during the semester
- point is to learn by implementing these using the required architectures
- we are not looking for quantity but for quality, so just few core features will suffice
== About domain selection (2)
- the chosen app needs to be suitable for a cloud based service
- there must therefore be some dynamic data per user managed by the server.
- eg. a (currency) calculation will NOT fit such a project.
- one good starting point are the cases from the HCI course (MMI)
== 3 release plan
- Minimal application
- Application with more features / improved quality
- Final technical – client server / REST API / more features / alternative client
== Application description
- General description included in readme.md file
- user stories supported by additional design documents such as:
** conceptual model,
** personas,
** scenarios,
** UI mockups,
** UI protoypes
- User stories get broken down into issues and tasks
- Lead to a functional application
[background-color = "#124990"]
[color = "#fff6d5"]
== GitLab
== GitLab
* Issues
* Milestones
* Task lists
* Labels
* Boards
* Quick actions
include::{includedir}footer.adoc[]
= Q & A
:customcss: slides.css
:icons: font
:includedir: includes/
:LECTURE_TOPIC: Q&A
:LECTURE_NO: 5th lecture
include::{includedir}header.adoc[]
[.smaller-80][.center-paragraph]
IT1901 Fall 2021 - {LECTURE_NO}
== Overview
- Administrative issues
- Q & A
[background-color = "#124990"]
[color = "#fff6d5"]
== Administrative issues
== Administrative issues
- Groups have been assigned a TA
- we have created the groups in gitlab
- we have added the members to each group
- the initial repositories have been created
[background-color = "#124990"]
[color = "#fff6d5"]
== Q & A
== 3 release plan
- Minimal application
- Application with more features / improved quality
- Final technical – client server / REST API / more feature / alternative client
== Application description
- General description included in readme.md file
- user stories supported by additional design documents such as:
** conceptual model,
** personas,
** scenarios,
** UI mockups,
** UI protoypes
- User stories get broken down into issues and tasks
- Lead to a functional application
include::{includedir}footer.adoc[]
This diff is collapsed.
This diff is collapsed.