Subject: Your thoughts on our refactoring study Dear XXX, My colleagues Chris Parnin, Andrew Black, and I are completing a study about refactoring and refactoring tool use. We investigated two case studies of refactoring, one of which was of the YYY project, of which you were a committer. In short, our analysis compared your refactoring tool history (produced when you used the Eclipse refactoring tools) with what we inferred as refactoring in the code when you committed to CVS. From this, we made estimates about how often people refactor, what kinds of refactoring tools they use, and when they use or do not use refactoring tools. We are hoping you will answer a few questions about your thoughts on issues related to your refactoring. We hope this will provide some insights into how we can interpret our results. You are one of less than 10 people that we are inviting to participate, so your comments are extremely valuable to us. Below, you will find several interview questions; we anticipate that they will take around 15 minutes to complete in total. Unless you indicate otherwise, we would like to reserve the right to summarize or repeat your answers verbatim in our forthcoming paper. As for privacy, in the paper we do not personally identify developers by name or by CVS username (although we do say which projects we analyzed). You can respond to this questionnaire simply by replying to this email. Because we are on a tight publishing deadline, if you choose to participate, we would appreciate your response by February 25th. Sincerely, Emerson Murphy-Hill, The University of British Columbia Chris Parnin, Georgia Institute of Technology Andrew P. Black, Portland State University ----- We published a first version of our analysis in a research paper called “How We Refactor, and How We Know It” in 2009 at the International Conference on Software Engineering. Did you happen to read it? One of our main findings was that, by comparing refactoring tool histories and the refactorings apparent in CVS, developers appear to use refactoring tools for about 10% refactorings for which a refactoring tool is available. Speaking for yourself, why do you think you would not use a refactoring tool when one was available? In the attached PDFs, we have included a few snippets of code where we inferred that you performed a refactoring for which Eclipse has tool support. However, for some of the examples, we did not have a record of you using a refactoring tool and thus concluded that you refactored without one. If you are able to remember the change that you made, could you recall or infer why you did or didn’t use the tool for that refactoring? (For each file, we use green and red annotations highlights to show what was added and removed, and grey highlights to draw your attention to specific parts of code.) File: ZZZ.refactoringname-tool.diff.pdf Change date: DD/MM/YYYY CVSComment: some comment Another finding was that developers sometimes repeatedly used the same refactoring tool in quick succession (e.g., used Inline, then used it again in the next few seconds). Can you think of any reasons why you might do this? Off the top of your head, please try to name the three refactorings that you perform most often, and three that you perform most often using refactoring tools. Do you plan long-term `refactoring campaigns’, where you engage in extended refactoring for a period of time? If so, what is the motivation? How long do these usually take? Are there pitfalls during these campaigns? How would you want refactoring tools to help at those times? In our analysis, we looked at only refactorings in commits to the main line. Do you think you refactored differently when you committed to branches? How you think the fact that your team developed tools for Eclipse affected how you used refactoring tools? Do you think you used the refactoring tools more/less/about the same as the average Eclipse Java developer? Is there some particular Eclipse refactoring tool (or part of a tool) that doesn’t fit with the way that you refactor? If so, please tell us which tool, and what the problem is. Do you desire additional tool support when you refactor? (Below, we’ve included a list of Eclipse refactoring tools to help jog your memory.) Rename Extract Local Variable Inline Extract Method Move Change Method Signature Convert Local To Field Introduce Parameter Extract Constant Convert Anonymous To Nested Move Member Type to New File Pull Up Encapsulate Field Extract Interface Generalize Declared Type Push Down Infer Generic Type Arguments Use Supertype Where Possible Introduce Factory Extract Superclass Extract Class Introduce Parameter Object Introduce Indirection Would you like a copy of the paper when it is complete?