对于以前的拍摄,请参阅此答案的修订版1。但是,对该问题的评论和编辑进一步阐明了该问题在寻找什么,并使我更加清楚。
是的,基于证据的软件工程(EBSE)是一回事。似乎在EBSE数据库方面做出了一些努力,例如达勒姆大学(Durham University)和SEED的这一工作是由Cal Poly的一位教授发起的。所有这些努力,以及通过IEEE Xplore服务器或ACM数字图书馆可以找到的许多论文中讨论的努力(两种论文均需要订阅或购买)均基于循证医学。他们提供了已发表的经验(观察和实验)数据的文献综述。实际上,在任何出版物搜索的搜索字符串中包含“文学评论”都会产生有关大多数主题的信息-ACM上的点击次数超过14000,IEEE数据库上的点击次数超过1000(仅限于计算主题)。
通过查看这些EBSE数据库和文献评论中讨论的主题的一般类型,我看到了一个共同的话题-它们往往与技术无关。重点似乎主要围绕流程和方法论,而不是用于进行软件工程的特定工具。
因此,这个概念存在于软件工程中。学术界了解基于证据的概念,并将其成功地应用于软件工程。
具体而言,由于涉及的变量数量众多,因此要解决的问题是将EBSE技术应用于范式的选择似乎很困难,这迫使人们做出假设,并降低了重复实验或观察的能力。在这个问题上说对了:“哪种范式作为“正确答案”出来可以取决于特定研究关注的指标,研究保持不变或变化的条件,并且毫无疑问也取决于其他因素”。尽管这并不意味着研究在给定情况下哪种范例是“最佳”的,但是这使得对这些文档进行任何形式的文献综述都极其困难,并且仍然难以从中提取信息。
绝对没有选择范式的“曲柄”解决方案。
在给定编程范例的情况下,您可以在各种学术和行业数据库中找到有关该范例如何在各种特定条件下影响软件开发各个方面(质量,缺陷,效率等)的研究,范围包括软件开发人员的知识和经验。团队到问题领域。任何严格的文件都应明确指出收集数据的条件和假设。问题变成试图找出在每种情况下都使其变得良好的因素。
在学术上,有些陈述易于研究。例如,功能范式非常适合需要并发的应用的说法源于Church-Rosser定理。因此,用功能语言编写的软件系统与并发相关的缺陷可能要比用过程语言或面向对象的语言编写的软件系统少。
但是,从实际的角度来看,软件团队不能总是仅根据研究表明使用“最佳”工具或技术来完成这项工作。尽管我们努力生产最高质量的软件系统,但我们确实在限制条件下运行。通常,在讨论任何方法的有效性时,我都会看到这些约束已最小化(甚至从等式中消除了)。
作为一名从业者,当我参与选择要使用的技术时,我会尝试找出最好的工具。但是随后,我将自己局限于自己的团队所了解和理解的东西。回到我之前的示例,如果我有一个精通C ++并发应用程序构建团队并且没有Haskell经验,建议在Haskell中构建系统是没有意义的,因为我很可能无法进度和预算限制,由于缺乏工具链方面的经验,我的素质可能会受到影响。
回顾一下,基于证据的软件工程通常是一件好事,而且文献评论确实存在并且很容易获得。但是,在软件工程的某些方面,应用基于证据的方法几乎没有价值。为大规模开发工作选择编程范例就是其中之一。
如果您想了解面向对象如何解决功能性编程中的可重用性或缺陷-您将很容易找到有关这些内容的出版物。但是,我没有找到(也不会给予任何信任)能够有效解决各种实际软件工程项目中范式选择问题的出版物。