Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme...

57
Chapitre 1: Introduction INF3135 — Construction et maintenance de logiciels Alexandre Blondin Massé Université du Québec à Montréal Automne 2019 A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 1 / 56

Transcript of Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme...

Page 1: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Chapitre 1: IntroductionINF3135 — Construction et maintenance de logiciels

Alexandre Blondin Massé

Université du Québec à Montréal

Automne 2019

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 1 / 56

Page 2: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Plan1 Présentation du cours

2 Environnement Unix

3 Environnement de développement

4 Le langage C

5 Les Makefiles

6 Logiciel de contrôle de versions

7 Langage de balisage léger

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 2 / 56

Page 3: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Présentation du cours

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 3 / 56

Page 4: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Informations générales

• Trimestre: Automne 2019• Titre du cours: Construction et maintenance de logiciels• Sigle: INF3135• Département: Informatique• Enseignant: Alexandre Blondin Massé• Courriel: [email protected]• Site personnel: http://lacim.uqam.ca/~blondin• Bureau: PK-4525• Coordonnateur: Alexandre Blondin Massé• Site du cours: http://lacim.uqam.ca/~blondin/fr/inf3135• Plan de cours: cliquer ici

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 4 / 56

Page 5: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Description officielle (site de l’UQAM):« Notions de base de la programmation procédurale et impérative enlangage C sous environnement Unix/Linux (définition et déclaration,portée et durée de vie, fichier d’interface, structures de contrôle, unitésde programme et passage des paramètres, macros, compilation condi-tionnelle). Décomposition en modules et caractéristiques facilitant lesmodifications (cohésion et couplage, encapsulation et dissimulation del’information, décomposition fonctionnelle). Style de programmation(conventions, documentation interne, gabarits). Déboggage de pro-grammes (erreurs typiques, traces, outils). Assertions et conceptionpar contrats. Tests (unitaires, intégration, d’acceptation, boîte noirevs. boîte blanche, mesures de couverture, outils d’exécution automa-tique des tests). Évaluation et amélioration des performances (pro-fils d’exécution, améliorations asymptotiques vs. optimisations, outils).Techniques et outils de base pour la gestion de la configuration. Sys-tème de contrôle de version. »

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 5 / 56

Page 6: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Objectifs du cours

• Maîtriser davantage le développement dans un environnementUnix

• Apprendre les bases du langage C• Documenter convenablement un projet écrit en C• Gérer automatiquement la construction d’un programme C• Gérer adéquatement l’historique d’un programme• Apporter des modifications à un système développé par

d’autres personnes• Apprendre à utiliser des bibliothèques C• Fournir une couverture de tests d’un programme• Mettre en place des mécanismes d’intégration continue• Travailler en équipe sur la construction d’un projet écrit en C

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 6 / 56

Page 7: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Modalités d’évaluation

Travaux pratiques (50%)• TP1 (seul): initiation au langage C (15%)• TP2 (seul): maintenance d’un programme (15%)• TP3 (équipe): construction d’un programme (20%)

Examens (50%)• 1 examen intra (25%)• 1 examen final (25%)

Double seuilVous devez obtenir une moyenne d’au moins 50% dans les travauxpratiques et dans les examens pour réussir le cours

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 7 / 56

Page 8: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Références

Contenu du cours• The C Programming Language, de Kernighan et Ritchie

(disponible à la coop)• Manuel d’utilisation de Git: disponible en ligne• Documentation de Make: disponible en ligne• Documentation de Markdown: documentation officielle et

spécialisation pour GitLab

Politiques de l’UQAM• Règlement 18 sur la tricherie et l’intégrité académique (plagiat):

http://r18.uqam.ca/.• Politique 16 contre le harcèlement sexuel: document pdf.

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 8 / 56

Page 9: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Environnement Unix

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 9 / 56

Page 10: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Terminal et shell

• Terminal = interface• Shell = interpréteur de commandes• Outils essentiels de l’informaticien• Agit comme intermédiaire entre

→ l’utilisateur,→ le système de fichiers et→ les applications• Particulièrement utile pour des connexions à distance

INF1070 Util. et admin. des systèmes informatiques• Introduit comme cours obligatoire à l’automne 2018• Répond à un besoin des enseignants, des étudiants et de

l’industrie

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 10 / 56

