CAS Développement Logiciel 101: méthodologies et outils 2020

Les compétences conceptuelles et transversales attendues d’un développeur sont un aspect clé de notre programme. Nous présentons les méthodologies de développement, ainsi que 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

11 janvier 2020 - 14 novembre 2020
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

Délai d'inscription

19 décembre 2019
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 et proposer des solutions adéquates
  • Concevoir et communiquer avec différents interlocuteurs 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, chef de projet, consultant travaillant dans des entreprises, administrations, organisations internationales, associations ou sociétés de service

Compétences visées

Les compétences attendues d’un développeur 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 développeur logiciel travaille dans le cadre d’une équipe, ou en tant que chef de projet ou consultant. Il doit ainsi pouvoir développer des capacités relationnelles avec différents interlocuteurs 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
Les cours permettent d'assimiler, les connaissances fondamentales des outils et des méthodologies du développement logiciel, et de comprendre le fonctionnement de celles-ci. Les travaux pratiques permettent d'acquérir les compétences techniques nécessaires à la mise en application rapide des concepts vus en formation. Les discussions pendant les cours permettent aux participants d'apporter leurs expériences personnelles. La réalisation d'un projet annuel permet de mettre en pratique les différents sujets abordés.

Description

  • Software Craftmanship

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

Prix

700 CHF

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

Prix

1250 CHF

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. Ce cours fait parti des sessions en un jour ouvert aux personnes extérieures au CAS (450CHF).

  • 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. 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 lieux à évaluation.

Prix

390 CHF

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 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. Ce cours fait parti des sessions en un jour ouvert aux personnes extérieures au CAS (400CHF).

  • Maven
  • Nexus / Artifactory - Bintray

Prix

700 CHF

Description

  • Rappel de développement web
  • Sécurité : Ce cours fait parti des sessions en un jour ouvert aux personnes extérieures au CAS (400CHF).

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 que de la scalabilitée des plateformes L’évaluation se base sur le design mis en oeuvre dans le projet final.

 

Prix

870 CHF

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

Prix

540 CHF

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 lieux à évaluation.

  • Clean code : Ce cours fait parti des sessions en un jour ouvert aux personnes extérieures au CAS (400CHF).

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 œuvre de ces pratique sera évalué à travers une analyse du code du projet final.

Prix

1030 CHF

Description

  • 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 fait parti des sessions en un jour ouvert aux personnes extérieures au CAS (400CHF).

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.

Date(s)

18 janvier 2020

Prix

400 CHF

Intervenants

Nicolas Fränkel

Description

Ce cours permet d'appréhender la raison d'être d'un 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.

Date(s)

28 mars 2020

Prix

400 CHF

Intervenants

Mattia Gustarini (Mobile Thinking SARL)

Description

Ce cours présente les principe de design et d'exécution énoncé par Robert Martin dans le livre Clean Code - 2008

Date(s)

25 avril 2020

Prix

450 CHF

Intervenants

Dr. Laurent Moccozet (MER) & Prof. Jean-Henry Morin

Description

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.

Date(s)

19 septembre 2020

Prix

400 CHF

Intervenants

Philippe Monteiro

Description

Revue des vulnérabilités OWASP20

Date(s)

10 octobre 2020

Prix

400 CHF

Intervenants

Nicolas Fränkel

Description

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.

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 participants

max. 15 participants.

Horaires d'enseignement

Les samedis matin 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. Philippe Monteiro - Ingénieur logiciel (LinkedIn)

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

Les termes utilisés pour désigner des personnes sont pris au sens générique; ils ont à la fois la valeur d'un masculin et d'un féminin.