C++ coding guide Guide de développement logiciel C++ Timothée Royer Version : 1
C++ coding guide Guide de développement logiciel C++ Timothée Royer Version : 1997/02/25. Guide de développement logiciel en C++ C++ coding guide Timothée Royer (royer@uranus.crosat.fr) version : 1997-02-25 page 2 Résumé La forme du code La structuration d’un projet L’algorithmique Abstract Guide de développement logiciel en C++ C++ coding guide Timothée Royer (royer@uranus.crosat.fr) version : 1997-02-25 page 3 Sommaire RÉSUMÉ ........................................................................................................................................................ 2 ABSTRACT.................................................................................................................................................... 2 SOMMAIRE................................................................................................................................................... 3 CHAPITRE 1 - PRÉSENTATION DU GUIDE - PREFACE ....................................................................... 5 INTRODUCTION............................................................................................................................................. 5 APPLICATION................................................................................................................................................ 6 CONVENTIONS DE PRÉSENTATION DU GUIDE ................................................................................................... 7 CHAPITRE 2 - MISE EN FORME DU CODE SOURCE............................................................................ 8 MISE EN PAGE DU CODE SOURCE..................................................................................................................... 8 Indentation.............................................................................................................................................. 8 Présentation des accolades ..................................................................................................................... 9 Disposition de chaque ligne ...................................................................................................................11 STRUCTURE DES FICHIERS SOURCES...............................................................................................................12 Répartition du code entre les fichiers.....................................................................................................12 Les inclusions de fichier d’entête (headers)............................................................................................13 Les entêtes des fichiers source................................................................................................................14 Le fichier d’entête (« .hh »)....................................................................................................................15 Le fichier de définition (« .cc ») .............................................................................................................16 PRÉSENTATION D’INSTRUCTIONS ..................................................................................................................17 NOMMAGE...................................................................................................................................................18 Majuscules et minuscules .......................................................................................................................18 Choix des identificateurs........................................................................................................................19 LES COMMENTAIRES.....................................................................................................................................20 CHAPITRE 3 - STRUCTURATION LOGIQUE DU PROGRAMME.......................................................22 LES VARIABLES............................................................................................................................................22 Recommandations communes à tous les types.........................................................................................22 Les types prédéfinis................................................................................................................................23 Les types utilisateurs simples..................................................................................................................24 LES STRUCTURES DE CONTRÔLE....................................................................................................................25 LA CLASSE...................................................................................................................................................26 LES FONCTIONS ET LES MÉTHODES................................................................................................................32 Recommandations communes aux fonctions et aux méthodes..................................................................32 Fonctions ...............................................................................................................................................34 Méthodes................................................................................................................................................35 INCLUSIONS MUTUELLES...............................................................................................................................36 LE PRÉPROCESSEUR......................................................................................................................................37 DEBUG ........................................................................................................................................................40 INSTRUCTION...............................................................................................................................................43 CHAPITRE 4 - ALGORITHMIQUE...........................................................................................................45 GESTION D’UN SOURCE MAINTENU POUR PLUSIEURS PLATEFORMES.................................................................47 POINTEURS..................................................................................................................................................50 STRUCTURES DE CONTRÔLE..........................................................................................................................50 Guide de développement logiciel en C++ C++ coding guide Timothée Royer (royer@uranus.crosat.fr) version : 1997-02-25 page 4 ?. OPTIMISATION ........................................................................................................................................52 ?. DÉVELOPPEMENT MULTI-PLATEFORMES....................................................................................................53 CHAPITRE 5 - MISE EN ŒUVRE..............................................................................................................54 COMPILATION..............................................................................................................................................54 BIBLIOGRAPHIE........................................................................................................................................56 ANNEXE A - APPLICATION DU GUIDE AU CODE C............................................................................58 ANNEXE B - COMMENT LIER DES MODULES C ET C++ AU SEIN D'UN MÊME EXÉCUTABLE60 ANNEXE C - MODÈLE DE FICHIERS SOURCES...................................................................................66 ANNEXE D - EXEMPLE DE CLASSE : UN NOEUD DE LISTE DOUBLEMENT CHAÎNÉE ..............71 ANNEXE E - EXEMPLE DE SÉCURISATION : LA CLASSE COOKIE.................................................76 ANNEXE F - LEXIQUE ...............................................................................................................................79 ANNEXE G - HISTORIQUE........................................................................................................................80 Guide de développement logiciel en C++ C++ coding guide Timothée Royer (royer@uranus.crosat.fr) version : 1997-02-25 page 5 Chapitre 1 - Présentation du guide - Preface It said : 'The history of every major Galactic civilization tends to pass through three distinct and recognizable phases, those of Survival, Inquiry and Sophistication, otherwise known as the How, Why and Where phases.' The Hitch Hiker's Guide to the Galaxy Douglas Adams Introduction La mise au point d’un programme informatique est un domaine mal maîtrisé où les dépassements de temps de mise au point et de budget sont presque systématiques. C’est à ce problème que nous souhaitons nous attaquer au travers de ce document. Le développement logiciel au sens strict se découpe en trois étapes : analyse, conception et développement. Les méthodes de mise en oeuvre des deux premières étapes sont bien établies. Ce n’est pas le cas du codage : les recommandations de développement logiciel sont rares et peu utilisées dans l’industrie. Nous souhaitons combler cette lacune. Elle peut être due : • À l’anxiété des informaticiens de voir leur créativité inhibée ; • À la difficulté de consigner méthodiquement des erreurs et des propositions de solution générales (ce document est destiné à être amélioré par ses lecteurs, merci de vos retours d’information !) ; • Au fait qu’être reconnu pour son savoir faire technique peut être incompatible avec une évolution de carrière optimale. Dans cette optique, il préférable de faire valoir ses capacités de synthèse en écrivant une méthode d’analyse. C’est en tenant compte de ces raisons que nous avons établi ce document. Il s’adresse aux développeurs : • Qui ont déjà pratiquer la programmation, mais souhaitent améliorer la qualité de leur travail du point de vue de l’implémentation (maintenance, réutilisabilité, portabilité...). • Qui doivent travailler à plusieurs sur un même code. Dans cette situation, la formalisation du code devient déterminante : les coûts de maintenance dépassent les coûts de développements. Nous avons consigné des règles : A posteriori, après avoir découvert un « bug » et trouvé une méthode générale qui aurait permis d’éviter la difficulté. Il faut pas simplement se promettre d’être plus intelligent la prochaine fois. En constatant que les développeurs experts se sont constitués un ensemble de règles. Elles se ressemblent en partie d’un développeur à l’autre. Ces règles ne peuvent se déduire de la lecture d’un manuel de référence d’un langage. Unanimement, le langage C est considéré comme puissant mais difficile à mettre en oeuvre. En tant que surensemble du C, le langage C++ est à la fois plus puissant et plus difficile à employer, par les fonctionnalités supplémentaires qu’il apporte. Guide de développement logiciel en C++ C++ coding guide Timothée Royer (royer@uranus.crosat.fr) version : 1997-02-25 page 6 En tenant compte de l’état de l’art du langage. Celui-ci a beaucoup évolué et le développement industriel n’en est que plus difficile. Ce document propose un ensemble de recommandations de codage souples et générales pour augmenter la qualité du code source. Il est en particulier destiné aux programmes écrits en C++. Une annexe propose une application de ce guide à la programmation en C. Cependant, une partie des argumentations doit être suffisamment générale pour s’appliquer à d’autres langages : une implémentation objet souple, maintenable et réutilisable correspond à un style et non à un langage. Selon Dijkstra [Dijkstra 1972] : "As a slow witted human being I have a very small head and I had better learn to leave with it and to respect my limitations and give them full credit, rather than to try to ignore them, for the latter vain effort will be punished by failure". Le développement logiciel est un exercice intellectuel difficile. La taiile et la complexité des projets peut croître plus rapidement que les capacités intellectuelles des développeurs. Il faut rationnaliser l’implémentation. Nous vous proposons un outil pour en débroussailler la complexité. FIXME Le cerveau humain peut travailler avec un nombre limité d’idées simultanées. Ce nombre est fixé à sept « plus ou moins deux » [Meyer ? ?]. Pourtant, c’est avec ces capacités intellectuelles limitées que des systèmes logiques énormes doivent être conçus, implémentés et maintenus. En particulier, les fonctionalités du C++ remplissent largement les besoins techniques nécessaires à l’élaboration d’un logiciel. Les difficultés de mise en oeuvre arrivent avec l’implémentation, lorsque l’ensemble des capacités du langage ne se représente pas par un modèle gérable par l’humain. Application Seule un guide appliqué est intéressant. Il faut plutôt considérer ce papier comme une base de travail qu’il faudra modifier, simplifier ou enrichir en fonction des idées qui viendront à l’usage. La réalité de la programmation ne tient pas dans un cadre complet et rigide. Cependant, il y a beaucoup d’améliorations applicables systématiquement à un code source et elles ne sont pas toutes élémentaires. Il ne faudrait pas se priver de les inclure dans le guide à cause de quelques exceptions. Chacune des propositions est donc associée à l’un de ces trois niveaux d’exigence : *** IMPÉRATIF *** Ces règles sont indiscutablement communes à toutes les implémentations rigoureuses et efficaces. *** RECOMMANDATION *** Recommandée. La règle décrit comment résoudre une difficulté de manière systématique. Si la difficulté est bien maîtrisée par les programmeurs ils peuvent logiquement continuer d’appliquer leur ancienne méthode. Il faut simplement s'assurer que cette autre technique est bien applicable de manière systématique. Il suffit de préciser en une phrase la raison du choix. Une modification du guide peut être envisagée. *** AMÉLIORATION *** Proposée. Les règles qui semblent difficiles à décrire ou quantifier précisément, quelle que soit la raison, ne sont que proposées comme modèle de codage. De même, certaines améliorations Guide de développement logiciel en C++ C++ coding guide Timothée Royer (royer@uranus.crosat.fr) version : 1997-02-25 page 7 sophistiquées des recommandations ne sont proposées dans cette catégorie qu’à titre optionnel. La seule prétention de ce document est d’aider à l’écriture du code, une fois l’analyse et la conception achevées. Un logiciel mal conçu tiendra difficilement dans un guide de programmation utile. Lorsque la conception ou l'implémentation se passent mal, il faut reprendre l’analyse. Le coût engendré sera toujours inférieur à celui de la maintenance d'un module mal écrit. Conventions de présentation du guide Les chapitres sont présentés dans un ordre d’abstraction croissant. Ils sont découpés logiquement en paragraphes regroupant quelques règles concernant un même domaine. Chacun regroupe quelques règles traitant d’un sujet précis. D’une manière générale, la précision des exigences va dans un ordre croissant entre les chapitres et au sein des paragraphes. Une recommandation peut se décomposer en sept parties. Seules les deux premières sont toujours présentes. • Le degré de nécessité (impératif, recommandation, amélioration) et le numéro de la règle ; • L’énoncé de la règle; • (Pourquoi ?) La justification de la règle; • (Rappel) Un rappel sur un point technique précis, utile pour comprendre la recommandation; • (Comment ?) Explique comment faire pour respecter la règle, lorsque ce n’est pas évident; • (Exception) Les exceptions à la règle; • (Exemple) Un exemple illustrant la règle. Attention. Les exemples illustrant les recommandations de ce document sont volontairement concis. Ils peuvent ne pas respecter complètement certaines uploads/S4/ c-developpement-logiciel.pdf
Documents similaires










-
27
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Apv 18, 2022
- Catégorie Law / Droit
- Langue French
- Taille du fichier 0.3097MB