Page 11: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Commandes de base• echo — afficher un message• ls — lister le contenu du répertoire• cat — afficher un fichier• cd — changer de répertoire• cd .. — revenir au répertoire parent• exit — fermer le shell

$ lsREADME.md src doc$ cat README.md# Travail pratique 1 [...]$ cd src$ lstp1.c$ cat tp1.c#include <stdio.h> [...]$ exit

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 11 / 56

Page 12: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Comment trouver de l’information?Approche traditionnelle de l’informaticien

• Google• Wikipedia• StackOverflow• Enseignant• Démonstrateur• L’association étudiante (AGEEI)

Approche efficace de l’unixienLe man$ man ls$ man date$ man intro$ man man

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 12 / 56

Page 13: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Afficher le contenu de fichiers• head — Affiche les première lignes• tail — Affiche les dernières lignes• less (et more) — Affiche le fichier page par page• tac — Affiche un fichier en commençant par la dernière ligne• rev — Inverse chacune des lignes affichée• wc — Affiche le nombre de lignes, mots et octets

# Afficher le nombre de lignes$ wc -l /usr/share/common -licenses/GPL -3674 /usr/share/common-licenses/GPL-3

# Afficher les 2 premières lignes$ head -n 2 /usr/share/common -licenses/GPL -3

GNU GENERAL PUBLIC LICENSEVersion 3, 29 June 2007

# Ouvrir le fichier avec un paginateur$ less /usr/share/common -licenses/GPL -3

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 13 / 56

Page 14: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Répertoires et chemins• tree — affiche l’arborescence d’un répertoire• pwd — affiche le chemin du répertoire courant• mv — déplace/renomme des fichiers (ou répertoires)• cp — copie (ou écrase) des fichiers• rm — supprime des fichiers• mkdir — crée des répertoires (vides)• rmdir — supprime des répertoires vides• grep — cherche les lignes correspondant à un motif dans un

fichier• find — rechercher des fichiers dans une hiérarchie de répertoires

QuestionComment supprimer un répertoire non vide?

$ rm -rf nom-du-repertoire

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 14 / 56

Page 15: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Répertoires et chemins• tree — affiche l’arborescence d’un répertoire• pwd — affiche le chemin du répertoire courant• mv — déplace/renomme des fichiers (ou répertoires)• cp — copie (ou écrase) des fichiers• rm — supprime des fichiers• mkdir — crée des répertoires (vides)• rmdir — supprime des répertoires vides• grep — cherche les lignes correspondant à un motif dans un

fichier• find — rechercher des fichiers dans une hiérarchie de répertoires

QuestionComment supprimer un répertoire non vide?$ rm -rf nom-du-repertoire

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 14 / 56

Page 16: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Droits et utilisateurs• chmod — modifie les droits d’un fichier (ou répertoire)• chown — modifie l’utilisateur propriétaire d’un fichier• chgrp — modifie le groupe propriétaire d’un fichier• sudo — exécute une commande sous un autre utilisateur• su — change d’utilisateur

# Rendre un script exécutable$ chmod +x nom-du-script

# Pour afficher entre autres les droits$ ls -l[...]

# Pour installer Pandoc$ sudo apt install pandoc[...]

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 15 / 56

Page 17: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Autres commandes utiles

• file — affiche le type de fichier• date — affiche et configure la date• touch — modifie l’horodatage d’un fichier ou crée un fichier

vide• stat — affiche différentes informations sur un fichier

$ dateFri Aug 30 17:33:16 EDT 2019

$ file 01-intro.pdf hello.c01-intro.pdf: PDF document, version 1.5hello.c: C source, ASCII text

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 16 / 56

Page 18: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Sortie standardLe résultat des commandes va sur la sortie standard

• Par défaut, la sortie standard est l’écran terminal• Mais le shell peut la rediriger vers un fichier

$ ls -l hello.txt > ls.out$ cat ls.out-rw-r--r-- 1 privat privat 460 aoû 15 20:23 hello.txt

Opérateurs shell de redirections: « > » et « >> »• « > f » écrit dans le fichier f depuis le début (écrase)• « >> f » écrit à la suite du fichier f (ajoute)• Dans les deux cas, si f n’existe pas, il est créé

