从实践者的角度看软件架构的历史

无论什么东西,套用宋丹丹的话,就是都有它的过去、现在和将(jiǎng)来。因此学习一样东西,如果能多学一点它的历史,会让我们对其为何有如此现状少一些纠结,同时才有可能对其未来趋势有靠谱一点点的洞见。昨夜窗外雨声稀疏,难以入眠,突然想到软件架构的发展史是怎样的,于是今晨起来网上逛一圈,邂逅到这篇论文《The History of Software Architecture – In the Eye of the Practitioner》,因此,这是一篇译文。

小弟不才,没有能力自己去梳理这么庞大的论题,因此只能翻译了。不过我并没有翻译这篇论文的全部内容,比如附录就没有翻译。在翻译的过程中,一度觉得这论文的英文及其拗口,跟我阅读过的其它英文书比实在是难读。开弓没有回头箭,我还是把要译的部分译完了,难免有词不达意之处,还望海涵。

以下是译文:

1. 目标和动机

那些权威论文把软件架构当作独立的学科,一些科技期刊也把架构视角、架构描述语言、架构进化作为他们研究和实践的基石,从这些角度来看的话,软件架构正好迎来了它的25周年庆。

随着基于云交付的普及,分布式系统的各个部分需要动态集成,商业和社会数字化的曲线越来越陡,使得一个合理的设计决策包含了更大和更复杂的问题空间。软件架构的重要性前所未有,开展重要项目的组织离不开相应架构实践的支撑。然而,这25年来,软件架构的实践是如何进化的呢?未来又将面临哪些挑战?

对软件架构研究和实践现状的总结,曾有过各种不同的尝试,然而都缺少了从实践者的角度来看待上面的两个问题。

为了填补这个空缺,我们首先从5622篇科技论文中抽出10大主题,如图3。然后我们根据这些主题设计一个在线问卷调查,并由拥有5到20年不等经验的57位软件架构实践者填写了这份问卷调查。

2. 实践者对过去25年软件架构及未来之路的看法

这篇论文中,我们的调查聚焦于,在过去25年里,软件架构方面最突出的话题有哪些,以及在当下和不久的将来,软件架构方面的哪些话题会具有最深远的影响力。

调查问卷包含的问题有:

a) 参与者的背景、经验和其它一些统计信息;

b) 目前他们供职的机构,过去几年接手的项目类型;

c) 过去25年在软件架构方面的实践;

d) 最有影响力而且是目前软件架构趋势的话题(包括近两年新兴的);

e) 未来工业界可能在软件架构方向的实践(未来5年);

基于参与者的回答,我们精编得到以下结果。

过去:图1.PAST 总结了实践者们认为的过去25年最有影响力的10个软件架构话题。我们可以看到:

1.最有影响力的话题属于“软件开发流程”、“面向服务的架构(SOA)”、“架构风格”、“物联网(IoT)”。这些总共占了38%的比重。

2.SOA就像图中展示的那样了,其它的话题则包含更多特定的子话题:“软件开发流程”包含了敏捷开发、持续交付集成、DevOps、领域驱动设计、需求角色、遗留(系统/代码)、风险和质量管理、沟通技能。“架构风格”包含随着时间而演变的各种不同风格,从C-S和分布式架构,到生产线架构、MVC、多层架构等等。最后,“IoT”包括数字化、Web、互联网、工业4.0和移动优先。

图1.PAST 标红的数字表示它是否出现在图3中(科学文献中前10的话题)。同样的,我们可以看到:

1.工业界前4个话题同样出现在学术界的前10个话题中,但影响力有些差别:“软件开发流程”在工业界排第1,但在学术界只排第7,“SOA”在工业界和学术界都排第2,还有很明显的,“架构风格”在工业界的影响力被认为是大得多,排在第3,而在学术界排第6。

2.真正有大分歧的话题是“架构描述&语言”,这在学术机构排第1,而在实践者眼中只排到第8。不过这并不奇怪,符号和语言常常作为学术界深爱的研究课题,但工业界真正采用的并不多。不过也好,这正可以作为一个让研究者和实践者进行更好描述和高效沟通的契机。

还有一些话题,被实践者们提及,但是却不入专业研究者的法眼。最突出的比如:

1.软件质量(第5):很显然,质量成为软件架构的属性是过去25年的一个重要成果。“质量”有时候又被称为质量符合性、性能、可扩展性、可维护性等等。

2.云计算(第6)和微服务(第7):它们被认为非常(每样14票)的有影响力。作为SOA的衍生品,它们被认为是同属一个话题—这样就一共获得42票,变成了过去25年最有影响力的话题。

现在:图1.PRESENT 使用同样的分析方法得到现今软件架构最有影响力的话题。这个结果中,“架构风格”排在第10(紧挨着“SOA”和“架构设计决策”)。另一方面:

