IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Java et detection du code mort


Sujet :

Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 4
    Par défaut Java et detection du code mort
    Bonjour,

    je viens d'hériter d'un assez gros projet en java (800 000 lignes de code). Nous suspectons d'avoir pas mal de code mort mais nous avons des difficultés pour l'identifier. Mon but est de me consacrer aux méthodes PUBLIC non utilisées dans un premier temps.

    1. Nous avons en fait 400 projets Eclipse avec des dépendances dans tous les sens. Chaque projet est généré Le résultat est qu'Eclipse n arrive pas à ouvrir tous les projets en même. Des outils d'analyse de code mort sont dc impossible.
    2. Nous avons pour quasiment chaque méthode des TUs associés. C est super mais si la méthode n'est pas utilisé, elle reste qd même non détecté en tant que code mort puisqu'elle est référencé. La bonne nouvelle est que tous les TUs sont un fichier appellé *test*.java.

    Je suis nouveau dans le monde java et je voudrais savoir s'il y a des outils permettant de détecter le code mort dans des cas pareils.
    J'envisage sinon une manière assez brutal de recherche. Pour chaque méthode public, je les change en private et je regarde si la compil passe ou pas (en excluant la partie TU). Si la compil passe ca veut dire que la méthode n'est pas référencée. Si elle ne passe pas, je sais que la méthode est référencée.
    L'approche est assez lourde mais je pense que ca marche. Avez vous des conseils ou une approche plus simple.

    MErci

  2. #2
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Par défaut
    Et comment ça se passe le build de tout ça ? Il n'y a aucune plateforme d'intégration continue type Jenkins en place ? Personnellement je t'orienterais vers Sonar. Couplé avec un Jenkins, tu aurais une analyse assez complète je pense.

    Et concernant ton mode d'approche je dirais qu'il est assez risqué. Avoir un code qui compile n'est pas synonyme d'une application qui fonctionne. Donc tu n'auras aucune garantie d'avoir induit des régressions que tu ne sais pas identifier.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  3. #3
    Rédacteur

    Avatar de autran
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2015
    Messages
    1 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 1 241
    Billets dans le blog
    55
    Par défaut
    Je te rassures il y a plusieurs approches : Verticales (top-down ou bottom-up), environnementales, scenario de dépyramidage
    Déjà pour le build, utilises-tu Maven ?
    Développeur Java
    Site Web

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 4
    Par défaut
    Merci pour vos réponses

    pour le build nous sommes entrain de passer sous Gradle. Ca va nous permettre d'un peu mieux maitriser nos dépendances.

    Je suis interessé par les différents types de méthodes ...

  5. #5
    Rédacteur

    Avatar de autran
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2015
    Messages
    1 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2015
    Messages : 1 241
    Billets dans le blog
    55
    Par défaut
    Ok john,

    Je dois t'avouer que je ne connais pas gradle car à l'époque où j'avais regardé, il proposait de faire des trucs sympa mais tout était en groovy et je n'avais pas envie de me mettre à ce langage (bon ok j'avais la flemme).

    Si ton projet est déjà mavenisé, tu peux faire une analyse avec sonar pour identifier ton code mort.
    Si ça trouve tu vas pouvoir te délester de 30% de ton code

    Si ton projet ne l'est pas (mavenisé) heu ....... t'es un peu dans la m_-_-_-e parce que presque 0.8 million de lignes sans un outil de build

    Supposons que tu en sois là. c'est un peu comme dans le sketch de Biggard, la chauve-souris t'en veut personnellement. Elle t'a ciblé .
    Mais bon tu as encore un peu d'espace pour t'en sortir grâce à tous tes TU qui te permettront d’alléger le volume de ton source et de pouvoir ainsi ouvrir l'ensemble allégé des TU dans Eclipse. Et là tu fais un coup de codepro pour détecter ton code mort.
    Développeur Java
    Site Web

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Loin d'être un travail trivial si vous partez d'une approche bottom-up :

    - https://developers.google.com/java-d...wnload-codepro, Codepro semble s'arrêter à Eclipse Indigo : quelqu'un à réussi à l'utiliser avec un version plus récente ? (voir https://marketplace.eclipse.org/cont...depro-analytix …)
    - l'analyse de couverture avec SONAR va vous amener dans les plaisirs de l'installation de JaCoCo dans un projet maven avec tous les problèmes de compatibilité entre versions des plug-ins Maven, du plug-in JaCoCo et du serveur SONARQUBE lui-même...
    sans parler des bugs de certains outils d'analyse de byte code pas encore à jour et qui ne reconnaissent pas quelques séquences de code générées par certains compilateurs récents (dont AspectJ) et qui vont générer des fausses alertes en pagaille (du genre "Redundant nullcheck of this, which is known to be non-null in" sur un return d'une valeur locale à la fin d'une méthode... ou encore plus amusant "Dead store to $L0" à l'entrée de certaines méthode static...)
    … et sans perdre de vue que tout ce qui sera signalé comme code mort ne l'est pas nécessairement vraiment, d'abord parce que dans un projet de cette taille il est certain que les test unitaires ne couvrent pas 100% du code, que tout ce qui peut dépendre de circonstances liées à l'environnement ne peut pas toujours être testé statiquement, tout code liée dynamiquement risque de passer inaperçu (que ce soit des scripts ou des jars chargés dynamiquement…), etc.


    A votre place je partirais en top-down :
    de l'analyse fonctionnelle, extraire ce qui est encore utilisé et commencer par enlever le dead-code de haut niveau, vous verrez déjà plus clair dans la structure générale du code
    De plus vous pouvez arrêter le processus quand vous estimerez avoir atteint un niveau de nettoyage suffisant, car plus vous descendrez plus vous serez dans des couches "utilitaires" dont le nettoyage sera de moins en moins rentable...
    et de plus en plus "risqué"...




  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 4
    Par défaut
    Merci pour vos réponses en tout cas.

    Je vois que le problème n'est pas simple et je voulais déjà passer par une méthode sans trop d analyse à vrai dire.
    Je vais essayer ma méthode brutale en changeant les méthodes public en private plugin par plugin et en recompilant le tout. Je sais qu'il y a des limites à l'exercice (le temps) mais si je peux déjà dégager une partie du code comme ca, ca sera bien.
    Le reste se fera par analyse fonctionnelle.

    Je vous tiens au courant car je ne pense pas que je sois le seul avec cette problématique.

  8. #8
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Par défaut
    Citation Envoyé par JohnJavaDoe Voir le message
    Je vais essayer ma méthode brutale en changeant les méthodes public en private plugin par plugin et en recompilant le tout. Je sais qu'il y a des limites à l'exercice (le temps) mais si je peux déjà dégager une partie du code comme ca, ca sera bien.
    Le reste se fera par analyse fonctionnelle.
    Je déconseille vraiment cette façon de faire. A travers ce sujet, tu as eu plusieurs pistes de départ. A ta place, je prendrais le temps de mettre en place l'une ou l'autre de ces façons de faire.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

Discussions similaires

  1. Detecter le code mort
    Par Kaoutchou dans le forum EDI/Outils
    Réponses: 1
    Dernier message: 04/10/2009, 20h44
  2. Réponses: 3
    Dernier message: 23/12/2008, 22h34
  3. Outils de détection de code mort
    Par maloups dans le forum JSF
    Réponses: 7
    Dernier message: 18/09/2007, 17h23
  4. detection de code barre
    Par wincroc dans le forum Windows
    Réponses: 1
    Dernier message: 20/08/2007, 18h13
  5. Fonction qui detecte les liens morts
    Par Death83 dans le forum Langage
    Réponses: 9
    Dernier message: 17/10/2006, 18h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo