当前位置: 首页 > news >正文

500位软件开发工程师的声音:微服务和CI/CD依旧是最爱

近日,Atlassian发布软件开发相关调查报告,本报告收集了500多位软件开发人员的意见,对软件开发的部署、测试等发展现状进行总结。结果表明,软件开发工程师的价值意识已经觉醒,开始注意客户价值的重要性。

近几年,软件开发领域的声音似乎渐渐被人工智能、物联网、云计算等新兴技术遮掩,软件开发工程师这一群体的话语权越来越少。本周,InfoQ曾就“软件开发是否有价值”展开讨论(《一个沉重的问题:软件开发到底还有价值吗?》),传统的开发方式束缚着不少软件开发工程师的发展,软件质量和价值在逐渐降低。

本次调查,93%的开发工程师表明比其他任何人都重视客户满意度,但是,其中60%工程师表示虽然重视,但客户满意度几乎无法准确衡量。正是这种意识的觉醒,让软件开发领域开始不断以更高效,可衡量的方式一次又一次提高软件价值。

在现代软件开发过程中,开发新功能会优先考虑客户体验,这与新功能的发布时间一样重要。73%的软件开发团队会花费10%到50%的时间更新和升级自托管软件。当团队不处于维护模式时,92%的团队必须每周(甚至更频繁地)提供状态更新。平均而言,Jira客户依赖较少的状态更新工具,平均为2.3种,非Jira用户大概会使用3.3种。

软件开发新趋势

微服务:单体应用monolith在下降

平均而言,软件和IT团队使用4.3种工具将代码从开发转移到客户生产环境,这个数字其实已经很多了。大规模的单片代码库会让连续交付变得非常困难和耗时,monolith方式会限制团队速度,集成不同的服务和功能可能导致难以识别的错误,开发人员通常不会密切了解彼此的工作,扩展构建和测试也可能会使部署速度变慢。

研究表明,71%使用微服务架构的软件和IT团队认为,测试或部署过程比较容易,这是因为,当团队利用PaaS服务时,其中一些重要部署功能会直接进入平台。基于微服务的架构允许小型自治团队独立开发、部署和扩展其服务。

CI/CD:手动测试已经过时,自动测试正在进行中

众所周知,我们生活在一个消费者期望技术不断更新的时代。如果团队做不到,他们将会很容易被取代,想想自己在过去几年换了多少部手机就明白了。

软件开发出现早期,团队无法经常更新的主要原因之一是手动测试,自动测试覆盖率不足,额外的手动流程以及缺乏构建和部署管道自动化导致手动测试出现问题的团队占比62%。

进入持续集成和持续交付时代,团队可以自动从源代码到生产环境发布高质量软件实践。CI/CD正迅速成为满足不断增长的客户期望的重要手段,47%的团队通过CI/CD解决方案更快地发布变更并接收客户反馈,另有57%的受访者表示采用CI/CD解决方案可以减少错误或中断,实时提供有关部署和发布状态的信息工具允许团队定期发布客户满意的功能。

Feature Flagging:降低风险,提高客户满意度

软件开发团队面临的另一个障碍是以安全,增量和可衡量的方式推出新功能,75%的软件和IT团队在调查中表示会在发布时遇到错误、缺陷或延迟问题。相反,63%使用Feature Flagging的团队在调查中表示,拥有更好的功能测试或更高质量的软件,这在很大程度上是因为大多数团队习惯同时为所有客户推出新功能。

Feature Flagging允许团队向少部分客户(例如25%)推出新功能,以便将问题和错误风险分散,并在将其推广到整个客户群之前评估客户反馈。

结果驱动型开发:客户价值优于团队成果

几乎所有软件开发团队都希望提供能够提高客户满意度的功能,但缺乏跟进该目标的方法,这种困境反映了按产出衡量工作的悠久历史,而不是客户结果(即客户价值)。

事实上,结果驱动型开发的概念已经被提出多年,软件开发团队正在逐渐将焦点从开发速度和功能交付转移到所创建的客户价值上,希望采用以结果为导向的实践团队应该考虑提供实时构建和部署工具,围绕客户采用数据分析以及内置Feature Flagging,这一方法预计在未来会被更多IT团队采用。

参考链接:https://www.atlassian.com/blog/software-teams/modern-software-development-trends

相关文章:

  • 机器学习进阶-图像形态学操作-膨胀操作 1.cv2.dilate(进行膨胀操作)
  • 用Python写一份独特的元宵节祝福
  • Java开源诊断工具 Arthas 发布v3.1.0
  • 汇编语言第一章检测题
  • 无法打开外网ip链接
  • vue 组件通信
  • vue 配置sass、scss全局变量
  • LeetCode 28.实现strStr()(Python3)
  • CODING 缺陷管理功能正式开始公测
  • 官方解决所有 npm 全局安装权限问题
  • Dubbo底层采用Socket进行通信详解
  • 消息队列系列二(IOT中消息队列的应用)
  • js排序篇----快速排序,选择排序,冒泡排序,希尔排序
  • Service Worker
  • 《文献管理与信息分析》第五章 学习笔记
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • Laravel 中的一个后期静态绑定
  • PHP CLI应用的调试原理
  • TypeScript迭代器
  • 从tcpdump抓包看TCP/IP协议
  • 如何胜任知名企业的商业数据分析师?
  • 使用SAX解析XML
  • 说说动画卡顿的解决方案
  • 通过npm或yarn自动生成vue组件
  • 译米田引理
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • !!Dom4j 学习笔记
  • #1014 : Trie树
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (5)STL算法之复制
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (四)鸿鹄云架构一服务注册中心
  • (算法)Game
  • (一)kafka实战——kafka源码编译启动
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .net framework profiles /.net framework 配置
  • .net 怎么循环得到数组里的值_关于js数组
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • [【JSON2WEB】 13 基于REST2SQL 和 Amis 的 SQL 查询分析器
  • [20171101]rman to destination.txt
  • [Android]使用Git将项目提交到GitHub
  • [C#]C# OpenVINO部署yolov8图像分类模型
  • [C++]unordered系列关联式容器
  • [C++核心编程](四):类和对象——封装
  • [ccc3.0][数字钥匙] UWB配置和使用(二)
  • [codevs 2822] 爱在心中 【tarjan 算法】
  • [Docker]十一.Docker Swarm集群raft算法,Docker Swarm Web管理工具