Few pieces of software are ideal. Requirements may change during design, development or even post deployment, which necessitates the evolution of the software. One process that aides the evolution of software is software refactoring. Software refactoring is a process that aims to remove the `bad smells' of poor code without changing the observable behaviour. The use of refactoring can yield higher-quality code that is easier to maintain, understand and modify. Software refactoring tools support the process of software refactoring by automating key parts of the process.
Software refactoring tools, like software development environments, are often designed with little or no user input. This lack of user involvement has been attributed to the tool designers considering themselves examples of their users. The designers of software refactoring tools are not typical users of such tools, due to their detailed knowledge of the inner workings of development languages and compilers. Therefore, it is important to consider the usability of refactoring tools with a typical user in mind.
Current refactoring tools suffer from a number of usability issues, the foremost of these being inadequate consideration of the level of automation and support for the whole refactoring process. Full automation of any process involving human users, whilst seemingly desired by the users themselves, can have negative effects on a user's understanding of the system. Therefore, it is important to develop refactoring support with a focus on providing automation that is balanced with maintaining user awareness and involvement.
This thesis reports the design, development and evaluation of the StenchBlossom++ end-to-end, semi-automated software refactoring tool which better caters for the needs of software refactoring tool users. To achieve this, Nielsen's Usability Engineering Life Cycle was applied to the software refactoring process to take a first-principles approach to the design of refactoring tool support with usability in mind. By semi-automating the process of software refactoring, StenchBlossom++ provides support which automates the refactoring process whilst still involving the user and maintaining their understanding of the code-under-edit. During the evaluation, StenchBlossom++ exhibited improved usability. Additionally, when tested by nine industrial software developers in a pilot user study, this end-to-end, semi-automated approach better supported the refactoring process than existing tools. The results of the evaluation of StenchBlossom++ support the hypothesis that a refactoring tool could be designed and built that better supports users completing the entire software refactoring process.