Пахнет Ли Python Как Java?


Очень интересный вопрос. Python так сильно отличается от Java, но страдает ли он от тех же недостатков?  Новое исследование из Амстердамского университета и Лаборатории Raincode в Бельгии рассматривает вопрос о том, имеет ли Python ту же проблему с «запахами» кода, что и Java.

В случае, если вы упустили значение «запаха», он исходит от сообщества agile и в основном означает, что что — то не так-это признак того, что может скрываться антипаттерн.

Контекстом этой работы является спецификация, обнаружение и, в конечном счете, удаление обнаруживаемых вредоносных шаблонов в исходном коде, которые связаны с дефектами в разработке и реализации программного обеспечения. В частности, мы исследуем пять запахов кода и четыре антипаттера, ранее определенных в статьях и книгах.

Наш запрос направлен на обнаружение таковых в исходном коде, написанном на языке программирования Python, который существенно отличается от всех предыдущих исследований, большинство из которых касается Java или C-подобных языков. Наш подход был подходом инженеров-программистов: мы обработали существующую исследовательскую литературу по этой теме, извлекли как абстрактные определения девяти дефектов дизайна, так и их конкретные спецификации реализации, реализовали их все в программируемом нами инструменте и выпустили его на огромном тестовом наборе, полученном из открытого исходного кода тысяч проектов GitHub.

Когда дело доходит до знаний, мы обнаружили, что более чем в два раза больше методов в Python можно считать слишком длинными (статистически чрезвычайно длинными, чем их соседи в рамках одного проекта), чем в Java, но длинные списки параметров в семь раз реже встречаются в коде Python, чем в коде Java.

Мы также обнаружили, что функциональная декомпозиция, как она была определена для Java, вообще не встречается в коде Python, а классы Spaghetti и God там также крайне редки.

Обоснованность и уверенность в этих результатах обусловлены тем фактом, что мы провели наши эксперименты на 32’058’823 строках кода Python, что на сегодняшний день является самым большим тестовым набором для свободно доступного синтаксического анализатора Python. Мы также разработали эксперимент таким образом, чтобы он соответствовал предыдущим исследованиям по обнаружению дефектов проектирования в Java, чтобы облегчить сравнение, если мы рассматриваем наши собственные действия как репликацию.

Таким образом, важность работы заключается как в уникальной открытой грамматике Python высочайшего качества, протестированной на миллионах строк кода, так и в инструменте обнаружения дефектов дизайна, который работает на чем-то другом, чем Java.

Так что Python вроде как пахнет Java, но с некоторыми интересными отличиями. Подробные выводы:

Нет никаких вхождений в функциональную декомпозицию и едва ли какой-либо из классов God и Spaghetti CodeA Класс God-это антипаттерн, состоящий из одного сложного класса, возможно, окруженного несколькими классами данных. Сложный класс монополизирует всю обработку, в то время как единственная ответственность классов данных заключается в инкапсуляции данных. Может быть, классы Бога редки, потому что программисты на Python не занимаются объектно-ориентированным программированием? А вы пробовали писать спагетти-код на Python? Его структура и использование значимого белого пространства делают его намного сложнее. 

Значительно более низкая плотность длинных списков параметров в Python, чем в JavaOne, возможная причина-наличие и тенденция использовать сложные объекты в качестве входных и выходных функций. 

Значительно более высокая плотность длинных методов в Python, чем в JavaAgain, может объяснить отсутствие действительно охватывающей объектной философии. Это также может быть связано с более низкой плотностью длинных списков параметров. Высокоуровневые суперфункции, как правило, принимают только несколько параметров. 

Относительно сопоставимые плотности для Больших классов и Швейцарских армейских ножей.Швейцарский армейский нож-это антипаттерн для класса со слишком большим количеством обязанностей, и это аспект той же тенденции, что и создание больших классов. Другой запах объясняется отсутствием хорошей объектно-ориентированной философии.

 Так что Python пахнет Java:

Имеют ли код Java и код Python сопоставимые дефекты дизайна? Поскольку нам удалось обнаружить большинство дефектов дизайна, которые ранее были обнаружены другими в исходном коде Java, мы пришли к выводу, что аналогичные дефекты дизайна могут быть обнаружены в исходном коде Java и Python.


Добавить комментарий