software complexity analysis