npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

peg-java

v2.3.3

Published

Genera gráfico de inestabilidad/abstracción para Software en Java

Downloads

16

Readme

peg-java

Calcula Inestabilidad y Grado de abstracción para determinado proyecto en Java y reporta lo hallado.

Importante: A la hora de calcular la inestabilidad de un proyecto entero ES NECESARIO considerar tipos externos para el cálculo de acoplamiento a menos que sea entre módulos de un mismo proyecto que no es el foco de esta herramienta.

oclif Version License

Requerimientos

  • Node v18.15.x LTS

Utilización

$ npm install -g peg-java
$ peg-java COMMAND
running command...
$ peg-java (--version)
peg-java/2.3.3 linux-x64 node-v18.15.0
$ peg-java --help [COMMAND]
USAGE
  $ peg-java COMMAND
...

Ejecutar en desarrollo:
./bin/dev COMMAND

Ejecutar en producción:
./bin/run COMMAND

Mostrar debug (aplica a los anteriores):
DEBUG=peg-java:* peg-java COMMAND

Ejecutar pruebas:
npm run test

Comandos

peg-java DIRECTORY

Analiza el directorio entregado cómo argumento

USAGE
  $ peg-java DIRECTORY [--noDistance | [--noAbstraction | --noInstability] | ]

ARGUMENTS
  DIRECTORY  Ruta directorio de proyecto. (Absoluta o relativa)

FLAGS
  --noAbstraction  Omite el cálculo de abstracción
  --noDistance     Omite el cálculo de distancia
  --noInstability  Omite el cálculo de inestabilidad

DESCRIPTION
  Analiza el directorio entregado cómo argumento

  Recorre el directorio del proyecto Maven/Gradle y parsea los archivos .java, genera
  un gráfico abstracción/inestabilidad El directorio `test` y clases que contengan la
  palabra `Test` son omitidas.

EXAMPLES
  $ peg-java ../opencsv-source/
    Analizando proyecto en: ../opencsv-source/
    Archivos java: 150
    Total Acoplamiento: 106 Ca - 217 Ce
    Inestabilidad: 0.6718
    Abstracción: 0.2632
    Distancia: 0.065
    Gráfico generado en: distance-chart.png

See code: dist/commands/index.ts

peg-java help [COMMANDS]

Display help for peg-java.

USAGE
  $ peg-java help [COMMANDS] [-n]

ARGUMENTS
  COMMANDS  Command to show help for.

FLAGS
  -n, --nested-commands  Include all nested commands in the output.

DESCRIPTION
  Display help for peg-java.

See code: @oclif/plugin-help

Descripción y referencias

Este programa calcula la abstracción e inestabilidad con el fin de ayudar a comprender la arquitectura de un Software, se puede encontrar material de referencia a continuación:

  • https://medium.com/javarevisited/abstractness-vs-instability-neo4j-case-study-c453f46a6ea5 (Artículo de referencia para cálculo de mismas métricas para paquetes de un proyecto)
  • https://www.jarchitect.com/Metrics (Herramienta)
  • https://ieeexplore.ieee.org/document/491650 (Artículo sobre acoplamiento en POO)
  • https://scitools.com/ (Understand, Herramienta FOSS para análisis de código)

Arquitectura

Changelog: Release 2

Estilo arquitectónico microkernel

Cómo parte del proceso actualizar la arquitectura del proyecto se decidió utilizar el estilo arquitectónico microkernel, el cual permite separar la lógica de negocio de la lógica de la aplicación, esto permite que la lógica de negocio sea independiente de la plataforma y pueda ser reutilizada en otras aplicaciones. El enfoque principal de esta entrega es la modularidad y la extensibilidad, por lo que se considera que este estilo arquitectónico es el más adecuado para el proyecto.

  • src/commands: Contiene los comandos de la aplicación, estos son los encargados de recibir los argumentos y opciones de la línea de comandos y delegar la ejecución a los servicios correspondientes. Es el equivalente a un cliente que accede a mecanismos en la arquitectura microkernel a través de capabilidades para comunicarse con un service o Plugin.
  • src/service: Servicios que contienen la lógica de negocio de la aplicación, estos son los encargados de realizar los cálculos y generar las métricas solicitadas. Es el equivalente a un Plugin en la arquitectura microkernel. Contiene servicios que extienden de Plugin cómo un tipo genérico de servicio.
  • src/core: Corresponde a el kernel o core de peg-java, a través de peg-java.ts actualiza la estadística del proyecto analizado, recibe las notificaciones generadas por los servicios, utiliza el Singleton ProjectStats y lo actualiza por medio de los eventos recibidos.

Patrones de diseño

  • Singleton: Se utiliza para mantener la estadística del proyecto analizado, esta estadística es actualizada por los servicios y es utilizada por el comando peg-java para mostrar los resultados. (src/model/project-stat.ts)
  • Observer: Se utiliza para notificar a los servicios cuando se ha analizado un archivo, esto permite que los servicios puedan actualizar la estadística del proyecto.
    • src/core/peg-java.ts: Observer (Suscriptor), es notificado por los servicios cuando se ha analizado un archivo u obtenido una métrica.
    • src/model/plugin.ts: Subject (Publicador), clase abstracta que funciona cómo base para crear Plugins, notifica al kernel cuando se ha analizado un archivo u obtenido una métrica y lo asigna en ProjectStat.

Diagrama

El siguiente diagrama representa las principales dependencias en el proyecto que permiten el funcionamiento descrito en la arquitectura.

arch_img

Contribuir

peg-java fué hecho por @jmainhard cómo parte de una evaluación académica. Para contribuir se considera:

  • UXD en Español (En medida de lo posible)
  • Código en Inglés