Cette publication est accessible gratuitement
Télécharger
Le bien programmer
Nicolas Belloir 13 octobre 2005
1 Introduction Unprogrammeurnar´eellementbesoinque: dune´diteurenligne(saisieducode), uncompilateur(g´en´erationex´ecutable), unterminal(exe´cutiondunprogramme). Suffisant pour un petit programme. Mais pour un programme industriel ? Bienprogrammercest´ecrireunprogramme: – rapidement et efficacement, – qui s’execute sans erreur, performant,ableet´evolutif. Pe´crireunprogrammerapideetecace: our necoderquunefoisleprobl`emeanalyse´etlalgorithmee´crit, utiliserdese´diteursadapt´es, Pour ecrire un programme qui s’execute sans erreur : ´ – tester et valider votre programme, d´eboguezle. Pour´ecrireunprogrammeperformant,ableete´volutif: – utilisez de bonnes options de compilation, organisezlecodedemani`eremodulable, pensezauxe´volutionse´ventuelles.
2Me´thodesdeprogrammation 2.1 Organisation du code source Factoriser Comment faire ? Rappel : ca + cd 2 ec = c ( a + d 2 e ) – Isoler les redondances de code, Identierlesmotifsquisere´pe`tent, – En faire des fonction. Remarque Lamaintenanceoulede´bogagesontsourcesderedondances!Soyezprudents! Lafactorisationr´eduitlenombredelignedecode`a´ecrire! Quelques recettes – Porter un soin particulier au nom de la fonction, Utiliserdesstructuresdedonne´essilenombredeparam`etreesttropimportant.
1
D´ecouper Utilisation de Module / Paquetage – Halte aux fichiers de 10000 lignes de code, Organiserlecodeparth`emeoufonctionnalite´s(erreur,communication...), De´couperlesfonctionstropimportantes. Inte´rˆet facilit´edeclassementetdorganisationducode, facilit´ed´evolution, de´coupagelogiquesalutairepourleprogrammeur. 2.2Lapropret´educodesource Qu’est ce donc ? Crite`redejugementdesqualite´sprofessionnelsdunprogrammeur(commeunartisan), – Jugement subjectif, – Attention : nonpropret´e= incomp´t nce ou manque de rigueur, e e proprete´comp´etence. Faire attentio ` (1) : n a – Temps de compilation anormalement long, Techniquedacce´l´erationdecompilationignor´ees, En-tˆetestropgrossesettropimbrique´es, – Non utilisation de librairies. Pre´sencede warnings de compilation, – Peut cacher un bogue, – Trop de warnings cachent les warnings abusifs , Me´moiredynamiquenonlibe´re´e, Faireattentiona`(2): Fichierssourcesinclusetnonutilis´es, – Includes inutiles, Includesnonprot´ege´scontrelinclusionmultiple, Commentaireserrone´es, Lignesdecodeinutilis´ees, librairiesinclusesdansle´ditiondelienmaisnonutilis´ees, codecompile´enmode debug etm´elang´eavecducode release , . . . 2.3 Programmer economique ´ Une histoire de choix Choisirlatechnologieadapte´e(pourquoimonteruneusine`agazquandonpeutfaireleschosessim-plement ?), Limiterlescouˆtsannexesquandilsnesontpasne´cessaires(formation,achatdelibrairie). Lasimplicit´eestgagedeabilit´! e
2
2.4Laprogrammationd´efensive Pourquoisede´fendre? O`uilestquestiondeMurphy – “Si quelque chose peut mal tourner, al ¸ urnera mal.” ors ca to Silexistedeuxouplusieursmanie`resdefairequelquechoseetquelunedecesmanie`resestsusceptible desesolderparunecatastrophe,onpeuteˆtrecertainquequelquunsede´brouillerapourlachoisir.R`egledor Laprogrammationde´fensivedoitdevenirunVRAIe´tatdesprit. Quelquesre`gles Lorsdel´ecrituredecode: Pre´voirtouslescasderreurpossibles, – Traiter chaque cas d’erreur, Pre´voirdeslignesde trace pourlede´bogage. Erreursfr´equentes Valeursinvalides(valeurdedur´een´egative,d´ebordement, Valeursextrˆemes(min,max,indexne´gatifs,...), – Boucles infinies, – Pointeurs invalides, – E/S, ´ Ecrasementm´emoire,m´emoirenoninitialis´ee, pasdevaleurparde´faut, – cas non trait´ (switch...). es Traitement des erreurs – Has niveau, – Enregistrer les erreurs (fichier log avec trace), – Etat d ` ment. u programme a ce mo – Niveau utilisateur. – Propager l’erreur au niveau utilisateur, Interromprelope´rationencours, Communiquer`alutilisateurlinformation. L’exemple d’Ariane 5 le4juin1996explosiondAriane5apr`es40secondesdevol, 500Millionsde$depertenanci`ereestim´ee, Cause:erreurdelogiciel:Syste`medeRe´fe´renceInertiel. Import´edAriane4, Nonadapte´`alaplusgrandevitessehorizontaledAriane5, – Conversion d’un nombre flottant sur 64 bits en un entier sur 16 bits, De´bordementetexceptionnontrait´ee... – = segmentation fault et terminaison du programme. 2.5 De bons automatismes Quelques automatismes Achaqueouverturedechier,e´criresimultan´ementsafermeture, Aha´ecrireimme´diatementle delete correspondant, – c que new ,
3
Utiliseztoujourslemeˆmenomdevariablepourrepre´senterlameˆmechose, Achaqueaccoladeouvrante,´ecrirelafermente, Testersyste´matiquementlanullit´edespointeurs, ...
3 Environnement de programmation 3.1Lese´diteurs Les´editeurs Plusieurse´diteursdetextesontdisponiblessurUnix: L´editeurUnixstandard vi :tr`espuissantmaispeuconvivial, Lautree´diteurparmilespluspopulairesest emacs :tre`spuissantaussimaisplusgourmanden ressources. – Des clients XWindow permettent aussi de faire de l’edition de texte : ´ xemacs est une version d’emacs avec menus, encore plus “gourmand”, xedit , kate et gedit sontlese´diteursstandardsdegnome,KDEetXWindow,respectivement. Lesenvironnementsdeprogrammationinte´gre´s: Inte`gresousunmeˆmeenvironnementtouteslesfonctionnalit´espropreaud´eveloppement,mais ne´cessitentdesmachinestr`esperformantes, Eclipse , Visual C++ , Kdevelop . . . Existe-tilun´editeurid´eal? Non,maislechoixdel´editeurdoitsadaptera`lasituationduprogrammeur: – Windows like Versus Unix like, Seulouen´equipe, – Petits projets ou grands projets, – Au bureau ou en mission, Fonctionnalite´sobligatoirespourune´diteur colorisationoumiseenreliefdesmotscl´esducode, – indentation automatique, me´canismesderechercherapides, acc`esrapidea`lacompilation. Fonctionnalite´sint´eressantespourune´diteur comple´tion, – aide ava ´ ncee, ´niescompl´ementairesdivers. – meca sm permetdesepasserdesouris(rapidit´e) Un´editeurne´cessite uninvestissementpourconnaıˆtresonfonctionnement, – d’apprendre sa syntaxe (ex : Amadeus Vs Internet), – parfois de savoir s’adapter. 3.2 Compilation et makefile Compilation De´nition Compiler,cestpasserducodesourcedunprogrammea`unex´ecutablebinaire`alaidedulogicielappropri´e (le compilateur).
4