架构软件工程的未来

软件对国家的全球竞争力、创新和国家安全至关重要。它还确保了我们的现代生活水平,并使国防、基础设施、医疗保健、商业、教育和娱乐不断进步。卡内基梅隆大学软件工程研究所领导社区创建了这样一个多年研发愿景和路线图,用于设计下一代软件系统。

基于软件的性质,它在能力、复杂性和互连方面在持续无限制的增长。软件的发展似乎没有停滞不前。为了使未来的软件系统安全、可预测和可进化,软件工程界必须共同努力,从战略上推进软件工程的理论和实践,以实现下一代软件依赖系统。

405988ace512e77c19d4382e0a17be1c.png

软件开发日益全球化,这一特点引起了对供应链攻击的关注。这些类型的攻击在数量和规模上都在迅速增长,并且由于系统之间的互联性越来越强以及软件代码库和库缺乏透明度,它们变得更加犀利。

例如,2020年,一家以帮助企业管理其网络和信息技术基础设施的美国开发软件公司被证明是迄今为止已知最大规模供应链攻击的理想目标。通过在例行软件更新中插入恶意代码,黑客能够破坏五分之四的财富500强公司(包括微软、英特尔、FireEye和德勤等)和许多美国政府机构(包括国土安全部、国务院和国防部)使用的第三方软件。总共约有30000个公共和私有组织在使用可能被感染的软件,这导致了一个数据、系统和网络受损的情景[Turton 2020]。

理解所用代码的功能和质量,并记录和验证供应链,这一点很重要。供应链完整性是至关重要的,但重用低质量或未知质量的代码是司空见惯的。跟踪软件的来源是解决这个问题的一种方法,开发这样的技术和工具将有助于提高软件质量。

1.5 软件是关键基础设施的组成部分

低质量软件的开发或重用可能会引入漏洞,使网络犯罪分子能够访问控制关键基础设施的软件并造成严重破坏。2021 5月,Colonial Pipeline发生了一起引人注目的袭击事件,该管道每天运输约1亿加仑汽油、柴油和航空燃料,为东海岸提供约45%燃料【伊顿2021】。黑客组织DarkSide对管道系统发起了勒索软件攻击,导致该公司关闭所有业务以遏制攻击。这起事件被认为是历史上对关键基础设施最重大的袭击之一。勒索软件攻击在2020年增加了715%,目前是增长最快的网络攻击类型[Bitdefender 2020]。每周约有1000家公司受到勒索软件攻击,公用事业公司是第二大最常见的攻击目标,仅次于医疗机构[Lanowitz,2021]。

357d992a198f5abedac7cfff0d42ce53.png

在开展这项研究时,团队进行了背景研究和文献调查,举办了研讨会,进行了专家访谈,评估了计算和软件趋势和新兴技术,开发了未来场景,与咨询委员会合作,检查了与软件相关的经济和商业数据。附录A提供了与软件工程界合作举办的研讨会的更多信息,包括与国防高级研究计划局(DARPA)合办的研讨会。

2. 探索新兴技术与趋势

计算技术的进步仍然是美国在科学技术、国家安全和经济竞争力方面保持领先地位的关键驱动因素[DIB 2019]。为了预测未来支持软件工程所需的研究和开发,必须密切关注有助于了解新挑战和机遇的新兴趋势和技术。

虽然不可能在一个文档中对它们进行全面探讨,但本节中包含的内容有助于描绘影响软件工程研究的技术前景。

2.1 新兴趋势

在当今快速发展的世界中,趋势在不断变化。以下重点介绍了我们认为对于预测软件系统未来的发展非常重要的几个当前趋势。

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

