diff --git a/Makefile b/Makefile index d1445ecc..887e0c3d 100644 --- a/Makefile +++ b/Makefile @@ -322,6 +322,40 @@ SPELL_OPTIONS = --enable-colors --ignore-words-list $(IGNORE_WORDS) spell: codespell $(SPELL_OPTIONS) ./src +# McCabe's Cyclomatic Complexity Scores +# sudo apt install pmccable +COMPLEXITY_SRC = \ + $(wildcard ./src/bacnet/*.c) \ + $(wildcard ./src/bacnet/basic/*.c) \ + $(wildcard ./src/bacnet/basic/binding/*.c) \ + $(wildcard ./src/bacnet/basic/service/*.c) \ + $(wildcard ./src/bacnet/basic/sys/*.c) \ + ./src/bacnet/basic/npdu/h_npdu.c \ + ./src/bacnet/basic/npdu/s_router.c \ + ./src/bacnet/basic/tsm/tsm.c + +.PHONY: pmccabe +pmccabe: + pmccabe $(COMPLEXITY_SRC) | awk '{print $$2,$$6,$$7}' | sort -nr | head -20 + +# sudo apt install complexity +# 0-9 Easily maintained code. +# 10-19 Maintained with little trouble. +# 20-29 Maintained with some effort. +# 30-39 Difficult to maintain code. +# 40-49 Hard to maintain code. +# 50-99 Unmaintainable code. +# 100-199 Crazy making difficult code. +# 200+ I only wish I were kidding. +.PHONY: complexity +complexity: + complexity $(COMPLEXITY_SRC) + +# sudo apt install sloccount +.PHONY: sloccount +sloccount: + sloccount . + .PHONY: clean clean: ports-clean $(MAKE) -s -C src clean diff --git a/aptfile b/aptfile index 2daf4080..53c2a989 100644 --- a/aptfile +++ b/aptfile @@ -24,6 +24,8 @@ package "gitg" package "tofrodos" package "clang-format" package "sloccount" +package "complexity" +package "pmccabe" # install ARM compiler and debugging tools package "gcc-arm-none-eabi" diff --git a/doc/README.sloc b/doc/README.sloc index fc991858..3c2cfd78 100644 --- a/doc/README.sloc +++ b/doc/README.sloc @@ -1,10 +1,12 @@ SLOC Directory SLOC-by-Language (Sorted) -84560 ports ansic=70066,asm=9265,cpp=4651,xml=424,sh=154 -72724 src_bacnet ansic=72724 -15569 apps ansic=15011,perl=463,javascript=91,sh=4 -721 test ansic=721 -257 bin sh=257 -5 top_dir sh=5 +118011 ports ansic=101988,asm=10755,cpp=4651,xml=463,sh=154 +78632 src_bacnet ansic=78632 +28295 test ansic=27663,cpp=598,xml=34 +22418 apps ansic=21856,perl=463,javascript=89,sh=10 +644 build ansic=610,xml=34 +565 zephyr ansic=565 +302 bin sh=302 +112 top_dir sh=112 0 cmake (none) 0 doc (none) 0 license (none) @@ -12,24 +14,24 @@ SLOC Directory SLOC-by-Language (Sorted) Totals grouped by language (dominant language first): -ansic: 158522 (91.19%) -asm: 9265 (5.33%) -cpp: 4651 (2.68%) -perl: 463 (0.27%) -xml: 424 (0.24%) -sh: 420 (0.24%) -javascript: 91 (0.05%) +ansic: 231314 (92.91%) +asm: 10755 (4.32%) +cpp: 5249 (2.11%) +sh: 578 (0.23%) +xml: 531 (0.21%) +perl: 463 (0.19%) +javascript: 89 (0.04%) -Total Physical Source Lines of Code (SLOC) = 173,836 -Development Effort Estimate, Person-Years (Person-Months) = 45.00 (539.96) +Total Physical Source Lines of Code (SLOC) = 248,979 +Development Effort Estimate, Person-Years (Person-Months) = 65.61 (787.38) (Basic COCOMO model, Person-Months = 2.4 * (KSLOC**1.05)) -Schedule Estimate, Years (Months) = 2.28 (27.30) +Schedule Estimate, Years (Months) = 2.63 (31.51) (Basic COCOMO model, Months = 2.5 * (person-months**0.38)) -Estimated Average Number of Developers (Effort/Schedule) = 19.78 -Total Estimated Cost to Develop = $ 6,078,387 +Estimated Average Number of Developers (Effort/Schedule) = 24.99 +Total Estimated Cost to Develop = $ 8,863,648 (average salary = $56,286/year, overhead = 2.40). SLOCCount, Copyright (C) 2001-2004 David A. Wheeler SLOCCount is Open Source Software/Free Software, licensed under the GNU GPL.