自2003年发布以来,Spring Java框架的优势使其成为许多组织的首选Java框架。

去年9月,VMWare发布了2020年Spring状态报告,询问Spring用户有关将其吸引到框架并保持使用状态的问题。我们想学习该框架的特定优势,并(第一次,据我们所知)询问Spring如何影响其用户的测试实践和代码质量。

2021年最新调查:86% 的 Java 开发人员 依赖 Spring 框架_Spring 框架

 

我们发现使用Spring / Spring Boot与测试更好的代码之间存在关联。具体来说,Spring用户:

1、调查结果表明 Spring框架:86%的受访者使用Spring / Spring Boot,而96%的受访者说他们已经从使用Spring Boot中受益

2、在编写可靠,现代且可维护的代码之后,将可测试性排名第四

3、与非Spring用户相比,编写单元测试所花的时间多出25%(分别为25%和20%)

4、更有可能说他们的组织测试代码的能力是“优秀”(54%,相比之下,非Spring框架用户只有44%,非框架用户只有39%)

5、报告更高的代码覆盖率(所有报告100%Java单元测试覆盖率的受访者都是Spring / Spring Boot用户;四分之一的Spring用户说他们拥有76%-100%的覆盖率)

6、最有可能同意单元测试可以更轻松地对遗留代码进行现代化(93%的Spring用户同意,而88%的非Spring用户和79%的非框架用户)和迁移到云(94%的Spring用户表示同意,相比之下,非Spring框架用户占80%,非框架用户占74%)

报告指出,DevOps和网络安全本质上并列最高组织优先级(两者均> 90%),其次是云采用率(47%)

该报告将更详细地介绍这些发现和其他发现。有关完整的数据和图表,您可以使用上面的表格下载报告的PDF。

方法和人口统计

Diffblue与Vanson Bourne合作,向450个Java开发人员(美国300个,英国150个,大小型混合)进行了15个问题的调查。问题包括李克特量表,多项选择题和开放式答案。 

在我们的受访者中,有81%认为是男性,而19%是女性。大多数(53%)年龄在35-44岁之间。

本次调查的目标受访者是使用Spring和其他框架的Java开发人员。据估计,大约。60%的响应来自Spring / Spring Boot,而40%的响应来自不使用Spring的人。有趣的是,调查的大多数受访者是Spring和/或Spring Boot的用户。在450位受访者中,有25位不使用Spring / Spring Boot,但使用其他框架,而38位不使用任何框架。

部门包括IT /计算机服务,金融服务,银行,保险和其他各种部门。参与者都具有技术职位,其中大多数工作在DevOps角色中。

结果介绍

在第一部分中,我们根据用户细分了Spring的好处,以及对其他常规开发偏好的回答。在第二部分中,我们研究了Spring框架用户(SFU),其他非Spring框架用户(NSFU)和不使用任何框架(NFU)的Java开发人员之间测试和代码质量差异的模式。最后,第三部分是对受访者群体之间其他组织优先事项的比较分析。 

第一部分:Java开发人员的一般偏好

在本节中,我们将总结有关一般偏好和意见的问题的答案,包括Spring的好处,各种测试工具的有用性以及整个开发实践。

最有用的库

为受访者提供了一个免费的响应选项,可以分享他们日常工作中最有用的单个库。48%的人说:“我认为任何图书馆都不能发挥我的作用。” 6%的人选择了“不知道”,还有46%的人回答了。 

最受欢迎的响应是HTTP库(在146个中提到23个),其次是PDF库(21个),Excel阅读库(9个),集合库(8个),消息传递库(6个)以及Bytecode库和Scala的结合。库(5)。(其他荣誉奖包括美国国会图书馆和技术在水城图书馆日常生活课程在美国马萨诸塞州)。

最有用的测试工具

要求受访者对从“根本不有用”到“非常有用”的各种测试工具的有效性进行评分:JUnit,JMockit,Serenity,Mockito,PowerMock,Diffblue Cover,Parasoft Jtest,TestNG,Spock和Cucumber。由于这些工具中的大多数都是众所周知的,并且很受欢迎,因此可以预期,答复将更倾向于“有用”而不是“无用”,这在调查结果中得到了证实。

