小议软件工程核心知识

来源:互联网 发布:python抓取网页文字 编辑:程序博客网 时间:2024/05/17 06:28

        每一门学科都有一个知识体,所涵括的专业基础知识代表该学科的独特之处, 并使之显著区别于其他学科,称之为“核心知识体”,它是知识体的一个子集。每一项核心知识都是一些概念的组合,用以表述该学科的基本原理、理论或方法。概念(Concept)是“事物的本质特征或属性的抽象反映”,是知识表示的一个基本单位。核心知识的表现形式就称为核心知识形态,包括法则、定律和最佳实践等。学科的所有核心知识的系统组合就称为学科核心知识体。软件工程学科核心知识体就简称为SECBOK



 

五大核心知识形态

 

       SECBOK 是整个学科知识体系的基石,建于之上的就是各类非核心知识,包括工程过程、工具、技术和语言等。具体的,SECBOK 包括如下五类核心知识,如上图所示。

  •  法则:描述“怎么做”(即“How”)。软件工程法则描述那些常用且有效的工程实践,具有高通用性(即能广泛应用于各类软件工程项目)。例如,“关注点分离” 就是一个典型的法则。
  • 最佳实践:是由法则衍生的应用实例。它的通用性相对较低,且与具体工法或过程紧密相关。例如,“需求分簇”就是一个典型的最佳实践,是上述“关注点分离”法则在需求阶段的应用实例。简言之,最佳实践就是法则的初级形态,也是法则的代表性实践。
  • 定律:描述“某现象是什么或怎么发生”(即“What”)。软件工程定律描述一个普遍存在的、有实际意义的软件现象,其存在一般与具体环境无关。例如,关于软件规模问题的“DeRemer 规模定律”。
  • 常识:一般意义上的“常识”是指人人皆知的有用知识(即生活常识)。专业常识则是指专业实践所需的最基本知识,主要包括最广为人知的软件定律或现象,和最被广泛而自觉遵守的法则。例如,关于软件复杂性的常识。
  • 理念:是经长期实践和反思而形成的思想观念的抽象概括,是最具广泛指导性意义的知识(有如针对最普遍问题的最有效处理策略),是常识的升华或抽象。例如,处理软件复杂性的“分而治之”理念。

        解释或支撑所有这些核心知识的就是理论。简言之,理论描述“为什么存在某现象”或“为什么采用某模型”(即“Why”)。典型的,软件工程理论描述某法则或定律成立的原因。注意,软件工程理论体系尚极不完备。这一方面是因为有限的学科研究和实践,另一方面则主要与学科特质相关。软件工程是一门新兴学科,所有软件实践都具有不同于一般实践的独特之处。建于之上的理论体系既需要长时间的实践反思和总结,更需要长时间的实践验证和修正。

 

核心知识的价值

        在软件实践中,学科核心知识衍生了大量的工程方法、技术、过程和工具,这些统称为非核心知识。相比于非核心知识,核心知识较持久,更通用、也更可信。有鉴于此,几乎所有非核心知识的出现都是建立在某些核心知识之上。任何软件实践既离不开核心知识,又离不开非核心知识。从职业的角度来看,合格的软件工程师必须掌握这两类知识。但从教育的角度来看,SECBOK应当成为软件工程专业教育之基础和核心,且应当围绕它组建属于软件工程师的专业教育体系。

        注意,软件工程学科的核心知识显著区别于自然科学(如物理学)的基本原理。典型的,软件工程定律就不具备物理学定律的高精度和强预测能力。就以著名的“二八定律”为例,它是:“20% 的代码包含80%的缺陷”。然而在实践中往往存在一定的偏差,如“18% 的代码包含82%的缺陷”。这些偏差在软件实践中是可接受的,但在物理学和数学等领域肯定是不能被容忍的。造成这种显著差异的本质原因是:软件开发是一个“人力、智力和创造力密集”的过程,充满“人性”。软件工程师在实践中表现出的典型人性包括判断主观、行为不可预测、过程不能复制且不可避免会犯错等。

        李大牛博士撰写的《软件工程核心知识》上卷第4章(第76页)就讲述了软件工程师的一般人性特征。正是“人性”使得软件工程定律只能应用于一定范围之内且仅具有“较低”精度。类似的道理可解释其他形态的核心知识。典型的,同一项最佳实践,由不同软件工程师或团队应用,也会取得不同效果。

        总言之,诚如业界知名专家Arthur Riel所言,软件工程核心知识只是“良药”或“警铃”,不足以称为“金科玉律”。也就是说,违背某些软件工程法则不一定会带来致命打击(如导致项目失败),但这也通常表明,当前实践正步入一个充满更多未知因素或更大风险的堪忧处境。这种鲜明的人性特征其实正是软件工程学科的本质之一。

        在此要附加强调的是,虽然本学科的核心知识不如数学和物理等学科核心知识那般精准,但是软件工程师仍然有必要学习、掌握、遵循和应用这些核心知识于实践。原因其实很简单,那就是这些知识都来自于大量实践经验和实证研究的总结,能够有效指导较大范围的软件实践。
0 0
原创粉丝点击