The package page shows how to install the Linter Bad Smells tool and possible refactoring for each code smell it supports: long method, long parameter list, long message chain, nested callback, and empty catch. And then, from the installation of the Linter Bad Smells, the user will be able to enable this code smells for performing static analysis of the code.
The executable is available through this link.
Bugs are a reality in software development, and while experienced programmers may know their way among several bugs, some beginners may feel discouraged by them.
Compilers can help by catching some errors, but they are still not able to encounter logical errors on their own. These errors can be tricky for a developer, and even more for an automatic tool, to identify.
With this problem in mind, we projected and implemented the HaskellFL tool, which locates logical errors in functional programming assignments written in a subset of the Haskell language.
To run HaskellFL, one must invoke it passing three file paths as inputs:
A failing test case is a combination of inputs that, once we call the program we are testing with them, this program will output an incorrect result.
On the other hand, a passing test case will produce the correct output in the same situation.
We used Cabal, the standard package system for Haskell in HaskellFL. So, the actual command to invoke HaskellFL is cabalRun, followed by the target we want to execute, which is,
in our case, HaskellFL followed by the three file paths enumerated above.
With these inputs, the tool runs the tests and locates what expression is more likely to be the error root cause.
Optionally, we may also specify the technique of choice: Tarantula or Ochiai. If we omit this information here, we will be prompted for it later in the command line.
Furthermore, HaskellFL can also interpret the test cases and expose their results. To do that, we must call HaskellFL with the code and test case paths,
followed by the keyword run and the name of the function to be interpreted.
An article entitled, Detecting Logical Errors in Haskell, published in the proceedings of the 15th International Conference on Testing Software and Systems (ICTSS 2021)
is available through this link.
Additionally, the HaskellFL tool is publicly available on GitHub, together with the test suite through this link.
Vanessa Cristiny Rodrigues Vasconcelos e Mariza A.S. Bigonha.
Asymptus is tool for automatic inference of function complexity. It uses a hybrid approach, mixing static analysis and dynamic profiling, in order to provide more accurate results. Statically, Asymptus determines: (i) the inputs of a loop, i.e., the variables that control its iterations; and (ii) an algebraic equation relating the loops within a function. Then the program is instrumented to output pairs relating input values and number of operations executed. By running the program over different inputs, we generate sufficient points for a polynomial interpolator in order to precisely determine a complexity function for loops. In the end, the complexity function for each loop is combined using an algebra of our own craft. Asymptus was implemented using the LLVM compilation infrastructure. Asymptus consists of four main steps: (1) static analysis, (2) code instrumentation, (3) dynamic information extraction and (4) polynomial interpolation.
RAFTool source code is available on GoogleCode, hosting projects in a collaborative development environment. It used Subversion as version control tool.
UMLSmell is a tool that, automatically via software metrics, identify bad smell. It recognizes in which classes were identified the bad smells, and at what level, regular or bad.
UMLsmell receives as input a XMI file, which corresponds to the diagram classes to be analyzed and identified via metrics. It is held parsing in order to extract the following information: classes, attributes, methods, parameters and relationships. This data is stored internally in the data structures defined by the program for future reference, so that, from these data, the functionality Generating metrics allows the user to select among existing metrics in the system, those for which he wants to generate reports for late analysis. This feature allows the user to check the values of metrics selected for software classes. These metrics allow the functionality Identify bad smells, which is the central point of the tool. Define threshold allows the user to customize the threshold in regular and bad for each metric collected by the tool. This feature was implemented so that the user is free to choose the threshold he prefers to use. Create project, create a file that stores all the changes in threshold. This feature is useful if the threshold is changed as you need and want to save them for future uses of UMLsmell. Export results, it allows that the metrics analysis and bad smells are exported to spreadsheet format accepted by most of the tools Spreadsheets currently available.
Connecta is a tool that allows gathering object-oriented software metrics; predicting change impact propagation, exploring the software networks, and comparing the structure of two versions of a software system. The tool performs such analyses on Java software systems.
Connecta was proposed by Kecia Ferreira, in her Master Thesis, and has been evolved by the same researcher, in her PhD Dissertation. Connecta is, now, an ongoing project whose aim is to provide a platform for measuring and analyzing data of software systems.
The tool has been used to allow research on software measurement, change propagation impact, and software evolution.
The main features of Connecta is described here
Download Connecta.
Interpreter for TAM, based on the description given by David Watt in "Programming Language Processors".
Integrated system for documentation and Prolog programs using techniques of hypertext and literary programming.
2021
Linter Bad Smells Vídeo
The Linter Bad Smells tool is a linter that performs static analysis of projects implemented in JavaScript language, looking for code smells to increase the quality of code developed by software engineers. Therefore, its purposes are: to assist software developers in the analysis of source code; facilitate the identification of possible bad smells in applications developed in this language; disseminate the concepts of code smells to the Javascript community, and thus assist software engineers in refactoring code smells identified by Linter Bad Smells in the analyzed source code via the addition of a refactoring module associated with the tool documentation.
Lucas Gonçalves Antunes Paiva, Mariza A.S. Bigonha and Bruno Luan Sousa.
HaskellFL Vídeo
(I) one path for the Haskell program containing a bug,
(II) another for the text file containing passing test cases, and
(III) the last one for the text file with failing test cases.
2020
Um Oráculo de Bad Smell
We have done a bad-smells oracle with a manual approach to add it to the set of oracles available for download. This oracle identifies the bad smells Wide Class, Long Method, Data Class, Feature Envy, and Refused Bequest by manually inspecting a collection of five open-source software developed in Java: Aardvark, Logging, GanttProject, AndEngine, and Codec to find the instances of those smells.
To measure the quality of the bad smell detection tools JDeodorant, JSpIRIT, and FindSmells, we compared the results obtained by the proposed oracle with the results extracted by these tools. The worksheets that generated this comparison are available for a free consultation at the link below.
The results are available through this link.
Rafael Prates, Mariza A.S. Bigonha and Kecia A.M. Ferreira.
2017
Design Pattern Smell Vídeo
Design Pattern Smell is a tool for co-occurrences detection
between design patterns and bad smell in software systems. With Design
Pattern Smell, the user may identify the artifacts that hold such relationships
and the intensity with which they occur in the design patterns analyzed. In addition,
Design Pattern Smell may be used as a refactoring guide, since all artifacts
detected with co-occurrences are displayed to the user.
The executable is available through this link.
The source is available at this link.
The input files are available through this link.
Bruno L. Sousa,Mariza A.S. Bigonha and Kecia A.M. Ferreira.
2016
FindSmells Vídeo
Tool that support
the detection of bad smells based on XML files. With the tool,
the user can propose its own detection strategies considering
the software metrics available in the XML file, the comparison
logical operators, and the thresholds informed by the user. To run the detection strategy, FindSmells
filters the source code elements, methods and classes, that
are in accordance with the rules defined for each metric that
composes the detection strategy. The tool also exports the obtained results via CSV
file to provide easy manipulation and further analysis.
The executable is available through this link.
The source is available at this link.
The XML input files are available through this link.
Bruno L. Sousa, Priscila P. Souza,
Eduardo Fernandes, Mariza A.S. Bigonha and Kecia A.M. Ferreira.
2015
Asymptus Tool - A Tool for Automatic Inference of Loop Complexity
Installing Asymptus Tool
Asymptus requires LLVM 3.4 to perform static analysis. To install LLVM 3.4 you can follow these tutorials: downloading a specific version of LLVM and installing LLVM. Note that it is necessary to also install clang, the LLVM front-end.
Once you have a working installation of LLVM 3.4, you can download the Asymptus binaries or source code and install it.
Usage
Asymptus executes over either a C/C++ file or LLVM bytecodes. The simplest way to run our tool is to execute
./asymptus input_file.(c|cpp|bc).
It will identify how many command line arguments the input program reads and generate numeric values for them. You may also use the following options:
--args type ....
Allows the user to specify the types of command line arguments. It is necessary to specify as many argument as the program reads in order to have a correct execution. The types may be one of the following: int, long, float, double, num, char or string.
--mix ARG ?
Allows the user to mix random generated arguments with concrete data. When using this option, the random arguments types have to come between { }. For instance, --mix myInput {int}.
--man
This option will ask the user for only concrete inputs. Asymptus will ask for the inputs of each desired execution. An empty line means all data has been provided.
-v
Verbose mode. Prints the polynomial for each loop inside a function.
-h or --help
Prints this usage message.
Download
Linux binaries
Download
Mac OS X binaries
Junio Cezar, Francisco Demontiê, Mariza A.S. Bigonha e Fernando Pereira.
2014
RAFTool - Methods Filtering Tool, Classes and Packages Vídeo-Tutorial
The RAFTool tool performs filtering methods, classes and packages that have anomalous measurements softwares metrics-driven objects according to the thresholds values suggested in the work. To install and use RAFTool is necessary that the Java virtual machine installed with version greater than or equal to 1.6. The executable is available through this link.
The project can be downloaded directly in Eclipse and is available through the this link..
Tarcísio Filó,
Mariza A.S.Bigonha, Kecia Ferreira.
ArchLint
from four heuristics ArchLint detects absences and differences present in the source code systems oriented by objects.
Cristiano Maffort, Marco Túlio O. Valente, Mariza Bigonha.
The UMLSmell Tool Vídeo
The executable is available through this link.
Henrique N. Gomes, Flávio Madureira, Mariza A.S. Bigonha, Kecia Ferreira.
2011
The Connecta Platform CONNECTA
Kecia A. Marques Ferreira, Mariza A. S. Bigonha, Roberto S. Bigonha , Luiz Felipe O. Mendes, Heitor C. Almeida.
2001
Interpreter for the Abstract Machine TAM
Reuber G. Duarte e Mariza Bigonha.
1999
HyperPro
Ed-Dbali AbdelAli, Pierre Deransart, Mariza Bigonha, José Siqueira, Roberto Bigonha, Fabricio Schmidt, Flávia P. Ribeiro. Projeto Rhae.
1998
Interpreter for a Functional Language Oriented by Objects
Wendell F. Taveira, Mariza Bigonha e Roberto S. Bigonha.
Symbols Table
"Symbols Table Package" for Delphi languages C and Java, containing the main operations in the approaches : Linear , Ordinate List , Binary Search Trees, Hash Tables and Binary Trees Forests.
Yêdda Aires D. Silva e Mariza A.S. Bigonha.
GALsic
Lexical analyzer generator for Windows.
Erika Hamacek Pinto e Mariza A.S. Bigonha.
1990
SIC
C version for Windows -NT.
Mariza Bigonha, Roberto S. Bigonha,
Marco R. Costa e Valeska Russo.
1986
Pascal-S
Pascal compiler developed for the computer supermicro DCC2600.
Mariza A.S. Bigonha.
NFios
- basic input and output non-blocking for managing a PC based on Intel 8086/8088, used in supermicro computer DCC2600.
Mariza A.S. Bigonha.
COMPUTER PROGRAM WITH REGISTRATION
1987
SIC Compilers Implementation System
Automatic generation of front-end compilers with automatic built-in error recovery system. Registered Program in Computer Registry on 06.03.1987. Computer Program Registration Certificate No. 09220-7, in accordance with the provisions of Articles 3, Item III, 4, Item VIII, 8, Paragraph IV, V and VI, 11, 12 and 22 of Law No. 7232 of 10.29.1984, Article 1. Decrete Law No. 2203 of 27/12/1984 and following the criteria set out in Normative Act No. 22/82 of 12/02/1982.
Mariza A. S. Bigonha, Roberto S. Bigonha.
PRODUCTS
2009
ABCD algorithm and SSI representation incorporated into the LLVM compiler
from "Adding Static Single Information Form to LLVM" work within the
Google SummerCode 2009 Program.
André Luiz C. Tavares, Fernando Pereira, Mariza A.S. Bigonha.
Static Profiling
Feature incorporated into the LLVM compiler from "Adding Static Profiling Capabilities to LLVM work" within Google SummerCode 2009 Program.
Andrei Rimsa Álvares, Fernando Pereira, Mariza A.S. Bigonha.
New optimizations added in Mozilla Firefox JavaScript compiler
from work "Improving the Register Allocator of Trace Monkey" inside
Google SummerCode 2009 Program
Marcos Rodrigo Sol, Fernando Pereira, Mariza A.S. Bigonha.
1998
NET
System for generating netlist from circuit descriptions and definitions of macro circuits used. NET displays the connections between pins of standard cells that make up the circuit.
Roberto S. Bigonha e Mariza A. S. Bigonha
CDM
Acquisition system multi-frequencial MFC data in telephone exchanges. A special hardware collection sequences MFC signals generated by the establishment of protocol telephone connections and transmits it to a computer that stores them in a database.
Roberto S. Bigonha, Newton A.C. Lages, João Eduardo R. Dantas, Rodolf Schwaners, Mariza A. S. Bigonha e Beatriz Mintz.