每一门学科都有一个知识体,所涵括的专业基础知识代表该学科的独特之处, 并使之显著区别于其他学科,称之为“核心知识体”,它是知识体的一个子集。每一项核心知识都是一些概念的组合,用以表述该学科的基本原理、理论或方法。概念(Concept)是“事物的本质特征或属性的抽象反映”,是知识表示的一个基本单位。核心知识的表现形式就称为核心知识形态,包括法则、定律和最佳实践等。学科的所有核心知识的系统组合就称为学科核心知识体。软件工程学科核心知识体就简称为SECBOK。
五大核心知识形态
SECBOK 是整个学科知识体系的基石,建于之上的就是各类非核心知识,包括工程过程、工具、技术和语言等。具体的,SECBOK 包括如下五类核心知识,如上图所示。
解释或支撑所有这些核心知识的就是理论。简言之,理论描述“为什么存在某现象”或“为什么采用某模型”(即“Why”)。典型的,软件工程理论描述某法则或定律成立的原因。注意,软件工程理论体系尚极不完备。这一方面是因为有限的学科研究和实践,另一方面则主要与学科特质相关。软件工程是一门新兴学科,所有软件实践都具有不同于一般实践的独特之处。建于之上的理论体系既需要长时间的实践反思和总结,更需要长时间的实践验证和修正。
核心知识的价值
在软件实践中,学科核心知识衍生了大量的工程方法、技术、过程和工具,这些统称为非核心知识。相比于非核心知识,核心知识较持久,更通用、也更可信。有鉴于此,几乎所有非核心知识的出现都是建立在某些核心知识之上。任何软件实践既离不开核心知识,又离不开非核心知识。从职业的角度来看,合格的软件工程师必须掌握这两类知识。但从教育的角度来看,SECBOK应当成为软件工程专业教育之基础和核心,且应当围绕它组建属于软件工程师的专业教育体系。
注意,软件工程学科的核心知识显著区别于自然科学(如物理学)的基本原理。典型的,软件工程定律就不具备物理学定律的高精度和强预测能力。就以著名的“二八定律”为例,它是:“20% 的代码包含80%的缺陷”。然而在实践中往往存在一定的偏差,如“18% 的代码包含82%的缺陷”。这些偏差在软件实践中是可接受的,但在物理学和数学等领域肯定是不能被容忍的。造成这种显著差异的本质原因是:软件开发是一个“人力、智力和创造力密集”的过程,充满“人性”。软件工程师在实践中表现出的典型人性包括判断主观、行为不可预测、过程不能复制且不可避免会犯错等。
李大牛博士撰写的《软件工程核心知识》上卷第4章(第76页)就讲述了软件工程师的一般人性特征。正是“人性”使得软件工程定律只能应用于一定范围之内且仅具有“较低”精度。类似的道理可解释其他形态的核心知识。典型的,同一项最佳实践,由不同软件工程师或团队应用,也会取得不同效果。
总言之,诚如业界知名专家Arthur Riel所言,软件工程核心知识只是“良药”或“警铃”,不足以称为“金科玉律”。也就是说,违背某些软件工程法则不一定会带来致命打击(如导致项目失败),但这也通常表明,当前实践正步入一个充满更多未知因素或更大风险的堪忧处境。这种鲜明的人性特征其实正是软件工程学科的本质之一。
在此要附加强调的是,虽然本学科的核心知识不如数学和物理等学科核心知识那般精准,但是软件工程师仍然有必要学习、掌握、遵循和应用这些核心知识于实践。原因其实很简单,那就是这些知识都来自于大量实践经验和实证研究的总结,能够有效指导较大范围的软件实践。原文:http://blog.csdn.net/secbok/article/details/22038661