CAS Développement logiciel 101: méthodologies et outils 2023
Informations
Période
Se renseignerLangue
FrançaisFormat
En présence et à distanceInscriptions
Finance d'inscription:
CHF 6000.-
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
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
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
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
Horaires d'enseignement
Les jeudis et quatre mercredis de 17h00 à 21h30 hors vacances scolaires genevoises
Remarques
Pré-requis: Connaissance du langage Java
- Prof. Gilles Falquet - Professeur Associé (cui.unige.ch/~falquet)
- Prof. Jean-Henri Morin - Professeur Associé (jhmorin.wordpress.com)
- Dr. Laurent Moccozet - Maitre Enseignement et de Recherche (ResearchGate)
- Mme Sonia Perotte - Chargée de cours à la HEG et à l’EHB de Lausanne et cheffe de projet chez Oxial (LinkedIn)
- M. Nicolas Frankel - Architecte logiciel (http://frankel.ch)
- M. Guillaume Jambet - Développeur de platforme chez SonarSource et enseignant à l’Université de Savoie (France) (LinkedIn)
- M. Philippe Monteiro - Ingénieur logiciel (LinkedIn)