CAS Développement logiciel 101: méthodologies et outils 2023

Les compétences conceptuelles et transversales attendues d’un-e développeur/euse sont un aspect clé de ce CAS. Nous présentons les méthodologies de développement et le cycle de vie d’un logiciel. Nous fournissons les outils et les méthodes pour créer un code propre, testé et de qualité.

Informations

Période

Se renseigner
12 Crédits ECTS
156 Heures enseignement en présence

Langue

Français

Format

En présence et à distance

Renseignements

Alexandre DE MASI
+41 (0)22 379 01 92
cas-devlog(at)unige.ch

Inscriptions

Se renseigner
Inscriptions par module possible

Finance d'inscription:

CHF 6000.-

Contribution aux ODD

Objectif 4 : Assurer l’accès de tous à une éducation de qualité, sur un pied d’égalité, et promouvoir les possibilités d’apprentissage tout au long de la vie Objectif 5 : Parvenir à l’égalité des sexes et autonomiser toutes les femmes et les filles Objectif 8 : Promouvoir une croissance économique soutenue, partagée et durable, le plein emploi productif et un travail décent pour tous Objectif 9 : Bâtir une infrastructure résiliente, promouvoir une industrialisation durable qui profite à tous et encourager l’innovation Objectif 12 : Établir des modes de consommation et de production durables Objectif 17: Renforcer les moyens de mettre en oeuvre le Partenariat mondial pour le développement durable et le revitaliser

Objectifs

  • Proposer une vision globale et interdisciplinaire sur le développement logiciel
  • Mettre à jour et approfondir des compétences permettant le développement et la maintenance d’applications informatiques en s’adaptant aux évolutions technologiques
  • Produire un code et un projet de qualité en suivant les différents aspects de construction du développement logiciel comme décrits dans chacun des modules
  • Comprendre les enjeux du projet inhérents aux aspects métiers de l’utilisateur/trice et proposer des solutions adéquates
  • Concevoir et communiquer avec différent-es interlocuteurs/trices tout au long du projet
  • Mener une réflexion critique sur son propre projet au vu des compétences acquises pendant la formation 

Public

Développeur/euse, chef-fe de projet, consultant-e travaillant dans des entreprises, administrations, organisations internationales, associations ou sociétés de service

Compétences visées

Les compétences attendues d’un-e développeur/euse ne sont pas seulement techniques, comme on le conçoit en général, mais aussi conceptuelles et transversales (soft skills) et s’inscrivent dans le développement d’un produit et d’un projet de qualité. Le/la développeur/euse logiciel travaille dans le cadre d’une équipe, ou en tant que chef-fe de projet ou consultant-e. Il/elle doit ainsi pouvoir développer des capacités relationnelles avec différent-es interlocuteurs/trices pour mener à bien le projet ou le mandat.

Programme

8 modules

  • Introduction
  • Le cycle de vie du logiciel: Gestion de projets Agile, maintenance, durabilité, etc.
  • Les méthodologies de développements: Extreme programming, design patterns, design thinking, langages de spécification, etc.
  • Les questions éthiques: Responsabilité numérique, protection des données, cadres légaux, etc.
  • Les outils de développement: Versionning, virtualisation, outils de composition, injection de dépendances, MVC frameworks, etc.
  • L’architecture web et les performances liées: Rappel de développement web, sécurité (OWASP), etc.
  • Les tests: Tests unitaires, tests d’intégrations, etc.
  • La pratique du code propre: Refactoring, analyse de code, etc.

Direction

Prof. Jean-Henry MORIN, Prof. Gilles FALQUET, Prof. Didier BUCHS et Dr Laurent MOCCOZET, Centre universitaire d'informatique (CUI), Université de Genève

Coordination

Alexandre DE MASI, Université de Genève

Description

  • Software Craftmanship

Le métier de développeur/euse. Ce cours présente le manifeste du Software Craftsmanship. Il fixe le cadre et l'esprit qui anime le/la développeur/euse de métier. Il ne donne pas lieu à une évaluation.

Description

  • Cycle de vie du développement logiciel

Cycle en cascade, en V, incrémental/en spirale, itératif/Agile (lien avec scrum et xp) Contenu: Historiques et évolutions des cycles de vie, Avantages et limites de chaque cycle

  • Scrum et critique de scrum (scrum vs..)

