diff --git a/lectures/revealjs/04-build-tools.adoc b/lectures/revealjs/04-build-tools.adoc new file mode 100644 index 0000000000000000000000000000000000000000..87879473390e5ad438300cdeba1d2cc3bded6706 --- /dev/null +++ b/lectures/revealjs/04-build-tools.adoc @@ -0,0 +1,374 @@ += 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 diff --git a/lectures/revealjs/images/lecture04/overview.png b/lectures/revealjs/images/lecture04/overview.png new file mode 100644 index 0000000000000000000000000000000000000000..fb629d3fe6f884917ed3f9b57e66b261d8188b68 Binary files /dev/null and b/lectures/revealjs/images/lecture04/overview.png differ