“理论给出对基本概念和基本原理的解释与理解,它是关于事物发展趋势和现象的知识。”[72]如前所述,实验可以形成、确认和拓展理论。然而,Hannay等人在回顾1993~2002年软件工程实验的系统文献综述[72]中指出,在软件工程中,极少使用理论。该综述共考察了113篇文献,在其中的23篇中发现了40条理论,其中仅有两条理论被一篇以上的文章使用。
Endres和Rombach[53]提出了软件工程中的50条“定律”。所谓定律是指用来描述自然科学环境中可重复现象的概念,他们将这一概念应用到软件工程中。其中给出的许多“定律”已超越了软件工程范畴,如,“从初学者成为专家需要5000个小时”。他们认为,“理论”解释“定律”,“假设”是对观察到的现象给出的一个试探性解释,而“猜想”则是对现象的一种猜测。Endres和Rombach列出了出现在软件工程文献中的25个假设和12个猜想。
Zendler[182]采用另一种方法,定义了一个“初步的软件工程理论”,由3个根本假设、6个核心假设和4个基本假设组成。这些假设是分层次的,根本假设最抽象,基本假设最具体,直接来源于实验研究的成果。
Gregor[70]介绍了5类通用理论,这些理论可能适用于软件工程领域[72]:
(1)分析:这类理论描述研究对象,如分类学、分类法以及本体论等。
(2)解释:这类理论着重于解释事物,比如,为什么发生了某件事。
(3)预测:这类理论旨在预测将会发生什么,例如使用数学或概率模型。
(4)解释及预测:这类理论结合第2类和第3类理论,通常被称为“基于经验的理论”。
(5)设计和行动:这类理论描述如何做事,通常应用于设计学科[76]。但是否属于一类理论尚存在争议。
Sj?berg等人[162]提出了一个软件工程理论框架,由以下四个主要部分组成:
结构;
命题;
解释;
作用域。
结构是描述理论的实体,理论根据前面的分类对其进行描述、解释或者预测,命题由结构之间的关系组成。解释是对命题(即结构之间的关系)的逻辑推理或经验观察。
理论的作用域定义了理论可用的范围。Sj?berg等人[162]提出了四个原型类来描述作用域,即参与者、技术、活动和软件系统,如表2-3所示。
尽管从理论观点来考虑是有吸引力的,但是这些理论系统在软件工程领域至今还未形成任何影响力。理论对于研究领域中知识的概念化以及交流是很重要的,对于聚合已有研究和建立重现研究也很有用。无论是技术的策略选择,还是基于预测模型的项目决策,做决策时都可以用理论来和从业者进行交流。因此,为了尽早成为一个成熟的科学领域,应该鼓励软件工程中的理论构建。