EvoSuite

Last updated
Original author(s) Dr. Gordon Fraser, Dr. Andrea Arcuri
Repository github.com/EvoSuite/evosuite
Written in Java
License LGPL-3.0
Website www.evosuite.org

EvoSuite is a tool that automatically generates unit tests for Java software. EvoSuite uses an evolutionary algorithm to generate JUnit tests. EvoSuite can be run from the command line, and it also has plugins to integrate it in Maven, IntelliJ and Eclipse. EvoSuite has been used on more than a hundred open-source software and several industrial systems, finding thousands of potential bugs.

Contents

History

EvoSuite was originally created in 2010 as output of a research project by Dr. Gordon Fraser and Dr. Andrea Arcuri. EvoSuite is currently released under LGPL license, and its source code is hosted on GitHub. In academia, EvoSuite is often referred as one of the main reference tools for search-based software testing. [1]

Other usages

As EvoSuite is released as open-source (and so freely available to download and modify), it has been used as a reference tool for search-based software testing in a number of independent studies, like:

See also

Bibliography

Related Research Articles

Software testing is the act of examining the artifacts and the behavior of the software under test by validation and verification. Software testing can also provide an objective, independent view of the software to allow the business to appreciate and understand the risks of software implementation. Test techniques include, but are not necessarily limited to:

Code review is a software quality assurance activity in which one or several people check a program mainly by viewing and reading parts of its source code, and they do so after implementation or as an interruption of implementation. At least one of the persons must not be the code's author. The persons performing the checking, excluding the author, are called "reviewers".

<span class="mw-page-title-main">Model-based testing</span>

Model-based testing is an application of model-based design for designing and optionally also executing artifacts to perform software testing or system testing. Models can be used to represent the desired behavior of a system under test (SUT), or to represent testing strategies and a test environment. The picture on the right depicts the former approach.

<span class="mw-page-title-main">Fuzzing</span> Automated software testing technique

In programming and software development, fuzzing or fuzz testing is an automated software testing technique that involves providing invalid, unexpected, or random data as inputs to a computer program. The program is then monitored for exceptions such as crashes, failing built-in code assertions, or potential memory leaks. Typically, fuzzers are used to test programs that take structured inputs. This structure is specified, e.g., in a file format or protocol and distinguishes valid from invalid input. An effective fuzzer generates semi-valid inputs that are "valid enough" in that they are not directly rejected by the parser, but do create unexpected behaviors deeper in the program and are "invalid enough" to expose corner cases that have not been properly dealt with.

Architecture description languages (ADLs) are used in several disciplines: system engineering, software engineering, and enterprise modelling and engineering.

Software visualization or software visualisation refers to the visualization of information of and related to software systems—either the architecture of its source code or metrics of their runtime behavior—and their development process by means of static, interactive or animated 2-D or 3-D visual representations of their structure, execution, behavior, and evolution.

A software regression is a type of software bug where a feature that has worked before stops working. This may happen after changes are applied to the software's source code, including the addition of new features and bug fixes. They may also be introduced by changes to the environment in which the software is running, such as system upgrades, system patching or a change to daylight saving time. A software performance regression is a situation where the software still functions correctly, but performs more slowly or uses more memory or resources than before. Various types of software regressions have been identified in practice, including the following:

End-user development (EUD) or end-user programming (EUP) refers to activities and tools that allow end-users – people who are not professional software developers – to program computers. People who are not professional developers can use EUD tools to create or modify software artifacts and complex data objects without significant knowledge of a programming language. In 2005 it was estimated that by 2012 there would be more than 55 million end-user developers in the United States, compared with fewer than 3 million professional programmers. Various EUD approaches exist, and it is an active research topic within the field of computer science and human-computer interaction. Examples include natural language programming, spreadsheets, scripting languages, visual programming, trigger-action programming and programming by example.

Thread Level Speculation (TLS), also known as Speculative Multithreading, or Speculative Parallelization, is a technique to speculatively execute a section of computer code that is anticipated to be executed later in parallel with the normal execution on a separate independent thread. Such a speculative thread may need to make assumptions about the values of input variables. If these prove to be invalid, then the portions of the speculative thread that rely on these input variables will need to be discarded and squashed. If the assumptions are correct the program can complete in a shorter time provided the thread was able to be scheduled efficiently.

Search-based software engineering (SBSE) applies metaheuristic search techniques such as genetic algorithms, simulated annealing and tabu search to software engineering problems. Many activities in software engineering can be stated as optimization problems. Optimization techniques of operations research such as linear programming or dynamic programming are often impractical for large scale software engineering problems because of their computational complexity or their assumptions on the problem structure. Researchers and practitioners use metaheuristic search techniques, which impose little assumptions on the problem structure, to find near-optimal or "good-enough" solutions.

