Outils de développement pour Java Marc Christie. LPMI Techniques de Développement



Documents pareils
Les Outils de Développement pour Java

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

Initiation à JAVA et à la programmation objet.

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Programmer en JAVA. par Tama

JOnAS Day 5.1. Outils de développements

as Architecture des Systèmes d Information

SonarQube : une autre vision de votre logiciel

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Environnements de développement (intégrés)

Plan du cours. Historique du langage Nouveautés de Java 7

TP1 : Initiation à Java et Eclipse

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/ Vue générale 2 - Mon premier programme 3 - Types de Programme Java

L Intégration Continue & Agilité

RN2-Programmation Orientée Objet - JAVA CH 1 Introduction à la POO et Java

ÉVALUATION DE LA MAINTENABILITÉ DE S3MDSS AVEC L OUTIL SONAR

Vulgarisation Java EE Java EE, c est quoi?

Cours de Java. Sciences-U Lyon. Java - Introduction Java - Fondamentaux Java Avancé.

Les Outils de Développement pour Java. Didier Donsez

Bases Java - Eclipse / Netbeans

Programmation en Java IUT GEII (MC-II1) 1

Derrière toi Une machine virtuelle!

Java Licence Professionnelle CISII,

Instrumentation de code Java

Projet de développement. Introduction à Eclipse. Application à votre projet. Philippe Collet. Organisation. Cours 1 : principes généraux - svn

TP1. Outils Java Eléments de correction

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Avant-propos 1. Avant-propos Organisation du guide À qui s'adresse ce guide?...4

Glassfish dans le milieu médical. Sun Aquarium Paris 26 Juin 2009 Jacky Renno

Java Avancé. Le langage Java. Rémi Forax

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki

INITIATION AU LANGAGE JAVA

TechSoftware Présentations

INF2015 Développement de logiciels dans un environnement Agile Examen final hiver 2015

Présentation de Java. Olivier de Pertat IT GROUP

Projet de développement

Programmeur Java 1.4 et 5.0

ECLIPSE ET PDT (Php development tools)

INGÉNIEUR LOGICIEL JAVAEE / GROOVY 8 ANS D EXPÉRIENCE

Construction et déploiement d applications Java avec Maven, Archiva, Groovy et Jenkins

Votre premier projet Android

Introduction au langage C

Introduction à Java. Philippe Genoud.

Construire des plug-ins pour SAS Management Console SAS 9.1

7 Développement d une application de MapReduce

Java Licence Professionnelle CISII,

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Rapport de Synthèse. Création d un Générateur de modèle PADL pour le langage C++ Sébastien Colladon

Environnements de développement (intégrés)

Java pour le Web. Cours Java - F. Michel

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

Java - la plateforme

Web Tier : déploiement de servlets

TD/TP 1 Introduction au SDK d Android

Cours Plugin Eclipse. Université Paris VI / Parcours STL / Master I Pierre-Arnaud Marcelot - Iktek - pamarcelot@iktek.com

Introduction aux Machines Virtuelles avec VMKit

Algorithmique et Programmation, IMA

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines)

La technologie Java Card TM

Tutoriel code::blocks

Développement d'applications Web HTML5 L'art et la manière avec Visual Studio 2015 et TFS

Évaluation et implémentation des langages

Machines virtuelles. Brique ASC. Samuel Tardieu Samuel Tardieu (ENST) Machines virtuelles 1 / 40

Cours 1: Java et les objets

Application Web et J2EE

1. Installation d'un serveur d'application JBoss:

Introduction à Eclipse

Catalogue Formation «Vanilla»

Application de lecture de carte SESAM-Vitale Jeebop

Eclipse atelier Java

Plateforme de capture et d analyse de sites Web AspirWeb

PHP 5.4 Développez un site web dynamique et interactif

Apprendre Java et C++ avec NetBeans

Formation IQ JAVA. Formation IQ JAVA V1.1 1

Une introduction à Java

et de suivi de la corpulence des enfants

Langage Java. Classe de première SI


Vérifier la qualité de vos applications logicielle de manière continue

1.3 Gestion d'une application

