INF2050
Bienvenue dans INF-2050, Outils et pratiques de développement logiciel
Objectifs d'apprentissage
Dans ce cours, vous apprendrez à respecter les directives modernes de développement logiciel qui prédisent le succès des projets. Vous apprendrez à configurer et à utiliser des outils qui garantissent une base de code propre et fiable, et vous gagnerez de l'expérience pratique sur la manière de développer avec style en équipe de développement logiciel.
Success
C'est l'un des cours les plus précieux pour garantir une entrée fluide sur le marché du travail technologique.
Prérequis
Vous ne pouvez participer à ce cours que si vous avez assisté et réussi les deux cours suivants :
- INF1070, Utilisation et administration des systèmes informatiques
- INF1070 couvre les bases du réseautage, de la sécurité, de la configuration logicielle et des protocoles réseau, qui sont tous requis pour INF2050.
- INF1120, Programmation I
- Vous programmerez en équipe d’étudiants ; votre contribution individuelle et la qualité de votre code constitueront des critères d’évaluation principaux. Une maîtrise de base de Java est requise pour INF2050.
Warning
Il est impossible d’acquérir les prérequis pendant que vous suivez INF2050. Vous n’aurez pas le temps de revoir les bases en profondeur tout au long de ce cours. À moins d’avoir déjà réussi les prérequis, vous ne pouvez pas suivre INF2050.
Des cours utiles, mais non obligatoires, sont :
- INF3135, Construction et maintenance de logiciels
- INF5151, Génie logiciel : analyse et modélisation
- INF5153, Génie logiciel : conception
Engagement
Ce cours nécessite un travail pratique hebdomadaire et une contribution extracurriculaire à un projet de groupe.
Vous devrez :
- Assister à tous les cours
- Venir préparé / faire les devoirs
- Assister à toutes les unités de laboratoire
- Contribuer régulièrement à votre projet de groupe
- Réussir l'examen
Apprentissage
Nous pouvons vous fournir les meilleures conditions possibles pour apprendre, mais nous ne pouvons pas apprendre à votre place.
Travail en groupe
- Une partie de votre évaluation portera sur votre contribution à un projet de groupe continu. La taille des équipes sera de 3 étudiants.
- Vous programmerez un jeu simple au tour par tour en Java, sous forme d’application en interface terminal.
- Il n’y aura aucune fonctionnalité réseau impliquée, et l’objectif de ce cours n’est pas le développement d’applications web.
- Il n’y aura pas d’interface graphique avancée dans ce cours, puisque l’objectif n’est pas la programmation d’interfaces graphiques (GUI).
- Vous recevrez une rétroaction sur la manière dont votre remise reflète les bonnes pratiques et les outils présentés en classe et exercés dans les séances de laboratoire.
- La note de rétroaction est « virtuelle », c’est-à-dire qu’elle ne compte pas dans votre note finale.
Cours et notes
Les cours seront un mélange de diapositives d'orientation incomplètes et de démonstrations de programmation en direct.
Notes
Il est de votre responsabilité de prendre des notes personnelles. Pas de crayon, pas de carrière.
Logiciels
Vous aurez besoin des logiciels suivants pour participer aux travaux pratiques.
Warning
Les ordinateurs de laboratoire officiels ont tous les logiciels requis installés, mais si vous souhaitez utiliser votre propre ordinateur, il est de votre responsabilité de vous assurer que tous les logiciels sont installés avant de participer aux unités de laboratoire :
Liste :
- Java, JDK-23, version Oracle
- Testez l’installation de votre VM avec
java -version. Vous devez utiliser la version 23. - Testez l’installation de votre compilateur avec
javac HelloWorld.java.
- Testez l’installation de votre VM avec
- Maven
- Testez l’installation de Maven avec
mvn -version. La sortie doit afficher l’emplacement du répertoire Maven (maven home).
- Testez l’installation de Maven avec
Utiliser SdkMan
SdkMan (SDK Manager) est la façon la plus simple d’installer Java et Maven. Utilisez-le : sdkman.io
- Git
- Testez l’installation de Git avec
git init.
- Testez l’installation de Git avec
- IntelliJ Ultimate
- Demandez une licence éducative gratuite ; vous devez utiliser la version Ultimate pour ce cours.
Évitez Windows
Si vous utilisez un ordinateur Windows, je vous recommande fortement d'installer Linux pour ce cours. Vous allez travailler beaucoup avec des commandes UNIX, et l'expérience d'apprentissage sera bien plus facile sur un système de type UNIX (Mac OS / Linux).
Critères d'évaluation
Comme spécifié dans le plan de cours.
Examens
Les examens auront lieu en présentiel pendant la plage horaire prévue. Aucun document ni appareil électronique n’est autorisé pendant l’examen, à l’exception d’une feuille de papier manuscrite de format lettre US (recto verso).
- Intra : 1er mars
- Final : 3 mai
Absence à l'examen
- Repasser un examen en raison d'une absence n'est autorisé que dans des cas exceptionnels, et doit être bien justifié.
- Les raisons acceptables sont par exemple : décès d'un membre de la famille, hospitalisation, accident, etc...
- Pour plus d'informations, consultez les directives du département.
Réussite
- Vous devez obtenir au moins 60 % aux examens (total combiné).
- Il n’y a aucun autre critère d’évaluation ; il n’est pas possible d’obtenir des points supplémentaires après la correction.
Équipe pédagogique
- Enseignant : Max
- Responsable du cours / auteur du matériel de cours : Max
- Auxiliaires d’enseignement (chargés de laboratoire) :
Communication
Veuillez respecter les règles de nétiquette suivantes pour les communications (vous êtes nombreux, nous sommes peu nombreux).
Matériel de cours
- Si vous avez des questions concernant le matériel de cours, veuillez ne pas m’envoyer de courriel ni de message direct — publiez plutôt sur le canal Mattermost.
- Le canal est accessible uniquement sur invitation — veuillez suivre les instructions (reçues par courriel) pour rejoindre le canal.
- Notez que le canal applique des règles de communication strictes et leur non-respect peut mener à votre exclusion du canal.
Notes
- Vous pouvez me contacter par message direct (courriel / Mattermost) si vous constatez une erreur formelle de correction.
- Exemples :
- Une erreur de calcul, c’est-à-dire que les points sur votre copie d’examen ne totalisent pas correctement.
- Vous avez participé à l’examen, remis une copie, mais n’avez pas reçu de note.
Quand ne pas contacter le professeur
- Les critères de correction ne sont pas négociables :
- Je ne peux pas modifier votre note en fonction de votre souhait ou de votre besoin d’obtenir une meilleure note :
- "Je vais échouer ce cours si vous ne me donnez pas des points supplémentaires."
- "Il me manque seulement X points pour obtenir une meilleure note."
- "Je vais perdre ma bourse si vous ne me donnez pas des points supplémentaires."
- Je ne peux pas modifier votre note en fonction de vos efforts :
- "J’ai consacré X heures de travail et je suis déçu de ma note."
- Je ne peux pas modifier les critères de correction :
- "Si vous changiez les critères de correction de y à z, j’obtiendrais une meilleure note."
- Je ne peux pas modifier votre note en fonction de votre souhait ou de votre besoin d’obtenir une meilleure note :
Vérifiez à deux fois avant de me contacter
Je ne peux pas modifier votre note ni les critères de correction en fonction de vos efforts, de vos souhaits ou de vos besoins.
Mentorat
- Le département d’informatique offre un service de mentorat gratuit, principalement destiné aux étudiants du baccalauréat en informatique.
- Le programme de mentorat vise principalement les cours de début de parcours : INF1070, INF1120, INF1132, INF2120 et INF2171.
- Selon les compétences des mentors, un soutien pour d’autres cours, y compris celui-ci, peut être offert.
- Pour plus d’information, consultez https://info.uqam.ca/aide
Utilisation des outils d’IA générative
L’utilisation d’outils d’IA générative dans les remises évaluées (code, rapports, examens) est strictement et formellement interdite. Divers outils de détection seront utilisés.
Toute détection d’un outil d’IA générative est considérée comme une tentative de plagiat.
Matériel
Ce cours est fortement axé sur la pratique, c’est-à-dire qu’il y aura des exemples de codage en direct à chaque séance.
Avertissement
Les séances de codage en direct sont de simples démonstrations, vous permettant de découvrir des possibilités conceptuelles. Il est absolument essentiel que vous acquériez une maîtrise pratique des concepts vus en classe en assistant aux laboratoires et en réalisant les exercices.
Pas de diapositives
Il n’y aura pas de diapositives pour ce cours. Toute l’information est communiquée via ce site web.
- La présence en classe n’est pas facultative.
- De nombreuses informations et exemples illustratifs seront présentés exclusivement en classe.
- Il vous revient de déterminer ce qui est pertinent et de prendre des notes supplémentaires.
Version PDF
Vous pouvez télécharger le matériel de cours sous forme de livre PDF via ce lien.
Note : le lien est actuellement en maintenance ; il existe des problèmes de rendu des diagrammes dans la version PDF.
Vérifiez régulièrement les mises à jour
Par nature, la version PDF est un instantané statique et ne se mettra pas automatiquement à jour sur votre machine lorsque de nouveaux contenus ou des corrections sont ajoutés à la version web. Il est de votre responsabilité de vérifier régulièrement que vous travaillez avec la version la plus récente.
Trouver le contenu
- Dans ce cours, vous devez abstraire et combiner des connaissances provenant de différentes unités de cours.
- Afin de faciliter la recherche d’exemples et de définitions, cette page est entièrement indexée.
Utilisez la fonction de recherche
Utilisez la fonction de recherche en haut à droite pour naviguer rapidement dans le matériel de cours.
Jeu
- Tout au long de vos TPs, vous implémenterez le jeu de cartes Skyjo (et plus tard certaines extensions).
- Skyjo est un jeu de cartes court et amusant, mais dont les mécanismes sont suffisamment complexes pour permettre un travail sérieux de modélisation et de conception logicielle.
- La meilleure préparation au codage (ou à la conception) de tout projet logiciel est la compréhension des exigences ; je vous invite donc à jouer régulièrement au jeu avec les membres de votre équipe.
Deux exemplaires du jeu peuvent être empruntés temporairement à mon bureau.
Les règles sont disponibles en PDF, ici.
Règles de base
- Skyjo est un jeu de cartes, avec un paquet de cartes allant de
-2à12.- Les cartes ne sont pas uniques : il y a plusieurs
-2, plusieurs-1, etc. - Les nombres sur une carte correspondent au nombre de points qu’elle vaut.
- Les cartes ne sont pas uniques : il y a plusieurs
- L’objectif pour gagner à Skyjo est de marquer le moins de points possible.
- Après chaque manche, les points sont ajoutés au total de chaque joueur.
- Le jeu est répété autant de manches que nécessaire jusqu’à ce qu’un joueur dépasse 100 points.
- Le gagnant est le joueur ayant le moins de points à la fin de la partie.
Manches de Skyjo
-
Le jeu comporte deux piles :
- Une pile de cartes cachées
- Une pile de défausse (ouverte)
-
Chaque joueur commence avec une matrice de cartes de
4 x 3:

