Giter Site home page Giter Site logo

softvis-research / getaviz Goto Github PK

View Code? Open in Web Editor NEW
48.0 8.0 47.0 273.75 MB

With Getaviz you can solve software engineering problems visually by exploring software artifacts them in 2D, 3D, and virtual reality.

Home Page: http://home.uni-leipzig.de/svis/Showcases/

License: Apache License 2.0

C# 0.50% Ruby 1.98% CoffeeScript 0.02% JavaScript 5.64% CSS 0.19% HTML 1.16% Shell 0.06% Xtend 7.04% Java 83.04% PHP 0.18% Batchfile 0.01% Dockerfile 0.01% SCSS 0.06% Cypher 0.11%
software-quality program-comprehension repository-mining software-analytics software-visualization

getaviz's Introduction

Build Status Generator2 UI Evaluation Server

Getaviz

With Getaviz you can solve software engineering problems visually by exploring software artifacts in 2D, 3D, and virtual reality. Among other things it provides proper visualizations for identifying and refactoring antipatterns, locating runtime bottlenecks, assessing software quality, and tracking changes across multiple versions. To get a first impression, have a look at our showcases that are available online. You can adapt the visualizations as well as the user interface according to your needs. Getaviz visualizes the structure and behavior of several programming languages (Java, Ruby, PHP, and C#) and can enrich these visualizations with evolutionary information from git and svn repositories. They can be explored via browser, HTC Vive, or Oculus Rift. We support many different visualizations, e.g., Recursive Disk (2D and 3D), City, City Floors, City Bricks, and many more.

Installation, Usage, and Development

Clone this repository and have a look at our Wiki which contains many additional information. There you will find guides for installation, usage, and setting up your local environment for development. Please open an issue if you have any questions or experience any problems. Already answered questions can be found here.

Development Team

Getaviz is mainly developed by the research group Visual Software Analytics at Leipzig University. Currently, four main developers are contributing actively to Getaviz:

Many thanks to all the contributors who have improved Getaviz by implementing new features or fixing bugs, especially: Denise Zilch, André Naumann, Stefan Faulhaber, Dan Häberlein, Lisa Vogelsberg, Aaron Sillus, Jens Thomann, Xuefei Gao, Vladislavs Terjaniks, Łukasz Kalfas, and Christina Sixtus.

Publications

A full list of publications you can find on our website.

getaviz's People

Contributors

aaronsil avatar jt23coqi avatar lukasz-kal avatar malanmoon avatar naraesk avatar pascalkovacs avatar pavankuppa1 avatar rmllr avatar schilbach avatar sophialangheld avatar valekta avatar vlad-t avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

getaviz's Issues

jQAenhencement alters database

Steps to reproduce:

  • Generate a RD visualization from a database created with jQA
  • Run the generation process a second time

Expected results:
In both cases the same visualization should be generated

result:
The second visualization has an additional package ring. Probably, the jQAEnhancement creates an additional node or edge that causes this.

UI: AFrameActionController Issues

Everything works fine with the normal ActionController. However using the AFrameActionController, only MouseHovering seems to work.
I need to catch an 'actionController.actions.keyboard.key[somekey].down' event.

Error persist on normal page: http://localhost:8082/ui/index.php?setup=web_a-frame/City%20bank&model=City%20bank%20aframe&aframe=true

AframeActionController.js:386 Uncaught TypeError: Cannot read property 'up' of undefined
at upAction (AframeActionController.js:386)
at HTMLElement. (AframeActionController.js:102)
at HTMLElement. (a-node.js:263)
at i.twoWayEmit (cursor.js:389)
at i.onCursorUp (cursor.js:246)
at HTMLCanvasElement. (bind.js:12)

All logging enabled in e.g. the city bank.js setup. (Testing this in the existing environment which should work). The "Cannot read property 'up' of undefined" Error message is the only one appearing. The Action events as known are not called.

Rename x3dom specific files

All files in the UI that are x3dom specific should be renamed to have x3dom as part of their name:

  • CanvasManipulator.js → X3DomCanvasManipulator.js
  • ActionController.js → X3DomActionController.js
  • CanvasHoverController.js → X3DomConvasHoverController.js
  • FilterController.js → X3DomFilterController.js
  • RelationConnectorController.js → X3DomRelationConnectorController.js

Everytime the files are importet, the import has to be adopted to the new name. This includes:

  • aframe.html
  • index.php
  • index.html
  • aframe.html

The list of files might be incomplete, please double check!

UI - Webpack

I see, that there is a webpack used for UI (in devDependencies, in package.json), but can't find where it's used (any build/serve command).

What does it do in this project?

Cannot start service

Screenshot_1

Problem: some ports are blocked. The problem is, that Windows 10 after shutdown actually doesn't close connections.

Option to set min width for disk segments

When using the RD metaphor, the size of an attribute is constant. Sometimes, this results in a very long and thin disk segment, which is barely visible. Therefore, we should add an option to set a min width. This will break the rule, that all attributes have the same size, but improves readability

author name is not exported to hismo model

Currently, the ruby extractor does not export the author of a commit, but the (former) java extractor does. (author) tag should be added to the ruby extractor output as in the example below,

(parentHistory (ref: 1546))
(versionEntity (ref: 10001824)) 
(author 'Dustin Graham')
(timestamp 'Fri Mar 14 00:05:22 CET 2014') 
(commitId 'd89c82545a3615fb32f8a8f8c0f2c501b706f003')

Inactive backend

Wanted to test generator-connector again, but there seems to be a problem now:
I'm trying to start the generator, but the backend isn't active.

grafik

So I don't receive any message, that generator does anything. And each time I run docker-compose up, I see following messages:

grafik

Any guesses?

Refactoring Model

We need a class to represent the model/rd visualiaztion. It holds the list of disks that are currently stored in the JQA2RD class. It needs a write method to be written to the database. Similar to the disk and disksegment classes we need testcases for this as well.

Ruby: Displaying SourceCode does not work reliable

Problem: Ruby class name and file name are not necessarily identical.

Possible solution A: Are their general rules or at least conventions for the relation between class and file name?
Possible solution B: write file name to metadata.json

B is more complex but also more general since it would work for all programming languages

UI - New visualization

At the moment, we can't generate a new visualization from UI, because we try to reach generator from client and not from server. So the possible solution is to create a php script, which calls the generator. So the logic would be like:

UI input -> php script -> generator. Right?

Script is very simple:
<? php Header("Location: http://BACKEND:8080?params(received from form)....") ?>

My questions are:

  1. Do I have to execute maven build, so that generator would be accessible?
  2. If not, what are prerequisites for generator?

AFRAME is not defined

AFRAME is not defined as it seems, in the entire projekt. (In my own test/mycontroller.js)
Even existing pages such as

index.php?setup=web_a-frame/City bank&model=City%20bank%20aframe&aframe=true

that are references by 'web_a-frame/default.js AND city bank.js" deliver the same error or are not found.
I either completely missed sometihing or A_Frame is not properly imported / used yet.

PS: Are there any working A-Frame elements in the Getaviz project on the development branch?

Error in Usage info

The file settings.properties in the directory generator2/org.getaviz.generator configures the generation process.
Should be:
The file settings.properties in the root directory configures the generation process.

Typing error in usage info

In the "Generating a visualization manually (all platforms)" section, block 2 -> "The configuration opetions are described".

Should be "options".

Ruby gem issue building docker images

I'm building docker images and I got this issue:

Step 12/15 : RUN gem install bundler && bundle install --jobs 20 --retry 5 # might be better? ---> Running in 608cd71ddee5 Successfully installed bundler-2.0.2 1 gem installed Fetching gem metadata from https://rubygems.org/........... Could not find bootstrap-sass-3.2.0.2 in any of the sources ERROR: Service 'eval' failed to build: The command '/bin/sh -c gem install bundler && bundle install --jobs 20 --retry 5 # might be better?' returned a non-zero code: 7

Famix2Famix should be rafcored

The Famix2Famix component in the generator is too complex. It should be clearly divided into the sections filtering, creation of elements, and manipulation of elements.

Generating a visualization manually does nothing

Hello,
I tried to generate a visualization. I followed the instructions under:
https://github.com/softvis-research/Getaviz/wiki/Usage =>
Generating a visualization manually (all platforms)

I attached my settings.properties file:
settings.zip
I am using Windows.

When I call http://localhost:8083/ I get the following message:
Visualization has been generated to the output directory.

But the output directory is empty. Just nothing happens.

I need a visualization for the rd metapher in aframe to test my code. There is only an example visualization in x3dom. If this problem is not easy to solve, could you upload the visualization somewhere so I can test on it.

Best regards,
Stefan

C# extractor does not work without silently (i.e. without human interaction)

The current C# extractor needs input from the user as to what directory to parse, and where to put the resulting file. It even ends with a Console.ReadLine(), stopping it until the user presses Enter. This makes it useless for CI/CD scenarios (where the tool is run in a nightly build for instance). Instead, make it into a real command line tool, possibly with https://github.com/commandlineparser/commandline (which is the one I happen to prefer, with a permissive MIT license). Then:

generateCsharp myDll.dll >myresult.famix

You would then write error messages to stderr and the result would be spit out to standard out, so that it can take part in other tools in the pipeline.

Reset visualization

The feature "Reset visualization" does not reset everything, e.g. selected versions

Multiple entities with same fqn

In some cases it is possible that we get two or more entities (classes/methods/attributes) with the same full qualified name.

Case 1: The methods foo(String s) and foo(String[] s) have the same fqn since in the famix model the parameters have the same type. Failure has to be resolved within VerveineJ.

Case 2 If the software systems consists of multiple modules that are build one after the other it is permissable to have multiple classes with the same fqn. To resolve this, we need information about the build system and the module structure. Unfortunately, this is specific for every build system.

workaround In Famix2Famix duplicate methods (based on fqn) are removed. This ensures that everything is working correctly although the visualization is slightly inaccurate. However this is better than a non-working visualization.

Generation Wizard only works on Linux

The ui provides a menu entry New visualization where you can customize and start the generation process. Currently, these only works on Linux (and maybe masOS), but not on Windows. The reasons are as follows:

Docker uses a separate sub network. Every container has its own IP inside this network and can access every other container. This works fine on all platforms. Besides this private IP a container might have a public IP. In our case this is localhost:8082 for the ui and localhost:8083 for the generator or the public URL in case Getaviz is hosted somewhere.

Our UI is consists mostly of client-side JavaScript, including the GenerationFormController. When the form is submitted, we try to access the private IP of the generation container from the client. But the client (the host of the docker containers, i.e., your computer) is not part of the sub network and therefore cannot access these private IPs, so we get a timeout. Instead, we should invoke the generation process not from the client but from the server and then everything should work fine. This will require some changes to the UI, we cannot solve this with client-side JavaScript!

The reason it works on Linux is, that Linux host machines can access the private IPs of the containers by default. However, this is still an unusual behavior. Only the frontend shoul be accessible public, not every backend service!

Updating backend

Did some changes to backend (generator) and wanted to see this changes in my visualization. Is it right, that after changing some files you have to do
1) docker-compose down;
2) go to /generator2/org.getaviz.generator/ ;
3) run mvn install;
4) go back to root directory;
5) run docker-compose up;