$ echo uno > tata$ echo dos >> tata$ cat tataunodos

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 17 / 56

Page 19: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Sortie d’erreur standard

Les commandes distinguent deux sorties• la sortie standard pour les résultats normaux• la sortie d’erreur standard pour les messages d’erreurs et de

diagnostics$ ls -l hello.txt epic.fail > ls.outls: impossible d'accéder à 'epic.fail':Aucun fichier ou dossier de ce type$ cat ls.out-rw-r--r-- 1 privat privat 460 aoû 15 20:23 hello.txt

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 18 / 56

Page 20: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Redirection d’erreur standard

« 2> » (et « 2>> ») redirigent la sortie d’erreur standard vers unfichier$ ls -l hello.txt epic.fail > ls.out 2> ls.err$ cat ls.out-rw-r--r-- 1 privat privat 460 aoû 15 20:23 hello.txt$ cat ls.errls: impossible d'accéder à 'epic.fail':Aucun fichier ou dossier de ce type

Parfois, on préfère taire les erreurs:$ cat epic.failcat: epic.fail: No such file or directory$ cat epic.fail 2> /dev/null

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 19 / 56

Page 21: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

L’entrée standard au clavier

L’entrée standard est l’entrée naturelle des commandes• Par défaut, l’entrée standard est le clavier du terminal• Les touches ctrl + D terminent l’entrée clavier

Prononcer « contrôle-dé », écrire « ^D »$ tacbonjourle monde^Dle mondebonjour

QuestionQuelle est la différence si on remplace tac par rev ?

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 20 / 56

Page 22: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Redirection en entrée« < » redirige l’entrée standard depuis un fichier$ cat < deux-lignes.txtUne première lignePuis la deuxième

$ tr eu .- < deux-lignes.txtUn. pr.mièr. lign.P-is la d.-xièm.

QuestionQue fait la commande tr?

RemarquePour le TP1 — et le reste du cours — vous devez bien comprendreles notions d’entrée et de sortie standards

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 21 / 56

Page 23: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Gestionnaire de paquets

• Tâche courante: installer des logiciels/bibliothèques• Gestion des dépendances entre paquets est complexe• Solution: utiliser un gestionnaire de paquets (en anglais,

package manager)• Exemples:

→ Aptitude (apt): Debian et ses dérivés→ Pacman (ArchLinux)→ RPM Package Manager (Red Hat, Fedora, CentOS)→ MacPorts (MacOS)→ Homebrew (MacOS), etc.

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 22 / 56

Page 24: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Système Unix

• Dans ce cours: vous devez travailler sous Unix• Mac OS: ça va pour le cours, mais attention aux différences• Windows: vous pouvez, mais doit fonctionner sur un système

Unix• Différentes solutions possibles:

→ Installez une distribution Linux en partition double ou commeunique système (Ubuntu, Linux Mint)

→ Installer une machine virtuelle (VirtualBox, VMWare)Attention

• La version actuelle de Linux Subsystem suffit pour le TP1,mais pas pour les deux autres.

• Mieux vaut en profiter dès le début pour s’habituer à Linux

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 23 / 56

Page 25: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Environnement de développement

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 24 / 56

Page 26: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Environnements de développement

• Outil de base d’un programmeur• En anglais, integrated development environment (IDE)• Quelques exemples:

• Pourtant, de nombreux programmeurs avancés préfèrent unsimple éditeur de texte. Pourquoi ?

• Certains plaident même que Unix est un EDD• Dans le cours, aucun environnement n’est imposé

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 25 / 56

Page 27: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Éditeurs de texteOffre très variée:

• Notepad/Notepad++ (Windows)• TextEdit (MacOS)• Gedit (Linux), souvent installé par défaut• SublimeText (multiplateforme)• Visual Studio Code• Emacs• Vi/Vim et ses dérivés (multiplateforme) → préféré

Maîtrise d’un éditeur de texte en ligne de commande nécessaire:• Pour bien utiliser Git lors de l’édition de dialogues (opérations

plus complexes, comme un rebasement interactif)• Pour modifier des fichiers distants• Dans tous les cas, assurez-vous que vos fichier sont enregistrés

au format UTF8A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 26 / 56

Page 28: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Vim• Un des plus anciens éditeurs de texte• En 2009, un sondage le plaçait comme l’éditeur de texte le plus

