关于使用c#部分类实现软件产品线外文翻译资料

 2021-12-29 10:12

英语原文共 24 页,剩余内容已隐藏,支付完成后下载完整资料


关于使用c#部分类实现软件产品线

亚历杭德罗·佩雷斯和巴勃罗·桑切斯*

软件工程与实时系统组,Dpto。计算机和电子工程,Cantabria大学,Santander (Cantabria),西班牙*通讯作者:p.sanchez@unican.es

现在,许多软件公司都有一个旗舰产品,可以卖给几个客户,但是要根据每个客户的特定需求进行定制。在这些情况下,以软件产品族的有效工程为目标的软件产品线工程(SPL)是有帮助的。在过去的几年中,已经发布了几种用于SPL工程的方法、技术、语言和工具。他们的目标是改进与SPL工程相关的最先进的技术,例如面向对象的技术。几年前,c #编程语言中添加了一个新的编程概念,称为分部类。一些作者认为这个概念有助于实现SPL。然而,这一想法直到现在才得到认真的探讨。为了填补这一空白,本文首先探讨c #部分类是否适合SPL实现。由于发现了一些缺陷,提出了克服这些缺陷的解决方案。这个解决方案基于一种称为切片器模式的设计技术。最后,分析了与目前的实践相比,该技术是否具有优势。

关键词:软件产品线;部分类;c #;net

2016年3月18日编辑: Mariangiola Dezani-Ciancaglini

介绍

现在,许多软件公司都有一个旗舰产品,可以卖给几个客户,但是要根据每个客户的特定需求进行定制。这一商业策略被称为大规模定制,其最终目标是“生产商品和服务,以接近大规模生产效率的方式满足个人客户的需求”。软件产品线工程[3-6]的目标是将大规模定制实践引入软件行业。

SPL工程方法的目标是构建一个基础结构,在这个基础结构中,可以尽可能快速和简单地构建属于某个软件产品家族的特定产品。一组软件产品[7,8]是一组相似的软件系统,因此,它们共享一些共性,但同时,每个特定的软件产品都有自己的特殊性。SPL工程方法的主要好处是,一旦这个基础设施已经建成,已开发的属于该家族的特定产品可以以非常低的成本开发[4,9,10]。

为了实现这一目标,理想情况下,SPL应该能够将任何产品都具有的不同特性封装到定义良好的软件单元中。因此,一个具有一组具体特征的特定产品,可以由与这些特征相对应的单元组合而成[4,11]。

在过去几年中,已经有几个解决方案考虑到了这一目标。在这些解决方案中,我们可以发现:(i)使用现有的语言结构,如预处理指令[12];(ii)最先进的变异性管理技术,如设计模式[13],(iii)用于SPL实现的专用语言,如Jiazi[14]、Fuji[15,16]、Java layer[17]、DeltaJ[18]、feature c [19,20]、Classbox/J[21]、CaesarJ[22]或ObjectTeams [23];以及(iv)专门的软件组合工具,如GenVoca[24,25]、AHEAD[26,27]或FeatureHouse[28,29]。

除了这些解决方案,Laguna等人[30,31]认为c#部分类也可能是SPL实现的一个有用机制。尽管如此,这些作者只是提出了这个想法,但是他们从来没有深入探讨过,也没有应用到中等规模的案例研究中。因此,与前面提到的解决方案相比,对于分部类是否可以成为SPL的有用机制,或者在什么上下文中或环境下分部类可以提供优势,社区缺乏可靠的证据。

