天天看点

随着软件质量的演化性,面向服务模式对数据有着怎样的发展?

作者:苏荨墨
随着软件质量的演化性,面向服务模式对数据有着怎样的发展?

文|苏荨墨

编辑|苏荨墨

随着软件质量的演化性,面向服务模式对数据有着怎样的发展?

前言

在当今数字化和快速发展的世界中,企业软件的一个重要问题是能够快速适应新的或不断变化的功能或跨功能需求。

这个问题由软件质量属性演化性(有时也称为可修改性或可变性)解决:可以修改软件系统以适应或扩展它的有效性和效率的程度。

随着面向服务的计算 (SOC) 的兴起,实现了与此质量属性相关的几个好处,比如松散耦合,隔离业务相关接口背后的服务实现,或者方便的重用和组合。

随着软件质量的演化性,面向服务模式对数据有着怎样的发展?

虽然面向服务的架构 (SOA) 仍然是一种重要的架构风格,但微服务作为一种灵活、轻量级和分散的面向服务的变体越来越受欢迎。

一种常用的增强可修改性的工具是设计模式的应用。

将这些既定的解决方案蓝图用于反复出现的问题在面向对象的系统中尤为常见。

然而,还有大量专门为基于服务甚至基于的系统设计的模式。

随着软件质量的演化性,面向服务模式对数据有着怎样的发展?
随着软件质量的演化性,面向服务模式对数据有着怎样的发展?

设计理念在系统中的实现

设计模式的思想起源于Alexander的建筑和城市建设语言,他们将解决方案蓝图网络概念化。

该概念适用于包括计算机科学在内的其他几个领域,并且在软件工程和软件体系结构中非常流行。

因此,模式是针对重复出现的设计问题的经过验证和确定的解决方案,它以与技术无关的形式记录,并且可以以许多相似但不完全相同的方式实施。

文档在模式语言中通常是系统化和标准化的,并且包括例如上下文、问题、力量、解决方案或相关模式等属性。

随着软件质量的演化性,面向服务模式对数据有着怎样的发展?

使用模式的一个主要驱动因素是它们对可用性、性能或可修改性等 QA 的影响。已经进行了几项研究来分析这种复杂且有争议的关系。

在面向对象设计的背景下,必须分析和修改四个 UML 类图,一组使用标准和直接的设计模型,而另一组使用语义等效的版本,其中包含设计规则(例如,“类之间的依赖关系必须用抽象实现。”)和模式(例如状态或组合)。

测量了可理解性(通过问题)和可修改性(通过扩展任务),结果表明,带有规则和模式的后一版本更难理解(非模式版本的时间减少了 58%,正确答案增加了 15%)。对于可修改性,无法确定效率的统计显著差异。

随着软件质量的演化性,面向服务模式对数据有着怎样的发展?

使用基于 ISO/IEC 9126 的概率质量模型来分析 Java GUI 框架 JHotDraw 的 300 多个修订版的可维护性,该框架采用众所周知的面向对象模式。

JHotDraw 中设计模式的每一次使用都记录在 JavaDoc 中,并且有很多仅引入模式的修订。

分析中得出结论,额外模式的引入提高了系统的整体可维护性,测量了模式线密度和可维护性之间的强相关性。

随着软件质量的演化性,面向服务模式对数据有着怎样的发展?

对于 17 项实证研究的比较文献分析表明,仅检查了四个 QA 和模式的一小部分,此外,还没有就影响(正面、中性或负面)达成普遍共识。

有趣的是,对于可维护性、演化和变更倾向,有关所分析模式的影响的总体趋势是负面的。

通过架构策略的代理来确定模式对 QA 的量化影响,从这些结果中,得出结论,例如,模型视图控制器最适合性能而最不适合安全性,而层模式最适合安全性。

进行了一项系统的映射研究,目的是描述以人类为对象的关于软件模式应用的实证研究的研究设计。

30 项研究中有 16 项涉及维护是最常见的情况,将近一半的研究与面向对象的设计模式有关。

效率和正确性是评估模式应用的最常见指标,报告说,实验设计的差异使得比较结果变得困难,而且一些研究没有提到局限性以及它们如何最大限度地减少偏差的威胁。

