The following report summarizes the work done during Google Summer of Code 2021 along with the results, scope for improvements, and future work. This also serves as the final project report with all the contributions.
- Name: Gaurang Kudale
- Email: [email protected]
- Github Username: gaurangkudale
- LinkedIn: https://www.linkedin.com/in/gaurangkudale/
- University: Pune University
- Organization: JavaPathFinder
- Project Title: Add Gradle support to SPF.
- Project Link: github.com/project-ideas
About SymbolicPathFinder
Symbolic PathFinder (SPF) combines symbolic execution with model checking and constraint solving for test case generation. In this tool, programs are executed on symbolic inputs representing multiple concrete inputs. Values of variables are represented as numeric constraints generated from the analysis of the code structure. These constraints are then solved to generate test inputs guaranteed to reach that part of the code. Essentially SPF performs symbolic execution for Java programs at the bytecode level. Symbolic PathFinder uses the analysis engine of the Ames JPF model checking tool (i.e., jpf-core).
- Migrate the build from Ant to Gradle.
- Add jpf-core as Git-Submodule to SPF.
- Restructuring SPF.
- Upgrade the Gradle version of jpf-symbc (5.4.1 to 6.9).
- Build Continuous Integration (CI) pipeline for jpf-symbc.
- Upgrade the Documentation of jpf-symbc.
Gradle is a build automation tool known for its flexibility in building software. A build automation tool is used to automate the creation of applications. The building process includes compiling, linking, and packaging the code. The process becomes more consistent with the help of build automation tools. Currently, Symbolic PathFinder is using Ant as a build automation tool, but Gradle resolves all the issues faced by build tools like Maven and Ant. It is well-known to be highly customizable for different projects dealing with various technologies. We can customize the project according to the needs of the project. Gradle is popular for providing high-speed performance, nearly twice as fast as Maven. Gradle makes building common types of projects easy by adding layers of conventions and pre-built functionality through plugins. We can apply all those to enhance our SPF project. In SPF, we have introduced a Gradle multi-project build by adding jpf-core as a git-submodule plus restructuring the hole repository according to the dependencies declared.
- Current Directory structure of SPF
SPF (Gradle Root Project)
---| jpf-core (Git-Submodule + Gradle Sub-Project)
---| jpf-symbc (Gradle Sub-Project)
After adding jpf-core as a git-submodule to the SPF, we have linked another repository to SPF, and as we know, jpf-symbc depends on artifacts produced by the jpf-core. The main goal of introducing git-submodule is to download and build jpf-symbc as well as jpf-core at once for a better user experience. In the future, if another project depends on artifacts produced by either jpf-core/jpf-symbc then we can add it at the same level as the Gradle sub-project.
In this project, we also have added a Continuous Integration (CI) pipeline functionality, which will be triggered when code changes and any PR are made by the contributor. It should ensure all of your changes work with the rest of the code when integrated. It should also compile your code, run tests, and check that it's functional. Here, GitHub Action is used to implement the CI pipeline.
The main Pull-Request : #79
- ✔️ #1 git-commit Migrate the build from Ant to Gradle.
- ✔️ #2 git-commit Add jpf-core as Git-Submodule to SPF.
- ✔️ #3 git-commit Upgrade the Gradle version of jpf-symbc (5.4.1 to 6.9).
- ✔️ #4 git-commit Build Continuous Integration (CI) pipeline for jpf-symbc.
- ✔️ #5 git-commit Upgrade the Documentation of jpf-symbc.
- ✔️ #6 git-commit Restructuring SPF.
- ✔️ #7 PR , #8 & #9 Fixing the unexpected bugs in jpf-core i.e. adding missing import statements
- Improve Junit testing by fixing some unit tests and adding new unit tests.
- Migrating Junit 4.12 to Junit 5.
- Updating java version 8 to 11 or 12.
It was a great experience working for three months on my project for Java Pathfinder under Google Summer of Code. I sincerely thank my mentors Yannic Noller and Corina Pasareanu whose support, guidance, and continuous encouragement helped me immensely in bringing this work where it stands.
Thanks, Google and Java Pathfinder, for giving me this opportunity.