新型系统将持续超越当前软件工程理论、工具和实践所能支持的范围[Kim 2019;Murphy 2020;NITRD 2011;Weyuker 2021;Wing 2021]。例如,趋势已经指向这些系统类型的开发和使用:

  • 高适应性的防御系统。软件越来越多地支持结合智能、武器、人机协同和其他能力的新型异构计算系统。

  • 执行大规模数据融合的系统。无论是新闻还是情报,这些系统都利用了大量的数据流,包括开源数据。这些数据流还将推动构建未来软件系统的新方法。

  • 智能城市、智能建筑、智能道路、智能汽车和其他智能交通工具。软件系统现在是这些领域中关键基础设施的组成部分,它们需要处理大规模集成,并适当处理安全和隐私问题。

  • 真正有帮助的个人数字助理。软件系统必须能够学习和自适应,作为其在家庭、商业和国家安全工作流程以及我们个人生活中集成的一部分。

  • 医疗保健的动态集成。家庭、医生和医院的设备将越来越多地集成到功能和数据的使用中。这种整合将导致更好的疾病预防、治疗和恢复护理。

  • 社会规模的系统。这些平台在连接性、人工智能和数据科学的推动下,变得越来越大,影响力也越来越大。随着这些系统的发展,它们影响着社会行为,并在社会层面产生影响。在过去十年中,这类系统的发展趋势已经爆发,全世界有39.6亿人使用社交媒体[Dean,2021]。

    b815c68c80ee167adc0e57b26e7a9fb7.png

    量子使能系统在组合不同的计算模型方面带来了新的挑战。软件工程是量子使能系统的挑战:许多领域都需要进步,包括量子算法、开发工具、语言、计算平台和测试平台。如果我们设想实现了允许量子计算扩展的硬件,那么软件和软件工程也将需要更多的进步。

    扩展现实为人类交互和可视化复杂数据和系统提供了新的机会。扩展现实是指增强现实(AR)、虚拟现实(VR)以及两者的组合。AR包括使用设备,如辅助显示的专用眼镜,允许个人看到真实世界,但具有增强的信息。相反,虚拟现实指的是使用专用设备,使人只能看到虚拟世界。扩展现实的一个本质特征是它能够从根本上重塑人类对信息的推理。这些技术可以为软件工程师提供新的界面,以可视化复杂的数据或系统,并使新的用户交互界面具有更高的生产率。

    3. 调查结果

    在本研究的调查结果中,软件工程是一个高度动态、快速发展的领域,技术可以迅速崛起并发展成为现代生活基础设施的组成部分。虽然这也许并不令人惊讶,但近期技术趋势的融合程度以及高质量能力的迅速涌现是惊人的。

    以下发现总结了软件工程未来所需的关键知识、关键挑战和新研究。

    3.1 保持国家软件工程能力是一项战略优势

    软件工程影响一切,因为软件无处不在,包括国家的基础设施、国防、金融、教育和医疗系统。我们对软件系统日益增长的依赖使得我们必须保持我们国家在软件工程领域的领导地位和战略优势。我们需要提高软件工程的知名度,使其获得与其对国家安全和竞争力的重要性相称的持续认可和投资。

    软件越来越多地以越来越大的规模在影响着人类的互动。随着我们对软件依赖的增加,需要改进软件工程的技术来处理未来更大、更复杂的系统。

    3.2 保持国家软件工程能力需要持续的研究

    新型系统将继续超越当前软件工程理论、工具和实践所能支持的范围。未来的系统和软件工程中的根本性转变需要在智能自动化、不断发展的可信系统和理解组合系统等领域进行新的研究重点。新的系统类型,如人工智能系统、社会规模系统和量子系统,也推动了这项新的研究。

    人工智能的可预测性和普遍使用也将导致新的软件工程原理。将人工智能纳入软件系统需要对人工智能工程进行研究,以增强必要的软件工程环境和工具。引入人工智能还需要理解人工智能和非人工智能组件如何协同工作,以实现整体可预测的系统行为。软件工程工具是一种特殊的系统,将人工智能纳入这些工具将使软件工程更加有效。一旦我们了解了如何以可预测的方式做到这一点,它将允许更多的责任转移到人工智能,人工智能和人类之间的合作将继续加强软件工程。

    3.3 保持国家软件工程能力需要促进战略伙伴关系

    我们需要促成战略伙伴关系和协作,以推动行业、研究实验室、学术界和政府之间的软件工程研究创新。将人工智能引入这些工具将使软件工程更加有效。

    2f817a59a584ae4687f937867a2e5bc8.png

    未来的软件开发可能更多是表达所需的能力,而不是编写代码或拥有算法的思想仓库。软件工程师必须熟练地表达意图,使计算机能够从经验中学习。“优雅的软件”不再指聪明的代码,而是人类与自动化和人工智能系统合作,以最及时、经济、符合道德和安全的方式实现人类所能想象的最佳想法的结果。

    能够“编程”和创建复杂系统的人自然也会扩展。我们与计算机的对话将以领域语言进行,例如,计算生物学家通过谈论测序和基因来开发软件能力,而不是学习Python。所有类型的专家都需要适当地通知计算机,他们的交互方式将与今天有很大不同。

    仿真的使用可以将今天的整个测试和评估方式转变为一种沉浸式体验。设想为一系列空间资产规划了新的硬件配置和软件功能。在完全沉浸式虚拟现实环境中,通过对当前资产的全面遥测来模拟环境变化。工程师可以从任何有利位置查看新的空间配置,而不仅仅是在可视范围内。来自当前环境的所有可用数据和元数据也实时呈现。如果期望的效果不是预期的,工程师会做出改变,并立即看到对整体空间环境的影响。此外,数十名或更多的工程师正在共享体验中观察和操作相同的环境。工程师之间的沟通,通过多种类型的媒体和共享的决策过程,确保系统作为一个整体没有意外或不期望行为。一旦做出更改,将使用相同的环境来支持操作员培训和实时任务演练。

    软件一旦被部署,系统的适应性和可集成性也将大大提高。考虑一个涉及特种部队部署的场景,想象一场交火。小队措手不及,通讯中断,他们不确定用什么武器对付他们。幸运的是,他们正在与一组微型无人驾驶飞机系统合作,利用备用通信渠道主动建立网状网络,以重新建立与总部的联系。一旦该网络建立,该小队将指挥设备秘密观察和分析战场上的武器,并在掩护时提供缓解选项。因此,他们不仅能够在当地克服新的威胁,而且能够将他们的实时经验提供给处于战场边缘可能处于风险中的其他部队。为了使这一场景成为现实,软件工程师将需要设计灵活的架构,并允许根据来自传感器的数据和来自现场用户的其他输入对系统进行调整。

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

    9170cc349ab5b6d2ef51c681d4e3e3e5.png

    5 研究的重点领域

    本报告中描述的软件工程的基本转变和进步需要新的研究领域。我们与顾问委员会和软件工程研究社区的其他领导者密切合作,制定了一个包含六个重点领域的研究路线图。

    本节描述这六个领域的动机,它们与上一节的发现密切相关。在本节中,还提供了一个完整的路线图,然后深入讨论了每个研究的重点领域。

    5.1 先进的开发范式

    使用DevSecOps和数字孪生的趋势表明,现场系统和开发环境之间的边界开始模糊。例如,通过成熟的人工智能技术,软件正在增强人类的决策,并成为从数据中学习来提高性能的有用工具。操作数据与仿真相结合,可以实时了解系统的行为。不断变化的任务需求正在推动系统的连续演化,需要有效的系统保证和系统开发的组合方法。这些趋势推动了前三个研究重点领域,我们认为这三个领域是先进开发范式的基础:

    1.人工智能增强软件开发:使用成熟的人工智能技术增强软件工程中的人类决策,并从大量软件工程数据中学习。

    2.确保持续发展的软件系统:认识到快速变化系统有效保证的重要性,同时考虑到未来软件系统推理所需的许多科学领域和证据。

    3.通过组成的正确性进行软件构建:认识到开发和进化系统的唯一可行方法是通过实现组合开发的技术。

    5.2 高级架构范式

    未来系统的一些特性为软件工程提出了新的和有趣的问题。特别是,将人工智能组件引入系统,将人类视为系统的元素,并有效利用量子计算,对未来系统提出了特别重要的挑战。在我们的软件工程愿景中,高级

    架构范例将使系统的这些新方面的可预测使用成为可能。这些挑战激发了以下三个研究重点领域,我们认为这三个领域是高级架构范例的基础:

    4.工程社会规模软件系统:讨论建模人类行为的挑战

    5.人工智能工程化支持的软件系统:关注处理人工智能组件给系统带来的不确定性的挑战

    6.量子计算工程化的软件系统:考虑量子计算的哪些方面应隐藏于或暴露于软件堆栈的更高层

    5.3 研究路线图

    我们确定的研究领域是相互协同。例如,人工智能增强软件开发需要考虑不断发展的系统,最终,人工智能工具在提供软件开发建议时需要使用可保证的论据。通过组合正确性进行的软件构建与确保持续发展的软件系统之间的关系也很强,因为随着系统的发展,组合技术和推理将是增量确保的关键因素。同样,所有高级开发范式都适用于高级架构范式中讨论的每种新系统类型。

    0fc11e1aea9666a8f7cafda2987e96db.png

    5.4.2当前实践的局限性

    当前,软件开发是人力和测试密集型的,而且容易出错。特别是,软件开发的实践方法受到了以下的限制:

    • 开发人员需要成为许多主题(需求、架构、设计、编程语言、分析模型、令人眼花缭乱的技术和框架、质量属性、测试方法、平台等)的专家。软件工程师通常依赖于没有正确遵循的软件开发过程来协调这些活动以及创建的工件。

    • 从开始到部署,需求规范生成了大量工件,如设计文档、分析工件、测试用例和部署脚本。精简这些工件以实现成功的系统交付仍然是一项资源密集型的挑战。

    • 在没有有效工具的情况下,开发人员需要理解复杂系统中的连锁反应(在规模、分布、并发性等方面)。

    • 正式方法和基于模型的方法已经创建,并承诺可靠地生成代码和演化系统,但即使在关键的安全系统中,它们也不能突破系统的局限。

    • 当进度的挑战来临时,用于设计和测试系统的时间继续缩短,进一步危及所开发系统的质量。

    • 系统的可持续性和演化,特别是遗留系统,继续着手动驱动的高风险工作。

    • 作为软件开发框架或工具链的一部分,不能保证符合质量标准和预期架构。

    5.4.3研究主题

    在软件开发的每一个阶段,人工智能可以帮助人类,并使过程更加高效、有效和愉快。每一代新的工具和朝着这一目标的进步都会被开发人员接受:

    • 执行开发人员已经完成的任务,但效率更高(例如,测试速度更快)。

    • 执行开发人员已经完成的任务,但做得更好(例如,捕捉更多错误)。

    • 执行开发人员目前无法完成的任务(例如,利用新数据集成新的一致性检查或生成新的测试)。

    • 减少移交并集成当前断开连接的元素(例如,提供需求可追溯性)。

    • 教导开发人员如何更好地完成任务(例如,建议和/或指导实施错误的实时反馈)。

    • 帮助扩展开发人员已经可以做的事情(例如,允许他们考虑更多的替代设计选项)。

    为了最好地评估这种新的自动化工具和方法在实践中的有效性,还需要无缝地扩展和集成开发人员的环境,即使在研究阶段也是如此。人工智能增强软件工程进一步利用了数据收集、迭代反馈循环和测试开发人员的持续集成和部署环境。

    1fac93b2701c6a8922929fcff77f525b.png

    5.4.3.5 自动化演进和重构

    软件设计、开发和部署是基于权衡的活动。基于搜索的软件工程技术[Harman 2015]显示了适应软件设计的帕累托最优,事实上,代表了设计权衡空间的多种可行解决方案。尽管在为软件工程师提供自动化开发工具方面取得了进展,但诸如重新设计和重构现有软件等复杂活动仍然是资源密集型的。

    大规模自动化演化和重构的愿景要求自动化,以设计语言来帮助开发人员,并自动化实现这些更改所需的代码更改[Ivers 2020]。需要解决的问题包括流程的哪些部分可以和应该自动化,以及人

    来源:半吊子全栈工匠

    声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年9月5日
下一篇 2022年9月5日

相关推荐