首先,本文旨在通过全面研究(c#)部分类是否有助于实现SPL,以及它们与其他最先进的替代方法的比较,来填补这一空白。为了实现这一点,我们决定使用部分类实现一个非平凡的SPL。

我们以前曾在一个大型欧洲研究项目中使用智能家居SPL作为案例研究,以确定与SPL工程相关的最新语言、工具和技术的优缺点[32-35]。本案例研究采用西门子公司在该研究项目[35]背景下提供的工业案例研究。在那个项目中,这个案例研究被证明是一个很好的基准来分析一个解决方案如何处理不同种类的可变性。它有助于发现不同方法的优点和缺点,而这些优点和缺点是没有使用其他案例研究来确定的[32,33]。因此,我们决定使用c# partial类来实现这个案例研究,以确定它的优缺点。

其次,由于我们在这个实验中发现了几个缺陷,我们提出了一个解决方案,称为切片器模式,它克服了已经发现的一些缺点。这种模式使FeatureHouse[28,29]等技术的组合过程适应于c#部分类的上下文。

最后,为了评估这种模式,我们使用它重新实现了智能家居案例研究。我们发现,在特定的条件下,这种模式对于实现SPL是一种有用的技术,因为它提供了优点和缺点。本文还对这些优点和缺点进行了讨论。综上所述,本文的贡献有:

(1)对c#部分类在SPL实现方面的优缺点进行评估。

(2)一种称为切片机的图案,其灵感来自最先进的技术,克服了先前评估中所指出的一些缺点;

(3)分析切片器模式可能有助于SPL实现的上下文。

正如下一节将解释的那样,我们想强调的是,我们的目标不是提供一种新的机制来处理取代当前最先进技术的可变性。

我们的目标是提供一个新的可变性机制,可以添加到目前的技术目录,解释在什么条件下它可以是有益的。开发人员可以决定哪种机制更适合每个项目。在此介绍之后,本文的结构如下:第2节描述了这项工作背后的一般动机。第3节提供了将在整个工作中使用的不同范例和技术的背景。第4节指定了编程语言应该提供哪些元素来支持SPLs的实现。第5节分析了c#部分类是否提供了这些元素,确定了c#部分类用于SPL实现的主要缺点。第6节描述了我们开发的软件模式如何克服这些限制。第7节讨论了我们方法的优缺点,分析了对有效性的威胁。第8节对相关工作的评论,指出我们的方法与最先进的技术相比的新颖之处。最后,第9节总结了本文并概述了未来的工作。

2. 动机

正如我们之前所评论的,SPL实现的各种解决方案已经发布[14 - 29,36]。因此,读者可能会问:如果SPL实现有太多的解决方案,为什么有人会对SPL实现的潜在新机制感兴趣,比如c# partial类,而不是使用当前可用的解决方案之一呢?

答案很简单:SPL实现没有通用的解决方案。每种解决方案都有其优缺点,在某些上下文中有用,但在其他上下文中可能没有帮助。为了进一步解释这个概念,我们将这些解决方案分为两组:(i)基于最先进技术的解决方案,如面向对象编程[37];和(ii)新解决方案,以改善最先进的引入新语言或工具,如功能库[28]。

如前所述,理想情况下,SPL应该能够将任何产品都可以具有的不同特性封装到定义良好的软件单元中。因此,一个具有一组具体特征的特定产品,可以由与这些特征相对应的单元组合而成[4,11]。

基于最先进技术的解决方案,如预处理器注释[38]、设计模式[5]或面向对象框架[39],通常在封装和管理方面存在不足,这些不足是作为软件产品[40]系列特性的组成单元。为了解决这些不足,我们创建了不同的面向功能的语言,如featurec [19,20]、Classbox/J[21]或CaesarJ[22],以及面向功能的组合工具,如FeatureHouse[28]。

尽管这些新的面向功能的语言和工具为功能管理和组合提供了良好的基础,而且它们通常非常稳定,但是它们有一个相关的采用障碍,许多公司无法负担[41]。这些公司拥有工具链,这些工具链是它们开发过程的主干。这些工具的例子有连续集成服务器,如Jenkins[42]或质量保证工具,如Sonar[43]。这些工具还不能使用这些用于SPL实现的新语言或工具,比如CaesarJ或FeatureHouse,因此需要对它们进行修改。这些修改并不是微不足道的,而且超出了这些公司的范围。

主要问题是,这些新工具和语言要么需要更改目标编程语言(例如CaesarJ),要么需要在编译之前引入组合步骤(例如FeatureHouse)。这两种修改都不能很好地与其他软件生产工具集成。

此外,有时这些新工具和语言存在一些缺陷,阻碍了它们在工业上的应用。例如,CaesarJ编译器不支持增量编译,这意味着源代码中的一个小更改意味着重建整个项目。在FeatureHouse中,不能在组成特性之前编译与之对应的代码。因此,在这种情况下,开发人员在编写代码时无法知道其语法是否正确。

因此,我们决定研究哪些机制可以用于实现不需要在传统编程语言中进行更改的SPLs。

根据Laguna等人[30,31]最初提出的想法,c#部分类似乎是实现我们目标的一个有希望的候选类。默认情况下,c#语言中包含了c#部分类,所以它们可以与常见的c#编译器一起使用。c#分部类可以用来将对应于不同特性的代码封装到单独的分部类中。然后,根据必须包含在特定产品中的一组特性,编译相应的分部类以得到这样一个产品。

然而,正如前面所评论的,这个想法只是由这些作者进行了简单的评论,但是从来没有经过严格的评估。这些作者只是提出了它,并通过一个特别的玩具例子来说明这个想法。由于我们认为这个想法很有希望,所以决定探究这些承诺是否真实,这将在本文的其余部分中进行研究和讨论。但是在解释它之前,我们为不熟悉这些概念的读者提供了一些SPL工程的背景知识。

3.背景

本节将描述智能家居案例研究,该案例研究将用于分析用于实现SPL的c#部分类的优缺点。本节还提供了简要介绍SPL工程的不同概念。熟悉这些概念的读者可以跳过最后两个小节。

3.1. 案例研究:智能家居SPL

正如前面所评论的,这个案例研究是在一个名为AMPLE(面向方面的模型驱动软件产品线工程)[11]的大型欧洲研究项目的上下文中采用的,用于分析SPL工程的不同方法的优缺点。为了这个目的,我们在过去几年中一直在使用这个案例研究。

本案例研究是基于西门子公司开发的工业产品。它补充了一些额外的功能,所以它涵盖了各种各样的可变性的综合范围。这些变化得到了西门子公司和AMPLE项目的其他工业合作伙伴的批准。我们使用这个案例研究来评估SPL工程的最新技术和新方法如何处理不同类型的变异性[4,32,33,35,44-48]。在此背景下,这个案例研究允许我们识别这些方法比其他通常用于此目的的案例研究(例如表达式问题[49]或图形产品线[50])更多的优点和缺点。因此,我们认为这个案例研究完全符合我们的目标,即评估c#部分类是否有助于实现SPLs。因此,我们继续描述这个案例研究。

智能家居软件应用的目的是提高住宅或建筑物居民的舒适度和安全性。为了实现这一目标,软件负责控制和协调一组相互连接的设备,如灯、加热器、窗户等。此外,它的目标是更有效地利用能源和资源。因此,智能家居产品可以选择提供智能能源管理选项。这个功能协调窗户和加热器,以节省能源。例如,在加热一个房间之前,如果室外温度比室内温度低,软件就会关闭窗户以避免浪费能源。

所有由智能家居软件控制的设备都连接到一个中央网关。这个网关负责处理住户的请求并协调所有这些设备。住户必须能够通过图形用户界面(通常安装在智能手机或PDA等移动设备上)与中央网关通信。

3.2. SPL工程

SPL工程的目标是为快速生产特定细分市场的类似软件系统创建基础设施。这些软件系统共享一个公共特性子集,但它们之间也存在一些差异[3,4,6]。SPL的主要目标是根据每个客户的特定需求尽可能自动地从可重用和可定制的基础资产的公共存储库构建特定的产品。在理想的情况下,客户将选择他们希望在产品中包含哪些功能。然后,通过简单地组装和配置与所选特性相对应的不同基础资产,就可以构建相应的软件产品。因此,每个特定的产品都是所有可能的基本资产配置的一个具体变体。

SPL工程流程[4]包括两个阶段:领域工程和应用工程。领域工程处理基础设施的创建,从这些基础设施派生出特定的软件产品,尽可能自动化。应用程序工程关注使用域工程级别创建的基础设施派生特定产品。

应该注意,SPL的主要好处是,只要正确地创建了域工程基础设施[1、4、9、10],就可以以非常低的成本执行应用程序工程阶段。由于每次我们想要派生属于一个产品家族的新产品时都必须执行应用程序工程阶段,所以应用程序工程阶段的成本越低,降低的成本就越高。

SPL工程与特征建模和特征管理密切相关,下一节将对此进行描述。

3.3. 功能模型

特性模型[51,52]指定作为产品系列的一部分的不同特性,以及它们之间的关系,以及这些特性是强制性的还是可变的。在特性是可变的情况下,特性模型指定为什么它是可变的——例如,因为它是可选的。特征模型是一个树,其中每个节点表示系统的一个特征。节点的子节点表示作为父特性一部分的不同特性。例如,图1显示了智能家居案例研究的特征模型(参见3.1节)。

这个功能模型指定了一个智能家居,它可以有不同的楼层数。每层楼可以有不同数量的房间。每个房间可以选择不同的设施,如自动灯光管理、加热器管理等。对于这些设施中的每一个,都可以选择不同数量的特定设备进行控制,例如加热器。

并不是所有的特性之间的关系都可以使用特性模型来表达。因此,需要在外部指定一些关系和约束。常见的做法是使用命题逻辑公式,其中原子是特征模型的节点。在我们的例子中,如果选择了房间内的SmartEnergyMng特性,我们还必须选择WindowMng和HeaterMng特性,因为前者依赖于后者。这种依赖关系是在我们的特殊情况下使用图1.1中标记为C1的约束指定的。

如前所述,SPL工程和特性建模和管理是紧密相关的[53]。SPL方法的目标是能够根据客户希望包含在每个产品中的特性,尽可能自动地从一组可重用资产派生出特定的产品。因此,SPL的成功在很大程度上取决于它如何管理这些特性。

下一节将描述编程语言应该提供哪些特性,以促进特性管理。本文还讨论了面向对象语言在SPL实现方面的局限性和不足。

4. 用于实现SPLS的语言的理想特性

本节解释支持特性管理

全文共45751字,剩余内容已隐藏,支付完成后下载完整资料


资料编号:[3042]

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。