查看原文
其他

未来十年软件工程的新技术、新趋势和新挑战

CMU SEI 软件质量报道 2023-11-28


为了预测未来支持软件工程所需的研究和开发,我们必须密切关注有助于了解新挑战和机遇的新兴趋势和技术。

1. 预测软件系统未来的几大发展趋势。

1)软件工程的流水线正在发生变化,加快了软件代码的生产和高速部署的能力。如今,企业面临着快速变化的竞争环境、不断变化的安全需求和性能可扩展性的挑战。企业正在努力以创新和信心来快速开发和部署,弥合运营稳定性和快速功能开发之间的差距。在大型航空航天组织或产品组织(如亚马逊)的规模上,这通常意味着数千个独立软件团队必须能够并行工作,以快速、安全、可靠地交付软件,并且对中断或错误零容忍。快速开发实践,如持续集成/持续开发(CI/CD)和DevSecOps,正被用于快速、可靠地交付软件功能。随着这一快速开发/部署连续体的进一步发展,软件工程流水线的概念正在演变为一个动态过程,通过这个过程,新的能力被引入不断演进的系统中。

2)新型系统将持续超越当前软件工程理论、工具和实践所能支持的范围。例如,趋势已经指向这些系统类型的开发和使用:

  • 高适应性的防御系统。软件越来越多地支持结合智能、武器、人机协同和其他能力的新型异构计算系统。
  • 执行大规模数据融合的系统。无论是新闻还是情报,这些系统都利用了大量的数据流,包括开源数据。这些数据流还将推动构建未来软件系统的新方法。
  • 智能城市、智能建筑、智能道路、智能汽车和其他智能交通工具。软件系统现在是这些领域中关键基础设施的组成部分,它们需要处理大规模集成,并适当处理安全和隐私问题。
  • 个人数字助理。软件系统必须能够学习和自适应,作为其在家庭、商业和国家安全工作流程以及我们个人生活中集成的一部分。
  • 医疗保健的动态集成。家庭、医生和医院的设备将越来越多地集成到功能和数据的使用中。这种整合将导致更好的疾病预防、治疗和恢复护理。
  • 社会规模的系统。这些平台在连接性、人工智能和数据科学的推动下,变得越来越大,影响力也越来越大。随着这些系统的发展,它们影响着社会行为,并在社会层面产生影响。在过去十年中,这类应用发展很快,全世界今天有39.6亿人使用社交媒体。


3)规模激发了对安全和弹性软件组合的需求。软件的系统范围和规模在不断变化和增长。随着计算机硬件的改进,可以开发更复杂、更高级的软件,随着更多设备通过传感器和网络连接到物联网(IoT)中,规模的增加显然是一种趋势,没有减缓的迹象。在这些大型复杂系统中从零开始开发和维护自身组件已不再现实。因此,一个显著的趋势是从模块化组件中集成(并不断重新集成)软件系统,其中许多组件是从现有元素中复用的。
4)人工智能(AI)系统的开发和维护与传统软件系统的开发和维护有许多相似之处。随着AI越来越多地应用于各个行业,AI的使用呈扩大趋势。而AI是一个领域,它本身有许多子领域和应用,在软件开发中具有巨大的潜力。AI增强的软件开发有望自动化常见或繁琐的任务,并使流程更高效、更有效、更令人愉快。软件工程需要关注AI元素给软件分析、设计、构建、部署、维护和演化带来的挑战。
5)数据隐私和可信是软件系统越来越重要的设计考虑因素。数据现在是一种战略资产,在全球范围内捆绑、共享、出售和分发。适当地使用这些数据,同时保护数据并防止其被滥用,例如差分隐私的技术,会带来与隐私、信任和道德相关的架构和软件工程方面的极大挑战。这些技术对于人口普查、医学分析和其他涉及收集个人信息的数据分析工作非常重要。信任与用户对系统(特别是那些AI应用系统)数据或输出的信心有关。其他技术(例如区块链技术)也有建立信任的潜力,也能为软件工程带来了新的机遇,在软件测试、质量、配置管理和维护方面都有应用。


2. 新兴技术

我们今天拥有的强大技术生态系统意味着不断引入新技术,而且还有更多的技术即将出现。我们了解这些技术所带来的能力,以及如何快速、安全、可预测地将它们集成到系统中,这将确保它们成为软件系统的关键资产,而不是成为弱点或不稳定的来源。
1)高级计算在组成和开放系统方面带来了新的工程挑战。高级计算通常意味着使用专门的软件或硬件来提供支持大规模数据密集型项目的先进技术能力,例如量子计算、高性能计算(通常用于模拟和建模)、大型云计算等。在过去的十年中,在新硬件的支持下,高级计算有了许多发展,如多核芯片、GPU、现场可编程门阵列和芯片级的专用集成电路,以及未来实现的可扩展量子计算的软件生态系统。高级计算会促进未来的计算环境越来越异构,在跨计算基础来构建和发展系统方面给我们带来新的挑战。
2)由于规模的原因,智能边缘带来了新的挑战。“智能边缘”一般指超越了传统的计算机网络,融合了网络边缘的设备(如传感器、物联网设备和移动电话、卫星等),将应用程序和数据推向互联网边缘的异构计算能力。尽管普适计算的概念已经存在了几十年,但最近出现了智能边缘的加速,包括硬件改进和5G网络的广泛部署。由于无处不在的传感器和物联网,边缘数据正在快速增长,分析领域正在创造新的新方法,利用边缘设备和中央处理的组合进行分布式数据分析。
3)数字孪生为可信体系创造了新的机遇和挑战。数字孪生是物理对象的高保真数字或计算机表示,具有一定的推理能力,使我们能够了解现实世界中的对象在许多不同条件或要求下的行为。数字孪生已经开始将现实世界物体感测到的实时数据结合起来。例如,更高分辨率的新型传感器允许数字孪生对未来的行为进行推理,然后将反馈传输到物理对象。数字孪生为软件工程师利用数据开发和可信软件系统创造了新的机会,但随着物理世界中越来越多的系统产生了数字孪生,在规模上给我们带来新的挑战。
4)量子使能系统在组合不同的计算模型方面带来了新的挑战。许多领域都需要进步,包括量子算法、开发工具、语言、计算平台和测试平台。如果我们实现了允许量子计算扩展的硬件,那么软件和软件工程也不得不跟上进步的步伐,解决量子计算带来的问题。
5)扩展现实为人类交互和可视化复杂数据和系统提供了新的机会。扩展现实是指增强现实(AR)、虚拟现实(VR)以及两者的组合。AR包括使用设备(如辅助显示的专用眼镜)允许人们看到真实世界,但具有增强的信息。相反,虚拟现实指的是使用专用设备,使人看到虚拟的世界。扩展现实的一个本质特征是它能够从根本上重塑人类对信息的推理。这些技术可以为软件工程师提供新的界面,以可视化复杂的数据或系统,并使新的用户交互界面具有更高的生产率。

