The 5 Complexity Dimensions of Software
Complexity in this regard means complex for humans to understand and contribute to.
- Scale. The larger the system, the more complex.
- Diversity. The more frameworks, languages, integration techniques, tools, platforms, and design patterns used, the more complex.
- Connectivity. The more connections, the more complex. This relates to coupling.
- Dynamics. The more number of states or the larger state space, the more complex.
- Refinement. Over time every living piece of software is refined, optimized, and polished. Corner cases are found and handled, and regression test suites grow. Refinement drives complexity.
Sadly, computer science undergraduates rarely meet or learn about this kind of software complexity. That's why industry is reluctant to hire them. Solving 100 coding assignments comprising 200 lines of code each, just doesn't equal developing a system of 20,000 lines of code.
Tomorrow I will give a talk on why and how CS undergrads at Linköping University should learn about software complexity.
Interesting diagram. It might be implicit to the dimensions already there, but from a security point of view, I think the 'system of systems' dimension might deserve to be included, as many flaws/gaps are introduced in the system integration phase.
ReplyDelete