Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Robustifier son code c par Manuel Miniana

/dev/var/
November 21, 2013

Robustifier son code c par Manuel Miniana

/dev/var/

November 21, 2013
Tweet

More Decks by /dev/var/

Other Decks in Programming

Transcript

  1. Robustifier du code C Le C, un langage performant >

    une gestion manuelle des ressources (RAM, fd …) > pointeurs Le C, un langage permissif > cast > void* > pointeurs de fonctions Le C, un langage exigeant > Écrasement mémoire, fuites mémoires, > Corruption de la pile d'exécution …
  2. Robustifier du code C Moins de code = Moins de

    bugs Plus de tests = Moins de bugs génération multi-plateformes = Plus de tests
  3. Moins de code = Moins de bugs DRY : Don't

    repeat yourself > Identifier les doublons, factoriser et refactorer > Utiliser des outils pour refactorer (NetBeans, Eclipse, Vim, …) Identifier le code mort avec LCOV > Créer des tests instrumentés avec LCOV dans votre chaîne de génération.
  4. Plus de tests = Moins de bugs Utiliser le compilateur

    > gcc propose des flags de compilation • -Wall -Werror … • activer sur certaines cibles un maximum de flags de contrôles > clang est compatible gcc Tester pendant la génération > créer des tests pour vérifier la logique > créer des exemples basiques • une documentation utilisateur toujours à jour • des moyens d'investiguer certains bugs > instrumenter certains tests ou exemples avec des outils de détections de corruption mémoire (Valgrind)
  5. Génération multi-plateforme = Plus de tests Utiliser plusieurs compilateurs >

    clang est compatible gcc CMake pour générer dans plusieurs plateformes > activation des traitements en fonction du contexte • tests, options de génération > généreration hors des répertoires sources ne reconstruit que le nécessaire (rapidité de construction) > support de MinGW
  6. Génération multi-plateforme = Plus de tests GIT pour générer à

    partir d'une référence commune Jenkins pour orchestrer et publier le résultat des générations > Jenkins déclenche des constructions sur modification de la base de code