epita spé: programmation introduction à la programmation ... · programmation introduction a la`...

39
EPITA Sp´ e: Programmation Introduction ` a la programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d ´ eveloppement Langages Fonctionnel v.s. Imp ´ eratif Qu’est ce que la programmation fonctionnel Algorithmes et Programmation Fonctionnelle Analyse de conception Organiser la Conception Les Tests EPITA Sp´ e: Programmation Introduction ` a la programmation sous Unix Marwan Burelle [email protected] http://wiki-prog.kh405.free.fr

Upload: others

Post on 24-Sep-2020

43 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

EPITA Spe: ProgrammationIntroduction a la programmation sous Unix

Marwan Burelle

[email protected]://wiki-prog.kh405.free.fr

Page 2: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Plan

1 Programmation sous UnixOutils de developpementLangages

2 Fonctionnel v.s. ImperatifQu’est ce que la programmation fonctionnelAlgorithmes et Programmation Fonctionnelle

3 Analyse de conceptionOrganiser la ConceptionLes Tests

Page 3: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Introduction

L’objectif de ce cours est de vous former a la programmationdans un environnement Unix, a l’utilisation des outilsafferants et a la programmation systeme.

Durant l’annee, nous seront amene a programmer enOCaml, puis en C. Mais avant tout, il est important depresenter nos motivation et de faire une petite introduction al’univers de la programmation sous Unix.

Page 4: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Evolve or die !

Page 5: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Evolve or die !

Page 6: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Programmation sous Unix

Programmation sous Unix

Page 7: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Un systeme historique ...

Premiere apparitions dans les annees 1970 (Unix aTime Sharing Operating System - 1974)

Famille de systemes d’exploitation (BSD, Solaris, Linux. . . )

Berceau d’Internet (BSD 4.1 et 4.2)

La norme POSIX definit les interractions avec lesysteme

Divers environnement de travail (textuels ougraphiques.)

Page 8: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Une vision pluraliste et modulaire

Chaque tache dispose d’outils autonomes (editeurs detexte, gestionnaires de projet, gestionnaires de version,compilateurs, editeurs de lien . . . ) contrairement auxenvironnement tout integre.Points positifs :

Offre un plus grand degre de liberte aux developpeursdans leur processus de developpement et notammentpour faire des choses inhabituellesPermet de choisir les outils les mieux adaptes (ou lesoutils preferes) a chaque etape

Points negatifs :Necessite une meilleur connaissance du processus dedeveloppement et de compilationAbscence d’homogeneite dans les applications(notamment pour les applications graphiques.)

Page 9: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Outils de developpement

Outils de developpement

Page 10: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Editeurs de texte

ed : l’editeur historique ligne a ligne, quasimentinutilisable

vi : l’evolution “plein ecran” d’ed. Existe en denombreuses variantes (comme vim) avec plus oumoins de fonctionnalites. Relativement leger, il estsouvent considerer comme un peu spartiate.

emacs : successeur TECO, il integre un interpreteur dulangage Lisp qui lui permet d’etre tres parametrable.Probablment l’editeur le plus puissant,malheureusement il est aussi relativement lourd.

gedit : editeur du projet GNOME. Joli, sans plus.

nedit : un bon editeur, avec des fonctionnalites proched’emacs mais plus faciles d’acces aux debutant.

kate : editeur du projet KDE, facile d’acces et offrantdes options interessantes.

Page 11: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Le gestionnaire de projet make

Permet de gerer les phases complexes de lacompilation (notamment lorsqu’il y a plusieurs fichiersinterdependants.)

Se configure au travers d’un langage simple decrivantles differentes actions a effectuer.

Utilise les indications temporelles pour ne regenererque le necessaire.

Attention, il existe plusieurs variantes de la syntaxe :BSD, GNU make, SUN make . . .Il existe d’autre programmes similaires oucomplementaires :

ant : specifique aux projets Javaautotools : automatise la gestion des Makefileimake : cree automatiquement des fichiers Makefilepour les projets utilisant X11

Page 12: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Gestion de versions et de sources

RCS : systeme historique de gestion de versionCVS : probablement le plus utilise des systemes degestion de version. Permet de garder une trace desmodifications faites sur un ensemble de fichier, derecuperer un fichier dans sa derniere version ou uneversion anterieure, de creer des branches dedeveloppement, de travailler a plusieurs sur un memeensemble de fichiers . . .svn : (subversion) un concurrent moderne de CVS. Iloffre sensiblement les memes fonctionnalites et tentede resoudre certains defauts de CVS.git : le gestionnaire de source developpe pour lagestion du noyeau Linux. Destine au gros projet.rsync : outil synchronisation de repertoire.unison : systeme beaucoup plus evolue desynchronisation (bi-directionel, interactif ... )

Page 13: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Compilation

Etapes de la compilation d’un programme ecrit en C :

Pre-processing a l’aide de cpp

Compilation (traduction du C vers l’assembleur) a l’aidede cc

Assemblage (passage de l’assembleur textuel aubinaire) a l’aide as. Production des objets C (fichiertermine par .o)

Edition de lien (regroupement des differentes parties duprogramme) pour obtenir le binaire final du programme.C’est le role de ld.

Page 14: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Les bibliotheques

Les bibliotheques sont des objets du systemes contenantdes fonctions pouvant etre utilisees par plusieursapplications.On distingue deux formes de bibliotheques :

Statique : le code est integre au binaire au moment del’edition de lien.

Dynamique : le code est charge dynamiquement aulancement de l’application et peut etre partage parplusieurs applications (une seul instance en memoire.)

Page 15: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Langages

Langages

Page 16: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Le langage C

Langage imperatif et structure (dans l’esprit de Pascal.)

Le langage des systemes Unix (cree pour l’ecritured’Unix)

Relativement efficace

Normalise (norme ANSI) et donc portable (dans unecertaine mesure.)

Necessite une grande attention sur la gestion de lamemoire (allocation, referencement . . . )

De nombreuses bibliotheques de fonctions sontdisponibles (interractions avec le systeme, reseau,calculs scientifique, interfaces graphiques . . . )

Page 17: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Le langage OCaml

Langage fonctionnel, fortement type, polymorphe etdisposant de l’ordre superieur.

Tres efficace pour un langage evolue.

Appartient a la famille de langage ML.

Dispose egalement d’une extension Orientee Objet

Dispose d’une semantique bien fondee et d’un systemede types evolue et mathematiquement prouve.

Tres utilise dans l’enseignement, la recherche etcertains secteurs de pointe (validation et demonstrationautomatique.)

Du fait de son interroperabilite avec C, il dispose d’unnombre grandissant de bibliotheques.

Page 18: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Les autres langages . . .

Les langages de scripts (interpretes) :perl : tres utilise, puissant mais peu lisiblepython : un langage a la mode, puissant, orienteobjet. . .ruby : un langage qui monte . . .

Les langages compiles classiques :C++ : version oriente objet de C, un classique.D : nouveau langage tentant de rationnaliser C et C++.Fortran : fut un temps le langage des physiciens . . .Objective C : une autre extension objet de C, utilisedans NeXT Step et MacOS X (Cocoa, Aqua . . . )Java : un classique de l’objet et du web.C# : le clone de Java de Microsoft (sous Unix via laplateforme Mono.)Ada : quand les militaires font de l’informatique . . .

Et les autres : SQL, XQuery, Lisp, Scheme, XSLT,Prolog, CDuce, . . .

Page 19: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Fonctionnel v.s. Imperatif

Fonctionnel v.s. Imperatif

Page 20: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Fonctionnel v.s. Imperatif

Les deux styles de programmation fonctionnel et imperatif ontsouvent ete opposes. Ces deux styles sont issues de modelesmathematiques et informatiques differents : le λ−calcul pour lefonctionnel et les machines de Turing pour l’imperatif.

En theorie, l’expressivite est la meme pour les deux (resultatdemontre par Alan Turing dans son article sur les machinesabstraites et par l’hyppothese de Church.)

Dans la pratique, le modele imperatif a engendrer un plus grandnombre d’application et par consequent est devenu le modeleclassique de la programmation et de l’algorithmie.

Il est souvent reproche au modele fonctionnel de ne pas pouvoirexprimer de maniere aussi evidente et efficace les algorithmesclassiques. Pourtant, les evolutions de ce modele et surtout leslangages fonctionnels moderne (la famille ML en particulier) ontmontre qu’il etait possible d’obtenir des resultats aussi bons qu’avecles langages imperatifs.

Page 21: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Qu’est ce que la programmation fonctionnel

Qu’est ce que la programmation fonctionnel

Page 22: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Le modele fonctionnel

Le modele mathematique sous-jacent est le λ−calcul dans lequeltout est fonction.

Le λ−calcul bien que tres simple dans sa syntaxe et sa semantique(deux constructions syntaxique, pas de constante et deux reglesd’evaluation), il est le langage mathematique le plus expressif.

Un langage fonctionnel dispose des caracteristiques suivantes :

Ordre superieur : les fonctions sont des valeurs du langage(objet de premiere classe)Semantique bien fondee : la semantique du langage estdefinie par un modele mathematique complet independant del’implementation du compilateur ou de l’evaluateur.Valeurs immuables : dans un langage fonctionnel pur, il n’y apas de notion de variables.Point fixe et recursivite : les processus iteratifs s’exprimentrecursivement (recherche de plus petit point fixe.)

Page 23: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Programmer de maniere fonctionnelle

Un programme (ou un algorithme) est considere commefonctionnel lorsque :

Le programme peut etre vu comme une fonction (ilprend des parametres et renvoit un resultat ;)

Il ne presente pas d’effet de bord : l’etat de la memoire(autre que le resultat renvoye) n’est pas affecte parl’execution du programme ;

Les iterations sont exprimees de maniere recursive ;

Il utilise l’ordre superieur (fonctions en argument ou enresultat.)

Techniquement, on peut faire du fonctionnel sans utiliser unlangage fonctionnel, il s’agit surtout d’un style deprogrammation.

Page 24: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Algorithmes et Programmation Fonctionnelle

Algorithmes et Programmation Fonctionnelle

Page 25: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Algorithme et Programmation Fonctionnelle

La grande majorite des algorithmes classiques ont eteecrits de maniere imperative.

Il est parfois difficile de les implanter dans un langagefonctionnel sans utiliser d’extension imperative.

La traduction naıve de ces algorithmes en fonctionneln’est pas toujours efficace.

Pourtant, le fonctionnel offre certaine constructionsagreables et pratiques.

Un bon programmeur doit savoir choisir et profiter dumeilleur outil adapter a son probleme : il existe un bon

nombre de situation ou l’approche fonctionnelle est trespertinente.

Page 26: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Travailler sans effet bord

Prennons le cas de listes triees d’entiers :elem = 0 elem = 3 elem = 6

Nous allons inserer de maniere fonctionnelle la valeur 2dans la liste :

elem = 0 elem = 3 elem = 6

elem = 2elem = 0

Si les choses sont faites correctement, la fin de la liste (quin’est pas modifiee) est partagee entre l’ancienne liste (quidemeure inchangee) et la nouvelle.

Page 27: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Travailler sans effet de bord

La notion de partage de structure permet une economiede memoire sans utiliser de modification en place ;

L’abscence d’effet de bord est importante, sinon il y aun risque de perte de coherence.

Le modele fonctionnel offre des possibilites de retoursarriere simples (dans notre exemple pour annulerl’insertion, il suffit de reprendre l’ancienne liste.)

Sur des structures de donnees complexes (comme desarbres de recherche) cette approche permet de sepasser des operations de suppression dans la plus partdes cas.

Combinee avec un gestionnaire automatique dememoire (Garbage Collector) cette approche simplifiede nombreux cas.

Page 28: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Analyse de conception

Analyse de conception

Page 29: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Penser Avant de Coder

La programmation est une activite structuree ;

La taille des programmes et le travail en equipe oblige aun minimum d’organisation ;

La maıtrise du code et des algorithmes n’est pastoujours suffisante a la resolution d’un probleme ;

Les programmes sont amenes a evouler et a etremaintenus, une bonne organisation et une bonnedocumentation facilite grandement ces taches ;

Les choix de representation de l’information peuventavoir un impact sur de nombreux aspect du programme,notamment les performances, la flexibilite, lacoherence, le temps de developpement et memeparfois la faisabilite.

Page 30: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Organiser la Conception

Organiser la Conception

Page 31: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Synopsis de la Conception d’un Programme

1 Delimitation des objectifs necessaires et secondaires ;

2 Identification des informations et de leur nature :externes (donnees du problemes, interractions avec lesutilisateurs . . . )resultats (formes, contenus, attentes . . . )internes (donnees intermediaires, meta-donnees . . . )

3 Identification des traitements, de leur nature et de leur interractionavec les informations ;

4 Choix des structures de donnees (representation de l’information ;)5 Choix des algorithmes ;6 Decoupages en unites logiques du programme (modules, objets ou

sous-programme ;)7 Identification des interractions entre unites ;8 Verification des dependances entre unites ;9 Definition des interfaces des unites ;10 Codes et tests des unites ;11 Integration et validation ;12 Tests !

Page 32: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Quelques Points Importants

La definition des objectifs doit permettre de definirprecisement ce que le programme doit et ne doit pasfaire.

Un bon decoupage des unites doit permettre d’eliminerun maximum de redondances et un travail parallelise.

Il faut privilegie la factorisation, la genericite et lareutilisabilite des structures de donnees et des unites.

Le decoupage et les dependances entre unite doiventrefleter l’usage des structures de donnees et le flot del’information dans le programme au cours du traitement.

Il faut tester du plus precis (interne aux unites) au plusgeneral (ensemble du programme.)

Construire des scenarios d’utilisation aide grandementa la conception et aux tests.

Page 33: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Les Tests

Les Tests

Page 34: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Ou, Quand, Comment ?

Le plus tot possible : chaque element doit etre testerdes qu’il est pret (voir meme avant pour les petits boutde code.)

A tous les niveaux : dans le decoupage de votreprogramme chaque niveau (fonctions, modules,sous-programmes, applications) doit etre testeindividuellement.

Fixer et tester les invariants : pour tester (et memepour programmer) il est recommande de fixer lescontraintes en amont et en aval et de les tester.

Tester les cas critiques : vous devez determiner lescas pouvant poser probleme et les tester.

Determiner des scenarii : Preparer un scenariod’utilisation a partir du cahier des charges ou desspecifications pour tester votre programme enconditions reelles.

Page 35: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Invariants et Contraintes

Certaines donnees doivent toujours respecter un ensemble deproprietes fixes : les invariants

Certaines parties du programme (fonctions, modules, objets ousous-programmes) attendent que leurs parametres respectercertaines proprietes : les pre-conditions

Les resultats de certaines parties du programme doivent respectercertaines proprietes : les post-conditions

Il est important d’etablir au plus tot (lors de la phase de conception)les invariants et les contraintes.

Les invariants et les contraintes peuvent completement changercertaines parties de votre programme (cas en plus ou en moins,verifications suplementaires ou inutiles . . . )

Le bon respect des invariants et des contraintes simplifie le code etameliore l’integration.

Les invariants et les contraintes sont un des outils importants pourla construction des tests.

Page 36: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Tester les fonctions

1 Determiner les bornes : a partir des invariants etpre-conditions

2 Tester les bornes : le comportement aux bornes esttres instructif (et souvent suffisant.)

3 Valider les resultats : estimer le resultat attendu, entenant compte des post-conditions et des invariants.

4 Ne pas tester les cas inutiles : si une fonction ne serajamais appelee avec certaines valeurs (c.f.pre-conditions) ca ne sert a rien de tester ces valeurs.

5 Minimiser les interractions : vous testez un elementprecis, pas son environnement.

6 C’est pas le nombre qui compte ! (mais la pertinance)

Page 37: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Tester les modules

Il s’agit des tests les plus importants, avant d’integrerun module dans votre programme, il faut qu’il soit testerindividuellement.

Normalement, le fonctionnement interne a deja etetester, ce qui vous interesse c’est l’interraction externe.

A partir des specifications vous devez ecrire unensemble de tests qui reprend : les cas standardsd’usage, les invariants et les contraintes et les cascritiques.

Les tests doivent etre etablis independamment del’implantation du module et montrer que le module faitbien ce qu’il est cense faire.

Il peut etre astucieux d’etablir un plan de tests refletantl’usage du module (notamment, pour tester lesdifferents appels dans l’ordre dans lequel ils seronteffectivement faits.)

Page 38: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Scenarios d’utilisation

Objectifs : guider la conception en recadrant l’usage del’application, etablir une strategie pour les tests d’integrationet le test global de l’application.

Identifier les actions de l’utilisateur

Identifier les retours vers l’utilisateur (affichages, sortiesfichier . . . )

Etablir une chronologie des evenements.

Les scenarios doivent etre construits a partir du cahierdes charges, pas de l’implantation.

L’utilisation de scenarios facilite grandement lavalidation d’un projet vis a vis du cahier des charges.

Page 39: EPITA Spé: Programmation Introduction à la programmation ... · Programmation Introduction a la` programmation sous Unix Marwan Burelle Programmation sous Unix Outils de d´eveloppement

EPITA Spe:ProgrammationIntroduction a laprogrammation

sous Unix

Marwan Burelle

Programmationsous UnixOutils de developpement

Langages

Fonctionnel v.s.ImperatifQu’est ce que laprogrammation fonctionnel

Algorithmes etProgrammation Fonctionnelle

Analyse deconceptionOrganiser la Conception

Les Tests

Exemple de scenario

Entree Prog Sortie

"Entrez un nombre :"

"5"

"Factorielle de 5 = 120"

"Recommencer (y/n) ?"

"n"

"Bye ..."