Name: Ezgi Çiçek
Project Title: Creating a set of JPF textbook examples
Education and Software Development Experience & experience with Java and object-oriented design patterns:
I am a first year computer-engineering student at Bilkent University in Turkey. I have been taking Java classes since the beginning of September and my GPA is 3.86 out of 4.00.In my Java course, I have been studying a Java based educational project in a group of 4 people. Our project provides users with the range of facilities to improve the design skills in Java programming such as pseudo-code and UML structures. The project will be completed in the second week of May. The requirements and user interface stage of the project have already been completed. In this project, I have gained experience with UML structures, Eclipse and GUI, which help me to improve my skills in Java. I have 2 years experience with Linux. My main operating system is Ubuntu, Gutsy Gibbon, and before that I was using Pardus (OS developed by Turkish developers) and Kubuntu. I can allocate 3 or 4 hours in a day until the end of May to JPF project. On June 1, my classes will end and the time I can allocate will increase to 7-9 hours per day. Until the end of August, I can continue working with this schedule. My interest on this topic can keep me happy and working so I do not think to give up after the formal process is ended. I hope that even after the summer, my work on this project may continue. In the process of researching about Java Path Finder, I also feel that my expertise in this area has increased. I believe I am an excellent candidate to work on this project because I will be working in my spare time leading this project. I would really like to work on this project — not only because of my own passion towards free software and Java — but also to contribute back to the open source and Java Path Finder community.
Why I’m interested in working on Java PathFinder: This part is integrated to other parts of proposal.
Have you contacted anyone on the JPF Team about this proposal: I have contacted with John Penix and Peter C. Mehlitz about the book I select for this project and the details of proposed projects. Their recommendation was very helpful for me.
Experience or knowledge of software testing and verification tools: I have installed JPF and started to test with it. I have also used JUnit for my Java project.
Project Details:
Background & Synopsis ( Abstract Part)
The best code developers are typically users first. As a curious user, in my project, I will apply to verification techniques by collecting different programs from Java textbooks and then I will add some bugs to show how Java Path Finder finds bugs. Java Path Finder is an explicit state model checker for Java byte code, whose focus is on finding bugs in Java programs. The main goal of JPF is to prevent modeling effort or at least use a real programming language for complex models. It can be used for closed systems but not for platform specific native Java code. The current version of JPF has its own JVM and garbage collector. So, the aim in this project is to indicate that formal methods of verification and testing are applicable to everyday software. Java gives the capability for anyone to write concurrent programs, so the need for a model checker will be inevitable in the future. I want to participate in this project to demonstrate the skills of JPF on verification and how JPF is an advantageous model checker for Java. It will also contribute to my learning process and understanding of Java and how JPF works.
Studying programming languages results in some challenges that will drive research in a new direction as the necessity of analysis of programs written in modern programming languages grows. JPF addresses this necessity by developing verification and testing environment for Java, especially with multi threaded and interactive programs where unpredictable interleaving can cause errors. The multi-threading and object-oriented features of Java make it a suitable verification environment. Moreover, Java is compiled into byte code and the analysis can be done at byte code level, which implies that the platform independent feature of Java can be applicable in the use of JPF, and any language translated into byte code can be used with JPF. Although someone can claim that most of the errors are caused by design faults, programs often contain fatal errors such as deadlocks and critical section violations despite the existence of complete designs [1].
Development Methodology
While selecting a program to analyze, I will be aware of some potential drawbacks and advantages. Although JPF can analyze any program written in pure Java, there are some exceptions such as the java.net library and partitions of java.io library. When a Java program calls methods that have no corresponding byte codes, access to a file system, communicate over a network, or contain GUI code, the program can not be analyzed easily. It can be handled by writing wrapper classes or modifications. Moreover, I will select programs with multi-threading properties for efficient testing. As a result, selected programs should have distinct characteristics that will contribute to the range of JPF examples.
Unlike other tools, JPF will output the entire flow of events that leads to a bad state. It helps identifications of deadlocks and other common but difficult to identify concurrency errors. JPF examines all combinations of paths / interleaving to account for the non-deterministic nature of the program. In the analysis of selected programs, the important thing is to indicate how JPF finds the error or bug and the scalability of it. All the verification results will be explained in detail to indicate the roots of verification and how JPF found defects.
Research
Before starting the project, I must obtain enough background information about Java Path. The JPF web page will be my primary database for research to begin with. I will also benefit from the research papers and documents of others. After I get detailed information about JPF and its usage, I will start to focus on the textbooks. I think code examples of the textbook “Multithreaded Programming with Java Technology”, by Bil Lewis and Daniel Berg can be very beneficial. The textbook covers typical threading topics like synchronization, deadlocks, and race conditions. Lewis and Berg even cover thread issues with RMI and optimization techniques to improve performance. In addition, “Concurrent Programming in Java”, by Doug Lea that explores proper design of multithreaded programs looks as a considerable resource for examples. However, I want to evaluate several textbooks to obtain different kinds of programs.
Testing
In order to check how JPF find defects and possible bugs, all the collected programs will be evaluated and some bugs will be added to indicate the process of verification. Various programs will be evaluated to demonstrate the verification mechanism of the JPF for deadlocks and unhandled exceptions. Moreover,I can provide my own property classes, or write listener-extensions to implement other property checks. In JPF, the test system is placed in a separate test directory tree. There are several methods to test a program such as explicitly invoking JUnit tests and directly running JPF without Junit, or running on a normal JVM and so on. However, the preferred testing mechanism is to support various levels of inspection and debugging in order to detect all bugs and defects.
Documentation
Results of tests and verifications, methods of debugging and process of testing will be documented as in the JPF documenting format. All the comments will be in java-doc format unless the otherwise is stated. Additional bugs intentionally included into the program will be specified in terms of state and properties. There can be comparison tests to demonstrate the differences between other debuggers and how JPF finds bugs. The results of these studies will be documented as well. Initially, the expository information about selected programs will be given to demonstrate the previous and modified state of the program.
Community Interaction
I will be in touch with other developers and researchers who are interested in verification and testing part of Java Path Finder. The process of development will take place fully in the open. All collected data will be hosted on a web page, so users and interested developers will always have access to the latest version of the collection. I will also keep track of my development at my blog http://ezgicicek.wordpress.com/ and everybody will be able to leave comments about the code as it is being developed.
Open Source
When the JPF project has been an open source project, It enabled other people to improve the Path Finder software. It is a very good development as a leverage the open-source community. It also contribute to finding defects in JPF and It will fasten the process of development. As a Google Summer of Code organization, the JPF project has also proved that the power of collaboration has an important impact on the development of it.
Schedule
I have developed a schedule to stay focused and motivated.
April 14 – May 26 Requirements stage: Research process, which includes reading documentation, exploring Java Path Finder, collecting background information. Community interaction, meeting with mentors and other colleagues, brain storming and initial planning and designing.
May 26 – July 10 Midterm stage: Testing and adding bugs process with weekly evaluations.Midterm evaluation
July 10 – August 11 Development Stage: Verification process continues with tests and documentation and weekly evaluations.
August 18 – September 1 Evaluations: Final evaluations include all process of development
September 3 Submission: Submitting code
Deliverables: The main goal of project is creating a collection of JPF examples to demonstrate how JPF find bugs, so as I explained before collection of tested Java programs with specific documentation and analysis of verification will be the product of this project.
References and links :
References
1- “Model Checking Programs” ( 2002) Willem Visser, Moffet Field,Klaus Havelund, Guillaume Brat ,SeungJoon Park and Flavio Lerda
2- Java Path Finder web site < http://javapathfinder.sourceforge.net/>
Links :
My web-blog : http://ezgicicek.wordpress.com/
Actually, I have a web-page for my Java project but it is not public at Moodle < http://moodle.org/>. It will be published after the project completed.