Metric-based code smell detection technique for python software - Leeman, Samaila Ja'afaru (2018)
In software life cycle, maintenance is reported to cost between 80% and 90% of the total software cost. Instead of improving, software quality can deteriorate if maintenance of software is not carried out in line with design principles. A term, “code smell” has been framed to refer to software constructs that deviates from design principles’ implementation. Refactoring, a process of removing code smells has been recommended to improve maintainability qualities. However, for refactoring to be applied, code smells must be detected in the location where they exist. While research on code smells in Java and C++ programmed codes is mature, similar research in Python software is scarce. There are few literatures that show metric-based approaches have been used to detect code smells in Python Software. However, the techniques require selection of metrics and a tedious calibration of threshold upon which detection is done. Existing metric-based techniques anticipates parser to handle only one version of Python though Python 2 and 3 are popular and end of life for Python 2 has been announced. This research proposes an enhanced metric-based technique named PySTect that extracts structural information from parsed models of any version of Python software and translates them into metrics for detection of code smells. This research is divided into four phases. The first phase involves reviewing the literatures on code smells detection techniques, parser models, and code smells in Python software. In the second phase, details of conceptual and architectural design of the metric-based technique are presented. Thirdly, PySTect technique is implemented and evaluated in three experiments. In the first experiment, precision and recall of 100% and 96% were recorded which indicates the effectiveness of the PySTect technique in detecting five code smells. In the second and third experiments 1,167,180 lines of code from 13 open source Python projects are analysed. Results of the second experiment shows codes smell increases with evolution of Python software projects and the third experiment indicates the most dominant smells in Python SDKs are Lazy Class, Improper Method Declaration, a Python specific smell and large class, in that order. This research work has proposed an enhanced metric-based detection technique for Python software that analyses Python codes irrespective of its versions and extracts thresholds from good designed codes saving developers effort to calibrate threshold. It has contributed in specifying and detecting a new code smell, Improper Method Declaration and also confirmed that dynamic programming language suffers from large class, lazy class, long method and long parameter list like static languages. Lastly, this research found that code smells increases in Python programs with evolution and, lazy class and improper method declaration should be prioritized in SDK domain.