随着软件质量的演化性,面向服务模式对数据有着怎样的发展?

在面向服务的背景下,通过力解析图(从 -2 到 +2 的影响)对 80 个基于服务的设计模式与 S-Cube 质量参考模型的 QA 进行了理论定性映射。

报告还说,来自非常详细的 S-Cube 模型的 53 个 QA 没有被模式解决。

大多数映射的 QA 都是性能和可扩展性,由于 S-Cube 不包括一些重要的 QA,还使用了 ISO/IEC 9126,为了可维护性,总共确定了 12 种模式。

最后,通过收集FraSCAti 系统的历史软件开发元数据分析了基于服务的模式和反模式对维护和演化的影响。

随着软件质量的演化性,面向服务模式对数据有着怎样的发展?

观察到模式中涉及的服务需要较少的维护工作,然而,这种影响在统计学上并不显着。

另一方面,发现具有反模式的服务需要更多的维护工作,尤其是对于God Component或Service Chain的实例。

随着软件质量的演化性,面向服务模式对数据有着怎样的发展?

最终对实验对象的目的

所呈现的相关工作概述了模式和 QA 之间的复杂关系以及有争议的证据,一般而言,针对基于服务的模式及其可修改性的实证定量研究并不多,这就是为什么目标是通过第一个受控实验的结果以及基于度量的分析,对这种关系带来更多的定量见解。

实验的研究目标是根据在给定时间内完成修改(有效性)和每次修改所需的时间(效率)来分析所选的基于服务的模式是否对系统的可演化性产生重大影响。

实验对象是一个简单的基于服务的网上商店系统,专门为本实验构建,它由几个 RESTful Java 服务组成,例如客户、订单、产品和通知,以及一个基于 Web 的前端。

随着软件质量的演化性,面向服务模式对数据有着怎样的发展?

数据持久化和不必要的创建读取更新删除 (CRUD) 操作尚未完全实现。

因此,该系统相当接近真实世界的网上商店,但对于实验来说仍然具有可控的复杂性。

选择在线商店域是因为大多数人根据个人经验对它有所熟悉,此外,以面向服务的方式实现此类系统非常普遍。

还为这个网上商店创建了两个功能相同的版本,一个版本是以“普通”方式构建的(请参阅图1和图2)。

随着软件质量的演化性,面向服务模式对数据有着怎样的发展?

图1

随着软件质量的演化性,面向服务模式对数据有着怎样的发展?

图2

而另一个版本是用几个基于服务的模式设计的,这些模式被认为有利于可修改性,例如流程抽象和服务外观(请参图3和图4)。

随着软件质量的演化性,面向服务模式对数据有着怎样的发展?

图3

随着软件质量的演化性,面向服务模式对数据有着怎样的发展?

图4

一般而言,系统的模式版本表现出更高的基础复杂性(例如,更多服务、特殊模式),但已通过使用的模式有意为任务修改的性质做好准备。

之所以选择这些模式,是因为它们在可进化性方面的理论优势已得到充分证明。

随着软件质量的演化性,面向服务模式对数据有着怎样的发展?

实验的目标人群

虽然熟悉基于服务的系统和模式的专业软件开发人员可能是合适的实验对象,但是仍然选择了更多没有经验的开发人员,即学生。

首先,很难说服大量软件专业人员免费花费两个小时的宝贵时间进行看似毫无意义的编码。

其次,如果这些模式的优势即使对于那些对模式知之甚少或根本不了解的经验不足的开发人员来说也是如此,那么它们对可演化性的影响一定是巨大的。

随着软件质量的演化性,面向服务模式对数据有着怎样的发展?

然而,虽然在软件工程实验中使用学生是很常见的,但在将结果推广到所有开发人员时必须更加小心,从好的方面来说,学生通常是相当同质的参与者。

因此,实验对象是本科生,他们需要作为“软件工程概论”讲座的一部分参加实验。

学生可以根据简短描述选择两个实验之一,数据收集是匿名的,实验表现对学生的成绩没有影响。

