Home
Manual de usuario Fecha: 07/08/2007 Referencia:
Contents
1. Preferences type Filter kext PMD Plugin options regc Y E Runi Debug E Server H Team z validation E Veloeclipse E Web and XML El Web Services CPD Preferences Rules configuration Violations review parameters H General H AndraMDA PMD General Preferences H Ant General options H Data M Show PMD perspective when checking code H Help Install Update Enable dataflow anomaly analysis experimental H Internet Maximum reported violations per File per rules H Java S H MyEclipse 2 E Plug in Development SIE jv Use PMD style i NOPMD comment Additional text to be appended to review comment by 0 on 1 Sample bv gbruna on 7 08 06 13 10 Logging options Log file name pmd eclipse log Browse Log level WARM Restore Defaults Apply oa Se accede al apartado indicado como PMD pudiendo configurar entonces preferencias generales como los par metros de revisi n de violaciones y las opciones del fichero de Log PMD permite crear nuevas reglas quitar reglas editar reglas existentes importar y exportar reglas y PMD Manual de usuario 6 49 p Eusko Jaurlaritzaren Informatika Elkartea e Sociedad Inform tica del Gobierno Vasco Es d limpiar las existentes Antes de proceder a realizar cualquier tarea de importaci n o de edici n de reglas es aconsejable realizar una copia de seguridad de las existentes para evitar p
2. Eusko Jaurlaritzaren Informatika Elkartea I Sociedad Inform tica del Gobierno Vasco PMD Manual de usuario Fecha 07 08 2007 Referencia EJIE S A Mediterr neo 3 Tel 945 01 73 00 Fax 945 01 73 01 01010 Vitoria Gasteiz Posta kutxatila Apartado 809 01080 Vitoria Gasteiz www ejie es Este documento es propiedad de EJIE S A y su contenido es confidencial Este documento no puede ser reproducido en su totalidad o parcialmente ni mostrado a otros ni utilizado para otros prop sitos que los que han originado su entrega sin el previo permiso escrito de EJIE S A En el caso de ser entregado en virtud de un contrato su utilizaci n estar limitada a lo expresamente autorizado en dicho contrato EJIE S A no podr ser considerada responsable de eventuales errores u omisiones en la edici n del documento Eusko Jaurlaritzaren Informatika Elkartea Sociedad Inform tica del Gobierno Vasco Control de documentaci n C digo Versi n 1 1 Fecha 30 04 2009 Resumen de cambios Uso de NOPMD Actualizaci n a versi n 4 0 Versi n 1 0 Fecha 07 08 2007 Resumen de cambios Primera versi n Primera versi n Responsable Ander Mart nez Aprobado por Ander Mart nez Firma Fecha Distribuci n Autor Consultor a de reas de conocimiento Nombre archivo PMD Manual de usuario vn n doc Localizaci n PMD Manual de usuario 2 49 PMD Manual de usuario Eusko Jaurlaritzaren I
3. Elegimos la opci n del men File gt gt New Project y seleccionamos dentro de la categor a Plug in development el elemento Fragment Project A continuaci n pulsamos el bot n Next Damos un nombre al proyecto un nombre de un proyecto Plug in normalmente se escribe como el nombre de un paquete por ejemplo com foo pmd rules En la siguiente ventana seleccionamos el Fragment ID por defecto el mismo nombre del proyecto Tambi n seleccionamos el Plug in ID el cual debe hacer referencia al ID de un plug in existente para el workspace en nuestro caso net sourceforge pmd core E New Fragment Project i xj Fragment Content z Enter the data required to generate the Fragment Fragment Properties Fragment ID com pruebas pmd reglas Fragment Version 1 0 0 Fragment Mame Rules2 Fragment Fragment Provider PRLIEBAS Classpath Host Plug in Plug in ID net sourceforge pmd core Browse Minimum Version 3 7 0 Inclusive y Maximum Version Exclusive cma Una vez creado un proyecto Plug in Fragment la estructura obtenida ser similar a la siguiente BA JRE System Library j2sdk1 4 2 08 Plug in Dependencies META INF El MANIFEST MF Ini build properties Implementar las reglas Ya hemos visto en un apartado anterior c mo implementar reglas personalizadas Vamos a hacer uso en PMD Manual de usuario 33 49 Eusko Jaurlaritzaren Informatika Elkartea e S
4. Parameter username is not assigned and could be declared final StringBuffer constructor is initialized with size 16 but has at least 494 characters appended l StringBuffer append is called 32 consecutive 112 isrc com eurohelp petstore dao jdbc AccountDaoImpl java 56 times with literal Strings Use a single append E with a single String a The String literal WHERE appears 5 times in this file the first occurrence is on line 78 i erre NOR NA AR RAIDER LUI UULTUS RO OS Los resultados se muestran en cuatro columnas e La primera columna asocia un n mero incremental a cada uno de los problemas encontrados tras realizar la verificaci n del c digo de un proyecto nos permite conocer el n mero total de problemas e La segunda File muestra la clase para la que se ha detectado el problema puede haber m s de un aviso por clase como se muestra en el informe anterior e La tercera Line muestra el n mero de l nea de c digo en la que se ha detectado dicho problema e La ltima columna Problem muestra la descripci n del problema que ha causado el aviso de PMD descripci n relacionada con una clase espec fica dentro de un conjunto concreto de reglas de validaci n habilitado para realizar la verificaci n del c digo 3 3 2 Eliminar incidencias revisadas Uso de NOPMD Existe la posibilidad de acceder a la vista Violations Outline donde se describen los errores encontrados para una clase conc
5. n se seleccionar la opci n Properties como muestra la imagen superior Se mostrar la ventana Properties for s73aPetStoreWar que muestra las propiedades del proyecto seleccionado y se activar la casilla Enable PMD Dejaremos activas todas las casillas correspondientes a cada una de las reglas existentes para realizar la verificaci n del c digo considerando todas y cada una de ellas Podr an considerarse diferentes reglas en funci n del proyecto a verificar M Properties for s73aPetStoreWar j El xl type filter text PMID y Info BeanInfo Path V Enable PMD Builders i I Chacketyis Include derived Files FreeMarker Context No working set is selected Hibernate Settings Java Build Path Select a working set Java Code Style FH Java Compiler Select rules For this project Javadoc Location 2 MyEclipse AbstractClasswWithoutAbstractMet Warning high The abstract class does not contain 1 PMD AbstractNaming Warning high Abstract classes should be named A Project References AccessorClassGeneration Warning high Instantiation by way of private cons AppendCharacterWithChar Warning high Avoid concatenating characters as s ArrayIsStoredDirectly Warning high Constructors and methods receiving AssignmentInOperand Warning high Avoid assigments in operands this c AssignmentToNonFinalStatic Warning high Identifies a possible unsafe usage of AtLeastOneConstru
6. Deselect All Working Set 1 out of 1 selected Destination Options JAR Signing Directory C Documents and Settingsimlgurrealworkspace 3 2 1 y Browse C Archive file PMD Manual de usuario 34 49 Eusko Jaurlaritzaren Informatika Elkartea e Sociedad Inform tica del Gobierno Vasco Podremos observar que se nos habr creado en el directorio de destino una nueva carpeta plugins en la que aparecer el archivo jar creado en nuestro caso com pruebas pmd rules_1 0 0 ar Carpetas x 3 2 03 workspace 3 2 1 com pruebas pmd rules_1 0 0 jar E metadata 3 com pruebas pmd rules Gm Instalar el fragmento Para instalar el fragmento descomprimiremos la distribuci n del paquete en el directorio plug ins del Eclipse y lo reiniciaremos MyEclipse Enterprise Workbench 5 1 0 GAYeclipseYplugins Nombre com atlassw tools eclipse checkstyle_4 1 0 C3 com pruebas pmd rules 1 0 0 net sf eclipsecs stats 1 0 0 L net sourceforge pmd core 3 7 0 S lo queda entonces activar el conjunto de reglas personalizadas y para ello como ya hemos visto abriremos Window Preferences y seleccionaremos Rules configuration dentro de la categor a PMD Pulsaremos sobre el bot n Import rule set y seleccionaremos el archivo XML de definici n del conjunto de reglas creado para el ejemplo Como ultimo paso pulsaremos sobre el bot n OK Rules configuration J y M PMD RuleSet Configuratio
7. de modificar el funcionamiento de ciertas reglas de validaci n para ajustarlas a unas necesidades concretas o bien crear nuevas reglas Por ejemplo puede resultar interesante Comprobar si se han creado objetos de tipo Thread a trav s de instrucciones Thread t new Thread Prevenir la probabilidad de encontrar conexiones no cerradas tras comprobar la existencia de objetos de tipo Connection Prevenir ante el uso de objetos del tipo PrintStrack Trace Evitar el uso de expresiones regulares en la implementacion de las clases para facilitar su posterior mantenimiento Evitar el uso de instrucciones que pueden llegar a complicar su legibilidad como en el caso de la expresi n condicional if expresion Boolean operaci n verdadera operaci n falsa Etc Los siguientes apartados muestran los pasos a seguir para crear una regla de validaci n personalizada y su m s que probable posterior uso desde Eclipse 4 3 Creaci n de reglas de validaci n personalizadas Es necesario explicar brevemente c mo funciona PMD PMD no analiza el c digo fuente de manera directa PMD parsea dicho c digo para generar un elemento AST Abstract Syntax Tree PMD http omd sourceforge net nos ofrece una herramienta para transformar c digo fuente en un elemento AST En primer lugar descargamos y descomprimimos el archivo pmd bin 4 0 zip Se nos crear la siguiente estructura de directorios 3 bin Ga docs Ga etc 3 lib Para a
8. y se seleccionar la opci n PMD gt Generate reports Se podr observar que se han creado autom ticamente los informes correspondientes dentro de la carpeta reports carpeta destinada para tal fin i Package Explorer X T s 3aPetStoreWar GB src AB 573a 573aCapaWeb s73aPetStore s73aAction H A s73a s73aCapaWeb s73aPetStore s73aAction s73aOperaci reports 1 z pmd report csw E H pmd report html ES pmd report txt a H pmd report vb html X pmd report xml El gt WebRoot gt comunJSP E META INF gt shopJSP f test E E WEB INF H E dtd gt lib H OperacionesPresentacion c tld gt validators confiq 12 Abriendo el informe generado pmdad report html y seleccionando la pesta a E Preview se observar el contenido del mismo 41 s 3aContainsItemAction java Ifi pmd report html X 1 2 3 4 5 6 a 8 9 vr 4 b Source Design Design Source IE Preview Mozilla Preview PMD report Problems found File src s 7 als 3aCapaWeb s 7 3aPetStore s 3aAction s7 5aContamsItemA ction java srci s 3als 3aCapaW eb s 3aPetStore s 3aActon s 3aC ontainsltemAction java src s Sal s 3aCapaW eb s7 3aPetStore s 3aAction s 7 3aContainsItem Action java src s 3als 3aCapaW eb s 3aPetStore s 3aActon s 3aC ontainsltemAction java src s 3als 3aCapaW eb s 7 3aPetStore s 3aAction s 3aContansltemAction java src s 3als 3aCapaW eb s 3aPetStore s SaActon s 3aC ontainsltemAction java src s 7 3a s 3aCapaWeb
9. 0 EH shop35P Arr H 6 validators config i configuracionTiles xml x web xml RN weblogic xml 3 Se seleccionar n las vistas que se estimen oportunas pertenecientes a la perspectiva de PMD PMD Manual de usuario 39 49 Eusko Jaurlaritzaren Informatika Elkartea e Sociedad Inform tica del Gobierno Vasco La imagen superior muestra las vistas Violations Outline y Violations Overview En caso de necesitar alguna otra se seleccionar la opci n de men Window gt Show View gt Other Se abrir la siguiente ventana y se escoger n las vistas deseadas type filter text H E Cheat Sheets H E Checkstyle E CVs Debug 5 Help E Hibernate E Java 5 Java Browsing 6 gt MyEclipse Enterprise Workbench cm P Dataflow view e P PMD Violations E Violations Outline BR Violations Overview E Team NI 4 Eselturno de configurar las reglas a utilizar con PMD Para ello se selecciona la opci n del men principal Window Preferences Window Help New Window Mew Editor Open Perspective b Show view b Customize Perspective Save Perspective As Reset Perspective Close Perspective Close All Perspectives Navigation b Lo Working Sets d Web Browser PMD Manual de usuario 40 49 Eusko Jaurlaritzaren Informatika Elkartea e Sociedad Inform tica del Gobierno Vasco 5 Dentro de la ventana Preferentes se ab
10. 61BandejaActi s61Biocidaswar E s61 s61FormServlet s61Expedientes s61 s61FormServlet s6lFactoriaActi s61BiocidasWar s61BiocidasWar H EH E EB s61 s61FormServlet s61Mantenimie amp s61 s61FormsServlet s61RenovacionesActionFormServlet s61 s61FormServlet s61Salidas ctio s61BiocidasWar s61BiocidasWar s61Biocidas War 19 49 Eusko Jaurlaritzaren Informatika Elkartea f Sociedad Inform tica del Gobierno Vasco PMD report Problems found ARS PTTTTITITTTTITITTTTITITTTTITITTTTETITITTETITTTTETITTTTETITTTTITITITTITITTTTETETTTTITITITTITITTTTETIETTTTETETTTTITITTTTETITTTTITITTTTITITTTTITITTTTITITTTTETITTTTITITTTTITITTTTETITITTETITITTETITITTETITTTTETITITTITITITTITITTTTETITTTTITITTTTITITTTTETITTTTETITI A O E File Line Problem a MM os i E i1 src com eurohelp petstore dao ItemDao java 10 ces sel Piera wien spe Ree Sy de modifiers which are implied by the context MdL LLL LLL LLL MU LLL AUN LU O Classes implementing Serializable should set a serialVersionUID i Parameter name is not assigned and could be declared final Parameter nextId is not assigned and could be declared final Each class should declare at least one constructor Found non transient non static member Please mark as transient or provide accessors 22 i Parameter jdbcTemplate is not assigned and could be declared final
11. 73aAction sz 3aContainsItemAction java s73aDispakchLoginAction java s73aEditAccountFormAction java s73almprimirDocuAction java s 3aRemovelItemcCartAction java s73allpdateCartQuantitiesAction java s73aViewCartAction java s73aviewCategoryAction java s73aviewProductAction java s73aWelcomeAction java 573a 573aCapaWeb s73aPetStore s73aAction s73aOpe s73aGetAccountLlser Action java s73aGetAccountUlserPassAction jawa s73aGetCategoryAction java Error Message Package name contains upper case char Class names should begin with an upper Each class should declare at least one c Parameter contexto is not assigned an Parameter arg1 is mot assigned and co Parameter arg2 is not assigned and co Parameter arg4 is not assigned and co Parameter arg3 is not assigned and co A signature constructor or method sh Document empty method 4 signature constructor or method sh Local variable could be declared Final Local variable could be declared Final Local variable could be declared Final Local variable could be declared Final Local variable could be declared Final Violations 37 37 39 39 40 40 Ejie Dlloelsi o s o O Fo 3t Violations LOC Eusko Jaurlaritzaren Informatika Elkartea Sociedad Inform tica del Gobierno Vasco Violations Me sz 3aPetStoreWar s73aPetStoreWar s 3aPetStoreW ar s73aPetStorewWar s 3aPetStoreWar s 3aPetStoreWar sz 3aPetStoreWar sz 3aP
12. QuantitiesAction java Hilelel siele BY 7O Violations Violations LOC Violations Me Project 1 N A N A s73aPetStoreWar 1 N A N A s73aPetStoreWar La opci n Clear PMD Violations permite limpiar la lista de incidencias de dicha vista ET violations Overview Z3 3 3 5 Chequear c digo Element violations 22 49 Eusko Jaurlaritzaren Informatika Elkartea e Sociedad Inform tica del Gobierno Vasco La opci n Check Code with PMD permite revisar el c digo bajo PMD permitiendo incluso que dicho chequeo pueda efectuarse en modo Background y poder seguir trabajando sin la necesidad de esperar a que dicho chequeo finalice ReviewCode d PhD Checking SERGE PMO Checking File Order java ReviewCode TTT PMD Checking PMD Checking File Order java Run in Background Cancel PMD Manual de usuario 23 49 Eusko Jaurlaritzaren Informatika Elkartea e Sociedad Inform tica del Gobierno Vasco 4 Utilidad pr ctica PMD proporciona un amplio conjunto de reglas de verificaci n de c digo en base a una serie de pautas para la aplicaci n de buenas t cnicas de implementaci n Normalmente ser suficiente con los conjuntos de reglas aportados por la propia herramienta pero existe la posibilidad de creaci n de reglas de validaci n personalizadas 4 1 Aportaciones de PMD A continuaci n se muestra el listado de los conjuntos de reglas aportadas por PMD a
13. Root Un ejemplo de archivo de informe de salida puede ser el que a continuaci n se detalla PMD Manual de usuario X struts config xml 23 lt form bean lt form bean lt form bean lt form bean lt form bean name cartForm type com eurohelp petstore web struts CartictionFor name emptyForm type corm eurohelp petstore veb struts BaseictionFo name yorking ccountForm type com eurohelp petstore web struts Acc name yorkingOrderForm type com eurohelp petstore web struts Order name formularioijax type org apache struts action DynalctionForm form property name tipo nimal type java lang String gt lt form property name nombreinimal type 2 java lang String gt com eurohelp petstore dao PetStoreWar com eurohelp petstore dao jdbc PetStoreWar Ae com eurohelp petstore domain com eurohelp petstore domain logic com eurohelp petstore exceptions PetStoreWar PetStorewWar PetStoreWar EH Ed EH E com eurohelp petstore web struts s61 s61ActionServlet s61Expedient El s61 s6l1Actionservlet s 61FactoriaAc El s61 s61ActionServlet s61Mantenimi s61 s61ActionServiet s61Renovacio 3 PetStoreWar s61BiocidasWar s61 s61Actionservlet s61Salidas cti s61BiocidaswWar s61BiocidasWar s61BiocidasWar s61BiocidaswWar s6l s6lEventos s61Biocidaswar H EH EH EH s61 s61FormServlet s
14. Something Eoix class Example void baro Path Query if any while baz buz doSomethingd Abstract Syntax Tree XPath Data FI CompilationUnit TypeDeclaration XPath query field is empty ClassOrlnterfaceDeclaration Example class ClassOrlnterfaceBody ClassOrlnterfaceBodyDeclaration MethodDeclaration package private ResultType MethodDeclarator bar FormalParameters while baz Block BlockStatement Statement i WhileStatement Expression PrimaryExpression PrimaryPrefix Name baz Statement StatementExpression PrimaryExpression PrimaryPrefix Name buz doSomething PrimarySuffix Arguments void bard void baro buz doSomething Por tanto como se puede observar el c digo del elemento AST de este c digo fuente ser el siguiente CompilationUnit TypeDeclaration ClassOrlnterfaceDeclaration Example class ClassOrlnterfaceBody ClassOrlnterfaceBodyDeclaration MethodDeclaration package private ResultType MethodDeclarator bar FormalParameters Block BlockStatement Statement WhileStatement Expression PrimaryExpression PrimaryPrefix Name baz Statement StatementExpression PrimaryExpression PrimaryPrefix Name buz doSomething PrimarySuffix Arguments PMD Manual de usuario 27 49 EJ 7 e Eusko Jaurlaritzaren Informatika Elkartea Sociedad Inform tica del Gobierno Vasco WhileStatement Nos interesa el c digo del elemento AST relacionado concretamente con e
15. action ActionForm org apache struts action ActionForward org apache struts action ctionMapping AN Eusko Jaurlaritzaren Informatika Elkartea Sociedad Informatica del Gobierno Vasco i s73aDispatchLoginaction java _ 73aEditAccountForm ction java 573a s73aCapaWeb s73aPetStore s73aAction s 3aContainsItemAction java s 3almprimirDocuAction java _s73aRemoveltemCartAction java _s73aUpdateCartQuantitiesAction java s73aViewCartAction java _s73aViewCategoryAction java s 3aViewProductAction java s 3aWelcomeActionjava T s 3aGetAccountUserAction java 573a s73aCapaWeb s73aPetStore s73aAction s73aOpe T EO s 3aGetAccountUserPassAction java SsseSSsssE s73aGetCategoryAction java 11 Es el turno de generar los informes relativos a las violaciones de las reglas consideradas encontradas tras la ejecuci n de la verificaci n del c digo F gt Servers 0 ackage Explorer ou wr 3aPetStoreWar Ege shopJSP E H E test WEB INF H E Opere H E tid H S valida amp E but Xj confic 2 build xml Manual de usuario s SaPetSh 46 49 Para ello de nuevo se har uso del men contextual relativo al proyecto considerado como Ejie Eusko Jaurlaritzaren Informatika Elkartea Sociedad Inform tica del Gobierno Vasco muestra la imagen superior
16. arning high An empty statement aka a semicolon by TU TTE is not v An empty static initializer was Found T Warning high Warning high Avoid empty switch statements Avoid empty synchronized blocks they re useless Em E REPE PMD Manual de usuario 36 49 Eusko Jaurlaritzaren Informatika Elkartea e Sociedad Inform tica del Gobierno Vasco 5 Tareas ant en servidor La validaci n del c digo java con PMD tambi n es posible ejecutarla en el servidor como tareas Ant As se asumen los siguientes acuerdos e El fichero de configuraci n de PMD de cada aplicaci n se denomina PMDconfig xml y se encuentra en dominio wls8 j2se jakarta ant 1 5 3 1 rules Va acompa ado de la carpeta rulesets e Los ficheros de salida resultado de la validaci n ser n pmd report xml y pmd_report html en formato xml y html respectivamente y se ubicar n en laplic aaa java javs aaaEAR aaaTestingWar test informes Donde aaa es el c digo de aplicaci n e latarea que ejecuta PMD se denomina pmd ant pmd 37 49 Eusko Jaurlaritzaren Informatika Elkartea e Sociedad Inform tica del Gobierno Vasco 6 Anexo 1 Ejemplo Este ejemplo realiza la verificaci n del c digo de s73aPetStoreWar a partir del archivo de reglas PMDconfig xml y muestra los resultados obtenidos a trav s de un informe HTML A continuaci n se realiza la b squeda de c digo red
17. cceder a dicha herramienta se ejecutar el archivo designer bat el cual se encuentra dentro del directorio bin El aspecto que presenta esta herramienta es el siguiente 25 49 Eusko Jaurlaritzaren Informatika Elkartea e Sociedad Inform tica del Gobierno Vasco E PMD Rule Designer AS JDK Actions XPath Query if any XPath query field is empty Como un ejemplo sencillo de regla personalizada se crear una regla que detecte los bucles while que no rodeen su contenido con llaves En primer lugar vamos a ver la representaci n AST de un c digo incorrecto para posteriormente compararlo con la representaci n AST del c digo fuente correcto es decir utilizando las llaves Para ello 1 Seintroducir el siguiente c digo fuente en el rea superior izquierda de la herramienta designer bat class Example void bar while baz buz doSomething j j 2 Se seleccionar el JDK adecuado desde la opci n correspondiente de la barra de herramientas JDK Action O JDK 1 3 JDK 1 4 O JDK 1 5 O JSP 3 Se pulsar el bot n Go obteniendo as en la pesta a Abstract Syntax Tree XPath el elemento AST correspondiente PMD Manual de usuario 26 49 EJ 7 e Eusko Jaurlaritzaren Informatika Elkartea Sociedad Inform tica del Gobierno Vasco PMD Rule Designer AE JDK Actions PMD Rule Designer JDK Actions class Example 2 ESCENA UK i void bard j while baz buz do
18. chero XML suministrado en el proceso de instalaci n de la herramienta amp PMD Plugin B X Enter a rule set or select a default ane Browse ced a Para cargar reglas predefinidas las seleccionamos desde el desplegable y pulsamos OK realizando este paso tantas veces como conjunto de reglas queramos cargar amp PMD Plugin E X Enter a rule set or select a default ane Browse Basic Rules Braces Rules Clone Implementation Rules Code Size Rules Cancel b Para cargarlas desde un fichero XML en nuestro caso el fichero PMDconfig xml elaborado para EJIE se deber pulsar sobre el bot n Browse y seleccionarlo en el directorio local donde tengamos almacenado este fichero Salvo casos excepcionales y justificados deberemos siempre cargar las reglas del fichero PMDconfig xml de Ejie Se puede descargar junto con la carpeta rulesets desde el SPS de CAC en http elkarlan ejie webguneak cac espacio compartido default aspx RootFolder 2fwebguneak Je2fcac9e2fespacio9ebfcompartido9e2fHerramientas e20de9e20desarrollo9e2fDescargables9e2fRe glas 20PMD amp FolderCTID amp View 7bD4F947E6 2dAC1E 2d4C9D 2dAAB 7 2dCB2F7A5E DF49 d Tanto el fichero PMDconfig xml como la carpeta rulesets descargados deben ir al mismo directorio 10 49 EJie Veremos como la lista de reglas se ha cargado ya con las seleccionadas Preferences type filter kext Gen
19. ctor Warning high Each class should declare at least on AvoidArrayLoops Warning high Instead of copying data between Ew AvoidAssertAsIdentifier Warning high Finds all places assert is used as an AwoidCallingFinalize Warning high Object finalize is called by the garb AvoidCatchingNPE Warning high Code should never throw NPE under AvoidCatchingThrowable Warning high This is dangerous because it casts to AvoidConstantsInterf ace Warning high n interface should be used only to x Use the ruleset configured in a project File En este momento s lo quedar reconstruir el proyecto para que se lleve a cabo la verificaci n del c digo 9 Se pulsar el bot n OK Entonces o bien PMD mostrar el siguiente mensaje para encargarse de realizar la reconstrucci n autom tica del proyecto PMD Question BE xj OA The project PMD configuration has changed do you want to rebuild the 3 project now If you select No rule violations will not update until the next time you save a file Yes No O bien habr que realizar a mano la reconstrucci n Para ello habr que seleccionar la opci n del men contextual Build Project relativa al proyecto seleccionado PMD Manual de usuario 43 49 Eusko Jaurlaritzaren Informatika Elkartea e Sociedad Inform tica del Gobierno Vasco Package Explorer x pza E cpi pem aj B S src New E IB Go Into ds Open in New Window jaOperaci 23
20. dara detras de motivo listo para indicar la razon del uso de NOPMD Siempre hay que indicar el motivo por el cual no vamos a tener en consideracion ese aviso de PMD La opci n Clear Violations Reviews permite la supresi n de las marcas creadas para las incidencias ya revisadas Por lo tanto eliminar los comentarios a adidos anteriormente 3 3 3 Buscar c digo redundante CPD La opci n Find Suspect Cut And Paste permite la ejecuci n del plug in CPD para la b squeda de c digo redundante en el proyecto Genera un informe que se ubicar dentro de la carpeta reports pudiendo ser ste un ejemplo de salida Found a 26 line 250 tokens duplication in the following files Starting at line 337 of C Proyectos s61Workspace PetStoreWar src com eurohelp petstore dao jdbc OrderDaoImpl java 21 49 Starting at line 430 of Eusko Jaurlaritzaren Informatika Elkartea e Sociedad Inform tica del Gobierno Vasco e C Proyectos s61lWorkspace PetStoreWar src com eurohelp petstore dao jdbc OrderDaoImpl java order order order order order order order order order order order order order order order order order order order order order order order new Order setBillAddressl rs getString billaddr1 setBillAddress2 rs getString billaddr2 setBillCrity rs getString baillcity setBillCountry rs getString billcountry sSetBillState rs getString bi
21. eral Para ello en Eclipse en la ventana de Package Store se hace un clic derecho de rat n y se accede al apartado de Properties al de usuario 11 49 Eusko Jaurlaritzaren Informatika Elkartea Sociedad Inform tica del Gobierno Vasco IX struts config Properties Alt Enter Una vez se ha accedido a este apartado muestra la siguiente ventana de informaci n PMD Manual de usuario 12 49 Eusko Jaurlaritzaren Informatika Elkartea e Sociedad Inform tica del Gobierno Vasco E Properties for Pet5StoreWar m B x type Filter text PID O C5 dues Info BeanInfo Path W Enable PMO Builders Jawa Build Path 4 Include derived Files LE Java Code Style H Java Compiler Javadoc Location Mo working set is selected Select a working set Select rules For this project Deselect working set Mame Priority Description 22222 AbstractClasswWithoutAbstractMet warning high The abstract class does not contain AbstrackNaming Warning high Abstract classes should be named A AccessorClassGeneration Warning high Instantiation by way of private cons AppendcCharackerWiEhChar Warning high Avoid concatenating characters as 5 Task Tags T sb ArrayIsStoredDirectly Warning high Constructors and methods receiving i VB AssignmentInOperand Warning high Avoid assignments in operands this c AssignmentToMNonFinalStatic Warn
22. eral andramDA Ant Data Help Install Update Internet Jawa MyEclipse Plug in Development PM CPD Preferences Rules configuration Run Debug Server Team Validation Veloeclipse Web and XML Web Services Rules configuration PMD Ruleset Configuration Options Rules roan ArrayIsStoredDirectly amp ssignmentInOperand amp vaidArravLoops amp voaidiallingFinalize Avoid Catching PE Rule properties Propert AccessorClassGeneration SopendCharacterwithChar AssignmentToMonFinalStatic 4voidassert4sidentifier 4yoidCatching Throwable AvoldConstantsInterface arning high Ter high warning high warning high Warning high Warning high Warning high Warning high Error Warning high Warning high Warning high Warning high 3 2 Parametrizaci n de PMD para el proyecto Abstrac Instant Avoid c Canstri Avoid E Identifi Insteac Finds a Object Code sl This is An inte T k DO iclassOrinterfaceDeclarationO ie AbstracE Erue E Ir Restore Defaults Apply cme Add rule Remove rule Edit rule Rewwene Eme Import rule set Export rule se Sera Export rule set Clear all Add property Eusko Jaurlaritzaren Informatika Elkartea Sociedad Inform tica del Gobierno Vasco Para cada proyecto pueden especificarse diferentes reglas seleccion ndolas de las establecidas a nivel gen
23. etStoreWar sz 3aPetStoreWar sz 3aPetStoreWar sz 3aPetStoreWar sz 3aPetStoreWar s 3aPetStoreWar s 3aPetStoreWar aa B b A su vez seleccionando los mensajes de error de esta vista vista Violations Outline representada en la imagen superior se acceder al punto exacto de la clase donde se ha cometido dicha violaci n La imagen siguiente resalta la instrucci n de la clase s73aContainsltemAction correspondiente al primer mensaje de error Package name contains upper case characters PMD Manual de usuario 45 49 PMD PMD s73aContainsItemAction java MyEclipse Ente H OperacionesPresentacion H E tld WXX XXXYYU xXXx Class names should begin with an upper Each class should declare at least one c Parameter contexto is not assigned an Parameter argl is not assigned and co Parameter arg2 is not assigned and co Parameter arg4 is not assigned and co Parameter arg3 is not assigned and co A signature constructor or method sh Document empty method A signature constructor or method sh Local variable could be declared Final Local variable could be declared Final rise Workbench 2 Simport java util irrayList 4import java util HashMap 6 9 7import Simport 10import 11import Simport java util Map javax servlet http HttpServletRequest javax servlet http HttpServletResponse org apache struts action ctionErrors org apache struts
24. forward name fail Ba Se gag Import lt forward name unkn 224 Export lt forward name erro A AAA M lt forward name qlob dm refe F5 z global forvards Close Project E violati Run s 4 violation Debug As tons Overview 25 k Team Element i k Compare With l s 1 s61Actionservlet s6l1Bandejadc Peate From Local History 661 561 Actionservlet s61Expedient MyEclipse s amp 1 s61 ctionServlet s amp 1FactoriaAc 5 urce s amp 1 s61ActionServlet s amp 1Mantenimi POE Tools FY AL cA actin Servlet sA Rennarin PMO d P Generate reports Properties alk Enter P Clear violations reviews B P Find Suspect Cut And Paste iH F Clear PMD violations rh P Check Code with PMD PetStore 3 3 1 Generar informes La opci n Generate Reports permite obtener informes creando una carpeta denominada reports accesible desde la ventana Package Explorer Esto genera diferentes tipos de informes consultables sin problema alguno por cualquier herramienta desde un navegador Web un editor de texto un visor de archivos en formato CSV e incluso en formato XML 18 49 Eusko Jaurlaritzaren Informatika Elkartea E Sociedad Inform tica del Gobierno Vasco PMD struts config ml Eclipse SDK a Package Explorer X A CI te 0 jericho html 1 5 dev1 jar B e reports E pmd report csv pmd report html E pmd report txt j E pmd report vb html X pmd report xml E gt Web
25. g high Error Warning high Warning high Warning high MW arnina hinh One might assume that new BigDeci Deeply nested if then statements a Avoid using dollar signs in variable Code containing duplicate String liter Finds all places enum is used as an i IE is somewhat confusing to have af IE is somewhat confusing to have af Each caught exception type should Dekerta when a new object is create Salvo excepci n se deber n utilizar las reglas homologadas en EJIE En el apartado Importar reglas se describe c mo cargar estas reglas 3 3 Ejecuci n de PMD PMD al estar integrado con Eclipse se arranca al lanzar el IDE El proceso de arranque es tan simple como lanzar el ejecutable del eclipse donde se tenga configurado el plug in del PMD Para ello con el bot n derecho del rat n veremos que existe una nueva opci n de men denominada PMD 17 49 Eusko Jaurlaritzaren Informatika Elkartea e Sociedad Inform tica del Gobierno Vasco qz Zform bean name fo Ee New zform property E hos E ESO lt Iorm property a _ _a z form bean Eg Pn Open in Mew Window lt formbeans gt T Pri M Co Ctrl Elle Pri E PY lt global exceptions gt pa m sb Paste Ckri V lt exception type 3a E y 3 Delete Delete lt fglobal exceptions gt CE sf Build Path d Bg 56 Refactor aleeshireer PY SlePel forwards s L
26. hingThrowable PETER AccessorClassGeneration AppendCharacterwWithChar Warning B Warning high Warning hi high frrevisstorecDrecti AssignmentInOperand AssignmentToNonFinalStatic Warning hi high AtLeastOneConstructor AvoidArrayLoops AvoidAssertAsIdentifier AvoidCallingFinalize AvoidCatchingNPE Warning high Warning high MWarnin nina high Warning high AvoidConstantsInterface Warning high Warming high Ejie Eusko Jaurlaritzaren Informatika Elkartea Sociedad Informatica del Gobierno Vasco The abstract class does not con contain Abstract classes should be named A Avoid concatenating characters as s s Constructors and methods receiving Avoid assigments in operands this c Identifies a possible unsafe usage of Each class should declare at least on Thisi is dangerous because it casts to proyecto a la hora de realizar la construcci n de los mismos Package Explorer x Bid shopJSP H test WEB INF El E dtd T E Bara EI XLNets PMD Manual de usuario Pro Alt Enter Remove rule EGIE rule Add property 42 49 Eusko Jaurlaritzaren Informatika Elkartea e Sociedad Inform tica del Gobierno Vasco En este ejemplo se habilitar PMD para el proyecto s73aPetStoreWar Entonces se seleccionar dicho proyecto y a trav s de su men contextual bot n derecho del rat
27. i n xpath que define la regla que estamos implementando es el siguiente ANhileStatement not Statement Block Este tipo de implementaci n tambi n se basa en el c digo AST generado Pero en este caso no es necesaria implementar una clase Java Pero como en el caso anterior s es necesario a adir esta regla a un archivo XML de definici n de un conjunto de reglas mycustomrules xml a adiendo un elemento property de nombre xpath cuyo valor sea la instrucci n xpath que hemos definido antes y modificando el atributo c ass con el valor de una clase de la distribuci n de PMD net sourceforge pmd rules XPathRule xml version 1 0 gt ruleset name My custom rules xmins http pmd sf net ruleset 1 0 0 xmins xsi http www w3 org 2001 XMLSchema instance xsi schemaLocation http omd sf net ruleset 1 0 0 http pmd sf net ruleset_xml_schema xsd xsi noNamespaceSchemaLocationz http pmd sf net ruleset xml schema xsd rule name DetectarBuclesWhileSinLLavesXPath 31 49 Eusko Jaurlaritzaren Informatika Elkartea d Sociedad Inform tica del Gobierno Vasco message Evita utilizar expresiones while sin llaves class net sourceforge pmd rules XPathRule gt lt description gt Evita utilizar expresiones while sin llaves lt description gt lt priority gt 3 lt priority gt lt properties gt lt property name xpath gt lt value gt A NhileStatement not Statement Block value lt property gt lt prope
28. ia a un bloque de c digo contenido entre llaves que es lo que se desea comprobar Como ya se ha visto existen dos maneras de crear una nueva regla e Usando Java e Usando una expresi n XPath 4 3 1 Implementaci n de una regla personalizada a trav s de una clase Java Se deber n seguir los siguientes pasos 1 En primer lugar se implementar la clase que contiene la regla de validaci n import net sourceforge pmd import net sourceforge pmd ast public class DetectarBuclelncorrecto extends AbstractRule public Object visit ASTWhileStatement node Object data SimpleNode firstStmt SimpleNode node jjtGetChild 1 if IhasBlockAsFirstChild firstStmt addViolation data node j return super visit node data private boolean hasBlockAsFirstChild SimpleNode node return node jjtGetNumChildren 0 amp amp node jjtGetChild 0 instanceof ASTBlock Se puede observar que la clase DetectarBuclelncorrecto implementada hereda de la clase AbstractRule El m todo visit ser llamado cuando se encuentre un elemento ASTWhileStatement La siguiente instrucci n recoge el segundo hijo del elemento ASTWhileStatement SimpleNode firstStmt SimpleNode node jjtGetChild 1 Y se comprueba si este nodo a su vez tiene o no como primer hijo un elemento de tipo ASTBlock return node jjtGetNumChildren 0 amp amp node jjtGetChild 0 instanceof ASTBlock 29 49 Eusko Jaurlaritzare
29. ing high Identifies a possible unsafe usage of AtLeastOne Constructor Warning high Each class should declare at least on Ayvoid4rrayLoops Warning high Instead of copying data between Ew AvoidAssert sIdentiFier Error Finds all places assert is used as an AvoidCallingFinalize Warning high Object Finalize is called by the garb amp AvaidCatchingMPE Warning high Code should never throw MPE under AvoidCatchingThrowable Warning high This is dangerous because it casts to AvoidConstantsInterface Warning high An interface should be used only En hd Use the ruleset configured in a project File Desde dicha ventana se permitir Habilitar o deshabilitar PMD para el proyecto seleccionado Incluir o no los ficheros derivados Definir los ficheros y subdirectorios que debe analizar PMD working set cada regla Activar o desactivar reglas para este proyecto a trav s de las casillas de verificaci n asociadas a Salvo causa justificada se deber n utilizar las reglas del fichero PMDconfig xml de EJIE en todos los proyectos En el apartado Importar reglas se describe el proceso de carga de estas reglas 3 2 1 Definir Working set Un working set no es m s que un conjunto de ficheros y subdirectorios de nuestros proyectos Eclipse Para definir un working set desde la ventana de propiedades del proyecto ventana Package Store bot n derecho men Properties se selecciona la l nea de configuraci
30. l bucle while Expression Statement StatementExpression Ahora vemos la representaci n AST de un c digo correcto Para ello ejecutamos el nuevo c digo con la herramienta designer bat Podemos observar que ahora s se han incluido las llaves rodeando el c digo contenido en el bucle while class Example void bar while baz buz doSomething j j j El elemento AST obtenido es CompilationUnit TypeDeclaration ClassOrlnterfaceDeclaration Example class ClassOrlnterfaceBody ClassOrlnterfaceBodyDeclaration MethodDeclaration package private ResultType MethodDeclarator bar FormalParameters Block BlockStatement Statement WhileStatement Expression PrimaryExpression PrimaryPrefix Name baz otatement Block BlockStatement Statement StatementExpression PrimaryExpression PrimaryPrefix Name buz doSomething PrimarySuffix Arguments Y el c digo del elemento AST relacionado con el bucle while WhileStatement 28 49 Eusko Jaurlaritzaren Informatika Elkartea e Sociedad Inform tica del Gobierno Vasco Expression Statement Block BlockStatement Statement StatementExpression De esta manera y seg n nuestro ejemplo para que un bucle while sea considerado correcto en la transformaci n de su c digo fuente a un elemento AST se deber obtener un elemento WhileStatement que contenga un elemento Statement Y dentro de ste a su vez se deber encontrar un elemento Block el cual hace referenc
31. llstate setBillToFirstName rs getString billtofirstname setBillToLastName rs getString billtolastname setBillZip rs getString billzip setShipAddressl rs getString shipaddr1 setShipAddress2 rs getString shipaddr2 setShipCity rs getString shipcity setShipCountry rs getString shipcountry setShipState rs getString shipstate setShipToFirstName rs getString shiptofirstname setShipToLastName rs getString shiptolastname setshipZzip rs getString shipzip setCardType rs getString cardtype setCourier rs getString courier setoreditCard rs getString ocreditcard SetExpiryDate rs getString exprdate setLocale rs getString locale setOrderDate rs getDate orderdate SetTotalPrice rs getDouble totalprice El informe generado muestra el c digo que aparece duplicado puede estar duplicado dentro de la misma clase o en varias clases distintas e indica la clase a la que pertenece dicho c digo duplicado y a partir de la l nea en la que aparece En este caso concreto el c digo que se repite 26 l neas reside en la misma clase y est implementado a partir de la l nea 337 y duplicado a partir de la l nea 430 o viceversa 3 3 4 Eliminar incidencias Las incidencias que detecta PMD aparecen reflejadas en la vista Violations Overview AA an Y ED Violations Overview 5 Element H3 s73a s73aCapaWeb s73aPetStore s73aAction LY 7 3aUpdateCart
32. n Informatika Elkartea e Sociedad Inform tica del Gobierno Vasco En caso negativo se producir una violaci n de la regla considerada addViolation data node 2 Una vez implementada la clase necesitamos a adir esta regla a un archivo XML de definici n de un conjunto de reglas por ejemplo mycustomrules xml La regla creada deber presentar los siguientes elementos y atributos name el nombre elegido para reconocer la regla message el mensaje que debe mostrar la regla cuando se detecte una violaci n class la clase que contiene la regla de validaci n puede estar en cualquier sitio description la descripci n de la regla example un peque o c digo que muestre un ejemplo de violaci n de la regla Nos puede servir de ayuda para crear la regla la opci n de men Create rule XML incluida en la herramienta designer bat Copy xml to clipboard Create rule XML Introduciendo el nombre de la regla el mensaje y la descripci n y pulsando sobre el bot n Create rule XML nos mostrar el esqueleto del elemento rule a introducir en el archivo XML de definici n del conjunto de reglas C x Rule name DetectarBuclesWhileSinLLaves Rule msg Evita utilizar expresiones while sin llaves Rule desc Evita utilizar expresiones while sin llaves Create rule XML rule name DetectarBuclesWhileSinLLaves message Evita utilizar expresiones while sin llaves class gt description Evita utiliza
33. n Options Add rule AbstractClasswithoutAbstractMethod Warning high AbstractNaming Warning high Abstrac Remove rule AccessorClassGeneration Warning high Instant AppendCharacterwWithChar Warning high Avoid c Edit rule v Const amp PMD Plugin xl e Import rule set Enter a rule set or select a default one Identifi Export rile sat Each cl bas pmd rules_1 0 0 mycustomrules xml Browse Inst m Clear all Finds a Code sl This is Y b Podemos observar c mo aparece la nueva regla creada DetectarBucleWhileSinLlaves en la lista de reglas As cada vez que PMD realice una validaci n tendr en cuenta la nueva regla que hemos introducido PMD Manual de usuario 35 49 DetectarBuclesWhileSinLLaves Warning high Eusko Jaurlaritzaren Informatika Elkartea Ei Sociedad Informatica del Gobierno Vasco DontImportJavaLang DontImportSun Duplicatelmports Warming Warning Evita utilizar expresiones while sin llaves Avoid importing anything from the package java lang TI Remove rule Avoid importing anything From the sun packages These Error high Warming EmptyCatchBlock Partly created objects can be returned by the Double a Warning high Warming high EmptyFinallyBlock Warning high EmptylIFStmt Warning high Avoid empty SEX blocks these can be Ru Eran Lo Warning high W
34. n de PMD para el proyecto 1 Pulsar el bot n Select a working set 13 49 Eusko Jaurlaritzaren Informatika Elkartea e Sociedad Inform tica del Gobierno Vasco Select Working Set Select a working set C Window Working Sets Selected Working Sets O 35573 Select All Deselect All Desde d nde podremos seleccionar alguno creado previamente o bien crear uno nuevo 2 Para crear uno nuevo se pulsar sobre el bot n New los archivos que queremos incorporar New Working Set E x Select el cual nos dar la opci n de seleccionar Select a working set type Working set type Plug ins oo Breakpoint fo Resource Java Back Finish Cancel 14 49 p Eusko Jaurlaritzaren Informatika Elkartea e Sociedad Inform tica del Gobierno Vasco Es d Seleccionamos la opci n de Java y pulsamos Next con lo que deberemos marcar tambi n los ficheros de los espacios de trabajo que queremos incorporar y establecer el nombre que queremos dar al working set 3 Para guardar la selecci n pulsamos Finish New Working Set D a X Java Working Set Enter a working set name and select the working set elements working set name PetStoreWar Working set content B Mas PetStore War BEES src A L rtojar Crjesdk1 4 2 netjretlib i m Lf sunrsasign jar C sdk 4 2_08 jrellib mE Ej isse jar Ciizsdk 4 2_08 jrellib mE Ej ice ja
35. nces Refactoring History Server Mame Priority Description AbstrackClasswWithaubAbsEracEMetE Warning high AbstrackMaming Warning high AccessorClassGeneration Warning high Task laa AppendCharactervWithChar Warning high Validation ArrayIsStoredDirectly Warning high AssignmentInOperand Warning high Avoid assigments in operands this c Assignment obonFinalStatic Warning high Identifies a possible unsafe usage af AtLeastOneConstruckor Warning high Each class should declare at least an AvoidArrayLoops Warning high Instead of copying data between Ew AvoidAssertAsIdentiFier Error Finds all places assert is used as an AvoidCallingFinalize Warning high Object Finalize is called by the garb amp vaidcCabchingMPE Warning high Code should never throw MPE under AvoidCatchingThrowable Warning high This is dangerous because it casts Ea AvoidConstantsInterface Warning high An interface should be used only to The abstract class does not contain Abstract classes should be named Instantiation by way of private cons amp vaid concatenating characters as s Constructors and methods receiving AyvoidDecimalliteralsInBigDecimal AvoidDeeplyMeskedIFSEmEs AvoidDollarsigns AvoidDuplicateliterals AvoidEnum sIdentifier AvoidFieldMNamematchingmMlethodK AvoidFieldMNamebatchingTypellame AyvoidInstancechChecksInCatchecl vl avnidinstantiatinnQhiertsTal nnns Warning high Warning high Warning high Warnin
36. nformatika Elkartea e Sociedad Inform tica del Gobierno Vasco Cap tulo secci n P gina 3 1 Configuraci n b sica 3 1 1 Gesti n de las reglas 3 1 2 Exportar reglas 3 1 3 Importar reglas 3 2 Parametrizaci n de PMD para el proyecto 3 2 1 Definir Working set 3 3 Ejecuci n de PMD 3 3 1 Generar informes 3 3 2 Eliminar incidencias revisadas Uso de NOPMD 3 3 3 Buscar c digo redundante CPD 3 3 4 Eliminar incidencias 3 3 5 Chequear c digo 4 1 X Aportaciones de PMD 24 4 2 Aportaciones personalizadas 25 4 3 Creaci n de reglas de validaci n personalizadas 25 4 3 1 Implementaci n de una regla personalizada a trav s de una clase Java29 4 3 2 Implementaci n de una regla personalizada con una expresi n XPath 31 4 3 3 C mo usar un conjunto de reglas personalizadas con Eclipse 32 6 1 Resoluci n 3 49 Eusko Jaurlaritzaren Informatika Elkartea e Sociedad Inform tica del Gobierno Vasco 4 49 Eusko Jaurlaritzaren Informatika Elkartea e Sociedad Inform tica del Gobierno Vasco 1 Introducci n En este manual se describen los distintos aspectos que debe conocer el usuario sobre PMD y sobre su integraci n con Eclipse as como los pasos a seguir para la creaci n y uso de reglas personalizadas 2 Conceptos b sicos PMD es una herramienta de auditor a y verificaci n de c digo desarrollada por SourceForge PMD escanea el c digo Java y busca posibles problemas en potencia como p
37. ociedad Inform tica del Gobierno Vasco B c D este ejemplo de la clase anteriormente implementada DetectarBuclelncorrecto java Simplemente es necesario indicar que sta u otras clases implementadas deber n colocarse en el directorio src Crear uno o m s conjuntos de reglas Tambi n hemos visto anteriormente este apartado por tanto s lo indicar que se deber colocar el archivo XML de definici n de un conjunto de reglas en este caso el que ya hemos utilizado mycustomrules xml en el directorio source src E com pruebas pmd rules AB src 1 88 com pruebas checks GI Y DetectarBucleIncorrecto java mycustomrules xml BBA JRE System Library j2sdk1 4 2_08 BA Plug in Dependencies E META INF E MANIFEST MF Im build properties 7 Empaquetar el fragmento Tambi n ser necesario antes de desplegar el fragmento empaquetarlo Para ello exportaremos el proyecto con la opci n Export a la que accederemos situ ndonos sobre el proyecto Plug in Fragment creado y pulsando el bot n derecho del rat n Tras esto seleccionaremos Deployable plug ins and fragments El siguiente paso ser seleccionar el plug in para el que se realiza la extensi n y se especificar el directorio de destino xi Deployable plug ins and fragments j Export the selected projects into a form suitable for deploying in an Eclipse product lt gt n Available Plug ins and Fragments com pruebas pmd rules 1 0 0 Select All
38. onar la regla a eliminar 2 Pulsar el bot n Remove rule 3 1 2 Exportar reglas En caso de haber creado nuevas reglas modificado o eliminado alguna de las existentes existe la posibilidad de exportar el conjunto de reglas actual a un nuevo archivo Desde la ventana de preferencias Window gt Preferences pulsamos la l nea PMD Rules configuration que permite gestionar las reglas a aplicar a nuestros proyectos 1 Pulsar el bot n Export rule set 2 Guardar el archivo actual de reglas en una carpeta a determinar por el usuario y dando un nombre PMD Manual de usuario 9 49 Eusko Jaurlaritzaren Informatika Elkartea e Sociedad Inform tica del Gobierno Vasco identificativo a dicho archivo para poder recuperarlo a posteriori si se considerase necesario 3 1 3 Importar reglas Desde la ventana de preferencias Window gt Preferences pulsamos la l nea PMD Rules configuration que permite gestionar las reglas a aplicar a nuestros proyectos 1 Pulsar sobre el bot n Clear all Este paso eliminar todas las reglas previamente definidas Se pedir confirmaci n de la operaci n Si la respuesta es afirmativa se proceder a la supresi n de dichas reglas quedando ahora la pantalla de reglas completamente vac a 2 Pulsar sobre el bot n Import rule set Se puede proceder a importar una serie de reglas ya disponibles y predefinidas por la herramienta o bien cargarlas desde un fi
39. osibles errores o confusiones y as poder deshacer cualquier cambio efectuado 3 1 1 Gesti n de las reglas Anadir una nueva regla Desde la ventana de preferencias Window Preferences pulsamos la l nea PMD gt Rules configuration que permite gestionar las reglas a aplicar a nuestros proyectos Existen dos maneras de crear una nueva regla e Usando Java e Usando una expresi n XPath 1 Pulsar el bot n Add rule PMD Plugin 3 Rule name XPath rule Rule implementation class Message Description Example carcel 2 Introducir el nombre de la regla el mensaje la descripci n y el ejemplo Adem s PMD Manual de usuario 7 49 Eusko Jaurlaritzaren Informatika Elkartea e Sociedad Inform tica del Gobierno Vasco a En caso de haber creado la regla mediante una clase Java indicar cu l es en el campo Rule Implementation Class b En caso de haber creado la regla mediante una expresi n XPath activar la casilla de verificaci n XPath rule En ese caso aparecer el valor por defecto del campo Rule Implementation Class Y habr que a adir una propiedad xpath en la que a adir el valor de la expresi n XPath Rule implementation class net sourcelForge pmd rules xPathRule Rule properties Add property gt Modificar una regla Desde la ventana de preferencias Window gt Preferences pulsamos la l nea PMD gt Rules configura
40. pd report txt que tambi n se ubicar dentro de la carpeta reports Manua E die reports p EB cpd report txt T E pmd report csv e H pmd report html o B pmd report txt e H pmd report vb html X pmd report xml 14 Abriendo dicho documento se podr observar que el informe generado muestra el c digo que aparece duplicado puede estar duplicado dentro de la misma clase o en varias clases distintas e indica la clase a la que pertenece dicho c digo duplicado y a partir de la l nea en la que aparece de usuario 48 49 Eusko Jaurlaritzaren Informatika Elkartea Ie Sociedad Inform tica del Gobierno Vasco 41 s73aContainsltemAction ava MPAA p Found a 38 line 140 tokens duplication in the following files 4 3Starting at line 45 of C PETworkspace s73aPetStoreWar sre s73a s73aCapaveb s73aPetst 4Starting at line 46 of C PETworkspace s73aPetStorevar sre s73a s73aCapaleb s73aPetst if account get aDDR2 null String account get ADDR2 equals account put ADDRZ s 73a bstractDao CONSTANTE NULO STRING String userName String contexto get username account put USERID userName account put PASSWORD userName contexto set account account super preProcessMappingEntrada contexto argi arg2 PMD Manual de usuario 49 49
41. r Citiesdk1 4 2 n amp tirellib m v Zi charsets jar Cr j29dk1 4 2_08tjreilib Ff ae dnsns jar C j2sdk1 4 2_08 jrellibjext E E xo Idapsec jar E j29dk1 4 2 amp treMibyext H E x localedata jar C j2sdk1 4 2_08 jrellibyext m I xo sunjce provider jar C iYjgsdk1 4 2 081 jre1libl est AM axis jar a Select All Deselect all lt Back Mext gt Finish Cancel 4 Marcamos los working set deseados y pulsamos OK PMD Manual de usuario 15 49 Eusko Jaurlaritzaren Informatika Elkartea e Sociedad Inform tica del Gobierno Vasco Select Working Set Select a working set CO window Working Sets CO No Working Sets Selected Working Sets Select All Deselect All 5 Se pueden activar o desactivar las reglas configuradas en el proyecto Si se activa la casilla Use the ruleset configured in a Project file esto no ser posible y se validar n las reglas definidas en el fichero ruleset del proyecto 16 49 Eusko Jaurlaritzaren Informatika Elkartea Sociedad Inform tica del Gobierno Vasco Elie T Properties for s73aClasses type filter text Builders Enable PMD Checkstyle Java Build Path Java Code Style Java Compiler Javadoc Location 5 MyEclipse C Include derived files Selected working set s73 Select a working set Deselect working set Select rules For this project Profile Compliance and Y Project Refere
42. r expresiones while sin llaves description priority 3 priority example II CDATA class Example void baro while baz buz doSomethingd j gt lt lexample lt rule gt Ser necesario a adir la clase que contiene la regla de validaci n dentro del elemento class y modificar el PMD Manual de usuario 30 49 Eusko Jaurlaritzaren Informatika Elkartea e Sociedad Inform tica del Gobierno Vasco ejemplo para que corresponda con uno que viole la regla que est siendo definida El archivo XML de definici n del conjunto de reglas incorporando nicamente esta regla puede presentar el siguiente aspecto lt xml version 1 0 gt lt ruleset name My custom rules xmins http pmd sf net ruleset 1 0 0 xmins xsi http www w3 org 2001 XMLSchema instance xsi schemaLocation http omd sf net ruleset 1 0 0 http pmd sf net ruleset_xml_schema xsd xsi noNamespaceSchemaLocationz http pmd sf net ruleset xml schema xsd rule name DetectarBuclesWhileSinLLaves message Evita utilizar expresiones while sin llaves class DetectarBuclelncorrecto gt lt description gt Evita utilizar expresiones while sin llaves lt description gt lt priority gt 3 lt priority gt lt example gt lt CDATA public void doSomething while true X j Iz lt example gt lt rule gt lt ruleset gt 4 3 2 Implementaci n de una regla personalizada con una expresi n XPath La instrucc
43. rer i Open Type Hierarch F4 E we EE y BH 3 Copy Ctrl C gt li copy Qualified Name a 5 Paste Ctrl ra 34 Delete Delete Build Path gt Source Alt Shift S gt Refactor g s Import 1 4 Export 4 Build Project 2 bui o Refresh FS Es Server Close Project Ld XLNets Close Unrelated Projects v 4 So i b Run As ZI violations Debug As gt A violation outli Profile As Team Compare with Restore from Local History MyEclipse H PMD gt Properties Alt Enter 10 Se podr obtener una vista general de los resultados obtenidos tras la verificaci n del c digo en la vista Violations Overview como muestra la figura siguiente ET violations Overview 3 E oi si 323 92 9 7 Element Violations Violations LOC Violations Me Project H s73a s73aCapaWeb s73aPetStore s73aAction 146 N A NA s73aPetStoreWar HB s73a s73aCapaWeb s73aPetStore s73aAction s73aOpe 187 N A N A s73aPetStoreWar Desplegando en esta vista los elementos en los que se han encontrado violaciones de las reglas consideradas durante la verificaci n del c digo y seleccionando clases concretas se podr obtener informaci n detallada de las violaciones resultantes con ayuda de la vista Violations Outline PMD Manual de usuario 44 49 ET Violations Overview El 1 Se EN EN EN EN EN EN E EN EN 8 EN EN UJ ow A Ne a A Ae A A Element 573a s73aCapaWeb s73aPetStore s
44. reta Seleccionando una descripci n podr marcarse un error como revisado a trav s de la opci n Mark as reviewed lo que generar un comentario en la l nea de c digo donde se produjo dicho error 20 49 Eusko Jaurlaritzaren Informatika Elkartea f Sociedad Inform tica del Gobierno Vasco 5 Violations Outline x EF Jfemormessape a ea Evita utilizar expresiones while sin llaves 63 Show Details Mark as reviewed X Remove violation s Quick Fix p Clear violations reviews Sentencia que produjo el error while cartltems hasNext Sentencia con la marca comentario generada while cartltems hasNext NOPMD by Imgurrea on 3 08 07 12 15 NOTA En realidad esto s lo se debe utilizar para falsos positivos que pueda devolver PMD Adem s hay que indicar un motivo por el cu l se marca como revisado a la dcha del nombre de un responsable y la fecha En lugar de utilizar la opci n marked as review es mejor utilizar un template de MyEclipse del tipo NOPMD responsable S user fecha S date motivo S cursor Resulta util hacer un template en Window Preferences Java Editor Templates Con nombre NOPMD De forma que cuando escribamos a la derecha de la l nea de c digo que d el falso positivo NOPMD y pulsemos ctrl space se nos escribir autom ticamente lo siguiente NOPMD responsable Usuario responsable Gfecha Fecha motivo Y el cursor se nos que
45. rir la opci n PMD y se seleccionar Rules configuration Preferences E Ioj x type filter text Rules configuration e EJ General PMD RuleSet Configuration Options nj Ant Checkstyle Rules FreeMarker Edtor Mane TS CA Help HQL editor Remove rule Install Update a m Java Edit rule MyEclipse Import rule set E PMD CPD Preferences Export rule set Rules configuration ema amp RunjDebug Clear all Team I Rule properties Add property gt Restore Defaults Apply 7 OK Cancel 6 Se pulsar el bot n Import rule set para poder seleccionar el archivo de reglas deseado Se abrir la siguiente ventana en la que se pulsar el bot n Browse para buscar el archivo de reglas que se quiere utilizar PMDconfig xml o bien se escribir directamente su ruta en el desplegable y se pulsar el bot n OK Fe PMD Plugin X Enter a rule set or select a default one fi Browse 7 Una vez seleccionado el archivo de reglas para el ejemplo PMDconfig xml el aspecto de ventana de configuraci n de las reglas de PMD ser el siguiente PMD Manual de usuario 41 49 General Ant Checkstyle FreeMarker Editor Help HQL editor Install Update H Java H MyEclipse E PMD CPD Preferences T pent Team 8 Ahora se podr habilitar la ejecuci n de la verificaci n del codigo por parte de PMD por cada AvoidCatc
46. rties gt lt example gt lt CDATA public void doSomething while true X j 11 gt lt example gt lt rule gt lt ruleset gt 4 3 3 C mo usar un conjunto de reglas personalizadas con Eclipse PMD busca los archivos de conjuntos de reglas en el classpath definido para el plug in Por tanto para usar un conjunto de reglas personalizadas deber n estar situadas en el classpath del plug in PMD La manera de hacer esto con Eclipse es empaquetar los conjuntos de reglas en un fragmento del plug in Un fragmento es una extensi n del plug in y todas las clases y los archivos de recursos que contenga son autom ticamente a adidos al classpath principal del plug in Los pasos para a adir un conjunto de reglas personalizado son los siguientes Crear un fragmento de Plug in fragment como una extensi n del plug in PMD Implementar las reglas Crear uno o m s conjuntos de reglas Empaquetar el fragmento Instalar el fragmento Oe qe c Crear un fragmento de plug in como una extensi n del plug in PMD El primer paso es configurar el entorno de desarollo del plug in Para ello nos dirigimos a Window gt gt Preferences gt gt Plug in development gt gt Target platform y pulsamos el bot n Select All y a continuaci n el bot n OK para cerrar la ventana El segundo paso el crear el proyecto para el fragmento 32 49 Eusko Jaurlaritzaren Informatika Elkartea e Sociedad Inform tica del Gobierno Vasco
47. s como una breve descripci n de su utilidad Cada uno de estos conjuntos incluye una colecci n de clases que realizan las verificaciones espec ficas Los enlaces aportados muestran la funcionalidad concreta de cada una de estas clases Basic JSF rules Conjunto de reglas con pautas b sicas de JSF Basic JSP rules Conjunto de reglas con pautas b sicas de JSP Basic Rules Colecci n de buenas pr cticas que todo el mundo deber a seguir Braces Rules Colecci n de reglas para el uso de llaves Clone Implementation Rules Conjunto de reglas para encontrar usos cuestionables del m todo clone Code Size Rules Reglas relacionadas con el tama o del c digo Controversial Rules Conjunto de reglas que pueden ser consideradas de alguna manera controvertidas Por ello se han agrupado en esta divisi n Coupling Rules Conjuntos de reglas que buscan instancias de uniones inapropiadas entre objetos y paquetes Design Rules Reglas que buscan dise os cuestionables Finalizer Rules Conjunto de reglas para encontrar usos cuestionables del m todo finalize Import Statement Rules Reglas que buscan problemas con las sentencias import J2EE Rules Reglas para J2EE JavaBean Rules Conjunto de reglas para JavaBeans JUnit Rules Reglas que buscan errores que pueden producirse en los testes de JUnit Jakarta Commons Logging Rules Contiene un conjunto de reglas que busca usos cuestionables de este framework Java Logging Rules Regla
48. s que buscan usos cuestionables de Log Migration Rules Contienen reglas para la migraci n de una versi n de JDK a otra Es necesario usar los conjuntos de reglas espec ficos para tales fines que se describen a continuaci n Migration13 Reglas para la migraci n a JDK 1 3 Migration14 Reglas para la migraci n a JDK 1 4 Migration15 Reglas para la migraci n a JDK 1 5 MigratingToJava4 Reglas para la migraci n a JDK 1 5 Naming Rules Colecci n de reglas sobre el uso de nombres demasiado cortos demasiado largos etc Optimization Rules Reglas para asegurar un mayor rendimiento Strict Exception Rules Proporcionan pautas estrictas para la propagaci n y recogida de excepciones String and StringBuffer Rules Reglas que tratan diversos que pueden aparecer a la hora de utilizar las clases String o StringBuffer Security Code Guidelines Estas reglas comprueban las pautas de seguridad aportadas por Sun y 24 49 Eusko Jaurlaritzaren Informatika Elkartea e Sociedad Inform tica del Gobierno Vasco publicadas en http ava sun com security seccodeqguide htmliagca Type Resolution Rules Conjunto de reglas que verifican el uso de tipos de datos apropiados en cada caso etc Unused Code Rules Reglas para encontrar c digo no utilizado variables locales m todos privados etc 4 2 Aportaciones personalizadas A pesar de que los conjuntos de reglas de verificaci n aportados son extensos siempre existe la posibilidad
49. s73aPetStore s7 3a amp ction s 7 3aContamsItem ction java src s 7 5a s 3aCapa W eb s7 5aPetStore s 3a ction s 7 3aContamsItem Action java src s 7 als 3aCapaWeb s 3aPetStore s 3aAction s7 5aContamsItem Action java 13 Ahora se va a tratar otra opci n que se encuentra disponible al trabajar con el plug in PMD la b squeda de c digo redundante duplicado Para ello se vuelve a desplegar el men contextual correspondiente al proyecto considerado y se selecciona la opci n PMD gt Find Suspect Cut And Paste PMD Manual de usuario 47 49 PMD p Eusko Jaurlaritzaren Informatika Elkartea e Sociedad Inform tica del Gobierno Vasco Package Explorer X A Eg src EH iB 573 Go Into 8 Elf 732 Open in New Window 7 e reports Open Type Hierarchy F4 X pmd H pmd 5i Copy Ctrl C B pmd nm y Qualified Name H pmd paste Chry X pmd Delete Delete E WebRoc x Gifs com Build Path d GS MET Source Alt Shift s gt gt shof Refactor A AAA EE WEE Import gt 1 12 Export ta Y Build Project E amp Refresh FS gm Close Project Close Unrelated Projects Run 4s Debug As Profile As Team Compare With Restore from Local History aims Clear violations reviews w A WE Properties Pues ae 9 Find Suspect Cut And Paste P Clear PMD violations P Check Code with PMD Se generar un informe en formato de texto plano c
50. tion que permite gestionar las reglas a aplicar a nuestros proyectos 1 Seleccionar la regla a modificar 2 Pulsar el bot n Edit rule y modificar los campos mensaje descripci n y o ejemplo 8 49 Eusko Jaurlaritzaren Informatika Elkartea Ie Sociedad Inform tica del Gobierno Vasco PMD Plugin X Rule name AccessorClassGeneration xPath rule Rule implementation class net sourceforge omd rules AccessorClassGeneration Message void instantiation through private constructors from outside of the constructor s class Description Instantiation by way of private constructors From outside of the constructor s class often causes the generation of an accessor A Factory method or non privitization of the constructor can eliminate this situation The generated class file is actually an interface It gives the accessing class the ability to invoke a new hidden package scope constructor that takes the interface as a supplementary parameter This turns a private constructor effectively into y Example public class Outer void method l Inner ic new Inner Causes generation of acc public class Inner Yv b ca private Inner Eliminar una regla Desde la ventana de preferencias Window gt Preferences pulsamos la l nea PMD Rules configuration que permite gestionar las reglas a aplicar a nuestros proyectos 1 Selecci
51. ueden ser Posibles bugs sentencias try catch finally switch vacias C digo muerto variable locales par metros y m todos privados que no se usan C digo no ptimo derroches en el uso de String StringBuffer Expresiones excesivamente complicadas sentencias f innecesarias implementaciones con bucles while e Codigo duplicado c digo copiar pegar que significa errores copiados pegados PMD puede instalarse en servidor para ser ejecutado desde tareas ant o como un plug in de Eclipse en PC local Para obtener informaci n adicional sobre el producto acceder a su p gina Web http omd sourceforge net 3 Integraci n con Eclipse Al igual que en otros muchos casos la integraci n del PMD como plug in con Eclipse o cualquier otro IDE de desarrollo da como resultado un entorno de trabajo visual sencillo de usar e intuitivo Gracias a este entorno el manejo de los aspectos de configuraci n y las distintas funcionalidades del PMD se realiza de forma r pida y eficaz 3 1 Configuraci n b sica Para poder configurar el plug in de PMD bajo Eclipse accedemos al men Window gt Preferences 5 49 Eusko Jaurlaritzaren Informatika Elkartea e Sociedad Inform tica del Gobierno Vasco E window Help Hew Window Mew Editor we Open Perspective Show view Customize Perspective Save Perspective 45 Reset Perspective Close Perspective Close All Perspectives Navigation d Web Browser k
52. undante duplicado y se muestra el informe txt generado 6 1 Resoluci n Los primeros 3 pasos s lo son necesarios para trabajar con la interfaz m s adecuada para la verificaci n de c digo por parte de PMD 1 En caso de no tener abierta la perspectiva que ofrece PMD habr que seleccionarla desde la opci n de men Window gt Open Perspective gt Other Window Help New Window Es Q a New Editor Open Perspective Show View b amp J java oy Customize Perspective y 7 Java Browsing Save Perspective As Reset Perspective Close Perspective Close All Perspectives Other Navigation Lo Working Sets d web Browser Preferences 2 En la nueva ventana aparecida se seleccionar la correspondiente perspectiva de PMD como muestra la imagen siguiente 38 49 Eusko Jaurlaritzaren Informatika Elkartea fi Sociedad Informatica del Gobierno Vasco Open Perspective zw CYS Repository Exploring Y Debug Hibernate Console amp Java E Browsing J3ava Type Hierarchy MyEclipse Database Explorer MyEclipse Hibernate i Image Editor M MyEclipse J2EE Development default 3 MyEclipse UML MyEclipse Web 2 0 d Resource Team Synchronizing Se trabajar sobre esta perspectiva para poder obtener toda la informaci n relativa a la verificaci n de c digo que se desee realizar con PMD PMD MyEclipse Enterprise Workbench m fB 573a s 3aCapaWeb s73aPetStore s73aAction EL 0
Download Pdf Manuals
Related Search
Related Contents
東日本大震災の復旧工事における船舶の解体等作業 Samsung E958 用户手册 Frigidaire FGMV154CLF Product Specifications Sheet Samsung SGH-X100 Užívateľská príručka TiBase Manual USER`S MANUAL Scheda di Rete Wireless G High-Speed Mode per Computer ÄKTAdesign Buffer Selection Kit Copyright © All rights reserved.
Failed to retrieve file