utilisé• Son ancêtre, vi, a été créé par Bill Joy en 1976• Le nom Vim vient de Vi iMproved• Multiplateforme (Linux, MacOS, Windows).

Caractéristiques• Très mature• Interaction directe avec le terminal• Installé par défaut avec plusieurs distributions Unix• Rapide, en particulier pour la programmation à distance• Hautement configurable• Orienté clavier (GVim permet une utilisation limitée de la

souris)• Courbe d’apprentissage difficile pour les débutantsA. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 27 / 56

Page 29: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Configuration• Fichier .vimrc dans les anciennes versions• Fichier .vim/vimrc dans les plus récentes

" Configuration de Vim-plugcall plug#begin('~/.vim/plugged ')

" ThèmesPlug 'michalbachowski/vim-wombat256mod 'Plug 'crusoexia/vim-monokai'Plug 'preocanin/greenwint '

[...]" Activation des numéros de ligneset number

" Gestion de l'expansion des tabulations (en espaces)" (voir :help expandtab)set tabstop=4 | set shiftwidth=4 | set expandtab[...]

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 28 / 56

Page 30: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Le langage C

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 29 / 56

Page 31: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Bref historique

• Années 70: Naissance du langage, créé par Ritchie etKernighan

→ Origine du langage fortement liée à celle d’Unix→ 90% du système Unix écrit en C• 1978: Publication du livre « The C Programming Language »,

par Kernighan et Ritchie• 1983: ANSI forme un comité pour normaliser le langage• 1989 Apparition de la norme ANSI-C• 1999: Révision du standard (ISO C99)• 2011: Révision du standard (ISO C11)

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 30 / 56

Page 32: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Caractéristiques du langage

• Bas niveau: près du langage machine, contrôle élevé de lamémoire, efficace

• Déclaratif: le type des variables doit être déclaré• Flexible: espacement, indentation• Structuré: organisé en blocs (accolades)• Modulaire: division en fichiers, compilation séparée• Flexible: peu de vérification, pointeurs typés mais non contrôlés• Spécifique: pour bien faire une tâche, adapté aux petits

programmes et aux bibliothèques• Portable: mais avec parfois un certain effort• Simple: spécification assez courte• Verbeux: il faut écrire beaucoup de code

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 31 / 56

Page 33: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Exemple

Fichier maj.c:#include <stdio.h>#include <ctype.h>

int main() {char c;while ((c = getchar()) != EOF) {

printf("%c", toupper(c));}return 0;

}

QuestionQue fait ce programme?

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 32 / 56

Page 34: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Compilation

• Édition du programme source: à l’aide d’un éditeur de texteou d’un environnement de développement

→ L’extension du fichier est .c• Compilation: traduction du langage C en langage machine

→ Indique les erreurs de syntaxe→ Ignore les fonctions et les bibliothèques invoquées→ Génère un fichier avec l’extension .o• Édition de liens (linking): Le code machine de différents

fichiers .o est assemblé pour former un fichier binaire→ Par défaut, l’extension est .out sous Unix→ L’extension est .exe sous Windows• Exécution du programme: en ligne de commande ou en

double-cliquant sur l’icône du fichier binaire.

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 33 / 56

Page 35: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Compilation « directe »• On peut combiner la compilation et l’édition des liens en une

seule commande:• Produit (par défaut) le fichier exécutable a.out

$ gcc maj.c$ ls -l a.out-rwxr-xr-x 1 ablondin ablondin 8392 Sep 3 07:33 a.out

• Puis on l’exécute:$ ./a.outLangage de balisage légerLANGAGE DE BALISAGE LéGER^C

• Pour nommer l’exécutable (par exemple maj):$ gcc -o maj maj.c

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 34 / 56

Page 36: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Compilation et édition des liens• Parfois, il est préférable de séparer la compilation et l’édition

des liens→ projets de plus grande envergure (TP2 et TP3)• On compile d’abord en langage machine chaque fichier

→ par défaut l’extension .c devient .o

$ gcc -c maj.c$ gcc -o maj.o -c maj.c # Équivalent

• Produit le fichier objet maj.o• Ensuite:

$ gcc -o maj maj.o

• Produit un fichier exécutable nommé maj• Exécution:

$ ./maj

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 35 / 56

