  The context of this work is specification, detection and ultimately removal
of detectable harmful patterns in source code that are associated with defects
in design and implementation of software. In particular, we investigate five
code smells and four antipatterns previously defined in papers and books. Our
inquiry is about detecting those in source code written in Python programming
language, which is substantially different from all prior research, most of
which concerns Java or C-like languages. Our approach was that of software
engineers: we have processed existing research literature on the topic,
extracted both the abstract definitions of nine design defects and their
concrete implementation specifications, implemented them all in a tool we have
programmed and let it loose on a huge test set obtained from open source code
from thousands of GitHub projects. When it comes to knowledge, we have found
that more than twice as many methods in Python can be considered too long
(statistically extremely longer than their neighbours within the same project)
than in Java, but long parameter lists are seven times less likely to be found
in Python code than in Java code. We have also found that Functional
Decomposition, the way it was defined for Java, is not found in the Python code
at all, and Spaghetti Code and God Classes are extremely rare there as well.
The grounding and the confidence in these results comes from the fact that we
have performed our experiments on 32'058'823 lines of Python code, which is by
far the largest test set for a freely available Python parser. We have also
designed the experiment in such a way that it aligned with prior research on
design defect detection in Java in order to ease the comparison if we treat our
own actions as a replication. Thus, the importance of the work is both in the
unique open Python grammar of highest quality, tested on millions of lines of
code, and in the design defect detection tool which works on something else
than Java.
