Line: 1 to 1 | ||||||||
---|---|---|---|---|---|---|---|---|
Changed: | ||||||||
< < |
| |||||||
> > |
| |||||||
Sara's Review Problem |
Line: 1 to 1 | ||||||||
---|---|---|---|---|---|---|---|---|
Added: | ||||||||
> > |
This paper describes an algorithm that, provided a set of program elements (the set of interest), uses two heuristics to suggest relevant program elements for investigation. Specificity emphasizes elements that are only related to the elements of interest. Reinforcement emphasizes elements that are related to the elements of interest. These two heuristics are able to use any type of program relation, called relatedness; the paper's investigations are limited to investigations using calls and accesses relations. Preliminary empirical validation shows the approach has promise. Experiments performed on two small codebases show that, when the set of interest is a single element, suggestion sizes are reasonable size. There has been some investigation into useful bounds on the single tuning parameter, alpha. Two small cases studies provide some confirmation of the utility of the results in development. Contributions
This paper presents a technique (and tool) to automatically suggest elements of potential interest to a developer involved in a program investigation task. The inputs are a set of interesting (source code) elements that the developer chooses, and the output is a larger set of elements that are related to the initial set of interest. These recommendations are based on structural dependencies in the existing code base. A qualitative analysis of the results of two case studies is presented and discussed. Contributions Great first step in terms of quantitative analysis. Seems to come up with some novel ways of calculating useful statistics to base recommendations on. I like the idea of using 'fuzzy' sets. Particularly in this area, where you can never really be certain what the ideal solution set should be, if one even exists. Using the term 'fuzzy' drives home the point that finding the solution to this problem is not an 'exact science', but the goal is really to aid the developer in going down the right path. I'm not an expert in this field, but it seems like a fairly unique algorithm, backed by sound mathematical equations. Nice job of justifying all the (math) groundwork with detailed explanations and reasoning. Weaknesses In the qualititative analysis section, I would have liked to know more about how this technique compares to some of the related work. It's not clear whether the evaluation technique is similar to techniques used in related work, but if so it would be nice to say 'technique X discovered this many related elements, compared to our technique'. I thought the explanation of the 'direct and transpose (inverse) relations' (sec 3, last paragraph) was a bit confusing with the examples. It seems like a simple plain english explanation, and the the examples lost me a bit (made me think I was missing something) just because there were lot's of element 'A', 'B', '1', '2' etc. Had to read it twice going back/forth to the diagram to make sure I understood it. I didn't quite understand the effect that the 'alpha' parameter had on the analysis. I think a reminder of what this param was for throughout the document would have also helped, as it's mentioned extensively in the analysis section, but I had to continually go back and remind myself what this parameter was for, and how it changed things. I think the example could have been explained in better context. (ie. descibe it as a real scenario such as a change or modification task for JHotDraw). Simply choosing a method and field makes it hard to picture how the developer might have chosen these in a real situation. It's really hard to take away any concrete conclusions about the evaluation and the effectiveness of this technique since there is so much variance in the implementation of large systems (as well as developers work habits and techniques). The qualitative analysis is a great first step, but it seems like solutions to this problem mainly rely on numerous user studies and testing in real situations(?) Questions In a typical scenario, how are the initial 'sets of interest' determined? Ie. How do you foresee developers choosing these sets? In the paper, the researcher always selected these sets, based on classes that were modified many times in the repository. But there are many situations where change tasks involve code that may not have been modified before. Is the evaluation method used here similar to what other researchers (from related work) use? It seems that you would want to evaluate this by observing users with this tool while performing various change tasks. Is this future work? Or is there a reason why that was not done? Does this algorithm rely (or work better) on systems that are 'well designed' and follow standard OO practices? Would it work just as well on a poorly written system? What are the major 'architectural' limitations of using this technique? For instance, client/server systems that try to de-couple components via middleware won't always reveal direct call relationships (ie. lookup for distributed components is done by naming like JNDI) How about design patterns where direct calls are also abstracted or de-coupled? What other relations do you think would be useful to investigate (besides the calls relation)? |