Page 37: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Les Makefiles

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 36 / 56

Page 38: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Simplifier la compilation

On a vu un peu plus tôt la compilation en deux étapes pour créer unexécutable

• On compile le fichier .c en un fichier .o

$ gcc -c maj.c

• On lie les fichiers .o en un seul fichier exécutable$ gcc -o maj maj.o

• Problème: pénible de relancer la compilation chaque fois qu’onapporte une modification au fichier source

• Solution: utiliser un Makefile!

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 37 / 56

Page 39: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Makefiles

• Existent depuis la fin des années ’70• Gèrent les dépendances entre les différentes composantes d’un

programme• Automatisent la compilation en minimisant le nombre d’étapes• Malgré qu’ils soient archaïques, ils sont encore très utilisés (et

le seront sans doute pour très longtemps encore)• Certaines limitations des Makefiles sont corrigées par des outils

comme Autoconf et CMake (vu vers la fin du trimestre)• On préfére le nom Makefile (avec une majuscule) à makefile.

Pourquoi?

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 38 / 56

Page 40: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Exemple

• Exemple de Makefile minimal pour un programme C d’un seulfichier:

maj: maj.ogcc -o maj maj.o

maj.o: maj.cgcc -c maj.c

• La syntaxe est de la forme<cible >: <dépendances ><tab><commande>

• Le caractère <tab> est très important!

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 39 / 56

Page 41: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Invocation d’un Makefile

• Pour invoquer un Makefile, il suffit d’entrer$ makegcc -c exemple.cgcc -o exemple exemple.o

• Par défaut, les commandes sont affichées (possible de les fairetaire)

• Astuce: Comme Vim interagit directement avec le terminal, jem’assure que les caractères <leader>m (pour moi, c’est ,m)déclenchent la commande make en l’indiquant dans mon fichiervimrc

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 40 / 56

Page 42: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Logiciel de contrôle de versions

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 41 / 56

Page 43: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Logiciel de contrôle de versions

• Permet de stocker un ensemble de fichiers• Conserve en mémoire la chronologie de toutes les modifications

effectuées• Offre des services de partage des fichiers entre plusieurs

développeurs• Est utilisé pour conserver les différentes versions du code source

d’un projet• Permet également de gérer différentes branches dont les

évolutions sont temporairement indépendantes• Garantit dans une certaine mesure l’intégrité des fichiers, car il

est toujours possible de revenir en arrière

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 42 / 56

Page 44: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Liste de logiciels connus

Nom Type AccèsBazaar distribué libreBitKeeper distribué propriétaireCVS centralisé libreDarcs distribué libreGit distribué libreMercurial distribué libreSubversion centralisé libre

• Dans ce cours, nous utiliserons Git• Son utilisation est obligatoire, notamment pour la remise des

travaux

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 43 / 56

Page 45: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Naissance de Git

• 2002: Linus Torvalds utilises BitKeeper pour conserverl’historique de Linux

• 6 avril 2005: La version gratuite de BitKeeper est supprimée:Torvalds décide de créer son propre logiciel de contrôle deversion, Git

• 18 avril 2005: Git supporte l’opération de fusion de fichiers• 16 juin 2005: Git est officiellement utilisé pour conserver

l’historique de Linux• Fin juillet 2005: Junio Hamano devient le développeur

principal de Git

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 44 / 56

Page 46: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Commandes les plus courantes• Créer un nouveau projet: git init• Cloner un projet existant: git clone• Sauvegarder l’état courant du projet: git commit• Versionner un nouveau fichier: git add• Ajouter un fichier pour le prochain commit: git add• Consulter l’historique: git log• Récupérer des changements à distance: git pull• Téléverser des changements à distance: git push

Apprendre les commandes• Plusieurs commandes vues en laboratoire• Vous devrez aussi en apprendre par vous-même• Beaucoup d’options sont disponibles:

$ git remote --help

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 45 / 56

Page 47: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Configuration de Git• Se fait à l’aide d’un fichier texte• Généralement stocké dans le dossier home• Dans un fichier nommé .gitconfig

[user]name = Alexandre Blondin Masséemail = [email protected]

[color]branch = autodiff = autointeractive = autostatus = auto

[alias]st = status -sco = checkoutci = commitbr = branch

[...]

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 46 / 56