FusionInventory. Guillaume Rousse Journées francophones de Perl 2011

Installation et prise en main

Bonnes Pratiques de Développement PHP. Pascal MARTIN SQLI Forum PHP 2009, Paris

Machine virtuelle Java pour Palm TX

ACTIVITÉ DE PROGRAMMATION

Hudson Serveur d Intégration Continue. Adrien Lecharpentier IR3 Ingénieurs2000, Université de Marne la Vallée

Auteur LARDOUX Guillaume Contact Année 2014 DEVELOPPEMENT MOBILE AVEC CORDOVA

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Cursus Sage ERP X3 Outils & Développement. Le parcours pédagogique Sage ERP X3 Outils et Développement

Gestion de tests et tests de performance avec Salomé-TMF & CLIF

Transcription:

Outils de développement pour Java Marc Christie LPMI Techniques de Développement

Plan Documentation Organisation de code Deboggage Précompilation et rétrocompilation Ofuscation Analyse de code Analyses lexicales et grammaticales

Documentation Javadoc (je ne vous apprends rien!) Fonctionne par instrumentation du code @author, @deprecated, @exception,@param @see, @serial, @serialfield,@serialdata @return, @link, @version, @since, @throws Possibilité d'ajout de format HTML dans la doc Génère les formats HTML, XML, RTF, LaTeX, Man,...

Documentation Exemple pour une classe /** * A class representing a window on the screen. * For example: * <pre> * Window win = new Window(parent); * win.show(); * </pre> * * @author Sami Shaio * @version %I%, %G% * @see java.awt.basewindow * @see java.awt.button */ class Window extends BaseWindow {... }

Documentation Exemple pour un attribut de classe /** * The X-coordinate of the component. * * @see #getlocation() */ int x = 1263732;

Documentation Exemple pour une méthode /** * Returns the character at the specified index. An index * ranges from <code>0</code> to <code>length() - 1</code>. * * @param index the index of the desired character. * @return the desired character. * @exception StringIndexOutOfRangeException * if the index is not in the range <code>0</code> * to <code>length()-1</code>. * @see java.lang.character#charvalue() */ public char charat(int index) {... }