In computing, compiler correctness is the branch of computer science that deals with trying to show that a compiler behaves according to its language specification. Techniques include developing the compiler using formal methods and using rigorous testing on an existing compiler.

In software development, a test suite, less commonly known as a validation suite, is a collection of test cases that are intended to be used to test a software program to show that it has some specified set of behaviors. A test suite often contains detailed instructions or goals for each collection of test cases and information on the system configuration to be used during testing. A group of test cases may also contain prerequisite states or steps, and descriptions of the following tests.

Metamorphic testing (MT) is a property-based software testing technique, which can be an effective approach for addressing the test oracle problem and test case generation problem. The test oracle problem is the difficulty of determining the expected outcomes of selected test cases or to determine whether the actual outputs agree with the expected outcomes.

The Classification Tree Method is a method for test design, as it is used in different areas of software development. It was developed by Grimm and Grochtmann in 1993. Classification Trees in terms of the Classification Tree Method must not be confused with decision trees.

Lori L. Pollock is an American Computer Scientist noted for her research on software analysis and testing, green software engineering and compiler optimization.

<span class="mw-page-title-main">Alexander L. Wolf</span>

Alexander L. Wolf is a Computer Scientist known for his research in software engineering, distributed systems, and computer networking. He is credited, along with his many collaborators, with introducing the modern study of software architecture, content-based publish/subscribe messaging, content-based networking, automated process discovery, and the software deployment lifecycle. Wolf's 1985 Ph.D. dissertation developed language features for expressing a module's import/export specifications and the notion of multiple interfaces for a type, both of which are now common in modern computer programming languages.

Automatic bug-fixing is the automatic repair of software bugs without the intervention of a human programmer. It is also commonly referred to as automatic patch generation, automatic bug repair, or automatic program repair. The typical goal of such techniques is to automatically generate correct patches to eliminate bugs in software programs without causing software regression.

Lionel Claude Briand, born in Paris, France, on November 21, 1965, is a software engineer, and professor at the University of Ottawa and University of Luxembourg. He is an IEEE Fellow, a Canada Research Chair in Intelligent Software Dependability and Compliance and a European Research Council Advanced grantee. His research foci are testing, verification, and validation of software systems; applying machine learning and evolutionary computation to software engineering; and software quality assurance, among others. He was vice-director of the University of Luxembourg's SnT - Interdisciplinary Centre for Security, Reliability and Trust from 2014 to 2019, and editor in chief of Empirical Software Engineering (Springer) from 2003 to 2016. In 2012, he was the recipient of the Harlan D. Mills Award. In 2022, he was the recipient of the ACM SIGSOFT Outstanding Research Award

Static application security testing (SAST) is used to secure software by reviewing the source code of the software to identify sources of vulnerabilities. Although the process of statically analyzing the source code has existed as long as computers have existed, the technique spread to security in the late 90s and the first public discussion of SQL injection in 1998 when Web applications integrated new technologies like JavaScript and Flash.

Marvin Victor Zelkowitz is an American computer scientist and engineer.

References

  1. Harman, Mark; Yue, Jia; Zhang, Yuanyuan (2015). "Achievements, Open Problems and Challenges for Search Based Software Testing". 2015 IEEE 8th International Conference on Software Testing, Verification and Validation (ICST). pp. 1–12. CiteSeerX   10.1.1.686.7418 . doi:10.1109/ICST.2015.7102580. ISBN   978-1-4799-7125-1. S2CID   15272060.
  2. Cseppento, L.; Micskei, Z. (2015). "Evaluating Symbolic Execution-Based Test Tools". 2015 IEEE 8th International Conference on Software Testing, Verification and Validation (ICST). pp. 1–10. doi:10.1109/ICST.2015.7102587. ISBN   978-1-4799-7125-1. S2CID   10819480.
  3. Havrikov, Nikolas; Höschele, Matthias; Galeotti, Juan Pablo; Zeller, Andreas (2014). XMLMate: evolutionary XML test generation. Proceedings of the 22nd ACM SIGSOFT International Symposium on Foundations of Software Engineering. pp. 719–722. doi:10.1145/2635868.2661666. ISBN   9781450330565. S2CID   10743521.
  4. Panichella, Annibale; Kifetew, Fitsum Meshesha; Tonella, Paolo (2015). "Reformulating Branch Coverage as a Many-Objective Optimization Problem". 2015 IEEE 8th International Conference on Software Testing, Verification and Validation (ICST). pp. 1–10. doi:10.1109/ICST.2015.7102604. ISBN   978-1-4799-7125-1. S2CID   15965879.