Objective. This paper documents a study of the application of refactorings in commercial C# software comprising 270 versions over a two-month period. The software was developed in a continuous integration environment in a large, multi-national company where each software change committed to the source control was regarded as a new version. The aim of the research was to compare and contrast the results from two previous refactoring studies with those of the C# software. Method. A tool was developed to compare each version with the previous and detect occurrences of fifteen types of refactorings in both production and test classes. In total, over one thousand separate refactorings were identified. We then extended the profile of refactorings to compare (separately) the types of refactorings identified in test code and those in production code. Finally, we explored the interrelationships between a subset of the fifteen refactorings as a part explanation for the results. Conclusions. While 'simpler' refactorings were common, the more 'complex' structural refactorings were relatively rare. This supported the key result of an earlier empirical study by Advani et al. where Java open-source was used. Distinct differences were found in the types of refactoring applied to each code type. Support was found for a recent observation of Zaidman et al. in terms of parallel effort devoted to production and test classes. The study thus illustrates a strong commonality between refactoring trends found in both previous studies. Analysis of, and insight into all of our results were informed by follow-up discussions and consultation with the company's Architect.
Gatrell et al. REF perform a study analyzing the refactorings in a commercial C# software comprising 270 versions.
Empirical support for two refactoring studies using commercial C# software
EASE
Computer Science