PhD Students - 
Please see the description below for a seminar I am teaching this semester, with the first class this Monday from 4:30pm-7:10 pm in Room 2026 Art & Design. The high level topic is program analysis for software testing, but it will also include many topics related to security (e.g. automatically finding vulnerable code, creating fault-tolerant software). This class should provide an excellent opportunity for you to read academic papers, learn new topics, and work on a research project.

Pre-requisites are: Strong knowledge of Java, and some programming languages, compilers, systems, or testing class (at GMU or elsewhere).

More information about the class is available on my website:

Course Objectives:
Learn different methods for analyzing software, with several applications in software engineering, particularly testing. We will study different analysis techniques, learn how they work by studying specific algorithms and tools, and discuss applications of the techniques. Our goal will be to explore the current research issues in this cutting edge area, to learn how to build software analysis tools, and to understand how these techniques can be applied to software development activities.

We will primarily focus on applications for testing software, including automatic test data generation. We will also consider using analysis techniques for other software related activities such as maintenance, reuse, metrics, and optimization. Some of the specific analysis techniques to be studied are parsing, software representation methods (control flow graphs, data flow graphs, program dependency graphs), symbolic evaluation, constraints, program slicing, software coupling, and testability.

Term Project:
This seminar-style class will include a term project, worth 50% of your grade. The project will involve a hands-on application of the techniques and tools that we discuss in class, and can be completed either individually or in a group of at most two. Topics for the project will be discussed in the first three weeks of class, and your specific project topic will be finalized on October 2nd. At a high level, project topics will include two tracks:

• Research track: These projects are intended for students interested in pushing the state-of-the-art in program analysis and software testing tools. These projects will involve creating a prototype tool that implements some new concept. Example research projects might include: extending Phosphor or optimizing or enhancing EvoSuite. If you would like to create a formal writeup of your research project, most of these projects will be suitable for publication in an academic workshop.
• Industry track: These projects are intended primarily for students who are interested in honing their programming and software engineering skills, by taking a state-of-the-art idea, and transitioning it to the state-of-practice. These projects will involve taking some idea that we talk about in class and implementing it in a popular tool, for instance, improving the flaky test detector built into Maven, optimizing the JaCoCo coverage tool, or hacking on the regression test selection system in Clover. These projects are intended to be of sufficient quality that you can submit a pull request to have your changes included in the open source tool. Think about next time you are on an interview and you are asked if you are familiar with (insert name of tool here), and you can say "Oh yes, and I have contributed code that made its way in to X."

Jonathan Bell
Assistant Professor, Computer Science
[log in to unmask]
4422 Engineering Building
George Mason University