diff --git a/lectures/revealjs/04-lecture-admin.adoc b/lectures/revealjs/04-lecture-admin.adoc new file mode 100644 index 0000000000000000000000000000000000000000..5de63afd3a7e063c900921d3006e3747240d2e8e --- /dev/null +++ b/lectures/revealjs/04-lecture-admin.adoc @@ -0,0 +1,191 @@ += 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[] diff --git a/lectures/revealjs/05-lecture-admin-gitlab.adoc b/lectures/revealjs/05-lecture-admin-gitlab.adoc new file mode 100644 index 0000000000000000000000000000000000000000..13470b31c2052cd6e3cccb2697070061d84408ac --- /dev/null +++ b/lectures/revealjs/05-lecture-admin-gitlab.adoc @@ -0,0 +1,113 @@ += 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[] diff --git a/lectures/revealjs/06-lecture-build-tools-testing.adoc b/lectures/revealjs/06-lecture-build-tools-testing.adoc new file mode 100644 index 0000000000000000000000000000000000000000..4a1f038ac0dc448ec2baed0ccda4c1c40c5b5ed2 --- /dev/null +++ b/lectures/revealjs/06-lecture-build-tools-testing.adoc @@ -0,0 +1,354 @@ += Build tools. Introduction to testing +:customcss: slides.css +:icons: font +:includedir: includes/ +:LECTURE_TOPIC: Build tools. Introduction to testing +:LECTURE_NO: 6th Lecture + +include::{includedir}header.adoc[] + +[.smaller-80][.center-paragraph] +IT1901 Fall 2022 - {LECTURE_NO} + +[background-color = "#124990"] +[color = "#fff6d5"] +== Overview +[.smaller-80] +- Administrative issues +- Build tools +- Testing + +[background-color = "#124990"] +[color = "#fff6d5"] +== Administrative issues + +== Administrative issues + +* Individual assignment 1 +* Group contract +* 1st group assignment + + +== Groups + +- contact your team mates and start working on the group contract +- start working on finding a suitable project + +== 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 sammen med første innlevering + +== 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) + + +[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"] +== Testing + +== Testing + +[%step] +- is an important part of software development +- a way to ensure software quality +- automated testing allows to develop new features with a minimal effort to check if the software still works as expected +- testing frameworks + +== Testing (2) + +[%step] +- design +- implement +- write automated tests +- run tests +- we do not test just for know, we write tests to keep running them during project life cycle + +== Testing (3) + +[%step] +- design tests +- implement the test +- provide inputs +- run the tests +- provide expected outputs +- check if the result we get matches what we expect +- produce a manageable output that the developer can consult + +== Testing (3) + +- design tests +- implement the test +- provide inputs +- *run the tests* +- provide expected outputs +- *check if the result we get matches what we expect* +- *produce a manageable output that the developer can consult* + + +[background-color = "#124990"] +[color = "#fff6d5"] +== JUnit + + +== JUnit + +- Is a Java unit testing framework. +- provides the means to automate test +- allows to eliminate redundant testing tasks + + +== JUnit (2) + +``` java +import org.junit.*; + +public class FoobarTest { + @BeforeClass + public static void setUpClass() throws Exception { + // Code executed before the first test method + } + + @Before + public void setUp() throws Exception { + // Code executed before each test + } + + @Test + public void testOneThing() { + // Code that tests one thing + } + + @Test + public void testAnotherThing() { + // Code that tests another thing + } + + @Test + public void testSomethingElse() { + // Code that tests something else + } + + @After + public void tearDown() throws Exception { + // Code executed after each test + } + + @AfterClass + public static void tearDownClass() throws Exception { + // Code executed after the last test method + } +} +``` + +[.smaller-40] +https://en.wikipedia.org/wiki/JUnit + + +[background-color = "#124990"] +[color = "#fff6d5"] +== TestFX + +== TestFX + +- testing for JavaFx applications +- provides robots for UI testing +- support for JUnit + +[.smaller-40] +https://github.com/TestFX/TestFX + + +[background-color = "#124990"] +[color = "#fff6d5"] +== Mockito + + +== Mockito + +- mocking is a technique to test functionality in isolation +- mock objects simulate real objects +- return dummy values corresponding to the input given at creation +- Mockito uses reflection features in Java to create the mock objects + +[.smaller-40] +https://site.mockito.org/ + +[background-color = "#124990"] +[color = "#fff6d5"] +== Jacoco + +== Jacoco + +- tool for assessing code coverage +- does not need modifying code +- can produce a report in html format +- integrates with a number a tools including Gradle + +[.smaller-40] +https://www.jacoco.org/ + + + +include::{includedir}footer.adoc[] \ No newline at end of file