Final Report

Research:

In short, my research project this summer established a proof-of-concept for the idea of packaging information with components to aid in regression test selection (RTS) for component-based software. The information, or metacontents, consists of metadata and metamethods to access the metadata. We also built a tool to package the metacontents with an example component, and to use and interact with the information on the application side.

Regression testing is testing that is done after changes are made to software to assess the effect of the changes and to test new or modified parts of the software. Regression test selection is the process of choosing which tests from the original test suite to rerun. RTS in component based software can be difficult because application developers do not usually have access to the source code for the components on which they depend. When they get a changed version of a component, they generally have to select all of the tests from the original test suite that use the component to ensure that they have tested the software completely (rather that just the tests that use the changed parts of the component).

Having this task in mind, we identified the three types of information that are required for it: version number, changes made, and coverage of the test suite over the component. We decided on XML as a way to represent the information, and developed sample documents for each kind of information.

Next we focused on a tool to access the metacontents. Using an example application and component, we designed the interface to the metacontents, and wrote a tool that implemented it. The tool gets information from the component on demand by reading the XML files that are packaged with it, and returns the information in DOM (Document Object Model) trees so that it can be manipulated at will.

The tool dealt with static information nicely, but dynamic information required more work. To get coverage from a component, we manually instrumented the code to write to the metacontents. To the metacontents design, we added a method to write the information to a file so that it could be accessed easily by other tools that needed it.

Some ideas for further research on this project include the following tasks:

Personal:

This summer has been a good experience for me personally as well as academically, especially as I approach graduate school decisions. Even after participating in the DMP last year, I found that there were still many new things for me to learn about grad school. This year has been very different from last year. It has been helpful to be in a new setting - a much larger school, a much larger city, a new mentor, a different kind of working environment, etc. The contrast between the two years has helped me realize the range of possibilities that exist for my graduate school experience, and helped me focus on some of the things that will be important for me to consider in making my decision.

One thing that this summer has helped me to decide is that I am pretty sure I want to go to school in a city. I don't think I want to live in a city forever, but I want to be in that kind of environment - everything at my fingertips - for at least a little while. Both Atlanta and Providence are bigger than Green Bay, and I really enjoyed living in places with a lot more going on than my small hometown.

I've also been able to meet a lot of professors over the past two years, and it has reminded me the importance of choosing an advisor very carefully in grad school. I think that to find a "bad" professor is relatively rare; more often I think the people that are described as bad just don't mesh with a particular student's learning style. That said, I think it is very important to choose an advisor whose teaching style fits well with your learning style. I have met people that I don't think I'd like to work with, and some that I think I'd love to work with, and I think those experiences will help me identify qualities that will be easy or hard for me to work with in potential advisors.

I have also learned over the past two summers how important it is for me to be happy. Keeping a good balance between the different parts of my life makes me more efficient in all of them. I think this is an important thing to know about myself going into grad school, if I want to be successful. For instance, I've learned that even though skipping my workouts could give me more time at work, I will get less done in that time than if I take time out for myself. The same goes for sleep - I have definitely learned the power of being well-rested. I've also been considering grad school location very carefully; I miss my family and friends a lot (which can be distracting), and I think I will consider the proximity of my next school to the people I love more carefully than I did with undergrad. I really think that it is extremely important to consider not just the quality of a school, but also how happy I will be there personally, if I want to be successful (which really just means happy anyway).

Overall, my experiences with the DMP have been very positive, and I feel much more prepared for grad school because of the things I've learned over the past two summers.