ICM – Computer Science Major – Course unit on Technological foundations of Computer Science and M1 Cyber Physical and Social Systems – Course unit on CPS2 engineering and development, Part 2: Technological foundations of software development

Institut Henri Fayol - MINES Saint-Étienne

Automate build production

This session aims to familiarize you with the methods and tools for automating code production: compilation, testing, packaging, deployment, etc. In particular, we will see make, and Apache Maven

Complement to the slides for the MCQ

The MCQ will contain:

Reads and tutorials

C/C++
  • Read CMake vs. Make

  • Make Read the first few sections of each chapter of the book GNU Make, skipping the later sections. In each chapter, the first few sections contain introductory or general information.

  • cMake The CMake tutorial provides a step-by-step guide that covers common build system issues that CMake helps address.

Java
  • Gradle Get stated by reading the intro to Gradle, and follow the tutorial for a hands-on approach. Go more in depth if you wish.

JavaScript
Python

TODOs (By 14/11)

submit your work for Courses 3-4 as LASTNAME.zip to https://ecampus.emse.fr/mod/assign/view.php?id=33635 (expiration date/time: 2025-11-15 01:00 )

Learn an appropriate and modern build tool (see section Reads and tutorials above), and demonstrate your know-how by setting up and documenting the build tool usage on the project of your choice:

  • 2/5 points - The project must clearly demonstrate how the build tool is used to automate various tasks such as:

    • Dependency management

    • Compilation

    • Project versions management

    • Packaging (into JARs, Wheels, …​)

  • 1/5 points - The build should be fully replicable using simple commands (like mvn install, gradle build, or npm install)

  • 1/5 points - README file should provide clear documentation on how to build, test, and run the project.

  • 1/5 points - Build tool-specific configuration files should provide sufficient detail for an external reviewer, including metadata when relevant.

Project scope:
  • The project MUST have a non-trivial codebase (more than just a "Hello, World" app)

  • You are free to choose the technology (e.g., C/C++, Java, Python, JavaScript, BrainFuck, whatever)

  • It MUST have dependencies to external libraries

  • It MAY be solving a need you have for another lecture (ex. TFSD, Web Programming, Data Interoperability, ProTech, Projet Indus, …​)

  • It MAY be the same existing open-source project as for the Lecture 3, that you fork and improve its build automation configuration (ex. migrate from Maven to Gradle and improve or add build tool usages)

  • You MUST host the project on GitHub or Gitlab. You MUST submit the link to the repository, it MUST be accessible to the professor. Note that your contribution is mostly assessed based on the commit messages and contents

  • You CANNOT work on the same project as another student (NOTE: if two students work on the same multi-component project such as for the Web Programming course, each student can work and leverage one of the modules)

Note that the TODOs for Lecture 5 and Lecture 6 will request you to improve this project with:
  • Testing automation (TODO for Lecture 5)

  • Automatic code quality checks / linting (TODO for Lecture 5. Ex, Gradle lint for Java, ESLint for JavaScript, Ruff for python, …​)

  • Automatic technical documentation generation (TODO for Lecture 6. Ex, Javadoc for Java, JSDoc/ESDoc for JavaScript, sphinx for python, …​)

  • Canonical README file and documentation (TODO for Lecture 6)