3.  展望软件工程的未来

假设现在是2035年,软件工程会是什么样子?也许我们可以想象:一个由航空工程师、飞行员和软件工程师组成的联合团队通过提出想法,共同设计下一个具有太空能力的飞行器,这些设计是实时显示的。团队通过实时模拟典型任务,在飞行中比较防御和机动能力,从而根据成本、能力和时间的最理想平衡来选择设计方案。
2035年,和今天的软件开发完全不一样,人类和计算机之间也许可以完成轻松的技术对话,传统的手动细化规范和编写代码的过程已经消失了,无休止的需求和设计审查的日子也一去不复返了。对开发人员的要求也不一样,要求他们具有很好的表达能力,熟练地表达意图,使计算机能够从经验中学习,而不是编写代码或拥有具体算法实现的能力。“优雅的软件”不再指聪明的代码,而指是人类与计算机、人工智能系统合作,以最及时、经济、符合道德和安全的方式实现人类所能想象的最佳想法的结果。
2035年,能够“编程”和创建复杂系统的人自然也会扩展。我们与计算机的对话将以领域语言进行,例如,计算生物学家通过谈论测序和基因来开发软件能力,而不是学习Python。
仿真的使用可以将今天的整个测试和评估方式转变为一种沉浸式体验。设想为一系列空间资产规划了新的硬件配置和软件功能。在完全沉浸式虚拟现实环境中,通过对当前资产的全面遥测来模拟环境变化。工程师可以从任何有利位置查看新的空间配置,而且来自当前环境的所有可用数据和元数据也实时呈现。如果期望的效果不是预期的,工程师会做出改变,并立即看到对整体空间环境的影响。此外,工程师之间的沟通,通过多种类型的媒体和共享的决策过程,确保大家看到的系统是一致的,不会出现意外或不期望行为。

软件一旦被部署,系统的适应性和可集成性也将大大提高。考虑一支特种小分队在执行任务,突然发生和敌人交火,自己措手不及,通讯中断,他们不确定用什么武器对付敌人。幸运的是,他们正在与一组微型无人驾驶飞机系统合作,利用备用通信渠道主动建立网状网络,以重新建立与总部的联系。一旦该网络建立,该小分队通过指挥设备秘密观察和分析战场上的形势,从而掌握撤退的良好时机或进行有效的掩护。他们不仅能够克服自己遇到的威胁,而且能够将他们的实时经验提供给特地区域内可能处于风险中的其他部队。为了使这一场景成为现实,我们需要设计灵活的架构,并允许根据来自传感器的数据和来自现场用户的其他输入对系统进行调整。

随着自适应用户界面的扩展,制作一部电影的工作方式可能会有所不同。人们不再期望他们知道编码和脚本,他们可以在完全沉浸式电影的制作过程中进一步提高其创造性设计技能。在“全息甲板时代”,他们能够融入新颖的视觉故事情节,为下一代触觉反馈设计服装,并创造对观众输入做出反应的事件。随着时间的推移,随着情景可能性的探索,互动体验不断发展和改进,以适应参与者的偏好,并以艺术家的意图为基础。

管软件工程取得了这些进步,但任何类型的复杂系统都不可能是完美的。未来,可能会借助AI来改善软件工程,如检测潜在系统问题、在故障发生时恢复能力、发现并消除原因的学科。例如,工程师可能会被系统本身要求:如果系统注意到情绪的总体表达正朝着不受欢迎的极端方向发展时,社会技术生态系统就会自动通知合作的工程师介入进来。当检测到这些问题时,专业软件工程师的工作就是找出问题产生的根本原因。虽然AI在软件工程中所能扮演的角色仍有待确定,但AI的作用是显而易见的:人类和AI将是值得信赖的合作者,能够根据程序的意图快速进化系统。随着软件工程师不断与智能软件助理互动,计算机和人类将能够发挥各自优势,给了我们更大的想象空间,之前无法想象的可能性有可能成为现实,将在规模上带来更高的效率和信任:
  • 人类利用可信人工智能显著提升研发效能。
  • 形成正式的保证论据,以确保并有效地保证软件的不断演化。
  • 先进的软件组合机制能够在越来越大的规模上实现系统的可预测构建。

先进的架构范式将使新计算模型的可预测使用成为可能

  • 来自行为科学的理论和技术用于设计大规模社会技术系统,导致可预测的社会结果。
  • AI和非AI组件以可预测的方式相互作用,以实现增强的任务、社会和业务目标。
  • 新的分析和设计方法促进了量子使能系统的开发。


参考:

继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存