Page 48: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Hébergement de dépôts Git

La plupart des commandes Git se font de façon locale• Chaque clone d’un dépôt est autonome• L’historique est purement local

Cependant, il est pratique de pouvoir partager nos modificationsPour cela, il existe des sites dédiés à l’hébergement de tels projets:

• Github• Bitbucket• GitLab

Dans ce cours, vous devrez utiliser le GitLab du départementd’informatique

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 47 / 56

Page 49: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Langage de balisage léger

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 48 / 56

Page 50: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Qu’est-ce que c’est?Définition (extraite de Wikipedia):

« Un langage de balisage léger est un type de langage debalisage utilisant une syntaxe simple, conçu pour être aisé àsaisir avec un éditeur de texte simple, et facile à lire dans saforme non formatée. »

Exemples:• Markdown,• ReStructuredText,• Asciidoc, etc.

Contre-exemples:• HTML, XML: pas légers!• YAML, JSON, légers, mais plutôt pour structurer des données

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 49 / 56

Page 51: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Markdown• 2004: créé par John Gruber avec Aaron Swartz• Peu modifié ensuite par les auteurs originaux• Extension de fichier: .md ou .markdown• Peut facilement être transformé en HTML ou en PDF

→ grâce notamment au programme Pandoc• Supporté sur plusieurs plateformes ou forums• Pas de standardisation formelle• Possibilité d’enchasser du HTML

→ Attention! éviter s’il existe un équivalent Markdown!Plusieurs variantes (flavors)

• Multimarkdown, qui est une extension• GitHub Flavored Markdown, d’abord développé pour GitHub• GitLab Flavored Markdown, développé pour GitLab

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 50 / 56

Page 52: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Formatage (1/2)

• Emphase (balise <em> en HTML): étoiles simples *mot* ousoulignés simples _mot_

• Emphase forte (balise <strong>): étoiles doubles **mot**• Souligner: soulignés doubles __mot__• Bout de code (balise <code>): apostrophes inversées `mot`• Bloc de code: trois apostrophes inversées

```cint main() {

return 0;}```

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 51 / 56

Page 53: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Formatage (2/2)

• Bloc de code (sans langage associé): indenter de 4 espacesBout de texte qui apparaîtra comme du codePour des extraits de fichiers texte, par exemple

• Citation (balise <blockquote>): commencer par >

> Extrait d'une conversation qu'on souhaite commenter> Peut être sur plusieurs lignes

• Paragraphes (balise <p>): il suffit de laisser une ligne videPremier paragraphe

Deuxième paragraphe

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 52 / 56

Page 54: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Listes• Liste non ordonnée (balise <ul>): étoiles ou tirets

* Premier élément* Deuxième

* Élément imbriqué (au moins 4 espaces)* Troisième

• Liste ordonnée (balise <ol>): chiffre suivi d’un point1. Premier élément2. Deuxième élément3. Troisième élément

• Liste à cocher: crochets avec x optionnel- [ ] Finir TP1- [ ] Relire notes de cours- [x] Se reposer

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 53 / 56

Page 55: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Titres• Permet de structurer un document Markdown (balises <h1> à

<h6>)# Travail pratique 1

## Description

## Auteurs

## Exemples

### Exemple 1

### Exemple 2

• Attention de ne pas mettre trop de titres• Ajuster la profondeur selon la taille du document

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 54 / 56

Page 56: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Liens

• Pour insérer un hyperlien:[texte](lien relatif ou absolu)

• Pour insérer une image:![texte](lien relatif ou absolu vers l'image)

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 55 / 56

Page 57: Chapitre 1: Introduction · INF1070 Util. et admin. des systèmes informatiques • Introduit comme cours obligatoire à l’automne 2018 • Répond à un besoin des enseignants,

Mathématiques

• Supporté dans certaines variantes• Exemple: GitLab Flavored Markdown• Dans le texte: un dollar suivi d’une apostrophe inversée• Bloc mathématique: comme pour le code, avec le mot math

Dans le texte, c'est comme ça: $`(x + 1, y - 2)`$.

Pour un bloc mathématique

```mathf(x,y) = x^2 + y^2 - 1```

A. Blondin Massé (UQAM) Chapitre 1: Introduction INF3135 Automne 2019 56 / 56