Introduction

In light of today's technologies, there is a new form of application unlike any other that has been tested before: the web application. My project involves the development of a control and value flow model, ultimately to be integrated with a software engineering suite. Sreedevi Sampath has been working on this research under the advisement of my mentor, Lori Pollock. The overall model has been broken down into two smaller chunks, Parts I & II. Part I involves the creation of the Frame Document Tree (FDT), which is used to map the frame structure and interactions within a Web Site. Part II includes modeling the web application and the control and data flow within the program. Part I is significantly less involved than Part II, and it was on the former that I focused my research this summer.

Although I have actively participated in research before, never have I been so deeply involved. I found the research process to be immensely gratifying, and my DMP experience has made up my mind about wanting to pursue a research-oriented career.

Approach

To begin, I first had to understand the project and the algorithm I would be implementing. Sampath et al. had previously submitted a paper outlining the project and detailing the algorithms she had constructed last semester. Armed with this and a handful of excerpts about the importance of web application testing, I settled in to the lab and began to understand the project. JavaScript can access any function of a page currently loaded into a given window. Therefore, to properly model a web application based on HTML and JavaScript, it is important to model the frame structure of the site in question. Frames allow multiple pages to be loaded into a window at once, therefore a frame tree model is required to accurately resolve these references and links.

Early on I decided the FDT algorithm was not detailed enough for my purposes, and modified it accordingly. I prefer to think out exactly what I am implementing before I begin coding. Once I was satisfied with the algorithm and had designed what data structures I would be using in perl, I began programming. I was able to create a bare-bones implementation of Part I's three basic phases in two weeks. The second half of my summer was spent adding features and thoroughly testing the program. Through these tests I was able to not only find weaknesses in my code, but to improve details of the algorithm itself.

My Contribution

Within the first few weeks I was able to contribute to the project. I went through the proposed algorithm with a fine-toothed comb: heavily supplementing some parts, removing others. Many of my changes were added to Phase 3, and it was essentially rewritten. To ensure the algorithm would create the model we were aiming for, I thoroughly tested how JavaScript behaved. As a result, our model is extremely accurate and closely models JavaScript's own frame tree. My implementation itself handles not only the basic and most common frame cases, but I am confident it can model even the most complex and mammoth examples.

My work is only a very small part of a much larger project, therefore it was imperative that I provide the proper outlets to pass my knowledge onto others. For those unfamiliar with perl (and perhaps even some that are), my data structures may be a bit daunting. To alleviate this and hopefully explain the ideas behind my implementation, I included many details and thought processes in my journal. In addition, I created a detailed README file that included:

  • An overview of the modules and their functions
  • An explanation of how to run the tool
  • Test cases that were evaluated
  • Limitations of the current implementation
  • Issues addressed in this version
  • A note on cycle detection
  • A detailed explanation of Phase 3, the most heavily modified phase
  • A thorough description of the perl data structures used to store the tree
  • A list of issues to be addressed in the future
Lastly, I thoroughly updated the journal article that had been submitted, so as to reflect the changes I had made to the algorithm. After working with the project for the majority of the summer, I was also able to give my advice as to how research of Part II should begin.

Conclusions

I found my work this summer to be deeply satisfying. Despite the fact that frames are not widely used in the Internet Community and are actually frowned upon by some developers, the experience was invaluable. I learned the process of research, how to break down a large goal into smaller tasks and to just keep working on my own. Thankfully, I never hit any roadblocks this summer and always had ideas of new things to try to solve my problems. Although Sreedevi was unavailable this summer to help me understand her project, I feel my experience was richer for it. I was able to take a sketch of an idea and run with it; fleshing out the details as I ran, without being concerned for stepping on anyone's toes. This is in huge contrast to my previous summer's experience. My past summer was spent on a research internship at the NASA Goddard Space Flight Center in Greenbelt, MD. Although experiencing a research working environment made me consider a research-oriented career for the first time, my research was not nearly as detailed or rewarding as my experience this summer. My DMP experience made up my mind about pursuing a research career, and to realize the flexibility of a career in academia. Whether I end up in industry or academia, it will be after I receive my PhD in Computer Science. Working with a great advisor this summer has also made me realize the importance of a good advisor in grad school. I hope when the time comes I will find one as nice.