I am a senior computer science and mathematics major at Rose-Hulman Institute of Technology, with interests in theoretical computer science and mathematics. I chose to participate in the CRA Distributed Mentor Project, during the summer of 2001. The DMP is a summer research program that matches undergraduate female computer science/ computer engineering students with female mentors. My mentors were Mary Jean Harrold and Mary Lou Soffa, and I performed my research project at Georgia Institute of Technology.
Dept. of Computer Science
University of Pittsburgh
307 Mineral Industries Building
Pittsburgh, PA 15260
voice: (412) 624-8425
fax: (412) 624-5249
research interests: code optimization, program analysis, and software testing and slicing
To derive and implement a method for syntactically differencing a program, P, and a modified version of the program, P', with respect to tasks such as test case selection, impact analysis, and semantic differencing.
Differencing Algorithm - this is my interpretation of part of the differencing algorithm by J. Laski and W. Szermer described here.
Hammock Algorithm - this is my modification of the hammock algorithm here.
Aristotle - the research group I am working with
JABA - Java Architecture for Bytecode Analysis
DejaVOO - a tool for regression test selection
Wisconsin Program Slicing Project
An Incremental Approach to Unit Testing during Maintenance. M.J. Harrold and M.L. Soffa. Proceedings of the Conference on Software Maintenance (CSM'88). (Phoenix, Arizona, October 1988). 362-367.
Representation and Analysis of Software. M.J. Harrold and G. Rothermel. (December 1997).
Regression Test Selection for Java Software. M.J. Harrold, J. Jones, T. Li, D. Liang, A. Orso, M. Pennings, S. Sinha, S. Spoon, and A. Gujarathi, Proceedings of the ACM Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA 2001).
A Safe, Efficient Regression Test Selection Technique. G. Rothermel, and M.J. Harrold. ACM Transactions on Software Engineering and Methodology, Vol. 6. No. 2. (April 1997). 173-210.
A C++ Data Model Supporting Reachability Analysis and Dead Code Detection. Y.-F. Chen, E. Gansner, and E. Koutsofios. IEEE Transactions on Software Engineering Vol. 24. No. 9. (September 1998). 682-693.
Ciao: A Graphical Navigator for Software and Document
Repositories. Y.-F. Chen, G. Fowler, E. Koutsofios, and R. Wallach. International
Conference on Software Maintenance. (1995). 66-75.
Identification of Program Modifications and its Applications in Software Maintenance. J. Laski and W. Szermer. Proceedings of the Conference on Software Maintenance - 1992. (November 1992). 282-290.
Identifying the semantic and textual differences
between two versions of a program. S. Horwitz. Proceedings of the SIGPLAN
90 Conference on Programming Language Design and Implementation. (White
Plains, NY, June 1990).
Interprocedural slicing using dependence graphs. S. Horwitz, T. Reps,
and D. Binkley. ACM Transactions on Programming Languages and Systems
12, 1 (January 1990). 26-60.
Using Semantic Differencing to Reduce the Cost
of Regression Testing. D. Binkley. Proceedings of the International
Conference on Software Maintenance 1992. (Loyola College, Maryland,
The Program Structure Tree: Computing Control Regions in Linear Time. R. Johnson, D. Pearson, and K. Pingali. ACM SIGPLAN '94 PLDI. (Cornell University, New York, 1994). 171-185.
Extraction. R. Komondoor and S. Horwitz. Symposium on Principles
of Programming Languages. (University of Wisconsin-Madison, 2000).
A Scalable Formal Method for Design and Automatic Checking of User Interfaces. J. Berstel, S.C. Reghizzi, G. Roussel, and P. San Pietro. ICSE 2001, Int. Conference on Software Engineering. (Toronto, Ontario, Canada, May 2001).
week           
Today I began this web page and found some papers that may/may not be useful.
Today I arrived at GA Tech. It was very stressful, mostly due to Atlanta being a big city (I haven't ever really been in a big city for any extended period of time). We left from my aunt's house in southern IN around 7 A.M. (I had been up and unable to sleep since 4:30 A.M.). Most of the drive wasn't bad, but driving in Atlanta was horrific. Also, getting into my room was a little stressful. It is Memorial Day weekend and so I couldn't go through the normal procedure of checking into my room. All that would have been mostly bearable, but my older sister happened to be in Atlanta at the same time, and insisted that we meet and hang out/have dinner. It made my evening very cramped and it was extremely draining since I was so tired from lack of sleep. When I got back, I set my computer up, but I couldn't seem to get the network to work, since I hadn't registered my computer with resnet yet. There were lots of little things like that, which caused me stress because I was unprepared and unorganized for them. Another example of this is that I don't know who I am suppose to give my rent money to.
week   
  
  
5/28/01 (Monday, Memorial Day)
I finally got to talk to my roommate (the only one of the three that was here when I moved in). Her name is Bilge and she is from Turkey. She is here getting her Ph.D. in computer engineering. She also told me another one of my roommates, Rachel, would be arriving later today.
I started writing down some questions for Mary Jean (we are meeting today at 2 pm), and reading some more of the papers I found. I keep finding that I need background information from several referenced papers that I can't find.
Rachel arrived, moved in and we went to Kroger with her mom. I really only needed milk, but it was a good thing I came along because they needed an extra person to carry bags. I felt much less stressed after talking to Rachel, since I found out she is just as confused about everything as I am.
I met with Mary Jean at 2:00. I didn't have my badge yet, so she had to let me in and escort me around. First we discussed what I would be doing. First I need to read about control flow analysis. Then I should read about differencing algorithms, specifically, this, for a discussion on Wednesday with Mary Jean and Alex Orso. Alex is a research scientist who I will be working with this summer. I also need to finish reading, this, for a seminar on Wednesday. The software engineering dept. has seminars where everyone reads a paper and meets to discuss it. Once we find a good differencing algorithm, I need to become familiar with JABA. Perhaps by writing a driver for it and seeing what sorts of graphs it can printout. Mary Jean and I set up some meeting times: Thursdays at 2 pm group meeting, Mondays at ? individual meeting, Wednesday 11:45 department lunch, and the 5 seminars will generally be Wednesdays at 4 pm. We also laid out the plan for tomorrow: I will come in around 8 am and get my buzzcard, badge, and keys.
I read about control flow analysis (the entire paper not just 1-5), but I was a little confused in the postdominator tree section. I also did the first four problems that followed the paper.
I got in around 8:00 and Mary Jean took me to go see Susan to fill out paperwork for me to get a key to the lab, a badge for building access, and a buzz card. I got my key immediately, but the paper work for the bade and buzz card would take longer. Then we went down to the lab. I was the first to arrive, I tried to log into my machine, but the user/passwd tables hadn't been updated so it didn't work. Mary Jean got Randy to come fix it. While he was doing that, I logged into another machine and set up my mail (checked my mail at rose since I had been deprived of access for 4 days) and filled out and mailed (to Jim Jones) the template for my project web page. During this time, the other people who share the lab with me began to arrive. I met Saurabh, Donglin, and Maikel, three graduate students, and Anup, an undergrad like me. Then I started reading the papers for the seminar Wednesday and meeting with Alex and Mary Jean. Before long my computer, question, was ready to go. I logged in and did some minor tweaking to the settings (I'm sure i'll do more later). Then Jim another graduate student arrived and I met him. Then I reread the post dominator tree sections until I understood them. Around 13:00, I went back to my room and got my passport (I needed it to get my badge). Then I got the badge paper work from Susan. I wasn't sure if I needed an escort out of the building, so I waited until Mary Jean finished her meeting, and then I headed off for the ERB to get my badge made. When I got there they told me the person who makes the badges moved to the CRB, the building I had just come from. So I had to go back. Then I got my badge made and went to see Susan about my buzz card, but she wasn't there. The secretary, Cheryl, told me I should come back in the morning. Then I went back to my cubicle. I had mail. Mary Jean said the seminar for tomorrow has been postponed and Becka, another DMP student I will be rooming with, wanted to know what she needed to bring. I told her to bring a copy of her passport or birth certificate for the badge paperwork, and I asked if she knew who we were suppose to pay for the housing. She responded promptly and said she hadn't paid yet either and didn't know. She also wanted to know whether she would be able to get into her room when she arrived on Sunday and where she would be able to park on campus. I told her how I had gotten in, but I didn't know about the parking. She was just as confused as I was and continue to be. It made me feel a little better, that I could help someone with all the things that had caused me hassles and problems when I first arrived. I still don't have network access in my room, I miss it. I started color coding the goals on this web page, pink means the goal isn't completed yet.
Jennifer, a grad student at Northeastern, visited the lab today because she is interested in using aristotle. I had a meeting with Mary Jean and Alex today. First Mary Jean explained dominance, post dominance, and control dependence to me, I will have to demonstrate my understanding of them tomorrow. Then Alex arrived and we discussed the algorithm, here. The algorithm is vague in some places and we were tried to understand it, which took longer than expected. So, we cut the meeting short and went to lunch. Since it is Wednesday, the who lab goes together. We went to a delicious mexican restaurant. When we got back, we continued the meeting. Eventually, we seemed to grasp the main idea and it was left to me to work through some examples and write the algorithm up a little better. Mary Jean and I decided to meet again tomorrow on Thursday around 10:30 - 11:00 to go over my revision of the algorithm. At the end of the meeting Alex had a paper that referenced something called cdiff, that Mary Jean asked me to look into. What I found was that cdiff is just like unix diff except that it can return the context, the lines surrounding the differences. I didn't think it sounded like what we are looking for, and that is what I will report tomorrow. Hopefully, I found the right cdiff. Tonight Bilge was very nice and let me use her computer to update this page. Later I worked on writing out the algorithm from, here, in a clearer way, I think it might have turned out more confusing though.
I met with Alex and Mary Jean in the morning to demonstrate an example on the algorithm, I did a very poor job. Then we talked about what we still needed to clarify for the algorithm and we came up with 1) finding a way to find isomorphism (perhaps jdiff?), and 2) finding out how to merge mod nodes and if it is necessary or important. Later I thought about ways to find isomorphism. It would be easier if there was some structure to the graph, so I looked at the postdominator trees for graphs to see if that would help. Initially, it looked promising, but since it is possible to radically change the graph and not change the PDT, I decided maybe that wasn't the best approach. I almost forgot the weekly group meeting at 2:00, but Anup reminded me. All the undergrads were there, and each of us explained what we were working on.
I wrote out the DFS part of the differencing algorithm this morning. I added a project work section to this page, and from now on I will be putting everything I work on there so it is easier to find. This afternoon I tried to make the algorithm easier to follow by adding comments and an overview. Some notes on the DFS part of the differencing algorithm, depending on the order you do some things, in for loops for example, the results could differ for the same graph. I put notes in comments in places where I thought this might occur. I also had an idea about computing and collapsing all the clusters before looking for isomorphisms. One might not want to compute and collapse all the clusters ahead of time because if the algorithm can't find an isomorphism at some outer level that still has unexpanded clusters in it, then the clusters within those unexpanded clusters never needed to be computed. This is just a note for later in case I need to improve efficiency.
SLEEP :) While reflecting on what I have accomplished this past week, I feel as though I have not done as much as I should have, that I am behind. However, I can't think of really anything I would have done differently.
Rebecca, the third DMP participant arrived today. She had a very difficult time. Not only did she have a very long drive (straight from Chicago), but she also didn't even know what building she was going to be staying in. She only had the phone number (which didn't have a phone plugged in) for our suite/apt. So for over two hours she was wandering around campus, not knowing where to go. Eventually she got a GA Tech directory and found the phone number, and from that got the building and room number. I feel bad because if I had known I could have told her the building and room number (or at least plugged a phone in), and saved her a lot of trouble.
week   
  
  
I brought Rebecca in to the lab around 8:00, and Mary Jean had letters for us to get our buzz cards. I also had an email about CDiff, and as I had feared, I had not found the right one. However, I could not find a copy of a paper describing CDiff online. Then I started setting up JABA, which wasn't as bad as I thought it would be, but I need a VM >=1.2 and I can't find one on the system. All I can find is jdk1.1.7. Around noon Becka and I walked over to the buzzcard center and got our buzz cards, we need them to do laundry and to access some buildings. I found out that the reason I couldn't find the version of java that I wanted was because that it wasn't installed for linux, but Peter (he doesn't have his aristotle page up yet so the link is temporarily broken) had installed it in his directory and so I used that. I had my individual meeting with Mary Jean at 2:30, she found some problems with my DFS., mainly that I wasn't matching the edge labels. She also told me I would be giving a presentation on clustering, dfs, and the rest of the differencing algorithm to Mary Lou tomorrow. The meeting ran over, as it always seems to with me. When I got back to my desk, I redid the dfs part of the algorithm, wrote up an explanation of clustering with examples, wrote up examples for dfs, and wrote up an example of the entire algorithm. In doing the clustering examples, I discovered some things I thought about clusters were not true, such as a repeat/until loop being able to be collapsed to a cluster. If this is the case, you can replace a while loop with a repeat /until and since the repeat/until cannot be collapsed, the graphs will never be isomorphic and the entire graph will be marked as mod. Since we don't want that to happen, I think we might have to redo clustering.
I think I killed lots of trees printing the handouts for my presentation. All the DMP participants and Linda (a girl who is doing an REU with the Computer Engineering dept. here) went out to lunch today. It was interesting to listen to the mentors talk about their work and tell stories. After lunch, I had a meeting with Mary Jean and Mary Lou where I described the algorithm I have been working on, and things I have been discovering about it. It was good to get different opinions on various aspects of the algorithm and to get feedback on ideas I had. I think discussing things in a group setting (like the meeting) is good because everyone sees things a little differently and so you can get some good ideas or confirm something's you have thought about, but weren't sure on. The meeting was really long, but it went by really fast and I hadn't realized it had gotten late. I also got a list of things to work on, which was good because I felt as if I was running out of things to do.
I started writing up the new clustering algorithm that we discussed in the meeting on Tuesday. I found a few small problems with it that I was able to fix. The lab had lunch together since it was wednesday, we walked to a cafe up the street. I tried to prove that the clustering algorithm worked and I ran into another problem with when you need to add the exit node to the cluster. However, I think I found a fix. At 2:00 I had a meeting with Mary Jean and Mary Lou. I explained what I had discovered about clustering, and it sounds like my new definition of a cluster is actually a hammock. Saurabh has worked with hammocks before, but he wasn't around so we couldn't talk to him about them. We will have a meeting tomorrow to try to find an efficient algorithm for computing them.
Last night I looked in my three graph theory books for references to hammocks, but I didn't find anything, just the word hammock in my notes next to a little picture. This morning, I emailed the resnet people about getting registered without a prism account, and they can do a special add and register me, so I should have access in my room when I get back. I also found a paper with a good concise definition of a hammock on page 3. From the definition of the hammock in the paper, the definition of a cluster that I want to use is a hammock, whose entry node is not a 1-node. On page 4 alg1 step i, there is an outline of a possible way to find all the hammocks. However, it doesn't look very efficient. Also, from about the middle of the paper on is proofs, most involving hammocks, which may or may not be useful. I couldn't find much more on hammocks. Also, I am beginning to feel like I am running out of things to do again. Hopefully, the meeting today will give me more to do. I found another paper with an algorithm for computing hammocks, although it calls them SESE (single entry single exit regions) and I think they are slightly different. The paper also says, on various benchmarks, the nesting of SESE regions are not very deep, <=6 levels 97% of the time. I don't know how relevant that information is to what I am working on.
It was pouring when I walked to the lab today, I got completely soaked. The same thing happened when I went to lunch... not on the way there, but half way through the way back it just started pouring. I got even more soaked than before. So I think I am going to go home early today to put some dry cloths on.
I went to the library to get some reading material, but although I have my buzz card, I am not in the system, and hence cannot check any books out.
week   
  
  
I updated Mary Jean on my progress at my individual meeting. We don't have an efficient algorithm for finding the hammocks, but I think we are going to try to use the one outlined here. Then I started writing a driver for JABA that prints out all the various sorts of graphs. I think I have a driver that works, but I am having difficulty using the dotty software to see the graphs. Once I got the software to work, I could see the graphs looked ok. I will try some more examples tomorrow.
Today I read and reread the DejaVOO documentation. I made a list of questions I had about it, then read the docs again trying to find answers to the questions. It was very successful, I found answers to almost all the questions. I looked up CIAO. I found this. I don't know if it is the same CIAO, but there wasn't very much detailed information on the site about how it worked, or how they did differencing. However there were these two papers, here and here. Then I brainstormed for awhile on possible ways of integrating the differencing algorithm into DejaVOO and things that may possibly cause problems.
Today I thought more about integrating differencing into DejaVOO. Then I went to the seminar. Donglin gave a 25 min talk on some stuff he and Maikel have been working on. Then everyone gave him feedback.
I modified the hammock algorithm to obtain the minimum hammock for any decision node, and worked on a proof of its correctness. I had a meeting with Mary Jean and Alex where I talked about what I had been working on and thinking about. I now need to make a list of future work. Mary Jean also gave me another paper to read that might be helpful in integrating differencing into DejaVOO.
I made a list of future work and added it to this web page. I looked into an issue raised at the meeting yesterday. During the hammock computation, do you have to add nodes up to the exit of the graph. The answer is yes, because otherwise you could have an entering arc coming from a node below (dominated by) the exit of the hammock. Then I read part of the Rothermel paper.
week   
  
  
The individual meeting today raised many possible problems, such as how to handle method calls, exceptions, and labeless edges. I also got more work to do: compare the DejaVOO docs to the actual code and make any necessary updates, write up the design of the algorithm, and look into JDiff. On the design of the algorithm, it looks like it might be a good idea to run my alg. then run DejaVOO on the interiors of the nonexpandable mod nodes (What if the mod node is just a single node?). Then I worked on comparing the DejaVOO docs to the actual code and writing them up better (this should also help me understand it better).
I looked at JDiff, but I didn't see anything I thought would be useful. I worked on redoing the DejaVOO documentation (comparing it to the actual code to make sure everything was up to date). I feel like I understand the algorithm much better now. I worked on writing up some ideas for the design and some possible problems with the ideas. I also worked some more on the hammock correctness proof.
I finished the hammock correctness proof. Then I worked on writing up an algorithm for running DejaVOO during the dfs part.
When I got in today the network was down, so I couldn't even log in. However, I found some stuff to read until it was fixed so it wasn't that bad. Then I had a design meeting with Alex and Saurabh. We worked out an approach we think will work for method calls and exceptions. We also came up with a possible hierarchy of classes/interfaces and their purposes. It started raining at lunch, but we waiting 'til it let up a bit before we headed back. So I barely got wet at all. I read up on some implementation details of JABA for the second design meeting later today. At the undergrad group meeting I reported my progress. Then I met with Alex, Jim, and Saurabh to talk about design some more.
I started implementing what I could of the dfs algorithm. In the process of doing that I came up with some design questions about how to store node matchings. Is it possible for me to use node attributes to store matchings, or should I use a hashtable, or maybe if each node has a unique ID, I can use that and an array. I also didn't know if my algorithm was suppose to be its own class or a method in the methodHammockGraph class. In coding up the algorithm, I found that part of the algorithm will never be reached and so I removed that part.
week   
  
  
Today I started reading the coding guidelines that I found in the JABA docs (I am on page 41 of 73). At my individual meeting today, I explained what happened last week to Mary Jean (since she was at a conference). The main accomplishments were the place holder node representation of hammocks (an implementation detail), handling exceptions through super exception nodes and propagating uncaught exceptional exits, and inlining just the entry and exit of a method call. Things I need to do from the meeting: ask Jim and/or Saurabh what I can do with node attributes and if the node number is a unique ID for the node, get cvs directory information from Alex, look into how if/then stmts. are done in the byte code, write up/prove my incoming edges algorithm, and write up a high level design for my algs (list methods and put in pseudo code alg as documentation).
I finished reading the coding guidelines, though I will probably have to go back and reference it a couple times. I also wrote out the finding nodes with in edges algorithm in the hammock algorithm. I haven't done any complexity analysis or proofs on it but it seems much better than the other approaches especially if each node has a unique ID number. Today was originally planned as a dmp outing lunch, but Amy (Rachel's mentor) is out of town, and Mary Jean hasn't told us anything. So I don't think anyone remembered. However, Becka, Rachel and I decided to go to Einstein Bagels for lunch today and have our own pseudo dmp outing. After lunch, I started writing up an interface of all the public methods in the differencing algorithm, including documentation. I also got an email from Alex about setting up cvs, so I did that.
I finished writing up the high level design / interface for MethodHammockGraph and SyntacticalDifferences. Mary Jean stopped by the lab, and she showed me some visualization stuff Jim is working on, which might be neat to do something similar for visualizing my work. Mary Jean also mentioned possibly having me do the JIG and/or DIG graphs. cvs only has a description of my project and all the other undergrad projects. I'm not sure if I am suppose to put my algorithm documentation there, or my source code for stuff. It would be nice to put my alg docs there because I have several versions and it is getting to be a pain to keep track of them all myself. We are going to the mexican place again for lunch this week (I think we went there two weeks ago). I think we go there so often because it is one of the few places that can accommodate all of us (11 I think), so it is good that I like their food. This afternoon I am going to try to motivate myself to look at if/then stmts in byte code, we'll have to see how it goes though.
I looked at if/then stmts in bytecode. It looked pretty straightforward to me (it didn't seem to flip the condition when the stmt change from a one-armed-if to an if/then/else). However, the actual jump instr. for the if was the opposite of what the one in the code was (for optimization reasons). Instead of a group meeting today, we are going to have individual meetings. Today Mary Jean sent out email about the final report. It appears the final report is just our webpages?? that doesn't sound right. She also included some information about fellowships, that should be useful. At the meeting today I found out the design we are going to use for all the graphs. It was consistent with what I already had. I still need to find out how I should do the hammock place holder nodes. Should I have a new HammockNode class and should that have a HammockNodeAttribute? I would also like to have the GraphAttribute interface (an interface my HammockGraph will implement), but I don't think it is implemented yet. So basically I need to talk to Jim and Saurabh about jaba implementation details. At the meeting Mary Jean also gave me stuff I can work on when I am just waiting on other people. Some of the things were gather subjects (programs with multiple versions and possibly tests), think of types of experiments or uses for the differencing, think of ways the differences can be visualized, think of things my diff finds that diff doesn't especially in respect to impact analysis, and to think of ways to enrich the graph representation such that I get more out of it. At lunch I talked to Becka about the report (I forgot to ask Mary Jean about it during the meeting). She said last year she just had to write a few paragraphs and that it was nothing big, like I thought.
I started working on the implementation today. In doing so, I came up with a few more questions.
week   
  
  
Today I thought about possible ways to use the differencing in impact analysis. Some ideas include using the number of perfectly matched nodes to get an idea of the magnitude of the impact, checking that there is some documentation for each changed area, computing what nodes can/cannot be reached from a changed node (through the true/false path propagation), classifying the changes based on the type such as perfective if most of the changes are added nodes, and using the added and removed nodes to generate new tests or remove tests from a suite. At my individual meeting we talked about some of the ideas I came up with and we agreed that adding a method state node between the entry and exit of a method call, that says whether the method has been changed, will be useful. The idea of measuring the goodness of the matching or the magnitude of difference went over well too. However, the true/false path idea sounds unsafe if there are accesses to global variables. I also forgot to mention that the differences could be used to check whether or not all the changes had been documented. I got some of my design questions answered as well. We decided a HammockNode should have its own class and should have "other" as a field. Also, load in GraphAttribute should throw a IllegalArgumentException, which is based on checking the graph for single entry, single exit, (or some other property, depending on the graph) not on the type of graph. I learned that the GraphAttribute class is already up on CVS as well as the modified CFG and ACFG classes. I misunderstood the set up before I should not use the getAttributeOfType method in Graph to get whether a HammockGraph has been constructed, instead I should look through the attributes manually in the HammockGraph load method.
I worked on more implementation.
More implementation. Set up cvs for jaba.
I am having difficulty getting the server package to compile, but my code compiles fine without it, so it is just annoying. I am also waiting on the dominator graph stuff, before I can test my stuff and check it in to cvs. I got a preview of the postdominator/dominator stuff from Peter. It isn't at all what I expected, it might take me a bit to change some parts of my code. I talked to Mary Jean briefly this morning, we are going to have a meeting on Tuesday to discuss grad school stuff, including fellowship applications. Also, I am very confused about the whole cvs thing, am I suppose to have a copy of the whole tree? and where am I suppose to update from?
week   
  
  
I worked on more implementation today, finishing the hammock graph implementation (so that it compiles, I haven't tested it at all yet).
Today I worked on testing the hammock graph implementation. I also had a meeting with Mary Jean about grad school, which was very informative. She is going to email some people for me, so that I can find out more about computational biology.
I have almost completed the differencing implementation, and I tested the Hammock implementation some more.
I worked on more testing today. I created a multiheader example (something I was having a difficult time coming up with earlier). An I finished all of the differencing implementation, except the matching and undoing the matching on a failure. I talked to Mary Jean about a better way to implement that, but she thought what I was doing was ok. Everyone is going to be leaving soon. Mary Jean is going to be gone next week, Saurabh is leaving Friday and will be gone for the rest of the time I am here, and Alex and Anup are both leaving in one week and won't be back until after I leave.
I worked on testing/debugging. I also set up a meeting with a theory professor here (through Mary Jean) to talk about grad school. Our meeting with be Monday at 10:00. I have both the hammock algorithm and the differencing algorithm implemented, but I feel that both are very buggy.
week   
  
  
I had a very informative meeting with Prof. Venkateswaren. We discussed grad school, in general, what to look for, and how to make an impression. Mary Jean is at a conference in Paris this week, so my individual meeting will be with Alex. At the meeting, Alex gave me six papers on impact analysis to read for Thursday, and I need to think about whole program differencing for Thursday as well. I don't think I can implement the JIG/DIG yet because I think I am waiting on Saurabh to finish up some of the exception stuff that I would need. I also need to work on some visualization stuff: boxes around hammocks, and matching of differences. I also need to do some more testing of the hammock algorithm and the differencing algorithm (I haven't run either of them on a very large program).
I read four of the six papers Alex gave me yesterday. Three didn't seem all that relevant (except maybe for comparison), but the fourth had some good ideas on stuff we could do with the differences we get from running the differencing algorithm.
I read the final two papers for Thursday, and I started thinking about ways to do whole program differencing, using the statement differencing I already have. Overall, the papers seemed to deal with differencing whole classes and/or packages and finding what other classes/packages were affected. This is what I need to figure out how to do next so that I can match up methods so that that I can run the differencing algorithm on them.
I thought of more ideas about differencing at the program level. Then I went to my meeting with Alex. We discussed the papers, my ideas, and what I need to work on next. I wrote up what we discussed on program differencing here. Things left to do are DIG/JIG implementation, visualization (hammock boxes, and matching), impact analysis (back propagation, think more about forward propagation), program level differencing, and testing. Alex also sent me another paper to read.
Today I skimmed the mutation paper, but I didn't find the cases I was looking for and expecting. Then I implemented the hammock boxes and the matched node lines (to show the matchings between two differenced graphs).
week   
  
  
I started implementing the DIG. There are lots of things I don't know where the information is, so I don't think I am going to be very productive time wise.
I worked more on the DIG implementation, mostly running into questions that I can't answer though. I got some of my questions answered at my individual meeting today.
I found a strange bug with the dotty output from the differencing. I can't find what is causing it.
I had a meeting with Donglin that cleared up virtually all of the immediate DIG questions. The brown bag lunch was interesting, I got to see some other women's views of the computer science field.
I worked mainly on program level differencing.
I finished a quick implementation of program level differencing, met with Mary Jean, and started testing some of the program level differencing. I am still having problems with dotty, it doesn't like to do the subgraphs that I tell it to, and I still haven't found the reason for that other bug I found earlier in the week. At my meeting Mary Jean and I reversed an earlier decision to combine the JIG and the DIG, because we don't think it is possible. So now I basically need to start the DIG from scratch.
week   
  
  
Today I tested the hammock graph on a large program, with great results. I also checked most of my stuff into cvs (hammocks and differencing, but not the dig), and mailed my test cases to Tongyu.
I made a very big to do list of everything that could still be done to the dig, program differencing, and hammocks. Then I went through and worked on the items I could accomplish quickly. I also implemented the dig, with the exception of the exception part. Then I updated the list, and started preparing for the presentation I am going to give tomorrow. I also checked in the DIG, or what I have for it, and my new versions of hammocks and differencing. I also checked all my docs into cvs.
End of week 10
I tried to bring my project to closure. It was very difficult since there is still so much I could do on it. I would definitely stay longer, if I wasn't being kicked out of the dorms (it is time for the regular gatech students to move back in). I also wrote up my final report, which is here.
week