mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-01-05 21:59:45 +00:00
tool/metrics: measure cyclomatic complexity, num params, num functions, num gotos
This commit is contained in:
parent
9d49ac0b27
commit
38e38f2334
11
tool/metrics/goto.sh
Executable file
11
tool/metrics/goto.sh
Executable file
@ -0,0 +1,11 @@
|
||||
#!/bin/sh
|
||||
grep goto -n -r ../../src
|
||||
|
||||
# For 9d49ac0b2
|
||||
|
||||
# ../../src/classic/rfcomm.c:2351: goto fail;
|
||||
# ../../src/classic/rfcomm.c:2363: goto fail;
|
||||
# ../../src/classic/rfcomm.c:2370: goto fail;
|
||||
# ../../src/classic/rfcomm.c:2406: if (status) goto fail;
|
||||
|
||||
# rfcomm.c : 4 gotos in rfcomm_channel_create_internal
|
88
tool/metrics/metrics-lizard.py
Executable file
88
tool/metrics/metrics-lizard.py
Executable file
@ -0,0 +1,88 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# requires https://github.com/terryyin/lizard
|
||||
|
||||
import lizard
|
||||
import os
|
||||
import sys
|
||||
|
||||
folders = [
|
||||
'src',
|
||||
'src/ble',
|
||||
'src/ble/gatt-service',
|
||||
'src/classic',
|
||||
]
|
||||
|
||||
metrics = {}
|
||||
targets = {}
|
||||
|
||||
targets['CCN'] = 10
|
||||
targets['PARAM'] = 7
|
||||
|
||||
def metric_count(name):
|
||||
global metrics
|
||||
value = 0
|
||||
if name in metrics:
|
||||
value = metrics[name]
|
||||
metrics[name] = value + 1
|
||||
|
||||
|
||||
def metric_list(name, item):
|
||||
global metrics
|
||||
value = []
|
||||
if name in metrics:
|
||||
value = metrics[name]
|
||||
value.append(item)
|
||||
metrics[name] = value
|
||||
|
||||
def metric_max(name, max):
|
||||
global metrics
|
||||
if name in metrics:
|
||||
if metrics[name] > max:
|
||||
return
|
||||
metrics[name] = max
|
||||
|
||||
def metric_measure(metric_name, functino_name, actual):
|
||||
metric_max(metric_name + '_MAX', actual)
|
||||
if metric_name in targets:
|
||||
if actual > targets[metric_name]:
|
||||
metric_count(metric_name + '_DEVIATIONS')
|
||||
metric_list(metric_name + '_LIST', functino_name)
|
||||
|
||||
def analyze_file(path):
|
||||
l = lizard.analyze_file(path)
|
||||
for f in l.function_list:
|
||||
metric_count('FUNC')
|
||||
metric_measure('PARAM', f.name, f.parameter_count)
|
||||
metric_measure('CCN', f.name, f.cyclomatic_complexity )
|
||||
|
||||
def analyze_folder(folder_path):
|
||||
for file in sorted(os.listdir(folder_path)):
|
||||
if file.endswith(".c"):
|
||||
analyze_file(folder_path+'/'+file)
|
||||
|
||||
# find root
|
||||
btstack_root = os.path.abspath(os.path.dirname(sys.argv[0]) + '/../..')
|
||||
|
||||
print ("Targets:")
|
||||
for key,value in sorted(targets.items()):
|
||||
print ('- %-20s: %u' % (key, value))
|
||||
|
||||
print ("\nAnalyzing:")
|
||||
for path in folders:
|
||||
print('- %s' % path)
|
||||
analyze_folder(btstack_root + "/" + path)
|
||||
|
||||
print ("\nResult:")
|
||||
|
||||
for key,value in sorted(metrics.items()):
|
||||
if key.endswith('LIST'):
|
||||
continue
|
||||
print ('- %-20s: %4u' % (key, value))
|
||||
|
||||
for key,value in sorted(metrics.items()):
|
||||
if not key.endswith('LIST'):
|
||||
continue
|
||||
print ("\n%s" % key)
|
||||
print ('\n'.join(value))
|
||||
|
Loading…
Reference in New Issue
Block a user