Chapitre 1 : Introduction - UQAM
←
→
Transcription du contenu de la page
Si votre navigateur ne rend pas la page correctement, lisez s'il vous plaît le contenu de la page ci-dessous
Chapitre 1 : Introduction Alexandre Blondin Massé Département d’informatique Université du Québec à Montréal 1er mai 2018 Construction et maintenance de logiciels INF3135 A. Blondin Massé (UQAM) 1er mai 2018 1 / 53
Table des matières 1. Présentation du cours 2. Environnement Unix 3. Environnements de développement 4. Le format Markdown 5. Le logiciel Git 6. Le langage C 7. Makefiles A. Blondin Massé (UQAM) 1er mai 2018 2 / 53
Table des matières 1. Présentation du cours 2. Environnement Unix 3. Environnements de développement 4. Le format Markdown 5. Le logiciel Git 6. Le langage C 7. Makefiles A. Blondin Massé (UQAM) 1er mai 2018 3 / 53
Informations générales Trimestre Été 2018 Titre du cours Construction et maintenance de logiciels Sigle INF3135 Horaire Mardi, de 17h30 à 21h00 Département Informatique Enseignant Alexandre Blondin Massé, professeur Coordonnateur Alexandre Blondin Massé, professeur Bureau PK-4525 Téléphone 5516 Courriel blondin_masse.alexandre@uqam.ca Page web http://lacim.uqam.ca/˜blondin A. Blondin Massé (UQAM) 1er mai 2018 4 / 53
Description du cours (1/3) I Initier les étudiants à la programmation à l’aide d’un langage impératif et procédural. I Familiariser les étudiants à la construction professionnelle de logiciels et à leur maintenance. I Notions de base de la programmation procédurale et impérative en langage C sous environnement Unix/Linux (définition et déclaration, portée et durée de vie, fichier d’interface, stuctures de contrôle, unités de programme et passage des paramètres, macros, compilation conditionnelle). A. Blondin Massé (UQAM) 1er mai 2018 5 / 53
Description du cours (2/3) I Décomposition en modules et caractéristiques facilitant les modifications (cohésion et couplage, encapsulation et dissimulation de l’information, décomposition fonctionnelle). I Style de programmation (conventions, documentation interne, gabarits). I Déboggage de programmes (erreurs typiques, traces, outils, par ex., gdb). I Assertions et conception par contrats. I Tests (unitaires, intégration, d’acceptation, boı̂te noire vs. boı̂te blanche, mesures de couverture, outils d’exécution automatique des tests, par exemple, xUnit, scripts). A. Blondin Massé (UQAM) 1er mai 2018 6 / 53
Description du cours (3/3) I Évaluation et amélioration des performances (profils d’exécution, améliorations asymptotiques vs. optimisations, outils). I Techniques et outils de base pour la gestion de la configuration (par exemple, make, cvs). I Introduction à la maintenance de logiciels (types de maintenance, techniques de base, par exemple, remodelage, automatisation des tests de régression). A. Blondin Massé (UQAM) 1er mai 2018 7 / 53
Modalités d’évaluation I Trois examenss : I Un premier test [10%] (1 heure); I Un deuxième test [10%] (1 heure); I Un examen final [30%] (3 heures); I Trois travaux pratiques : I TP1 : initiation à C [15%] (seul); I TP2 : maintenance d’un logiciel [15%] (seul); I TP3 : construction d’un logiciel [20%] (en équipe); I Retard, absence et plagiat : voir le plan de cours http://syllabus.uqam.ca/files/1524859301_ 2018_Ete_INF3135.pdf. A. Blondin Massé (UQAM) 1er mai 2018 8 / 53
Références I Langage C : The C Programming Language, de Kernighan et Ritchie (disponible à la coop); I Git : Manuel d’utilisation; I Makefile : Documentation officielle; I Markdown : Documentation officielle et spécialisation pour GitLab; I StackOverflow, mais méfiez-vous... A. Blondin Massé (UQAM) 1er mai 2018 9 / 53
Table des matières 1. Présentation du cours 2. Environnement Unix 3. Environnements de développement 4. Le format Markdown 5. Le logiciel Git 6. Le langage C 7. Makefiles A. Blondin Massé (UQAM) 1er mai 2018 10 / 53
La console I Un outil essentiel pour le développeur est le terminal ou la console; I Le terminal agit comme intermédiaire entre les programmes d’un système d’exploitation Unix. A. Blondin Massé (UQAM) 1er mai 2018 11 / 53
Commandes agissant sur les fichiers I Résumé (cheatsheet) : https://ubuntudanmark.dk/filer/fwunixref.pdf I Commandes fréquentes : Commande Description ls Liste les fichiers dans un répertoire ls -als Liste plus détaillée cd Change de répertoire mkdir Crée un répertoire rm Supprime un fichier (irréversible) rm -rf Supprime un répertoire (récursivement) cp Copie un fichier cp -r Copie un dossier (récursivement) mv Renomme/déplace un fichier/répertoire A. Blondin Massé (UQAM) 1er mai 2018 12 / 53
Autres commandes de fichiers Commande Description find Trouve toutes les occurrences d’un fichier cat Affiche le contenu d’un fichier ou concatène plusieurs fichiers less Permet de parcourir le contenu d’un fichier head Affiche les premières lignes d’un fichier tail Affiche les dernières lignes d’un fichier pwd Affiche le répertoire courant touch Crée un fichier vide ou s’il existe, modifie sa date au moment présent A. Blondin Massé (UQAM) 1er mai 2018 13 / 53
Informations système Commande Description top Affiche les processus actifs kill Tue un processus (fin de tâche) chmod Change les permissions d’un fichier ou un dossier which Affiche le chemin d’une application grep Recherche une expression régulière date Affiche l’heure et la date A. Blondin Massé (UQAM) 1er mai 2018 14 / 53
Commandes réseau Commande Description ping Vérifie si un hôte est disponible whois Affiche de l’information sur un nom de domaine dig Affiche l’information DNS d’un nom de domaine wget Télécharge un fichier curl Télécharge un fichier A. Blondin Massé (UQAM) 1er mai 2018 15 / 53
Exemples d’utilisation I Tous les résultats de ces commandes peuvent être redirigés dans un fichier. Par exemple ls > contenu-repertoire.txt I touch est utile si on veut forcer une recompilation avec un Makefile par exemple. I Exemples classiques de changement de permissions : chmod 777 # rwx pour tous chmod 755 # rwx pour user, # rx pour groupe et tous I Utilisées en combinaison avec d’autres commandes, on peut écrire des scripts simples effectuant des tâches relativement complexes. A. Blondin Massé (UQAM) 1er mai 2018 16 / 53
Installation de logiciels I Un développeur doit très souvent installer des logiciels sur une machine; I Cela peut rapidement devenir complexe, surtout lorsque certains logiciels dépendent d’autres logiciels, en particulier dans les systèmes Unix; I Heureusement, il existe un type de programme appelé gestionnaire de paquets (en anglais, package manager ), qui facilite le processus : I Linux : Aptitude, Pacman, etc.; I MacOS : MacPorts et Homebrew; I Windows : Linux Subsystem, avec un gestionnaire semblable à Aptitude, mais limité... A. Blondin Massé (UQAM) 1er mai 2018 17 / 53
Système Unix I Il vous sera difficile de travailler efficacement dans ce cours si vous n’installez pas un système Unix sur votre machine personnelle; I Les utilisateurs de Mac OS pourront utiliser leur machine telle quelle. I Pour les utilisateurs de Windows, il y a deux solutions possibles : I [Recommandé] Installer un système Linux en partition double ou comme unique système (Ubuntu ou Mint); I [Moins recommandé] Installer une machine virtuelle. I [Insuffisant] La version actuelle de Linux Subsystem suffira pour le TP1, mais pas pour les deux autres. A. Blondin Massé (UQAM) 1er mai 2018 18 / 53
Table des matières 1. Présentation du cours 2. Environnement Unix 3. Environnements de développement 4. Le format Markdown 5. Le logiciel Git 6. Le langage C 7. Makefiles A. Blondin Massé (UQAM) 1er mai 2018 19 / 53
Environnements de développement I L’outil de base d’un programmeur est son environnement de développement; I En anglais, integrated development environment (IDE); I Quelques exemples : I Pourtant, de nombreux programmeurs avancés préfèrent un simple éditeur de texte. Pourquoi ? I Autre référence intéressante : Unix comme EDD. A. Blondin Massé (UQAM) 1er mai 2018 20 / 53
Éditeurs de texte (1/2) L’offre d’éditeurs de texte est très variée : I Notepad/Notepad++ (Windows); I TextEdit (MacOS); I Gedit (Linux); I SublimeText (multiplateforme); I Visual Studio Code (multiplateforme); I Emacs et ses dérivés (multiplateforme); I Vi/Vim et ses dérivés (multiplateforme). A. Blondin Massé (UQAM) 1er mai 2018 21 / 53
Éditeurs de texte (2/2) I Dans le cours, l’éditeur préféré sera Vim, mais vous êtes libre d’utiliser celui de votre choix. I Par contre, vous devez connaı̂tre la base de Vim pour bien utiliser Git qui gère bien les dialogues lors d’opérations plus complexes; I N’utilisez pas les éditeurs installés par défaut : I Windows : Notepad; I Mac OS : TextEdit. I Dans tous les cas, assurez-vous que vos fichier sont enregistrés au format UTF8; I Tout fichier ayant un problème d’encodage sera considéré comme non valide. A. Blondin Massé (UQAM) 1er mai 2018 22 / 53
Vim I Un des plus anciens éditeurs de texte; I En 2009, un sondage le plaçait comme l’éditeur de texte le plus utilisé; I Son ancêtre, vi, a été créé par Bill Joy en 1976; I Le nom Vim vient de Vi iMproved; I Supporté sur toutes les plateformes habituelles (Linux, MacOS, Windows). A. Blondin Massé (UQAM) 1er mai 2018 23 / 53
Avantages/inconvénients I Avantages : I Très mature; I Interaction directe avec le terminal; I Installé par défaut sur toutes les plateformes Unix; I Extrêmement rapide, en particulier pour la programmation à distance; I Hautement configurable, etc. I Inconvénients : I Orienté seulement clavier (certains dérivés, comme GVim permettent une utilisation limitée de la souris); I Courbe d’apprentissage difficile pour les débutants. A. Blondin Massé (UQAM) 1er mai 2018 24 / 53
Configuration I Il est essentiel de configurer Vim (fichier .vimrc dans les anciennes versions, .vim/vimrc dans les plus récentes) : A. Blondin Massé (UQAM) 1er mai 2018 25 / 53
Table des matières 1. Présentation du cours 2. Environnement Unix 3. Environnements de développement 4. Le format Markdown 5. Le logiciel Git 6. Le langage C 7. Makefiles A. Blondin Massé (UQAM) 1er mai 2018 26 / 53
Langage de balisage léger I C’est un format texte utilisant certains caractères spéciaux pour le structurer; I Ces formats sont très pratiques pour rédiger de la documentation d’un programme ou d’un système; I Quelques formats populaires : I Markdown; I ReStructuredText; I Asciidoc, etc.; A. Blondin Massé (UQAM) 1er mai 2018 27 / 53
Markdown I Les fichiers Markdown portent généralement l’extension .md ou .markdown; I Ils peuvent facilement être transformés en HTML, PDF, etc. I Un utilitaire très pratique pour cela est Pandoc. I Par exemple, la commande $ pandoc -s -f markdown -t html exemple.md -o exemple.html produit le fichier exemple.html. I Dans le cours, tous vos projets devront être documentés à l’aide d’un fichier README.md. A. Blondin Massé (UQAM) 1er mai 2018 28 / 53
Fichier README.md # Travail pratique 1 ## Description Ce programme permet d'afficher en format ASCII une montagne dont les parties concaves sont remplies d'eau. Il est possible de préciser les caractères représentant la terre et l'eau lors de l'affichage. Le projet a été réalisé dans le cadre du cours INF3135 Construction et maintenance de logiciel de la session d'automne 2016 à l'Université du Québec A Montréal. ## Auteur Alexandre Blondin Massé ## Fonctionnement Pour générer un exécutable du programme, il suffit d'entrer la commande make Puis on lance le programme à l'aide de la commande ./tp1 où `` est un caractère représentant de la terre, `` est un caractère représentant l'eau et `` est une suite de nombres naturels décrivant les hauteurs, colonne par colonne, de la montagne, séparées par des virgules. ... A. Blondin Massé (UQAM) 1er mai 2018 29 / 53
Résultat A. Blondin Massé (UQAM) 1er mai 2018 30 / 53
Références I Dans le cadre du cours, vous utiliserez minimalement les éléments suivants : I Les sections et les sous-sections; I Les hyperliens; I Les listes à puce et les énumérations; I Les extraits de code; I Les images, etc. I Référence rapide (cheatsheet); I Extension pour GitLab. A. Blondin Massé (UQAM) 1er mai 2018 31 / 53
Pandoc I Pour visualiser le résultat de votre fichier Markdown en format HTML, vous pouvez utiliser Pandoc; I Il s’agit d’un logiciel qui permet de convertir des documents; I Plusieurs formats supportés: I HTML; I docx/odt/xml/ppt; I epub/pdf; I etc. A. Blondin Massé (UQAM) 1er mai 2018 32 / 53
Table des matières 1. Présentation du cours 2. Environnement Unix 3. Environnements de développement 4. Le format Markdown 5. Le logiciel Git 6. Le langage C 7. Makefiles A. Blondin Massé (UQAM) 1er mai 2018 33 / 53
Logiciel de contrôle de versions I Permet de stocker un ensemble de fichiers; I Conserve en mémoire la chronologie de toutes les modifications effectuées; I Offre des services de partage des fichiers entre plusieurs développeurs; I Est utilisé pour conserver les différentes versions du code source d’un projet; I Permet également de gérer différentes branches dont les évolutions sont temporairement indépendantes. I Garantit dans une certaine mesure l’intégrité des fichiers, car il est toujours possible de revenir en arrière. A. Blondin Massé (UQAM) 1er mai 2018 34 / 53
Liste de logiciels connus Nom Type Accès Bazaar distribué libre BitKeeper distribué propriétaire CVS centralisé libre Darcs distribué libre Git distribué libre Mercurial distribué libre Subversion centralisé libre I Dans ce cours, nous utiliserons Git; I Son utilisation est obligatoire, notamment pour la remise des travaux. A. Blondin Massé (UQAM) 1er mai 2018 35 / 53
Naissance de Git I 2002. Linus Torvalds utilises BitKeeper pour conserver l’historique de Linux; I 6 avril 2005. La version gratuite de BitKeeper est supprimée : Torvalds décide de créer son propre logiciel de contrôle de version, Git; I 18 avril 2005. Git supporte l’opération de fusion de fichiers; I 16 juin 2005. Git est officiellement utilisé pour conserver l’historique de Linux; I Fin juillet 2005. Junio Hamano devient le développeur principal de Git. A. Blondin Massé (UQAM) 1er mai 2018 36 / 53
Commandes les plus courantes Quelques opérations courantes de Git : I Créer un nouveau projet : git init; I Cloner un projet existant : git clone; I Sauvegarder l’état courant du projet : git commit; I Versionner un nouveau fichier : git add; I Ajouter un fichier pour le prochain commit : git add; I Consulter l’historique : git log; I Récupérer des changements à distance : git pull; I Téléverser des changements à distance : git push, etc. A. Blondin Massé (UQAM) 1er mai 2018 37 / 53
Configuration de Git I La configuration de Git est très simple; I Elle se fait à l’aide d’un fichier texte généralement stocké dans le dossier home : A. Blondin Massé (UQAM) 1er mai 2018 38 / 53
Hébergement de dépôts Git I Lorsqu’on manipule un dépôt Git, la plupart des opérations se font localement; I Cependant, il est très pratique de pouvoir partager nos modifications; I Pour cela, il existe des sites dédiés à l’hébergement de tels projets : I Github; I Bitbucket; I GitLab, etc. I Dans ce cours, vous devrez utiliser GitLab, qui offre gratuitement un nombre illimité de dépôts privés et de contributeurs. A. Blondin Massé (UQAM) 1er mai 2018 39 / 53
Table des matières 1. Présentation du cours 2. Environnement Unix 3. Environnements de développement 4. Le format Markdown 5. Le logiciel Git 6. Le langage C 7. Makefiles A. Blondin Massé (UQAM) 1er mai 2018 40 / 53
Historique I Années 70. Naissance du langage C, créé par Ritchie et Kernighan. I Origine liée au système Unix (90% écrit en C). I 1978 Publication du livre The C Programming Language, par Kernighan et Ritchie. On appelle cette première version le C K & R. I 1983 ANSI forme un comité dont l’objectif est la normalisation du langage C. I 1989 Apparition de la norme ANSI-C. Cette seconde version est appelée C ANSI. A. Blondin Massé (UQAM) 1er mai 2018 41 / 53
Utilisation du langage C I Langage d’implémentation de certains systèmes d’exploitation (Unix et dérivés) : I Près du langage machine; I Pointeurs typés mais non contrôlés; I Adapté aux petits programmes et aux bibliothèques : I Efficacité du code généré; I Compilation séparée; I Langage peu utilisé pour les applications de grande envergure : I Approche archaı̈que de la modularité; I Typage laxiste. A. Blondin Massé (UQAM) 1er mai 2018 42 / 53
Caractéristiques du langage C (1/2) I Langage structuré, conçu pour traiter les tâches d’un programme en les mettant dans des blocs; I Il produit des programmes efficaces : il possède les mêmes possibilités de contrôle de la machine que le langage assembleur et il génère un code compact et rapide; I C’est un langage déclaratif. Normalement, tout objet C doit être déclaré avant d’être utilisé. S’il ne l’est pas, il est considéré comme étant du type entier; I La syntaxe est très flexible : la mise en page (indentation, espacement) est très libre, ce qui doit être exploité adéquatement pour rendre les programmes lisibles. A. Blondin Massé (UQAM) 1er mai 2018 43 / 53
Caractéristiques du langage C (1/2) I Le langage C est modulaire. On peut donc découper une application en modules qui peuvent être compilés séparément. Il est également possible de regrouper des programmes en librairie; I Il est flexible. Peu de vérifications et d’interdits, hormis la syntaxe. Malheureusement, dans certains cas, ceci entraı̂ne des problèmes de lisibilités majeurs et de mauvaises habitudes de programmation; I C’est un langage transportable. Les entrées/sorties, fonctions mathématiques et fonctions de manipulation de chaı̂nes de caractères sont réunies dans des librairies, parfois externes au langage (dans le cas des entrées/sorties par exemple). A. Blondin Massé (UQAM) 1er mai 2018 44 / 53
Exemple de programme C // Directives au preprocesseur #include #define DEBUT -2 #define FIN 10 #define MSG "Programme de demonstration\n" // Prototypes de fonctions int carre(int x); int cube(int x); // Fonction main int main() { int i; printf(MSG); for (i = DEBUT; i
Compilation 1. Édition du programme source à l’aide d’un éditeur de texte ou d’un environnement de développement. L’extension du fichier est .c. 2. Compilation du programme source, traduction du langage C en langage machine. Le compilateur indique les erreurs de syntaxe, mais ignore les fonctions et les bibliothèques appelées par le programme. Le compilateur génère un fichier avec l’extension .o. 3. Édition de liens. Le code machine de différents fichiers .o est assemblé pour former un fichier binaire. Le résultat porte l’extension .out (sous Unix) ou .exe (sous Windows). 4. Exécution du programme. Soit en ligne de commande ou en double-cliquant sur l’icône du fichier binaire. A. Blondin Massé (UQAM) 1er mai 2018 46 / 53
Exemple de compilation (1/2) I Reprenons le fichier exemple.c I On peut directement le compiler en exécutable : $ gcc exemple.c ce qui produit le fichier a.out. I Puis ensuite, on l’exécute : $ ./a.out Programme de démonstration -2 carré: 4 cube: -8 -1 carré: 1 cube: -1 0 carré: 0 cube: 0 1 carré: 1 cube: 1 2 carré: 4 cube: 8 A. Blondin Massé (UQAM) 1er mai 2018 47 / 53
Exemple de compilation (2/2) I En général, on compile en deux étapes; I D’abord, de .c vers .o : $ gcc -c exemple.c ce qui produit le fichier compilé (objet) exemple.o. I Puis ensuite, la commande $ gcc -o exemple exemple.o produit un fichier exécutable nommé exemple. I Il s’exécute simplement en entrant $ ./exemple A. Blondin Massé (UQAM) 1er mai 2018 48 / 53
Table des matières 1. Présentation du cours 2. Environnement Unix 3. Environnements de développement 4. Le format Markdown 5. Le logiciel Git 6. Le langage C 7. Makefiles A. Blondin Massé (UQAM) 1er mai 2018 49 / 53
Gestion de la compilation I On a vu un peu plus tôt les deux étapes pour créer un exécutable en C : I On compile le fichier .c en un fichier .o; $ gcc -c exemple.c I On lie les fichiers .o en un seul fichier exécutable. $ gcc -o exemple exemple.o I Problème : Il est long de relancer la compilation chaque fois qu’on apporte une modification au fichier source. I Solution : Utilisation d’un Makefile. A. Blondin Massé (UQAM) 1er mai 2018 50 / 53
Makefiles I Existent depuis la fin des années ’70. I Gèrent les dépendances entre les différentes composantes d’un programme; I Automatisent la compilation en minimisant le nombre d’étapes; I Malgré qu’ils soient archaı̈ques, ils sont encore très utilisés (et le seront sans doute pour très longtemps encore); I Certaines limitations des Makefiles sont corrigées par des outils comme Autoconf et CMake. A. Blondin Massé (UQAM) 1er mai 2018 51 / 53
Exemple I Reprenons notre fichier exemple.c I Un Makefile minimal pour ce fichier serait le suivant : exemple: exemple.o gcc -o exemple exemple.o exemple.o: exemple.c gcc -c exemple.c I La syntaxe est de la forme : (le caractère est très important !) A. Blondin Massé (UQAM) 1er mai 2018 52 / 53
Exécution d’un Makefile I Pour utiliser un Makefile, il suffit de taper make I On obtient alors gcc -c exemple.c gcc -o exemple exemple.o et les fichiers .o et l’exécutable sont produits. I Astuce : Comme Vim interagit directement avec le terminal, je m’assure que les caractères mm déclenchent la commande make. A. Blondin Massé (UQAM) 1er mai 2018 53 / 53
Vous pouvez aussi lire