CINXE.COM
[Portail des services RENATER] - Analyse de code
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" lang="fr" dir="ltr" class="no-js"> <head> <meta charset="UTF-8" /> <title> [Portail des services RENATER] - Analyse de code</title> <script>(function(H){H.className=H.className.replace(/\bno-js\b/,'js')})(document.documentElement)</script> <meta name="viewport" content="width=device-width,initial-scale=1" /> <link rel="shortcut icon" href="/_media/favicon.ico" /> <link rel="apple-touch-icon" href="/lib/tpl/bootstrap3/images/apple-touch-icon.png" /> <!-- Matomo --> <script type="text/javascript"> var _paq = window._paq || []; /* tracker methods like "setCustomDimension" should be called before "trackPageView" */ _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); (function() { var u="https://analytics.renater.fr/"; _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '7']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); })(); </script> <!-- End Matomo Code --> <meta name="generator" content="DokuWiki"/> <meta name="robots" content="index,follow"/> <meta name="keywords" content="sourcesup,code_quality,index"/> <meta name="description" content="Analyse de code Site officiel 1. Présentation Le serveur Sonar permet d'analyser le code d'un projet en fonction d'un ensemble de règle, et de présenter les résultats via une interface. Il peut analyser plusieurs langages comme JAVA, PHP, C++... Le résultat de l'analyse permet de dire si un projet respecte les normes de codage en vigueur, si du code est copier/coller dans plusieurs fichier au lieu d'être mutualisé, etc"/> <meta name="author" content="sebastien.medard@renater.fr"/> <link rel="search" type="application/opensearchdescription+xml" href="/lib/exe/opensearch.php" title="Portail des services RENATER"/> <link rel="start" href="/"/> <link rel="contents" href="/sourcesup/code_quality/index?do=index" title="Plan du site"/> <link rel="manifest" href="/lib/exe/manifest.php"/> <link rel="alternate" type="application/rss+xml" title="Derniers changements" href="/feed.php"/> <link rel="alternate" type="application/rss+xml" title="Catégorie courante" href="/feed.php?mode=list&ns=sourcesup:code_quality"/> <link rel="alternate" type="text/html" title="HTML brut" href="/_export/xhtml/sourcesup/code_quality/index"/> <link rel="alternate" type="text/plain" title="Wiki balise" href="/_export/raw/sourcesup/code_quality/index"/> <link rel="canonical" href="https://services.renater.fr/sourcesup/code_quality/index"/> <link rel="stylesheet" href="/lib/exe/css.php?t=bootstrap3&tseed=6122a9cf373c2355be57ef8b794f67c2"/> <link type="text/css" rel="stylesheet" href="/lib/plugins/datatables/assets/datatables.net-fixedheader-dt/css/fixedHeader.dataTables.min.css"/> <link type="text/css" rel="stylesheet" href="/lib/plugins/datatables/assets/datatables.net-fixedcolumns-dt/css/fixedColumns.dataTables.min.css"/> <link type="text/css" rel="stylesheet" href="/lib/plugins/datatables/assets/datatables.net-bs/css/dataTables.bootstrap.min.css"/> <link type="text/css" rel="stylesheet" href="/lib/plugins/icons/assets/font-awesome/css/font-awesome.min.css"/> <link type="text/css" rel="stylesheet" href="/lib/plugins/icons/assets/material-design-icons/css/materialdesignicons.min.css"/> <!--[if gte IE 9]><!--> <script >/*<![CDATA[*/var NS='sourcesup:code_quality';var JSINFO = {"plugins":{"edittable":{"default columnwidth":""},"vshare":{"youtube":"youtube\\.com\/.*[&?]v=([a-z0-9_\\-]+)","vimeo":"vimeo\\.com\\\/(\\d+)","slideshare":"slideshare.*id=(\\d+)","dailymotion":"dailymotion\\.com\/video\/([a-z0-9]+)","archiveorg":"archive\\.org\/(?:embed|details)\/([a-zA-Z0-9_\\-]+)","soundcloud":"soundcloud\\.com\/([\\w-]+\/[\\w-]+)","niconico":"nicovideo\\.jp\/watch\/(sm[0-9]+)","bitchute":"bitchute\\.com\\\/video\\\/([a-zA-Z0-9_\\-]+)","coub":"coub\\.com\\\/view\\\/([a-zA-Z0-9_\\-]+)","odysee":"odysee\\.com\/\\$\/(?:embed|download)\/([-%_?=\/a-zA-Z0-9]+)","youku":"v\\.youku\\.com\/v_show\/id_([0-9A-Za-z=]+)\\.html","bilibili":"bilibili\\.com\\\/video\\\/(BV[0-9A-Za-z]+)","msoffice":"(?:office\\.com.*[&?]videoid=([a-z0-9\\-]+))","msstream":"microsoftstream\\.com\\\/video\\\/([a-f0-9\\-]{36})"}},"fastwiki":{"secedit":1,"preview":1,"fastpages":1,"save":0,"fastshow":0,"fastshow_same_ns":1,"fastshow_include":"","fastshow_exclude":"","preload":false,"preload_head":"====47hsjwycv782nwncv8b920m8bv72jmdm3929bno3b3====","preload_batchsize":false,"preload_per_page":false,"locktime":840,"usedraft":1,"text_btn_show":"Afficher la page","templatename":"bootstrap3"},"plugin":{"datatables":{"config":[],"enableForAllTables":0},"semantic":{"exposeWebService":1}},"update_version":"54","isadmin":0,"isauth":0,"move_renameokay":false,"schemes":["http","https","telnet","gopher","wais","ftp","ed2k","irc","ldap"],"bootstrap3":{"mode":"show","toc":[],"config":{"collapsibleSections":0,"fixedTopNavbar":1,"showSemanticPopup":0,"sidebarOnNavbar":0,"tagsOnTop":1,"tocAffix":1,"tocCollapseOnScroll":1,"tocCollapsed":0,"tocLayout":"default","useAnchorJS":1,"useAlternativeToolbarIcons":1}},"id":"sourcesup:code_quality:index","namespace":"sourcesup:code_quality","ACT":"show","useHeadingNavigation":1,"useHeadingContent":1}; /*!]]>*/</script> <script src="/lib/exe/jquery.php?tseed=f0349b609f9b91a485af8fd8ecd4aea4" defer="defer">/*<![CDATA[*/ /*!]]>*/</script> <script src="/lib/exe/js.php?t=bootstrap3&tseed=6122a9cf373c2355be57ef8b794f67c2" defer="defer">/*<![CDATA[*/ /*!]]>*/</script> <script type="text/javascript" src="/lib/plugins/datatables/assets/datatables.net/js/jquery.dataTables.min.js" defer="defer"></script> <script type="text/javascript" src="/lib/plugins/datatables/assets/datatables.net-fixedheader-dt/js/fixedHeader.dataTables.min.js" defer="defer"></script> <script type="text/javascript" src="/lib/plugins/datatables/assets/datatables.net-fixedcolumns-dt/js/fixedColumns.dataTables.min.js" defer="defer"></script> <script type="text/javascript" src="/lib/plugins/datatables/assets/datatables.net-buttons/js/dataTables.buttons.min.js" defer="defer"></script> <script type="text/javascript" src="/lib/plugins/datatables/assets/datatables.net-buttons/js/buttons.html5.min.js" defer="defer"></script> <script type="text/javascript" src="/lib/plugins/datatables/assets/datatables.net-buttons/js/buttons.print.min.js" defer="defer"></script> <script type="text/javascript" src="/lib/plugins/datatables/assets/jszip/dist/jszip.min.js" defer="defer"></script> <script type="text/javascript" src="/lib/plugins/datatables/assets/pdfmake/build/pdfmake.min.js" defer="defer"></script> <script type="text/javascript" src="/lib/plugins/datatables/assets/pdfmake/build/vfs_fonts.js" defer="defer"></script> <script type="text/javascript" src="/lib/plugins/datatables/assets/datatables.net-bs/js/dataTables.bootstrap.min.js" defer="defer"></script> <script type="text/javascript" src="/lib/plugins/datatables/assets/datatables.net-buttons-bs/js/buttons.bootstrap.min.js" defer="defer"></script> <script type="text/javascript" charset="utf-8"></script> <script type="application/ld+json">/*<![CDATA[*/{ "@context": "http:\/\/schema.org\/", "@type": "WebSite", "url": "https:\/\/services.renater.fr\/", "name": "Portail des services RENATER", "potentialAction": { "@type": "SearchAction", "target": "https:\/\/services.renater.fr\/doku.php?do=search&id={search_term_string}", "query-input": "required name=search_term_string" } } /*!]]>*/</script> <script type="application/ld+json">/*<![CDATA[*/[ { "@context": "http:\/\/schema.org\/", "@type": "Article", "headline": "Analyse de code", "name": "Analyse de code", "datePublished": "2013-01-04T13:37:56+01:00", "dateCreated": "2013-01-04T13:37:56+01:00", "dateModified": "2023-12-20T16:55:23+01:00", "description": "Analyse de code Site officiel 1. Pr\u00e9sentation Le serveur Sonar permet d'analyser le code d'un projet en fonction d'un ensemble de r\u00e8gle, et de pr\u00e9senter les r\u00e9sultats via une interface. Il peut analyser plusieurs langages comme JAVA, PHP, C++... Le r\u00e9sultat de l'analyse permet de dire si un projet respecte les normes de codage en vigueur, si du code est copier\/coller dans plusieurs fichier au lieu d'\u00eatre mutualis\u00e9, etc", "license": null, "url": "https:\/\/services.renater.fr\/sourcesup\/code_quality\/index", "mainEntityOfPage": { "@type": "WebPage", "@id": "https:\/\/services.renater.fr\/sourcesup\/code_quality\/index" }, "publisher": { "@type": "Organization", "name": "Portail des services RENATER", "logo": { "@type": "ImageObject", "url": "https:\/\/services.renater.fr\/_media\/logo.png" } }, "author": { "@context": "http:\/\/schema.org\/", "@type": "Person", "name": "sebastien.medard@renater.fr", "email": "sebastien.medard@renater.fr" }, "contributor": [ { "@context": "http:\/\/schema.org\/", "@type": "Person", "name": "sebastien.medard@renater.fr", "email": "sebastien.medard@renater.fr" }, { "@context": "http:\/\/schema.org\/", "@type": "Person", "name": "emmanuel.forestier@renater.fr", "email": "emmanuel.forestier@renater.fr" } ] }, { "@context": "http:\/\/schema.org\/", "@type": "WebPage", "relatedLink": [ "https:\/\/services.renater.fr\/collaboration\/sidebar", "https:\/\/services.renater.fr\/doc\/evento\/sidebar", "https:\/\/services.renater.fr\/groupware\/sidebar", "https:\/\/services.renater.fr\/partage\/sidebar", "https:\/\/services.renater.fr\/rendez-vous\/sidebar", "https:\/\/services.renater.fr\/sourcesup\/sidebar", "https:\/\/services.renater.fr\/sourcesup\/sidebar.old", "https:\/\/services.renater.fr\/sourcesup\/sommaire" ] } ] /*!]]>*/</script> <!--<![endif]--> <style type="text/css">@media screen { body { margin-top: 65px; } #dw__toc.affix { top: 55px; position: fixed !important; } #dw__toc .nav .nav .nav { display: none; } }</style> <!--[if lt IE 9]> <script type="text/javascript" src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> <script type="text/javascript" src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> <![endif]--> </head> <body class="default dokuwiki mode_show tpl_bootstrap3 dw-fluid-container" data-page-id="sourcesup:code_quality:index"><div class="dokuwiki"> <header id="dokuwiki__header" class="dw-container dokuwiki container-fluid mx-5"> <!-- navbar --> <nav id="dw__navbar" class="navbar navbar-fixed-top navbar-default" role="navigation"> <div class="dw-container container-fluid mx-5"> <div class="navbar-header"> <button class="navbar-toggle" type="button" data-toggle="collapse" data-target=".navbar-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand d-flex align-items-center" href="/index" accesskey="h" title="Portail des services RENATER"><img id="dw__logo" class="pull-left h-100 mr-4" alt="Portail des services RENATER" src="/_media/logo.png" /><div class="pull-right"><div id="dw__title">Portail des services RENATER</div></div></a> </div> <div class="collapse navbar-collapse"> <ul class="nav navbar-nav"> <li class="level1 node dropdown"><a href="#" class="dropdown-toggle" data-target="#" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Réseau et connectivité <span class="caret"></span></a> <ul class="dropdown-menu" role="menu"> <li class="level2"> <a href="/acces_partenaire_rie/index" class="wikilink1" title="acces_partenaire_rie:index" >Partenaire RIE</a> </li> <li class="level2"> <a href="/portail_infrars/index" class="wikilink1" title="portail_infrars:index" >Portail InfraRS</a> </li> <li class="level2"> <a href="/services_ip/index" class="wikilink1" title="services_ip:index" >services_ip</a> </li> <li class="level2"> <a href="/vpn/index" class="wikilink1" title="vpn:index" >Services VPN</a> </li> <li class="level2"> <a href="/services_a_lacces/index" class="wikilink1" title="services_a_lacces:index" >Services à l'accès</a> </li> <li class="level2"> <a href="/ntp/index" class="wikilink1" title="ntp:index" >NTP</a> </li> </ul> </li> <li class="level1 node dropdown"><a href="#" class="dropdown-toggle" data-target="#" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Sécurité <span class="caret"></span></a> <ul class="dropdown-menu" role="menu"> <li class="level2"> <a href="/antispam/index" class="wikilink1" title="antispam:index" >Antispam</a> </li> <li class="level2"> <a href="/cert/index" class="wikilink1" title="cert:index" >CERT RENATER</a> </li> <li class="level2"> <a href="/scaner/index" class="wikilink1" title="scaner:index" >Scan'ER</a> </li> <li class="level2"> <a href="/tcs/index" class="wikilink1" title="tcs:index" >TCS</a> </li> </ul> </li> <li class="level1 node dropdown"><a href="#" class="dropdown-toggle" data-target="#" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Identité <span class="caret"></span></a> <ul class="dropdown-menu" role="menu"> <li class="level2"> <a href="/identitas/index" class="wikilink1" title="identitas:index" >Identitas</a> </li> <li class="level2"> <a href="/federation/index" class="wikilink1" title="federation:index" >Fédération</a> </li> <li class="level2"> <a href="/noms_de_domaine/index" class="wikilink1" title="noms_de_domaine:index" >Noms de domaine</a> </li> </ul> </li> <li class="level1 node dropdown"><a href="#" class="dropdown-toggle" data-target="#" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Collaboration <span class="caret"></span></a> <ul class="dropdown-menu" role="menu"> <li class="level2"> <a href="/partage/faq" class="wikilink1" title="partage:faq" >Partage</a> </li> <li class="level2"> <a href="/doc/evento/index" class="wikilink1" title="doc:evento:index" >Evento</a> </li> <li class="level2"> <a href="/groupware/filesender/index" class="wikilink1" title="groupware:filesender:index" >Filesender</a> </li> <li class="level2"> <a href="/sourcesup/index" class="wikilink1" title="sourcesup:index" >Sourcesup</a> </li> <li class="level2"> <a href="/groupware/universalistes/index" class="wikilink1" title="groupware:universalistes:index" >Universalistes</a> </li> <li class="level2"> <a href="/rendez-vous/index" class="wikilink1" title="rendez-vous:index" >Rendez-vous</a> </li> </ul> </li> <li class="level1 node dropdown"><a href="#" class="dropdown-toggle" data-target="#" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Mobilité <span class="caret"></span></a> <ul class="dropdown-menu" role="menu"> <li class="level2"> <a href="/eduroam/index" class="wikilink1" title="eduroam:index" >eduroam</a> </li> </ul> </li> <li class="level1 node dropdown"><a href="#" class="dropdown-toggle" data-target="#" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Documentation <span class="caret"></span></a> <ul class="dropdown-menu" role="menu"> <li class="level2"> <a href="/documentation/eduspot/index" class="wikilink1" title="documentation:eduspot:index" >eduspot</a> </li> <li class="level2"> <a href="/documentation/supann/index" class="wikilink1" title="documentation:supann:index" >Supann</a> </li> <li class="level2"> <a href="/voix_et_image/index" class="wikilink1" title="voix_et_image:index" >Visioconférence</a> </li> </ul> </li> </ul> <div class="navbar-right" id="dw__navbar_items"> <!-- navbar-searchform --> <form action="/sourcesup/code_quality/index" accept-charset="utf-8" class="navbar-form navbar-left search" id="dw__search" method="get" role="search"> <div class="input-group"> <input id="qsearch" autocomplete="off" type="search" placeholder="Rechercher" value="" accesskey="f" name="q" class="form-control" title="[F]" /> <div class="input-group-btn"> <button class="btn btn-default" type="submit" title="Rechercher"> <span class="iconify" data-icon="mdi:magnify"></span> </button> </div> </div> <input type="hidden" name="do" value="search" /> </form> <!-- /navbar-searchform --> <ul class="nav navbar-nav"> <li> <span class="dw__actions dw-action-icon"> </span> </li> </ul> </div> </div> </div> </nav> <!-- navbar --> <div> <h1 class="page-header pb-3 mb-4 mt-5 page-header pb-3 mb-4 mt-5 page-header pb-3 mb-4 mt-5">Portail des services RENATER</h1> </div> </header> <a name="dokuwiki__top" id="dokuwiki__top"></a> <main role="main" class="dw-container pb-5 dokuwiki container-fluid mx-5"> <div id="dokuwiki__pageheader"> <!-- breadcrumbs --> <nav id="dw__breadcrumbs" class="small"> <hr/> <div class="dw__youarehere"> <ol class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li>Vous êtes ici </li><li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a href="/index" itemprop="item" title="index"><span itemprop="name"><span class="iconify" data-icon="mdi:home"></span><span class="sr-only">Home</span></span></a><meta itemprop="position" content="1" /></li><li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><span itemprop="name"><a itemprop="item" href="/sourcesup/index" class="wikilink1" title="sourcesup:index" >SourceSup : plate-forme d'hébergement de projets</a></span><meta itemprop="position" content="2" /></li><li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><span itemprop="name"><a itemprop="item" href="/sourcesup/code_quality/index" class="wikilink1" title="sourcesup:code_quality:index" >Analyse de code</a></span><meta itemprop="position" content="3" /></li></ol> </div> <hr/> </nav> <!-- /breadcrumbs --> <p class="text-right"> </p> <div id="dw__msgarea" class="small"> </div> </div> <div class="row"> <!-- sidebar --> <aside id="dokuwiki__aside" class="dw__sidebar col-sm-3 col-md-2 hidden-print"> <div class="dw-sidebar-content"> <div class="dw-sidebar-title hidden-lg hidden-md hidden-sm" data-toggle="collapse" data-target="#dokuwiki__aside .dw-sidebar-body"> <span class="iconify" data-icon="mdi:view-list"></span> Services collaboratifs </div> <div class="dw-sidebar-body collapse in small"> <!-- EDIT{"target":"plugin_include_start","name":"collaboration:sidebar","hid":"","secid":1,"range":"0-"} --><div class="plugin_include_content plugin_include__collaboration:sidebar" id="plugin_include__collaboration__sidebar"> <!-- EDIT{"target":"plugin_wrap_start","hid":"","secid":3,"range":"0-"} --><div class="wrap_accordion_menu plugin_wrap"> <h1 class="sectionedit5 page-header pb-3 mb-4 mt-5 page-header" id="services_collaboratifs">Services collaboratifs</h1> <!-- EDIT{"target":"section","name":"Services collaboratifs","hid":"services_collaboratifs","codeblockOffset":0,"secid":5,"range":"23-"} --><ul class="nav nav-pills nav-stacked"> <li class="level1 node"> <span class="wrap_menu_item">PARTAGE</span> <ul class="nav nav-pills nav-stacked"> <li class="level2"> <a href="/partage/index" class="wikilink1" title="partage:index" >Accueil</a> </li> <li class="level2"> <a href="/partage/faq" class="wikilink1" title="partage:faq" >FAQ utilisateur</a> </li> <li class="level2"> <a href="/partage/pour_les_groupes" class="wikilink1" title="partage:pour_les_groupes" >Gestion de groupes</a> </li> <li class="level2"> <a href="https://listes.renater.fr/wiki/partage-tech/prive/index" class="urlextern" title="https://listes.renater.fr/wiki/partage-tech/prive/index" rel="ugc nofollow">Documentation technique (accès réservé)</a> </li> </ul> </li> <li class="level1 node"> <span class="wrap_menu_item">Evento</span> <ul class="nav nav-pills nav-stacked"> <li class="level2"> <a href="/doc/evento/index" class="wikilink1" title="doc:evento:index" >Accueil</a> </li> <li class="level2"> <a href="/doc/evento/faq" class="wikilink1" title="doc:evento:faq" >FAQ</a> </li> <li class="level2 node"> <span class="wrap_submenu_item">Guide utilisateur</span> <ul class="nav nav-pills nav-stacked"> <li class="level3"> <a href="/doc/evento/guide_utilisateur/index" class="wikilink1" title="doc:evento:guide_utilisateur:index" >Accueil</a> </li> <li class="level3"> <a href="/doc/evento/guide_utilisateur/authentification/index" class="wikilink1" title="doc:evento:guide_utilisateur:authentification:index" >Se connecter à Evento</a> </li> <li class="level3"> <a href="/doc/evento/guide_utilisateur/creer_un_evento/index" class="wikilink1" title="doc:evento:guide_utilisateur:creer_un_evento:index" >Créer un Evento</a> </li> <li class="level3"> <a href="/doc/evento/guide_utilisateur/gestion_evento/index" class="wikilink1" title="doc:evento:guide_utilisateur:gestion_evento:index" >Gérer mes Eventos</a> </li> <li class="level3"> <a href="/doc/evento/guide_utilisateur/repondre/index" class="wikilink1" title="doc:evento:guide_utilisateur:repondre:index" >Répondre à un Evento</a> </li> <li class="level3"> <a href="/doc/evento/guide_utilisateur/resultats/index" class="wikilink1" title="doc:evento:guide_utilisateur:resultats:index" >Résultats d'un Evento</a> </li> <li class="level3"> <a href="/doc/evento/guide_utilisateur/calendriers/index" class="wikilink1" title="doc:evento:guide_utilisateur:calendriers:index" >Mes calendriers</a> </li> </ul> </li> <li class="level2 node"> <span class="wrap_submenu_item">Tutoriels</span> <ul class="nav nav-pills nav-stacked"> <li class="level3"> <a href="/doc/evento/tutoriels/index" class="wikilink1" title="doc:evento:tutoriels:index" >Accueil</a> </li> </ul> </li> <li class="level2 node"> <span class="wrap_submenu_item">Notes de version</span> <ul class="nav nav-pills nav-stacked"> <li class="level3"> <a href="/doc/evento/releases/1.8" class="wikilink1" title="doc:evento:releases:1.8" >Version 1.8.0</a> </li> <li class="level3"> <a href="/doc/evento/releases/1.7" class="wikilink1" title="doc:evento:releases:1.7" >Version 1.7.0</a> </li> <li class="level3"> <a href="/doc/evento/releases/1.6" class="wikilink1" title="doc:evento:releases:1.6" >Version 1.6.0</a> </li> </ul> </li> </ul> </li> <li class="level1 node"> <span class="wrap_menu_item">Filesender</span> <ul class="nav nav-pills nav-stacked"> <li class="level2"> <a href="/groupware/filesender/index" class="wikilink1" title="groupware:filesender:index" >Accueil</a> </li> <li class="level2"> <a href="/groupware/filesender/guide_utilisateur/index" class="wikilink1" title="groupware:filesender:guide_utilisateur:index" >Guide utilisateur</a> </li> </ul> </li> <li class="level1 node"> <span class="wrap_menu_item">Rendez-vous</span> <ul class="nav nav-pills nav-stacked"> <li class="level2"> <a href="/rendez-vous/index" class="wikilink1" title="rendez-vous:index" >Accueil</a> </li> <li class="level2"> <a href="/rendez-vous/guide_utilisateur/index" class="wikilink1" title="rendez-vous:guide_utilisateur:index" >Guide utilisateur</a> </li> </ul> </li> <li class="level1 node active"> <span class="wrap_menu_item">Sourcesup</span> <ul class="nav nav-pills nav-stacked"> <li class="level2"> <a href="/sourcesup/index" class="wikilink1" title="sourcesup:index" >Accueil</a> </li> <li class="level2"> <a href="/sourcesup/formation/index" class="wikilink1" title="sourcesup:formation:index" >Formation SourceSup-base</a> </li> <li class="level2"> <a href="/sourcesup/authentification" class="wikilink1" title="sourcesup:authentification" >Authentification et création de compte</a> </li> <li class="level2"> <a href="/sourcesup/intendance" class="wikilink1" title="sourcesup:intendance" >Intendance et accès au service</a> </li> <li class="level2"> <a href="/sourcesup/gestion_projet" class="wikilink1" title="sourcesup:gestion_projet" >Gestion d'un projet</a> </li> <li class="level2"> <a href="/sourcesup/gestion_utilisateurs" class="wikilink1" title="sourcesup:gestion_utilisateurs" >Gestion des utilisateurs</a> </li> <li class="level2"> <a href="/sourcesup/sshkey/index" class="wikilink1" title="sourcesup:sshkey:index" >Gestion des clés ssh</a> </li> <li class="level2"> <a href="/sourcesup/subversion/index" class="wikilink1" title="sourcesup:subversion:index" >Subversion</a> </li> <li class="level2"> <a href="/sourcesup/git/index" class="wikilink1" title="sourcesup:git:index" >Git</a> </li> <li class="level2"> <a href="/sourcesup/hooks/index" class="wikilink1" title="sourcesup:hooks:index" >Hooks</a> </li> <li class="level2"> <a href="/sourcesup/sympa/index" class="wikilink1" title="sourcesup:sympa:index" >Liste de diffusion, SYMPA</a> </li> <li class="level2"> <a href="/sourcesup/gestion_tache" class="wikilink1" title="sourcesup:gestion_tache" >Gestion des tâches</a> </li> <li class="level2"> <a href="/sourcesup/outils_de_suivi" class="wikilink1" title="sourcesup:outils_de_suivi" >Gestion de ticket</a> </li> <li class="level2"> <a href="/sourcesup/site_web" class="wikilink1" title="sourcesup:site_web" >Site web associé à un projet</a> </li> <li class="level2"> <a href="/sourcesup/integration_continue2/index" class="wikilink1" title="sourcesup:integration_continue2:index" >Jenkins : Intégration continue</a> </li> <li class="level2 active"> <a href="/sourcesup/code_quality/index" class="wikilink1" title="sourcesup:code_quality:index" data-wiki-curid="true">Sonar : Qualité de code</a> </li> <li class="level2"> <a href="/sourcesup/nexus" class="wikilink1" title="sourcesup:nexus" >Nexus : Dépôt d'artéfacts</a> </li> <li class="level2"> <a href="/sourcesup/mantis" class="wikilink1" title="sourcesup:mantis" >Mantis : Gestion de bugs</a> </li> <li class="level2"> <a href="/sourcesup/testlink" class="wikilink1" title="sourcesup:testlink" >TestLink : gestion de cas de tests</a> </li> <li class="level2"> <a href="/sourcesup/nuxeo" class="wikilink1" title="sourcesup:nuxeo" >Nuxéo : gestion électronique de documents</a> </li> <li class="level2"> <a href="/sourcesup/divers" class="wikilink1" title="sourcesup:divers" >Divers</a> </li> </ul> </li> <li class="level1 node"> <span class="wrap_menu_item">Universalistes</span> <ul class="nav nav-pills nav-stacked"> <li class="level2"> <a href="/groupware/universalistes/index" class="wikilink1" title="groupware:universalistes:index" >Accueil</a> </li> <li class="level2"> <a href="/groupware/universalistes/creer_une_liste" class="wikilink1" title="groupware:universalistes:creer_une_liste" >Créer une liste de diffusion</a> </li> <li class="level2"> <a href="/groupware/universalistes/faq" class="wikilink1" title="groupware:universalistes:faq" >Foire Aux Questions</a> </li> <li class="level2"> <a href="/groupware/universalistes/cgu" class="wikilink1" title="groupware:universalistes:cgu" >Condition d'utilisation</a> </li> <li class="level2"> <a href="/groupware/universalistes/wiki/index" class="wikilink1" title="groupware:universalistes:wiki:index" >Wiki associé à une liste</a> </li> <li class="level2"> <a href="/groupware/universalistes/enquetes/tutoriel" class="wikilink1" title="groupware:universalistes:enquetes:tutoriel" >Enquête associée à une liste</a> </li> <li class="level2"> <a href="/index" class="wikilink1" title="index" >Services à l'usage des groupes</a> </li> </ul> </li> </ul> </div><!-- EDIT{"target":"plugin_wrap_end","hid":"","secid":4,"range":"0-"} --><!-- EDIT{"target":"plugin_include_end","name":"collaboration:sidebar","hid":"","secid":2,"range":"0-"} --><!-- EDIT{"target":"plugin_include_editbtn","name":"collaboration:sidebar","hid":"plugin_include__collaboration__sidebar","secid":6,"range":"0-"} --></div> </div> </div> </aside> <!-- /sidebar --> <article id="dokuwiki__content" class="col-sm-9 col-md-10 " itemscope itemtype="http://schema.org/Article" itemref="dw__license"> <!-- /page-tools --> <div class="no-panel" itemprop="articleBody"> <div class="page "> <!-- page-icons --> <div class="dw-page-icons pull-right hidden-print"> <ul class="list-inline"> <li class="printpage"><a href="#" title="Imprimer" rel="nofollow" class="menuitem printpage"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="mdi-printer" width="24" height="24" viewBox="0 0 24 24"><path d="M18,3H6V7H18M19,12C18.45,12 18,11.55 18,11C18,10.45 18.45,10 19,10C19.55,10 20,10.45 20,11C20,11.55 19.55,12 19,12M16,19H8V14H16M19,8H5C3.34,8 2,9.34 2,11V17H6V21H18V17H22V11C22,9.34 20.66,8 19,8Z" /></svg><span>Imprimer</span></a></li> </ul> </div> <span class="clearfix"></span> <!-- /page-icons --> <div class="help modal fade" tabindex="-1" role="dialog"> <div class="modal-dialog modal-lg" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> <h4 class="modal-title"></h4> </div> <div class="modal-body px-5"></div> </div> </div> </div> <div class="dw-content-page "><!-- content --><div class="dw-content"><div class="plugin_fastwiki_marker" style="display:none"></div> <h1 class="sectionedit1 page-header pb-3 mb-4 mt-5" id="analyse_de_code">Analyse de code</h1> <div class="level1"> <p> <a href="http://www.sonarqube.org" class="urlextern" title="http://www.sonarqube.org" rel="ugc nofollow">Site officiel</a> </p> </div> <p> <h2 class="sectionedit2 page-header pb-3 mb-4 mt-5" id="presentation">1. Présentation</h2> </p> <div class="level2"> <p> Le serveur Sonar permet d'analyser le code d'un projet en fonction d'un ensemble de règle, et de présenter les résultats via une interface. </p> <p> Il peut analyser plusieurs langages comme JAVA, PHP, C++… </p> <p> Le résultat de l'analyse permet de dire si un projet respecte les normes de codage en vigueur, si du code est copier/coller dans plusieurs fichier au lieu d'être mutualisé, etc… Sonar fourni un bilan qualitatif du code du projet. </p> </div> <p> <h2 class="sectionedit3 page-header pb-3 mb-4 mt-5" id="plugin_integration_continue_sourcesup">2. Plugin Intégration continue SourceSup</h2> </p> <div class="level2"> <p> Ce plugin permet à un projet SourceSup d'utiliser un ensemble d'outils présent sur la forge relatifs à l'intégration continue. Ces outils sont : </p> <ul class=" fix-media-list-overlap"> <li class="level1"><div class="li"> Jenkins</div> </li> <li class="level1"><div class="li"> Sonar</div> </li> <li class="level1"><div class="li"> Nexus</div> </li> </ul> <p> Ils permettent d'avoir un cycle d'intégration continue plus complet, d'analyser le code source des projets et de mettre à disposition des artéfacts sur des dépôts. </p> <p> Le plugin se compose de 6 onglets : </p> <ul class=" fix-media-list-overlap"> <li class="level1"><div class="li"> La page d'accueil qui présente les informations générales du plugin, et indique aussi si le projet SourceSup est rattaché à des dépôts Nexus.</div> </li> <li class="level1"><div class="li"> L'onglet “vue Jenkins”, permet d'afficher l'outil Jenkins dans une iframe, afin de garder l'interface de SourceSup pour garder l'accès au reste de la forge.</div> </li> <li class="level1"><div class="li"> L'onglet “vue Sonar”, permet d'afficher l'outil Sonar dans une iframe, afin de garder l'interface de SourceSup pour garder l'accès au reste de la forge.</div> </li> <li class="level1"><div class="li"> L'onglet “vue Nexus”, permet d'afficher l'outil Nexus dans une iframe, afin de garder l'interface de SourceSup pour garder l'accès au reste de la forge.</div> </li> <li class="level1"><div class="li"> L'onglet “Administration Nexus, visible seulement par les administrateurs du projet, permet de créer des dépôts sur Nexus, attaché au projet SourceSup. Il est possible aussi de les supprimer.</div> </li> <li class="level1"><div class="li"> L'onglet “Administration Jenkins”, visible seulement par les administrateurs du projet, permet de créer un job sur Jenkins, attaché au projet SourceSup. Il est possible aussi de lancer ce job ainsi que de le supprimer.</div> </li> </ul> </div> <p> <h3 class="sectionedit4 page-header pb-3 mb-4 mt-5" id="activation">2.1 Activation</h3> </p> <div class="level3"> <p> Ce plugin s'active comme tous les autres dans la partie “Administration” d'un projet, au niveau de l'onglet “outils”. Il suffit de cocher la case “plugin intégration continue” et de valider le formulaire pour que le plugin soit accessible aux membres du projet. </p> </div> <p> <h2 class="sectionedit5 page-header pb-3 mb-4 mt-5" id="sonar">3. Sonar</h2> </p> <div class="level2"> </div> <p> <h3 class="sectionedit6 page-header pb-3 mb-4 mt-5" id="authentificationacces">3.1 Authentification / Accès</h3> </p> <div class="level3"> <p> Comme pour Jenkins, pas besoin de se créer un compte utilisateur sur Sonar. Une fois authentifié sur SourceSup, l'utilisateur qui accédera à Sonar sera automatiquement authentifié. </p> </div> <p> <h3 class="sectionedit7 page-header pb-3 mb-4 mt-5" id="fonctionnement">3.2 Fonctionnement</h3> </p> <div class="level3"> <p> Sonar va fonctionner de pair avec Jenkins et le module jenkins-sonar. Celui-ci permet de lancer l'analyse d'un projet par Sonar après le build effectué par Jenkins. Pour analyser un projet avec Sonar, il faudra donc passer par Jenkins. L'utilisateur qui va lancer le build sur Jenkins sera le propriétaire des résultats d'analyse sur Sonar. Un utilisateur accédant à Sonar ne verra que les analyses qu'il a lancé. Libre à lui ensuite d'ajouter des personnes au projet sous Sonar. </p> <p> Il y a plusieurs façon de lancer une analyse Sonar : </p> <ul class=" fix-media-list-overlap"> <li class="level1"><div class="li"> <strong>Sonar-scanner</strong> : Cette méthode est celle privilégiée. Pour appeler le sonar-scanner, ajouter une nouvelle étape de build <strong>“Lancer une analyse avec SonarQube Scanner”</strong>. Il va falloir préciser quelques options pour utiliser le sonar-scanner. Ceci peut être fait directement dans le job dans le champ texte “Propriétés du projet”, ou bien dans un fichier présent dans les sources du projet, dont le chemin sera précisé dans le champ “Chemin vers les propriétés du projet”.</div> </li> </ul> <ul class=" fix-media-list-overlap"> <li class="level1"><div class="li"> <strong>projet Mavenisé</strong> : ajouter l'action post-build 'Sonar' et lancer le build de votre projet, à la fin du build, maven lancera l'analyse sonar de votre code et vous pourrez voir le résultat en allant sur le serveur sonar.</div> </li> </ul> </div> <h4 id="sonar_scanner">Sonar Scanner</h4> <div class="level4"> <p> Le sonar-scanner se lance en lui précisant des paramètres obligatoires qu'il faut indiquer dans le champ texte “propriétés du projet”: </p> <ul class=" fix-media-list-overlap"> <li class="level1"><div class="li"> <strong>sonar.projectKey</strong>=identifiant du projet (exemple le nom unix du projet SourceSup)</div> </li> <li class="level1"><div class="li"> <strong>sonar.projectName</strong>=nom du projet</div> </li> <li class="level1"><div class="li"> <strong>sonar.projectVersion</strong>=version du projet (ex 1.0)</div> </li> <li class="level1"><div class="li"> <strong>sonar.sources</strong>=chemin vers les sources du projet (ex src/main/java)</div> </li> <li class="level1"><div class="li"> <strong>sonar.language</strong>=langage du code (ex : php)</div> </li> </ul> <p> d'autres paramètres peuvent être précisés : </p> <ul class=" fix-media-list-overlap"> <li class="level1"><div class="li"> <strong>sonar.tests</strong>=chemin vers les sources de tests (ex : src/test/)</div> </li> <li class="level1"><div class="li"> <strong>sonar.ma.propriété</strong>=valeur (paramètres additionnels)</div> </li> </ul> <div class="wrap_center wrap_round wrap_important plugin_wrap" style="width: 90%;"> <p> Pour pouvoir avoir les droits de voir le résultat de l'analyse Sonar, il est important de lancer le build d'un job à la main une fois. Ensuite le lancement du build peut être lancé automatiquement, après un commit par exemple, ou bien quotidiennement. Si un job a toujours été lancé automatiquement, et que celui-ci demande une analyse Sonar, les résultats ne seront pas visibles tant que le build du job n'aura pas été lancé par un des propriétaires du job. </p> </div> </div> <h3 class="sectionedit10 page-header pb-3 mb-4 mt-5" id="analyse_c">Analyse C++</h3> <div class="level3"> <p> Pour le langage C++, deux analyseurs sont installés, cppcheck ainsi que valgrind. Ils peuvent générer des rapports xml exploitable par Sonar. Pour cela rajouter au niveau du job jenkins une commande shell lançant l'exécution de ces outils : </p> <pre class="code">cppcheck --xml --xml-version=1 2> cppcheck-result.xml . valgrind --xml=yes --xml-file=valgrind-result.xml nom_programme</pre> <p> Puis au niveau des propriétés de lancement du Sonar Runner, rajouter : </p> <pre class="code">sonar.cxx.cppcheck.reportPath=cppcheck-result.xml sonar.cxx.valgrind.reportPath=valgrind-result.xml</pre> </div> <p> <h3 class="sectionedit11 page-header pb-3 mb-4 mt-5" id="mise_a_jourevolution">3.3 Mise à jour / Evolution</h3> </p> <div class="level3"> <p> Sonar sera mis à jour lors des sorties officielles. Un redémarrage du serveur Sonar peut être nécessaire pour la prise en compte des plugins / mises à jour, un mail préviendra les utilisateurs dans ce cas. </p> <p> Vous pouvez voir tous les plugins disponibles sur le site de sonar : <a href="http://docs.codehaus.org/display/SONAR/Plugin+Library" class="urlextern" title="http://docs.codehaus.org/display/SONAR/Plugin+Library" rel="ugc nofollow">liste officielle des plugins sonar</a> </p> <p> Pour ajouter un plugin qui ne serait pas installé sur notre plateforme, vous pouvez demander son installation à l'équipe de SourceSup à : <a href="mailto:mailto:support@renater.fr" class="mail" title="mailto:support@renater.fr">support</a>. La demande sera étudiée et le plugin sera installé si son utilité pour la plateforme est avérée. </p> </div> </div><!-- /content --></div> </div> </div> <div class="small text-right"> <span class="docInfo"> <ul class="list-inline"><li><span class="iconify text-muted" data-icon="mdi:calendar"></span> Dernière modification : <span title="2023/12/20 16:55">2023/12/20 16:55</span></li></ul> </span> <span class="loginLink hidden-print"> <a href="/sourcesup/code_quality/index?do=login&sectok=" title="S'identifier" rel="nofollow" class="menuitem login"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M10 17.25V14H3v-4h7V6.75L15.25 12 10 17.25M8 2h9a2 2 0 0 1 2 2v16a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2v-4h2v4h9V4H8v4H6V4a2 2 0 0 1 2-2z"/></svg> S'identifier</a> </span> </div> </article> </div> </main> <footer id="dw__footer" class="dw-container py-5 dokuwiki container-fluid"> <div class="row"> <div class="col-sm-12 col-lg-5"> <div class="col-sm-2"> <img src="/_media/republique-francaise-logo.svg" alt="logo de la république française"> </div> <p class="col-sm-10">© RENATER 2023 - <a href="https://www.renater.fr" target="_blank" title="Vers le site web de RENATER - Nouvel onglet"> www.renater.fr</a> </p> </div> <ul class="page-links cell col-sm-12 col-lg-7 fix-media-list-overlap fix-media-list-overlap fix-media-list-overlap fix-media-list-overlap fix-media-list-overlap fix-media-list-overlap fix-media-list-overlap fix-media-list-overlap"> <li><a href="/sitemap" title="Plan du site"> Plan du site</a></li> <li><a href="https://www.renater.fr/donnees-personnelles-et-cookies/" target="_blank" title="CGU - Nouvel onglet"> CGU</a></li> <li><a href="https://www.renater.fr/mentions-legales/" target="blank" title="Mentions Légales - Nouvel onglet">Mentions Légales</a></li> <!-- <li><a href="/accessibility" target="_self" title="Accessibilité">Accessibilité : partiellement conforme</a></li> <li><button data-open="about_reveal" title="À propos" aria-controls="about_reveal" aria-haspopup="dialog" tabindex="0">À propos</button></li> --> </ul> </div> </footer> <a href="#dokuwiki__top" class="back-to-top hidden-print btn btn-default" title="Aller au contenu" accesskey="t"> <span class="iconify" data-icon="mdi:chevron-up"></span> </a> <div id="screen__mode"> <span class="visible-xs-block"></span> <span class="visible-sm-block"></span> <span class="visible-md-block"></span> <span class="visible-lg-block"></span> </div> <img src="/lib/exe/taskrunner.php?id=sourcesup%3Acode_quality%3Aindex&1740559348" width="2" height="1" alt="" /> </div> </body> </html>