1.“SOA”被“云”和“微服务”替代:我们认为这是正常的技术进化,作为一种普遍的架构风格,SOA曾被应用到到各个应用领域。

2.“软件开发流程”仍然保持稳定(第1)。相较于对过去25年的回答,今天“一切都是敏捷”:敏捷之后呢,是DevOps、持续架构(continuous-architecting)。我们注意到,在敏捷开发中,架构扮演更重要角色的意识正在增强。

3.同样的,“IoT”保持稳定(第4)。然而相比过去,它被认为是有更大的影响力,关注点也从移动应用转变到基于IoT的架构。这也和Gartner关于2018年重大技术策略趋势的预测相符,预测中提到的“智能物件(intelligent things)”,就是将AI与IoT融合。

4.明显的,“软件质量”(第6)和“安全性(第7)”的影响力在下降。这或许是架构师们都知道了如何应对这些问题,又或许他们觉得有更重要的话题要关注。

总的来说,现今最有影响力的话题总共占据了70%的答案。其中,流程、面向服务(云和微服务)、IoT三者共占了62%。

而且,在现今的前10个话题中,有一些新名词引起了我们的注意:

1.“大数据”(第5):称为大数据,或者AI、机器学习、机器分析。

2.“第三方软件集成”(第8):在过去25年的部分曾被提及,但排在第14,不过都分别得到了5票。不过从答案中,可以看到软件架构正从封闭走向开放。

未来:图 1.FUTURE,我们从调查反馈中看到比较高的不确定性。即使实践者们认为前4个话题在未来5年仍保持主流,但它们占据总票数的52%,比现今的影响力要小10%。

图1.FUTURE 展示了:

1.“软件开发流程”、“大数据”、“微服务”和“云计算”会继续扮演非常重要的角色,然而:

2.对于“软件开发流程”,实践者们更关注如何管理不断增加的复杂性,可能是跨组织的,并将注意力放到了更高的自动化上。

3.对于“大数据”,提到了AI将扮演的角色和大数据在我们日常生活中进行的各种预测。

4.“微服务”将成熟,新的“云”将关注点放在基于云架构的风格/模式,以及如何通过软件架构来实现XaaS商业模型。

5.“自适应系统”(第5),在过去的几年里火热于学术界,被认为在工业界也变得越来越重要。

6.在新的话题当中,“区块链”也位于前10(不过反应平平,可能出乎你的意料)。

7.其它冒出的新鲜话题、不在前10名单中的有机器人、数字化转型、智能互联、绿色软件、伦理学。

3. 反思与收获

除了之前呈现的结果以外,我们还要求实践者们根据自身经历反馈哪些架构话题在他们过去的25年里产生过最重大的影响,以每5年为一个周期,如下图:

图2 展示了过去(比如client-server架构,从1992-2001年)占据主流的话题如何被新话题(比如“架构设计决策”、“架构知识体系”,从2002-2011年)超越的,以及最新的一些话题(“信息物理系统cyber-physical systems”和IoT,从2012-2017年)是如何涌现的。这让我们得到至少以下的认知:

认知1. 在软件架构的历史中,架构的概念从先前的一系列系统结构,变成了处于大型的、复杂的、不断进化的环境中的软件系统。然而在这样的环境中,不只是关乎技术,还包括人员、社交、组织生态和整个社会。软件架构的实践者关注的面比研究者们要广泛,软件架构实践者同时追随其它学科,从AI、IoT、自适应增强,到能源和伦理学。

认知2. “软件开发流程”赢了。无论是过去,现在还是未来,软件架构始终关注如何更敏捷的进行开发,怎样的人员技能可以有助于开发。房间里的大象(明显存在的问题)可以用来形容软件架构沟通和形式化之间存在的窘境:“架构模型”和“架构设计”常常用来弥补“软件开发流程”,但却从来无法达到预期—将架构代码化,使得架构可重用并且可靠。

认知3. 对于软件架构这个话题,不存在革命性的新东西,只有在旧的东西之上默默地演化。比如“软件开发流程”演化成各种形式的敏捷开发,“架构风格”从“SOA”演化到“微服务”和“云”,“信息物理系统”进化融合到“IoT”和“自适应系统”。总的来说,我们讨论的是软件架构的全局趋势,通向更便捷性的,可管理更多复杂性。

认知4. 软件架构的研究和实践始终保持一致。当我们对比图3中的前10个研究课题和图2中工业界的主流话题,我们看到比如“客户端-服务器”和“架构风格”在研究和实践方面有非常类似的趋势。“软件架构设计”和“架构设计决策”虽然研究和实践方面有不同的趋势,但都保持着重要的地位。最明显的就是“架构描述&语言”,在研究领域炙手可热,而实践中少得多。

最后,我们希望从历史角度看到的软件架构演化史能给读者带来进一步的思考和灵感。

微信扫码,进入【技术人成长】社群逛逛。