Is it right? Did so and am trying to generate a new visualization and is it loading without stopping... already tried to run docker-compose build --no-cache backend in root directory and it didn't help.

Integration of jQAssistant

Currently, generator2 requires a database that is created by jQAssistant as input. However, it would be much more convenient that the generator creates the database itself, e.g. by an entry in settings.properties:

input.jar = http://path/to/jar
input.war = http://path/to/war

Then, the Generator does the following:

  1. Download jar/war file
  2. run jQAssistant to create the database
  3. run the generation process with the created database

Refacotring Settings

The naming conventions of the settings file should be improved and make them more clearly. Further, a full and commented example settings file should be shipped wtih the generator

ERROR: Service 'eval' failed to build

While trying to run docker-compose up the error ERROR: Service 'eval' failed to build was thrown. This was caused because Wheezy and Jessie were recently removed from the mirror network StackExchange. The error log

Building eval
Step 1/10 : FROM ruby:2.4.1
 ---> e7ca4a0b5b6d
Step 2/10 : RUN apt-get update     && apt-get install -y --no-install-recommends         rails rake build-essential nodejs libmysqlclient-dev mysql-client    && rm -rf /var/lib/apt/lists/*
 ---> Running in 535476e0df74
Ign http://deb.debian.org jessie InRelease
Get:1 http://security.debian.org jessie/updates InRelease [44.9 kB]
Ign http://deb.debian.org jessie-updates InRelease
Get:2 http://deb.debian.org jessie Release.gpg [2420 B]
Ign http://deb.debian.org jessie-updates Release.gpg
Get:3 http://deb.debian.org jessie Release [148 kB]
Ign http://deb.debian.org jessie-updates Release
Get:4 http://deb.debian.org jessie/main amd64 Packages [9098 kB]
Get:5 http://security.debian.org jessie/updates/main amd64 Packages [825 kB]
Err http://deb.debian.org jessie-updates/main amd64 Packages
  
Err http://deb.debian.org jessie-updates/main amd64 Packages
  
Err http://deb.debian.org jessie-updates/main amd64 Packages
  
Err http://deb.debian.org jessie-updates/main amd64 Packages
  
Err http://deb.debian.org jessie-updates/main amd64 Packages
  404  Not Found
Fetched 10.1 MB in 19s (514 kB/s)
W: Failed to fetch http://deb.debian.org/debian/dists/jessie-updates/main/binary-amd64/Packages  404  Not Found

E: Some index files failed to download. They have been ignored, or old ones used instead.
ERROR: Service 'eval' failed to build: The command '/bin/sh -c apt-get update     && apt-get install -y --no-install-recommends         rails rake build-essential nodejs libmysqlclient-dev mysql-client    && rm -rf /var/lib/apt/lists/*' returned a non-zero code: 100

Update paperclip version

While logging in to github with the main account, the following message is shown:

We found a potential security vulnerability in one of your dependencies.
The paperclip dependency defined in Gemfile.lock has a known high severity security vulnerability in version range >= 3.1.4, < 5.2.0 and should be updated.

Only the owner of this repository can see this message.

Revise Fonts

Currently, we use "Segoe UI" as font in the UI. This is a Microsoft font which is not available on other platforms. Besides that, the different css files (zt.css, Style.css, and jqwidgets) define different fallbacks. In the end, many different fonts are used. Would suggest to use Open Sans consequently.

Backend exited with code 1

Did docker-compose build --no-cache backend, and afterwards docker-compose up and received following error:

grafik

And
grafik

Local development

I'm trying to make some changes to UI (Vizualisation form) and actually already did some changes in file, but in debugger is shown the old version. I'm working with "Getaviz -> ui" folder. Tried to restart docker (just to be sure) and check ui in another browser, but none of that worked.
My question is - where should I change UI files and if it was the right place, what do I have to do, so that my changes appear?

Thank you in advance!

Refactoring RD2RD

We have to refactor RD2RD in a similiar way to JQA2RD, i.e

  • no more recursion, as less database queries as possible
  • use the new classes disk, disksegment and model
  • some methods of RD2RD should be member functions of this classes
  • create tests

Refactoring JQA2RD

Currently, the classes JQA2RD consists of the attributes dataDisks and methodDisks which determine if we create disks or disksegments. This makes the code very complicated. To simplify, we could use the Factory pattern (https://jaxenter.de/mit-factory-pattern-designprobleme-losen-5040), so that both variables disappear and we only call rdelementfactory.createElement(...). rdelementfactory returns a disk or a disksegment depending on both variables. Testcases have to be created for the factory as well.

Some general hints:

  • only the classes implementing the step interface are supposed to call the config.objects directy. All other classes/methods are called by using the required values
  • only the classes implementing the step or rdelement interface are supposed to query the datbase

The factory must not know the config object or the database connector!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.