复杂软件系统开发的技术和趋势

阅读数:1935 2016 年 6 月 1 日

话题:文化 & 方法

Software-Centric Systems 大会探讨了新技术、趋势及复杂软件系统开发的经验。大会于 5 月 25 日星期三在荷兰埃因霍温高科技园区举行。

InfoQ 采访了大会委员会的两名成员 Rob Howe 和 Martijn Rutten。

InfoQ:在你们看来,软件开发如今面临的主要挑战是什么?

Howe:“智能(Smart)”、“智慧(Intelligent)”或“自治(Autonomous)”等术语在媒体上出现的频率越来越高,涉及所有类型的产品。实际上,这些词语和软件一个意思——是软件让系统智能、智慧或自治。我们生活的世界日益成为以软件为中心的世界。可是,软件仍然使用相对原始和成本高昂的方式构建。软件“开发”面临的最大挑战是形成真正的工程规范,以便能够交付可信赖的成果,同时兼顾可预见性和经济性。要实现“智能”或“自治”等词语所描述的高度集成的复杂系统,这绝对是关键。

Rutten:如今,软件即系统。软件定义了关键功能和好处。伴随 IoT 和工业 4.0 环境中的网络应用,软件的内涵也在快速地变化,包含 1000 多万行软件代码的嵌入式设备随处可见。由于嵌入式设备对真实世界有直接的影响,可靠性和安全性是确保没有人会受到伤害的关键。传统的 OEM 厂商现在发现,他们实际上已经变成了软件公司。对于具有硬件工程背景的公司而言,开发可靠安全的软件所伴随的巨大复杂性是他们需要应对的挑战。

InfoQ:你们最近看到了哪些技术发展?它们对复杂的软件密集型系统有什么影响?

Rutten:应对大型软件复杂性的工作正在从各个方面得到解决,从验证软件的(如静态和动态分析)工具,到从根本上降低受攻击风险的新语言,一直到从高级模型“自动正确构建(correct-by-construction)”软件的模型驱动开发。到目前为止,软件开发团队可以不再使用那种偏牛仔风的开发方式了,他们现在需要更加注意开发流程和工具,以应对复杂性。

Howe:多年来,在软件系统设计方面,“早期采用者(Early Adopter)”公司一直引领着新技术的开发、采用和推广,并取得了一些成功。但缺少资源的“早期大多数(Early Majority)”公司采用一种更为务实的软件工程方法,他们仍然坚守着传统的开发实践。然而,去年,这种情况开始发生变化。对于类似模型驱动软件工程(MDSE)这样的技术,市场的信心在逐步增加,使得这些技术在软件工程社区得到了更广泛的应用。

InfoQ:你们能举例说明下如何使用新技术推动创新吗?

Rutten:企业正借助持续集成在软件落地之前检测 Bug 和性能问题。这让每天发布多次的持续部署取代了传统的按季度发布。反过来,对于嵌入式软件,只有在每次发布之前进行全面的检查,比如通过静态分析工具,或者在一个模型驱动开发环境中生成,这才可能实现。显然,如此快速地在市场中引入新功能,通过市场验证推动了创新。

Howe:工程团队在运用新的软件工程技术方面信心增加,让他们可以自由地尝试富有创新精神的系统架构。例如,通过运用内置了形式化验证的 MDSE 工具,企业觉得有能力重新设计他们的其中一款产品,移除已经过时的、基于 PLC 的安全控制器,代之以一个在重要应用软件主体中验证过的分布式安全控制器。

InfoQ:Software-Centric Systems 大会主要涉及了那些话题?

Rutten:大会的主要话题是“软件自白”,互相学习如何处理开发大型的、以软件为中心的复杂系统所面临的巨大挑战。我们如何确保可靠性、安全性、隐私、可维护性、性能,等等。

Howe:大会的一个主要目标是促进与会者互动及知识和经验的交流。我们认为,一般而言,人们从会议中获得的最有用的东西是通过与演讲者和其他与会者对话获得的信息。因此,大会的初衷就是最大化这些类型的互动。此外,我们选择演讲者的依据就是他们能够分享真实世界的经验供其他与会者学习。

InfoQ:如果组织希望提高软件开发流程的可靠性,同时又能快速地交付价值,那么他们该如何推广应用敏捷?

Rutten:持续集成与持续部署和敏捷软件开发息息相关。预留配置最佳环境和工具的时间和预算是尽早发现错误的关键,这时候修复问题的成本还比较低。如果模型驱动方法适合这个领域,那么从一个高级模型生成代码会极大地增加可靠性,缩短上市时间。

在更为特殊的领域里,如汽车发动机控制,难度会更大。这时,就必须向系统投入巨大的资源,以确保新技术能够安全地应用到一个已知可工作的系统中,实现平稳退化。只有有一个这样的环境,敏捷增量交付才行得通。

InfoQ 正通过 Q&A、概述和文章的形式对 Software-Centric Systems 大会进行报道。

查看英文原文Technologies and Trends in Developing Complex Software Systems