-
Au fil de leurs tours, chaque joueur révèle ou remplace progressivement ses cartes :

-
La manche se termine lorsque le premier joueur a révélé toutes ses cartes. Chaque joueur compte alors son total en additionnant ses cartes révélées :

Crédit images : BoardGamesGeek.com
Une petite subtilité
Si le joueur qui met fin à une manche n’a pas le score le plus bas, son total est doublé (en pénalité).
Tours de Skyjo
- Évidemment, le jeu serait plutôt ennuyeux si la seule action possible était de révéler une carte.
- Lorsqu’un joueur joue son tour, il peut choisir exactement une des deux actions suivantes :
- Prendre la carte du dessus de la défausse : le joueur remplace l’une de ses cartes (qu’elle soit révélée ou cachée) par la carte prise sur la pile de défausse. Il n’est pas autorisé à regarder sous les cartes cachées avant de faire son choix. La carte remplacée est placée publiquement sur la pile de défausse.
- Prendre la carte du dessus de la pile cachée : le joueur révèle la nouvelle carte, puis décide si…
- …il rejette la carte : la carte est placée sur la pile de défausse, mais le joueur doit révéler l’une de ses cartes cachées restantes.
- …il accepte la carte : il remplace l’une de ses cartes, selon le même mécanisme que s’il avait pris une carte de la pile de défausse.
Action spéciale
Il existe une règle spéciale qui peut s’appliquer à la fin de chaque tour : si un joueur possède trois cartes identiques dans une même colonne, il peut éliminer complètement cette colonne.
- Cette action est optionnelle et ne compte pas comme une action dédiée.
- Ensuite, le joueur a une colonne de moins.
Techniquement, l’action spéciale peut être déclenchée de manière répétée, pouvant mener à une matrice entièrement vide.
Récapitulatif du compilateur Java
Dans le reste de ce premier cours, nous récapitulons les concepts de base du langage de programmation Java, notamment le chemin allant du code source à une exécution réussie du programme.
Exécution du code
Il existe deux façons d'exécuter du code. Le chemin emprunté dépend du langage de programmation.
- En utilisant un interpréteur : L'ordinateur essaie de comprendre votre code source, au fur et à mesure qu'il le
traite, ligne par ligne. Exemples :
- Python
- Bash
- Javascript
- En utilisant un compilateur : L'ordinateur ne comprend pas votre code source, mais s'attend à ce que vous le
traduisiez d'abord en bytecode, en utilisant un compilateur. Exemples :
- Basic
- C/C++
- Java ???
À propos des binaires
En général, le code compilé est lié à une plateforme cible spécifique. Autrement dit, une fois qu'un compilateur a traduit le code source en bytecode, le résultat ne peut être utilisé que sur un matériel spécifique.
Langages interprétés VS compilés
Alors, lequel est le mieux ?
- Langages interprétés :
- Compatibilité multiplateforme
- Développement légèrement plus rapide, pas besoin d'attendre le compilateur
- Syntaxe souvent "plus facile", conviviale pour les débutants
- Langages compilés :
- Plus performant : optimisations du compilateur pour la plateforme cible, exécuté en code natif
- Plus sûr : Moins d'erreurs d'exécution, plus d'erreurs de compilation
Notez qu'un compilateur n'a besoin de faire son travail qu'une seule fois, contre un interpréteur qui doit s'exécuter chaque fois qu'un programme est exécuté.
Et qu'en est-il de Java ?
Java est un cas particulier...
- Java est un langage compilé
- Le bytecode Java fonctionne sur toutes les plateformes, car il est interprété par une machine virtuelle, la JVM.
- Java réunit certains avantages des deux :
- Compatibilité multiplateforme
- Optimisations de compilateur performantes pour la VM
- Sécurité grâce aux vérifications du compilateur
Illustration du compilateur Java
Étape 1 : Écrire du code Java
Un développeur humain écrit du code Java lisible par l'homme :
class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
Étape 2 : Compiler en bytecode Java
Le compilateur Java est appelé : javac HelloWorld.java et produit du bytecode :
CAFE BABE 0000 0042 001D 0A00 0200 0307 0004 0C00 0500 0601 0010 6A61 7661
2F6C 616E 672F 4F62 6A65 6374 0100 063C 696E 6974 3E01 0003 2829 5609 0008
0009 0700 0A0C 000B 000C 0100 106A 6176 612F 6C61 6E67 2F53 7973 7465 6D01
0003 6F75 7401 0015 4C6A 6176 612F 696F 2F50 7269 6E74 5374 7265 616D 3B08
000E 0100 0D48 656C 6C6F 2C20 576F 726C 6421 0A00 1000 1107 0012 0C00 1300
1401 0013 6A61 7661 2F69 6F2F 5072 696E 7453 7472 6561 6D01 0007 7072 696E
746C 6E01 0015 284C 6A61 7661 2F6C 616E 672F 5374 7269 6E67 3B29 5607 0016
0100 0A48 656C 6C6F 576F 726C 6401 0004 436F 6465 0100 0F4C 696E 654E 756D
6265 7254 6162 6C65 0100 046D 6169 6E01 0016 285B 4C6A 6176 612F 6C61 6E67
2F53 7472 696E 673B 2956 0100 0A53 6F75 7263 6546 696C 6501 000F 4865 6C6C
6F57 6F72 6C64 2E6A 6176 6100 2000 1500 0200 0000 0000 0200 0000 0500 0600
0100 1700 0000 1D00 0100 0100 0000 052A B700 01B1 0000 0001 0018 0000 0006
0001 0000 0001 0009 0019 001A 0001 0017 0000 0025 0002 0001 0000 0009 B200
0712 0DB6 000F B100 0000 0100 1800 0000 0A00 0200 0000 0300 0800 0400 0100
1B00 0000 0200 1C
(Hex dump produit avec : xxd -u -p HelloWorld.class | sed 's/..../& /g')
Voyez-vous quelque chose d'inhabituel ?
Le dump hex du bytecode Java montre que chaque classe compilée commence par CAFEBABE. Il semble que ce soit un œuf de Pâques ajouté par les développeurs Java.
Étape 3 : Exécuter le bytecode sur la JVM
Enfin, le bytecode est distribué aux différents systèmes cibles.
- Notez que tout système a besoin d'une JVM pour exécuter le bytecode Java.
- Les autres langages compilés n'ont pas cette exigence, car ils produisent directement du code exécutable par le CPU.
Comment la JVM est-elle le mieux décrite ?
La JVM est un interpréteur. Elle lit le bytecode Java et envoie immédiatement des instructions d'exécution au système hôte dans le langage machine natif du CPU.