Fork me on GitHub
10/7/2006

Цикломатическая сложность

Давече Гарри Вильсон писал о цикломатической сложности кода Django Мне показалось это интересным, и я получил статистику по пакетам, установленным у меня. top20 выглядит так:
Цикломатическая сложность
Пакет Наиболее "сложная" функция/метод Сложность
1 wxglade-0.3.5 codegen.cpp_codegen.add_class 87
2 crypto-2.0.1 Util.test.TestBlockModules 84
3 moinmoin-1.5.3 userform.UserSettingsHandler.handleData 81
4 ipython-0.7.1 ipmaker.make_IPython 62
5 wxglade-0.3.5 codegen.pl_codegen.add_class 57
6 wxpython-2.6.1.2 wx.lib.ogl._composit.Constraint.Evaluate 55
7 wxpython-2.6.1.2 wx.lib.masked.numctrl.NumCtrl.SetParameters 55
8 dnspython-1.3.4 tokenizer.Tokenizer.get 51
9 clientform-0.2.0.99 ClientForm.HTMLForm._find_control 51
10 dabo-0.5 lib.reportWriter.ReportWriter.draw 49
11 wxpython-2.6.1.2 wx.lib.masked.maskededit.MaskedEditMixin._Undo 47
12 moinmoin-1.5.3 macro.Include.execute 46
13 wxpython-2.6.1.2 wx.lib.masked.maskededit.MaskedEditMixin.SetCtrlParameters 45
14 twisted-2.4.0 python.rebuild.rebuild 43
15 xlib-0.12 protocol.display.Display.send_and_recv 42
16 wxpython-2.6.1.2 wx.lib.masked.maskededit.MaskedEditMixin._OnChar 42
17 mxtexttools-2.0.6 Misc.ConfigFile.ConfigFile.read 42
18 moinmoin-1.5.3 Page.Page.send_page 42
19 clientcookie-1.1.1 _ClientCookie.bool 42
20 bittornado-0.3.13 parsedir.parsedir 42
При оценке сложности возникли проблемы (по, видимому, связанные с размером файла) со следующими файлами: Напомню, что сложность больше 50 означает очень высокий риск и практически не тестируемый код. И по статистике видно, что первый кандидат на редизайн - wxPython. У него явно наблюдаются проблемы с избыточной сложностью. Потестировал свой код (в большинстве своем - мелкие библиотеки/скрипты), который был под рукой, оказалось большинство кода укладывается в 10-12, лишь малая часть 13-15.

Комментарии

Все статьи