Understanding the Knowledge Gaps of Software Engineers: An Empirical Analysis Based on SWEBOK