golang / gofrontend
Conditional Complexity

The distribution of complexity of units (measured with McCabe index).

Intro
  • Conditional complexity (also called cyclomatic complexity) is a term used to measure the complexity of software. The term refers to the number of possible paths through a program function. A higher value ofter means higher maintenance and testing costs (infosecinstitute.com).
  • Conditional complexity is calculated by counting all conditions in the program that can affect the execution path (e.g. if statement, loops, switches, and/or operators, try and catch blocks...).
  • Conditional complexity is measured at the unit level (methods, functions...).
  • Units are classified in four categories based on the measured McCabe index: 1-5 (simple units), 6-10 (medium complex units), 11-25 (complex units), 26+ (very complex units).
Learn more...
Conditional Complexity Overall
  • There are 17,563 units with 271,832 lines of code in units (63.7% of code).
    • 58 very complex units (13,169 lines of code)
    • 255 complex units (27,258 lines of code)
    • 1,296 medium complex units (66,006 lines of code)
    • 2,182 simple units (56,987 lines of code)
    • 13,772 very simple units (108,412 lines of code)
4% | 10% | 24% | 20% | 39%
Legend:
51+
26-50
11-25
6-10
1-5
Alternative Visuals
Conditional Complexity per Extension
51+
26-50
11-25
6-10
1-5
go4% | 10% | 24% | 21% | 39%
c0% | 0% | 33% | 15% | 51%
cc0% | 0% | 34% | 22% | 43%
h0% | 0% | 0% | 0% | 100%
Conditional Complexity per Logical Component
primary logical decomposition
51+
26-50
11-25
6-10
1-5
libgo/go/go13% | 13% | 26% | 17% | 28%
libgo/go/cmd7% | 17% | 32% | 18% | 24%
libgo/go/encoding8% | 13% | 22% | 19% | 36%
libgo/go/golang.org3% | 6% | 25% | 21% | 42%
libgo/go/runtime3% | 7% | 25% | 21% | 42%
libgo/go/debug12% | 20% | 23% | 17% | 26%
libgo/go/crypto3% | 7% | 20% | 20% | 48%
libgo/go/time17% | 7% | 16% | 24% | 33%
libgo/go/image8% | 9% | 23% | 15% | 42%
libgo/go/internal4% | 8% | 22% | 22% | 41%
libgo/go/syscall5% | 6% | 7% | 17% | 63%
libgo/go/database9% | 0% | 13% | 25% | 51%
libgo/go/reflect5% | 10% | 18% | 23% | 41%
libgo/go/regexp4% | 22% | 27% | 14% | 30%
libgo/go/net<1% | 8% | 21% | 24% | 44%
libgo/go/fmt7% | 22% | 15% | 19% | 35%
libgo/go/archive5% | 4% | 34% | 18% | 37%
libgo/go/testing3% | 10% | 23% | 20% | 40%
libgo/go/math0% | 7% | 28% | 21% | 41%
libgo/go/strconv0% | 20% | 46% | 16% | 16%
libgo/go/compress0% | 15% | 25% | 23% | 35%
libgo/go/path0% | 25% | 23% | 22% | 28%
libgo/go/os0% | 3% | 21% | 22% | 52%
libgo/go/html0% | 3% | 13% | 15% | 67%
libgo/go/text0% | 3% | 26% | 17% | 52%
libgo/go/bufio0% | 11% | 6% | 44% | 37%
libgo/runtime0% | 0% | 48% | 17% | 34%
libgo/go/mime0% | 0% | 32% | 35% | 31%
libgo/go/strings0% | 0% | 27% | 32% | 39%
libgo/go/bytes0% | 0% | 25% | 24% | 49%
libgo/go/sort0% | 0% | 46% | 12% | 40%
libgo/go/unicode0% | 0% | 42% | 29% | 28%
libgo/go/sync0% | 0% | 12% | 30% | 57%
go0% | 0% | 32% | 21% | 45%
libgo/go/index0% | 0% | 6% | 73% | 19%
libgo/go/flag0% | 0% | 17% | 8% | 74%
libgo/go/plugin0% | 0% | 80% | 0% | 19%
libgo/go/log0% | 0% | 12% | 6% | 80%
libgo/go/io0% | 0% | 6% | 28% | 65%
libgo/go/hash0% | 0% | 0% | 10% | 89%
libgo/go/context0% | 0% | 0% | 34% | 65%
libgo/go/errors0% | 0% | 0% | 73% | 26%
libgo/go/embed0% | 0% | 0% | 23% | 76%
libgo/go/container0% | 0% | 0% | 12% | 87%
libgo/misc/cgo0% | 0% | 0% | 0% | 100%
libgo/go/expvar0% | 0% | 0% | 0% | 100%
libgo/go/builtin0% | 0% | 0% | 0% | 100%
Most Complex Units
Top 20 most complex units
Unit# linesMcCabe index# params
func()
in libgo/go/go/types/builtins.go
565 168 1
func()
in libgo/go/go/build/build.go
408 132 1
func parse()
in libgo/go/time/format.go
321 126 4
func()
in libgo/go/cmd/cgo/gcc.go
328 125 1
func()
in libgo/go/go/types/stmt.go
433 120 1
func()
in libgo/go/cmd/go/internal/work/exec.go
358 115 1
func()
in libgo/go/image/png/reader.go
355 109 1
func runList()
in libgo/go/cmd/go/internal/list/list.go
347 104 3
func()
in libgo/go/cmd/cgo/gcc.go
356 100 1
func parseField()
in libgo/go/encoding/asn1/asn1.go
276 97 4
func Walk()
in libgo/go/go/ast/walk.go
250 97 2
func()
in libgo/go/debug/dwarf/entry.go
321 95 1
func forkAndExecInChild1()
in libgo/go/syscall/exec_linux.go
293 91 8
func()
in libgo/go/encoding/xml/read.go
244 91 1
func()
in libgo/go/crypto/tls/handshake_messages.go
215 89 1
func heapBitsSetType()
in libgo/go/runtime/mbitmap.go
368 84 4
func()
in libgo/go/cmd/go/internal/work/gccgo.go
249 83 1
func()
in libgo/go/cmd/go/internal/load/pkg.go
206 82 1
func()
in libgo/go/encoding/xml/xml.go
259 81 1
func()
in libgo/go/debug/dwarf/type.go
315 81 1