但是,实用性方面的差异很小,但很有趣:JUnit对“非常有用”的响应比例最高,为44%,另有40%认为“非常有用”。TestNG有40%的“非常有用”和46%的“有点有用”。Diffblue Cover在“非常有用”(39%)和43%“有点有用”方面排名第三。(由于Diffblue Cover由Diffblue Ltd.拥有,因此参与者数据是通过第三方匿名收集的,并且不知道其中包括Diffblue Ltd的任何客户。)。下载PDF以查看表格,其中完整结果以“非常有用”的降序排列。

>>号外:关注“Java精选”公众号,回复“2021面试题”关键词,领取全套500多份Java面试题文件。

Spring或Spring Boot的特定好处 

提供了5个选项作为Spring / Spring Boot的好处,以及“ Other”和“ Do n't know”:

核心技术(例如,Spring上下文,依赖项注入等)

测试支持

资料存取

与其他技术(例如Hibernate)的集成

简化Web界面/ API的设置

在答复中,所有收益的选择都相当平均,但是“ Web界面/ API的轻松设置”排名第一,为23.8%,而“测试支持”排名第二,为21.2%。

还要求受访者选择所有可带来其他五种潜在好处的方法:58%的Spring或Spring Boot用户表示该框架为开发人员节省了时间,而56%的受访者表示,由于使用了该框架,他们获得了更好的支持单元测试。54%的人同意他们经历了测试加速,而51%的人经历了更加流畅的现代化。最后,有49%的人表示,由于使用了Spring或Spring Boot,他们减少了开发人员的摩擦。(4%的人说他们的组织由于使用Spring或Spring Boot而没有收益)。

94%的人同意他们的组织发现使用Spring或Spring Boot可以使现代化变得容易得多,而6%的人则表示这有点困难。 

第二部分:框架用户之间的测试实践和代码质量的比较分析 

在本节中,我们将研究Spring框架用户(SFU),非Spring框架用户(NSFU)和无框架用户(NFU)之间的测试实践,以及这些实践对代码质量的潜在影响。

测试实务

我们接受调查的每个人都花费大量时间进行测试:SFU和NFU平均花费25%的时间编写单元测试,而NSFU则为20%。SFU还花费最多的时间编写其他(非单元)测试:占总时间的22.5%,相比之下,NFU的时间为21.8%,NSFU的时间为19.3%。

所有这些花在单元测试上的时间如何与我们受访者组织中的代码覆盖率水平相关? 

45%的受访者表示,其组织的Java代码少于单元测试的50%。37%的人表示其组织的Java代码覆盖率介于26-50%之间。30%的人说它介于51-75%之间。25%的人报告其覆盖率达到了惊人的76%-100%(而6%的人则说他们拥有100%的代码覆盖率)。所有说他们拥有100%代码覆盖率的受访者都是Spring用户。 

受访者还被问到他们的组织对尝试新的测试工具有多开放,以及他们对个人尝试新的测试工具有多开放。总体上94%的受访者同意他们的组织愿意尝试新的测试工具;95%的SFU表示相同,92%的NFU和84%的NSFU表示相同。

关于个人喜好,总体上96%的人同意他们愿意尝试新的测试工具(同意97%的SFU,96%的NSFU和87%的NFU)。

代码质量

由于代码质量与测试实践直接相关,因此可以预期在此情况下将加强该链接,并且确实如此。SFU更有可能说他们的组织测试代码的能力是“优秀”(54%,相比之下,NSFU仅占44%,NFU仅占39%)。他们也最有可能说他们组织的代码质量最高(SFU的占46%,NSFU的占44%,NFU的占39%)。但是,总的来说,所有组中的大多数受访者都表示其组织的代码质量很高(总计88.9%)。 

受访者可以选择速度,成本,质量,正确性,稳定性或“其他”三项最重要的指标,这些指标对于决定组织代码的成功与否至关重要。在所有受访者中,最常被选择的是质量(77%),第二是最常被选择的速度(64%),第二是稳定度(被选择63%),并且在不同的受访者组之间没有显着差异。框架用户。

当要求描述其组织的代码(选择所有适用的代码:可靠,可维护,可测试,便携式,自动化和现代)时,大多数人将其描述为可靠(由51.1%选择),现代(50%)和可维护(40%) )。有趣的是,尽管据说开发人员花了所有时间在测试上,但总体上只有37%的受访者表示其组织的代码可测试。SFU最有可能将其代码描述为可维护的(42%,相比之下,NFU为31.6%,NSFU为24%)和可移植的(37.5%,而NSFU为28%,NFU为10.5%)。NSFU最有可能将其代码描述为自动化(44%,而SFU为36.2%,NFU为26.3%)。