Méthode Agile de gestion de projet Contenu : présentation de la méthode, du déroulement, des rôles et des documents, mise en situation (logo4scrum)

  • Extrem Programing

Ce cours présente les buts, principes, valeurs et pratiques de la méthodologie agile la plus avancées de développement logiciel. Il ne donne pas lieux à évaluation.

  • Forfait / Régie (société de service)

Deux types de contrats formalisent la collaboration entre une société de services informatiques (SSII) et une entreprise Contenu : Définition, avantages et inconvénients, domaines d'utilisation

Description

  • Design thinking

Présentation de la méthodologie et de ses différentes étapes; Le DT pour le développement: son intérêt et ses apports; présentation de techniques et d'outils; exercice et mise en pratique

  • UML the good parts

Ce cours présente la notion de modèle ainsi que les diagrammes d’interaction et d’etat, il vise à établir un langage commun entre les développeurs/euses. L’évaluation est une utilisation approprié de la nomenclature UML dans le dossier de conception accompagnant le projet final.

  • Pattern (GRASP) & Bonnes pratiques d'attribution des responsabilités

Ce cours présente la notion de pattern ainsi que les patterns d’attribution de responsabilité tel que décrit par Craig Larman dans son livre “Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development” L’évaluation se base sur le design mis en oeuvre dans le projet final.

  • Spécification

Par exemple la programmation par contrat de B. Meyer

  • Architecture logicielle

Ce cours présente les différentes composant d’une architecture logiciels et explique la tendance actuelle pour les micro services. Il ne donne pas lieu à évaluation.

Description

  • Codes de Conduite, éthique, responsabilité numérique, les dimensions de la conception
  • Cadres légaux, Protection des Données, GDPR, Reglementations

Description

  • Versionning

Ce cours permet d'appréhender la raison d'être d'un-e Gestionnaire de Contrôle de Sources et d'en expliquer les fonctionnalités basiques. Après une explication sur les CVS legacy et les CVS distribués, nous aborderons le DCVS le plus répandu actuellement Git, et ses fonctionnalités. Finalement, nous décrirons deux manières diamétralement opposées pour travailler avec Git, en détaillant leur avantages respectifs.

  • Maven
  • Infrastructure as code (automatisation)

Défis posés par l'infrastructure, Servers as pets or cattles, Virtualisation, VMWare, VirtualBox, Vagrant, Puppet ou Chef ou Ansible 

  • Nexus/Artifactory - bintray