Normes de Programmation Facilite la relecture des sources (80% de la durée de vie d'un logiciel est consacré à la maintenance) Il existe plusieurs normes, celle de SUN étant la principale (java.sun.com/docs/codeconv) Définit : Nom des classes, méthodes, attributs Organisation des structures de contrôle (itératives, conditionnelles, exception) Il existe des outils de vérification (CheckStyle)

Normes de Programmation Exemple : Packetages en minuscule Classe MajusculePourLaPremiereLettreDeChaqueMot Interface MajusculePourLaPremiereLettreDeChaqueMot Méthodes minusculepourlapremierelettre() Constantes MAJUSCULES_AVEC_UNDERSCORE Variables minusculepourlapremierelettre Méthode de conversion vers X: X tox() Accesseur get : X gety() Accesseur set : void sety(x val)

Outil CheckStyle Vérfie : Conventions de nommage Entetes Imports Commentaires Javadoc Longueurs de structures, fichiers, méthodes,... Formattage du code (gestion des blancs) Ordre des modificateurs (public, protected,...static...final...) Formattage des accolades sur les blocs Codage (pb d'initialisation, default switch, throws, simplification d'expressions booléennes...) Design de classes (visibilité, extension possible...) Code dupliqué Métriques (couplage de classes, nombre cyclomatique)

Portabilité Identifie les problèmes de portabilité (vérification des normes Java car les compilateurs présentent des différences) Outils : JavaPureCheck (Sun) Ouvrage Web 100% PureJava CookBook Guide le développeur vers a 100% compliance Donne des règles

Outils de reformatage & qualité Reformatage Jindent Jalopy Javastyle Qualité : Métriques sur le code JMetra Nombre de paquetages, métodes, interfaces Sources non commentés PMD Variables inutilisées, non initialisées Blocs (catch, if, while) vides Imports identiques multiples Méthodes privées inutilisées JDepend

Outil JDepend Métriques classiques # de classes, d'interfaces et de package Couplage de classes Couplage afferent (qui dépend de cette classe?) Couplage efferent (quelles classes dépendent de cette classe?) Cycles de dépendances de classes

Jalopy Outil paramétrable de reformatage de sources (jalopy.sourceforge.net) Gestion des accolades Gestion des espaces Indentation Wrapping de lignes Séparation de code Autogénération de Javadoc (classes, méthodes, arguments de méthodes) Templates header (entête) et footer (bas de page)

Organisation Make, gmake Ant Maven Outil d'automatisation des tâches Regroupe et automatise les bonnes pratiques : Build, docs, reporting Dépendences, Vesionning Releases, Distributions Créee une organisation uniforme des répertoires Gère des informations de qualité sur le code Propose toutes les cibles courantes

Outils de Tests Tests unitaires Junit Automatise la tâche de tests Suites de Tests Tests de couverture Clover (www.cenqua.com/clover) : Couverture des tests unitaires : quelles sections de code n'ont pas été couvertes par les tests? Donne une indication de la qualtié des tests Reporting (PDF, HTML) Intégration dans Eclipse, NetBeans, JBuilder... Extensions pour Maven et Ant

Outils de Tests Tests de performance server en applications réparties (tests d'intégration) Cactus(jakarta.apache.org/cactus Tests des Servlets, EJB, Tag Libs, Filters... Facilite l'écriture et le reporting de tests Intégration par plugin dans Ant, Maven, Eclipse Tests d'applications Web HttpUnit (httpunit.sourceforge.net) Prend la place d'un browser Maintien des sessions, cookies,...

Maven Un build uniforme Basé sur POM (Project Object Model) Beaucoup d'extensions possibles Qualité de projet Changelog Mailing lists Dépendences des jar Tests unitaires et de couverture Bonnes pratiques Tests maintenus à part des sources Conventions de nommage des tests Release Management et Tracking (bugs/features)

Organisation : Maven (1) Fichier pom.xml <project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/mavenv4_0_0.xsd"> <modelversion>4.0.0</modelversion> <groupid>com.mycompany.app</groupid> <artifactid>my-app</artifactid> <packaging>jar</packaging> <version>1.0-snapshot</version> <name>maven Quick Start Archetype</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupid>junit</groupid> <artifactid>junit</artifactid> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project>

Organisation : Maven(2) Compilation : mvn compile JAR : mvn jar Tests : mvn test Package : mvn package Installation : mvn install Nettoyage : mvn clean Site Web : mvn site

Déboggage Symbolique Option de compilation: -g, -g:source,vars,lines Accès en ligne de commande : jdb Accès par des interfaces Permet : Pas à pas Point d'arrêts (simples ou conditionnelles) Exploration des structures de données Traces (pile, mémoire, procédures...)

Traces et Journalisation Traces Principe : instrumenter le code Mais ralentit l'execution Journalisation Enregistrement d'évènements dans un journal Outil Log4J, ObjectWeb MonoLog

Journalisation(1) Log4J Propose différents niveaux de logs DEBUG < INFO < WARN < ERROR < FATAL Propose différentes cibles Fichiers, consoles, GUI, sockets,... Possibilité de définir différentes Loggers Par classe, par package, par hiérarchie, par fonctionnalité Pratique pour du client/server (log client/log server) Configuration à l'execution Formatage des sorties Faible surcoût à l'execution

Journalisation(2) // cree un logger nommé "com.foo" Logger logger = Logger.getLogger("com.foo"); logger.setlevel(level.info); Logger barlogger = Logger.getLogger("com.foo.Bar"); // affiché à l'écran car WARN >= INFO. logger.warn("low fuel level."); // non affiché car DEBUG < INFO. logger.debug("starting search for nearest gas station."); // herite des propriétés de com.foo barlogger.info("located nearest gas station."); // non affiché car DEBUG < INFO. barlogger.debug("exiting gas station search");

Vérification(1) Par assertion (une hypthèse qui doit être vérifiée) Ex : assert x >0 && x < MAX_VALUE Vérification des pré/post conditions et des invariants de boucle Outils : J2SE1.4 AssertMate Icontract JavaFAQ

Vérification(2) Exemple : int toto(int x) { // precondition assert x > 0 && x < MAX_VALUE;... traitement... // postcondition assert x > 0 && x < MAX_VALUE; }... // invariant de classe, de boucle... assert balanced(); Activation : java -ea:<class> -da:<class> main.class

Précompilation Objectifs : à partir d'un seul fichiers source, générer différents fichiers java Avec trace/sans trace Avec assertion/sans assertion Avec optimisation/sans optimisation Comment? Directives de précompilation et symboles #include, #define, #ifdef Exemple : Mocha Source Obfuscator

Refactoring Refactoring = réorganisation d'un ensemble de sources Modification de la hiérarchie, des noms de classes, de méthodes... Comment? Par rétro-compilation Génération d'un.java à partir d'un.class (décompilation du bytecode) Imaginez les risques industriels Droits d'auteurs, piratage, espionnage industriel

Ofuscateur Objectif : éviter la rétro-compilation Comment? Brouillage des noms de classe/méthode/variable Mélange des propriétés d'accès Suppression de l'info de débuggage Outils : Décompilateurs : Javap, WingDis, NMI's code viewer, JAD, DeCafe Ofuscateurs : Mocha Source Ofuscator, Jmange,...

Inspection de code Objectifs : inspecter, transformer et générer du bytecode Comment? L'AOP (Aspect Oriented Programming) Pose des points de coupe dans le source/bytecode Insère/remplace/supprime des trairements Outils AspectJ, JAC, AOP

Distributions & Installations Objectifs : faciliter la création et l'installation des packages Jar, Fichiers ressources, icones, Manfest Dépendances Vérification de l'environnement (Jvm, versions, extensions...) Comment? Outils Jar file, OSGi bundle, Jpackage InstallShield, SuperPimp, IZPack, Ant, RPM Java Plugin/Java Web Start

Licences Etat des lieux 50% d'utilisation illégale en Europe 95% en Asie, Amérique latine, Europe Pertes financières importantes Vérification software Utilisateur, société, adresse MAC et clé Vérification hardware Par dongle ou smartcard

Mesure de Performances Outils : Java Xrunhprof Profiling du tas (heap) Usage CPU (temps, pourcentage du temps, et nbre d'appels de toutes les méthodes) Sorties fichiers Threads... Sortie sur fichier, socket,... Exemple : java -Xrunhprof:heap=dump,cpu=times,file=log.txt JVMStat (java.sun.com/performance/jvmstat)

Optimisation des performances Moteur de script Java Jython (jython.sourceforge.net Interpréteur de Bytecode Compilateur natif Permet de passer un.class en.c puis.exe Compilateur à la volée JIT (Just-In-Time) Optimiseur HotSpot Garbage collector Inlining

Compilateur natif Permet la transformation d'un fichier java en code C Très performant Empreinte mémoire réduite (pr embarqué) Evidemment dépendant de la cible Outils : GCJ (gcc.gnu/org/java) www.towerj.com sourceware.cygnus.com/java

Compilateur à la volée Compilateur Just In Time (Symantec) Comment ça marche? Compilation du bytecode vers le langage machine puis exécution Mais : Consommation mémoire Durée de compilation

Optimisation HotSpot(tm) Compilation à la volée des sections critiques Généralement 5% du bytecode occupe 96% du CPU On ne compile à la volée que ces sections Jikes RVM JVM écrite en Java Benchmark sur les JVM Sun, Symantes, IBM, Kaffe

Analyse Lexicale et grammaticale Permet de faire un parser en Java à partir d'une grammatire et d'action Outils : Analyse grammaticale (LALR) JavaCC AntLR BYACC QJJ Analyse Lexicale JavaLex

Bibliographie Cours Didier DONSEZ J. Shirazi Java Performance Tuning, Ed. Oreilly, 2000 R. Hightower, Nicholas Lesiecki, Java Tools for Extreme Programming: Mastering Open Source Tools, including Ant, JUnit and Cactus, Ed. Wiley, 2001 E. Burke, B. Coyner, Java Extreme Programming Cookbook, Ed. Oreilly, 2003