在没有收集数据的情况下参与实验也有可能通过课程,在实验执行期间,学生通过在 PC 台球室中选择一个座位,将自己随机且不知不觉地分配到两组中的一组:非模式版本 #1,即控制组,或模式版本 #2 ,即是治疗组。

随着软件质量的演化性,面向服务模式对数据有着怎样的发展?

作为实验材料,在大学 PC 机房为学生提供了一个完全配置的虚拟机。

他们有数字和印刷形式的文档和任务描述,如果出现问题,他们可以使用互联网搜索。

还提供了一个带有自动测试的 Web 界面,用于验证三个任务中每一个任务的完成情况,建议学生使用自己选择的秒表测量每项任务的时间。

参与者必须解决总共三个相互依赖的任务(见表2)。

随着软件质量的演化性,面向服务模式对数据有着怎样的发展?

表2

在第一个任务中,应调整网上商店系统的订购流程(例如,客户信用评级检查)并扩展一个额外的流程步骤(通过 发送电子邮件)。

版本 #2 已准备好流程抽象模式,因此所有更改都必须在版本中实现,订单进程服务而不是像版本 #1 中那样在三个不同的服务中实现。

在第二项任务中,必须将大型订单进程服务分解为三个较小的服务:aProductSrv仅管理产品域实体,aCategorySrv管理产品类别,aWarehouseSrv管理产品可用性。

版本 #2 结合了分解能力模式以简化分解和服务门面使前者免受ProductSrv消费者侵害的模式。

随着软件质量的演化性,面向服务模式对数据有着怎样的发展?

在最后的任务中,应实施一个新流程以响应将新产品添加到数据库(发送电子邮件并将新产品添加到营销数据库)。

版本 #2 通过代理提供了基于消息的通信,该代理允许发布一个,它实现了事件驱动消息传递和通信反转NewProductEvent模式。

作为实验的响应变量,分析了有效性和效率(每项任务的持续时间)。

参与者的有效性衡量为他/她在 90 分钟内成功完成的三项任务的百分比,即 0%、33%、67% 或 100%。

效率以秒为单位记录,如果任务未完成,则效率不可用,每组的中位有效性仅针对所有三项任务的总和进行计算和测试。

随着软件质量的演化性,面向服务模式对数据有着怎样的发展?

为了平均效率,还分析和比较了每个单独的任务,以得出每个模式的效果。

虽然这两个响应变量也取决于参与者的技能,但如果两组足够大且技能大致相等,则它们可以表征系统的可进化性。

预测变量是组或系统版本(即对照组或治疗组),它要么是非模式版本的#1,要么是模式版本的#2。

为了形式化我们的研究目标,其中i表示研究目标标识符,如果每个目标有多个假设,则j表示计数器(参见表3)。

随着软件质量的演化性,面向服务模式对数据有着怎样的发展?

对于有效性(i = 1),我们有一个假设(j = 1),而对于效率(i = 2),,即每个任务一个,一个用于一次完成一组任务。

由于有五个假设,这也意味着需要对假设检验的显着性水平进行,以解释 I 类错误概率的增加。

因此,必要的显着性水平 α 是通过将所需的显着性水平除以假设数来计算的,即 α = 0.05/5 = 0.01。

对于分析,每个参与者记录的任务持续时间测量首先与通过参与者 ID 导出的调查结果相结合。

随着软件质量的演化性,面向服务模式对数据有着怎样的发展?

结语

然后,将生成的数据集分为两组(版本#1 和版本#2),并使用描述性统计对其进行分析。

最初,希望确保两个版本具有可比的特性和体验,这在大多数领域都是如此(见表 4)。

随着软件质量的演化性,面向服务模式对数据有着怎样的发展?

表4

平均而言,第 1 组有 36 名参与者,第 2 组有 33 名参与者,他们的学习计划分布和学期大致相同 (2.5)。

所以经实验确定,在这类实验中出现的问题,都会是成为问题解决的根本,也是需要操作空间的,这也表示提供单个操作平均所需的 LOC 数,较大的LOC/WSIC值意味着服务具有较大且可能很复杂的操作。

继续阅读