A partir de l'expérience personnelle - et véridique - de l'enseignant, nous verrons en quoi la gestion de packages (quel que soit l'écosystème) est nécessaire à un développement industriel. Puis, nous nous pencherons sur quelques uns de ces écosystèmes, ainsi que leur manière de gérer ces packages. Nous détaillerons plus particulièrement la gestion des packages sous Maven et comment les utiliser. Enfin, nous concluerons en créant notre propre package et en le déployant sur le gestionnaire de packages Artifactory.

  • Inverison de controle, Injection de dépendances

Le couplage est au centre de la conception d'un logiciel évolutif. Toutefois, la réponse traditionnelle de création d'une interface ne résoud que partiellement le problème, puisqu'il faut toujours créer l'objet-dépendance. L'instanciation dans un "module" dédié permet de répondre de manière satisfaisante au problème. L'implémentation de ce module peut aller de la simple réalisation du pattern Factory, jusqu'à l'utilisation de ressources mises à niveau par le serveur d'applications. Une de ces implémentations est l'Injection de Dépendances. Elle peut être effectuée "manuellement", ou déléguée à une plateforme (Java EE CDI), à une librairie (Guice) ou à un framework (Spring).

  • Spring

Ce cours permet de s'approprier le framework Spring : nous commencerons par détailler différentes manière de configurer la fabrique de beans Spring. Nous continuerons en décrivant la notion de scope. Finalement, après un bref rappel des concepts web en Java EE, nous étudierons comment Spring MVC les implémente.

  • Spring Boot

Spring Boot est la dernière brique de la stack Spring. Dans ce cours, nous verrons que Spring Boot simplifie l'utilisation du framework en fournissant des beans par défaut - "convention over configuration". Puis nous décrirons par quel moyen Spring Boot y parvient.

  • Spring Sécurity

La sécurisation des applications Web comprend de multiples facettes. La plateforme Java EE est loin d'implémenter l'intégralité de celle-ci. Spring Security est non seulement complètement intégrée avec le framework MVC mais permet également d'améliorer la couverture de ces facettes.

Description

  • Rappel de développement web
  • Sécurité

Revue des vulnérabilités OWASP20

  • Architectures & Design for Performances

Ce cours présente l'évolution des architectures web et leurs impacte dans la recherche de performance tant du point de vue de l'expérience utilisateur/trice que de la scalabilitée des plateformes L’évaluation se base sur le design mis en oeuvre dans le projet final.

 

Description

  • Tests unitaires

Après un bref retour sur la notion de qualité logicielle, nous définirons le concept de test unitaire. Nous démontrerons que l'Injection de Dépendances (étudiée précédemment) permet le test unitaire. Puis, nous passerons en revue les différents "Tests Doubles" disponibles : Dummy, Mock, Stub et Fake. Seuls les tests automatisés étant réellement utiles, la prochaine étape sera d'utiliser un framework de test (TestNG), puis d'intégrer ce dernier dans notre outil de build.

  • Tests d’intégrations

Les tests unitaires ne sont pas suffisants pour garantir la qualité d'un logiciel. Si on peut les assimiler au test des écrous et des boulons d'un prototype de voiture, il est nécessaire d'assembler ce prototype et de l'emmener pour un galop d'essai avant de le manufacturer à échelle industrielle - il s'agit des tests d'intégration. Il peut également s'avérer nécessaire de tester une partie plus restreinte du système : c'est la notion de System Under Test. Bien que nécessaires, les tests d'intégration posent des problématiques spécifiques : lenteur, fragilité, complexité d'analyse en cas d'échec. Il s'agit de composer avec ces problématiques, pour en diminuer l'impact. Le cours se concluera par l'implémentation des tests d'intégration avec TestNG dans un build Maven.

  • Spring test

La gestion des tests unitaires et des tests d'intégration d'une application Spring (et Spring Boot) est facilitée par l'utilisation d'outils mis à disposition par le framework lui-même. Ce cours permet de les étudier et de les mettre en oeuvre.

  • TDD (Test Driven Development)

Ce cours présente comment les framework de Test peuvent nous aider à faire émerger Spécification et Design par une recherche permanente de l'efficience et de la confiance dans le code produit. Cette pratique ne donne pas lieu à évaluation.

  • Jenkins

Description

  • Refactoring

Ce cours présente ‘activitée de refactoring il s'appuie fortement sur les outils de manipulation ou d’analyse de code ainsi que sur les techniques décrites par Martin Fowler dans le livre Refactoring: Improving the Design of Existing Code - 1999. Il ne donne pas lieu à une évaluation.

  • Clean code 

Ce cours présente les principe de design et d'exécution énoncé par Robert Martin dans le livre Clean Code - 2008. La mise en oeuvre de ces pratique sera évalué à travers une analyse du code du projet final.

Evaluation

Travail de fin d'année sous forme de deux projets complémentaires

Conditions d'admission

  • Connaissance du langage Java

Comité directeur

Prof. Gilles Falquet, Institut de Science de Service Informationnel, Faculté d'économie et de management, Université de Genève; Prof. Jean-Henry Morin, Institut de Science de Service Informationnel, Faculté des sciences de la société, Université de Genève; Dr. Laurent Moccozet, Institut de Science de Service Informationnel, Faculté d'économie et de management, Université de Genève; Prof. Didier Buchs, CUI, Université de Genève; 2 experts du terrain à nommer.


Nombre de participant-es

max. 15 participant-es.

Horaires d'enseignement

Les jeudis et quatre mercredis de 17h00 à 21h30 hors vacances scolaires genevoises

Remarques

Pré-requis: Connaissance du langage Java

Contribution aux ODD

Objectif 4 : Assurer l’accès de tous à une éducation de qualité, sur un pied d’égalité, et promouvoir les possibilités d’apprentissage tout au long de la vie Objectif 5 : Parvenir à l’égalité des sexes et autonomiser toutes les femmes et les filles Objectif 8 : Promouvoir une croissance économique soutenue, partagée et durable, le plein emploi productif et un travail décent pour tous Objectif 9 : Bâtir une infrastructure résiliente, promouvoir une industrialisation durable qui profite à tous et encourager l’innovation Objectif 12 : Établir des modes de consommation et de production durables Objectif 17: Renforcer les moyens de mettre en oeuvre le Partenariat mondial pour le développement durable et le revitaliser