至于代码覆盖的具体好处:92%的受访者同意使用单元测试可以更轻松地对遗留代码进行现代化,并且框架用户之间的协议最为牢固(SFU同意了93%,NSFU同意了88%,SFU同意了79% NFU)。 

同样,所有受访者中有92%同意使用单元测试可以更轻松地迁移到云(同意SFU的比例为94%,NSFU的比例为80%和NFU的比例为74%)。

第三部分:框架用户之间其他组织优先事项的比较分析 

要求受访者对各种组织计划和目标的优先级进行评估:DevOps,网络安全,云计算,采用AI和机器学习,物联网以及机器人流程自动化。

在所有组中,DevOps总体上是最高优先级,其中58%的人认为这是高优先级,而35%的人认为这在一定程度上是优先级。每个Spring Framework和Non-Spring Framework用户都将其列为优先级(即使优先级较低);5%的无框架用户表示,这不是优先事项。

网络安全是整体上第二高的优先事项(所有受访者中57%的人将其列为优先事项,而36%的人将其列为优先事项),NSFU的优先度甚至更高(68%的人将其列为优先事项)。其他两组(SFU为56%,NFU为58%)。 

云计算总体上排在第三位(所有受访者中47%的人认为这是一个高度优先事项,而42%的人则认为这是一个优先事项)。它是NSFU的最高优先级(56%表示是最高优先级),其中SFU在中间(47%),NFU在39%。

采用AI排在第四位(44%的人认为这是高优先级,而43%的人认为这在某种程度上是优先级);物联网排名第五(优先级为45%;优先级为45%);机器人流程自动化排名第六(优先级为40%;优先级为44%);总体而言,采用机器学习的优先级最低(最高优先级为38%;有些优先级为48%)。

讨论与总结

我们接受调查的Java开发人员中有86%使用了Spring或Spring Boot,这比去年收集的调查所发现的60%的使用率显着提高。

Spring的采用和使用似乎是由易于设置及其一次使用所节省的时间导致的。Spring提供了对测试的支持,这是DevOps的关键部分,这是我们受访者中最优先考虑的一项举措。Spring的功能使测试变得更加容易,也使其更适合于测试工具,这也有助于解释为什么受访者被问及的所有测试工具都至少被认为有用。例如,我们的工具 Diffblue Cover会自动为Java代码编写单元测试。它对Spring用户特别有效,因为Spring的标准化单元测试方法,内置模拟功能以及易于隔离测试中的单元和数据库依赖关系的方法。 

SFU也更有可能说他们同意单元测试可以使现代化和迁移到云更加容易。这可能是因为Spring中的功能使单元测试对这些活动更加有用。但是,总的来说,大多数受访者同意单元测试可以使云迁移和代码现代化更容易。

Spring与测试齐头并进

Spring是否可以帮助开发人员成为更好的测试人员?还是更好的测试人员使用Spring?尽管无法从本次调查中证明任一方向的因果关系,但无疑在使用Spring / Spring Boot和测试更好的代码之间存在关联。Spring / Boot开发人员倾向于更重视单元测试,拥有更高质量和更可维护的代码,并在组织中拥有更好的代码覆盖率,这可能就是为什么他们首先偏向于Spring的原因。 

但是,拥有正确的工具也可以使工作变得更加容易,而Spring可以使测试更加容易。这可能就是为什么Spring和Spring Boot用户比非Spring Boot用户花费25%的时间进行单元测试的原因(占总时间的25%,而总时间为20%)。

尽管Spring用户最愿意尝试新的测试工具,但其他两组人中的大多数人也是如此,这表明测试具有普遍意义,并且为所有框架提供更好的支持将是一个好主意。考虑到开发人员花费在编写所有类型的测试上的时间(根据我们的受访者,平均占其时间的47%),使这种工具变得更容易的工具的普及并不令人惊讶。随着测试对于致力于实现DevOps目标的组织变得越来越重要,Spring和Spring Boot的使用持续增长也许就不足为奇了。