---
tags: MSE / semestre 4
---
# MSE - SoftwEng
## Topic 1 : Agile Software Engineering
### 1. Agile Software Engineering
* What's **Software Engineering**.
* What's **Agile** (comparison with Waterfall).
* Complete **Scrum** overview.
* **GitLab tools** to Agile developpement.
### 2. Agile Thematic Presentations
* **Extreme Programming** Vs SCRUM.
* **Ideal days** or hours or **timeless** story points.
* Planning **Poker**.
* SCRUM **Framework**.
* Scrum **Daily Meetings**.
* **Kanban**.
### 3. Mandatory Readings
* Official Scrum Guide.
* Planning Agile Developpement with GitLab.
* Sprint Planning.
* Scrum Metrics (Velocity, Capacity, Burndown charts).
* Scrum and Epic (Burn down charts).
* Estimation with storypoints.
* ScrumBan.
* Scrum Glossary.
* ScrumBan vs Scrum vs Kanban.
* StoryPoints revisited.
* Cumulative Flow Diagram.
---
## Topic 2 : Component-based Software Architecture
### 1. An Introduction to Software Architecture
* What's **Software Architecture** ?
* **Kruchten** 4+1 views.
* The **C4 Model**.
* Architecture **Styles**, Architecture **Patterns** & Design **Principles**, Design **Patterns**.
* Client-Server and SOA.
* N-tier Architecture Styles (3-tiers).
* Layered Architecture Style.
* Comparison with MVC.
* Publish-Subscribe.
* The **Yagni** Design principles.
* KISS & DRY.
* **Conway**'s Law.
### 2. Component-based Architectures
* Less is more (shouldn't measure progress or quality by number of line of code).
* **"Component-based"** programming -> key contributor to write less code.
* What's a **Component** ?
* Benefits.
* **Traditional**, **OOP** and **Process-related** views.
* The Software Reuse Process.
### 3. Component Interfaces: Interface-Oriented Design by Contract
* **Three laws** of interfaces.
* **Designing by Contracts** (DbC).
* **Preconditions**, **Postconditions** & **Invariants**.
* **Strong-Typing** can be considered DbC (cause it's a form of contract too).
* **Interfaces Types**.
* Stateless vs Stateful.
* RAM vs Sequential.
* Minimal vs Complete.
* Single vs Multiple.
* Interfaces and **Inheritance**.
* Solving repeated code with use of **"Helpers"** to delegate some shared codes.
### 4. Mandatory readings
* Exploring duality between product and organisational architectures.
* The C4 Model.
* Client-Server (2, 3, N) Tiers.
* Tiers vs Layers.
* MVC and 3-Tiers.
* Publish-Subscribe.
- OOP vs Component-based programming.
- Principles of component-based programming.
- Mass produced software components.
* Interface-Oriented Design.
---
## Topic 3 : Architecture Style/Patterns in Web Development
### 1. Architecture & Design Patterns for Front-End Development
* **MVC** (+ explained with examples).
* **Observer** & **Publisher-Subscriber** Patterns (NOT THE SAME !) and why important when talking about MVC and Co.
* **MVP** (+ explained with bad example).
* **MVP vs MVC**.
* **MVVM** (+ explained with example).
* Few words on **MVT** (Django).
### 2. The Flux Architecture Pattern and its implementations
* Problems with **traditional MVC**.
* **Solution** adopted (**global** class, **traced** actions, **unidirectional** state access and mofication flow => **single source** of "truth").
* The **FLUX** architecture.
* FLUX benefits.
* The **Redux** library.
* **Flux vs Redux**.
* **Vuex** (+ explained with example).
### 3. From Monolith To Microservices
* **Monolithic** and **Microservice** Architectures.
* Demonstration of moving from legacy system to something new (monolithic or microserve ?).
* Architectural choices when developing the service.
* Monorepo vs Polyrepo strategies (pas compris).
### 4. Mandatory Readings
* MVP, MVC, MVVM.
- Vuex Quick Start Guide Book - on MVC problems and solutions with FLUX and Vuex.
- Vuex official documentation.
---
## Topic 4 : DevOps with Docker
### 1. Container-Based Virtualisation (For software applications)
* What's **OS Kernel** ?
* **Type 1** & **Type 2** **Hypervisor**.
* **Type 1 vs Type 2**.
* What's **Container-based** ?
* **Container based vs VM** (type 1 & type 2).
* What's/why/how/benefits **Containers** ?
* Reproducibility, Consistency & Isolation.
* What's/why/how **Docker** ?
* What's/How it works **Image Layers** ?
* **Writable R/W layer** + Container **size**.
* **Storage Drivers** : Union Mount, logical union, CoW (Copy-on-Write).
* How **deletion** works.
### 2. Best Docker Practices of Achieve Faster Image Builds
* RUN vs CMD (nan je déconne, le PDF a pas été mis à jour ptdr).
* **Docker Caching Model** during Image Builds (**very important**).
* **Achieving faster builds** (based on new knowledges of Docker Caching Model).
* **Starting** with steps that change **less** frequently.
* COPY files **separately** to avoid **cache invalidation** for **all** if only one changes. Use ADD **only** for local archives auto-extraction (otherwise curl for remote urls).
* Using **multi-stage builds**.
* **Faster builds on hosted platforms** (?).
### 3. Orchestration
* **Role of orchestrator**.
* Orchestration of **docker containers**.
* Docker-compose file.
* Docker-compose CLI.
* Docker Swarm mode.
* To enable other **workers** to join swarm as **nodes**.
* Adding service replicas.
* **Publishing** vs **Exposing** ports.
---
## Topic 5 : Software Architecture: SOLID Design Principles
### 1. Students presentation commented
* Explications/Principles + Examples + Challenges for each principle.
* ***S**ingle* Responsibility Principle.
* ***O**pen*/closed Principle.
* ***L**iskov* Substition Principle.
* ***I**interface* Segregation Principle.
* ***D**ependency* Inversion Principle.
### 2. Exercises with solution
* Examples of violated principles.
* 1x **L**SP.
* 1x **L**SP.
* 1x **S**RP.
* 1x **I**SP.
### 3. Cheatsheet
* For each principle.
* Meaning.
* Examples.
* Recognizing Code Smells.
* Benefits.
---
## Topic 6 : CI/CD
### 1. Continuous Integration / Deployment (In Practice)
* Agile and **DevOps**.
* DevOps facilitates the Agile principle.
* **CI/CD** and the importance of **automation**.
* Continuous **Integration** (CI).
* Continuous **Deployment** (CD).
* CI/CD **Benefits**.
* **Self-hosted** vs **Provider-hosted** runnres (???).
* CI/CD in practice (osef).
---
## Topic 7 : Agile Testing
### 1. Agile Testing
* **Pillars** of Agile Testing.
* TDD: **Test Driven** Development.
* BDD: **Behaviour Driven** Development.
* Testing stages and testing types:
* Testing pyramids: test “quantity” and automation in different stages.
* Agile testing Quadrants: grouping tests in terms of their objectives.
* Practice simple unit testing with Jest.
### 2. Agile Testing Technologies, Librairies and Frameworks
* Small exercice/example on JEST and TDD.
* (Pre-requisite) Test Doubles: Mock, stub, and fake description.
* Mocha for (Unit, Integration, BDD) Testing:
* Comparison with other JS frameworks for unit and integration tests.
* Mocha Description.
* Mocha BDD-style assertion styles using Chai.
* Mocha spying, stubbing, and mocking using Sinon.js.
* Cucumber for BDD Testing:
* Cucumber Description.
* Mocha vs Cucumber.
* Cucumber feature description with Gherkin.
* Cucumber test implementation with Cucumber.js.
* Cypress for Automated UI Testing:
* Cypress vs Selenium.
* Cypress features and bundled tools.
* Practice with Cypress UI testing.